0
点赞
收藏
分享

微信扫一扫

考研复习C语言初阶(4)+标记和BFS展开的扫雷游戏

就是耍帅 03-13 17:30 阅读 2

第一题

已知int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, *p = a;,不能表示数组a中元素的式子是()

A---*a

B---*p

C---a

D---a[p-a]

正确答案:C

解析:A和B选项,*a和*p都是数组的首元素地址;C选项中,a就是一个指向数组首元素地址的指针,a表示的是一个地址而不是数组的元素;D选项中,因为p-a=0,所以a[p-a]=a[0]。

第二题

C语言编译程序的首要工作是()

A---检查C程序的语法错误

B---检查C程序的逻辑错误

C---检查程序的完整性

D---生成目标文件

正确答案:A

解析:C语言编译程序的首要工作就是检查C语言程序中是否存在语法错误,如果

有则给出错误的提示信息,如果没有则生成的目标文件(.obj)。编译程序对程序中的逻辑

错误和程序的完整性是不检查的。所以选择A。

第三题

以下程序的运行结果是()

#define MIN(x,y)    (x)<(y) ? (x):(y)
int main() 
{
    int i = 10, j = 15, k;
    k = 10*MIN(i, j);
    printf ("%d\n", k);
}

A---10

B---15

C---100

D---150

正确答案:B

解析:语句k=10*MIN(i,j);在预编译时将进行宏替换为k=10*(i)<(j) ? (i) : (j);。

因i=10,j=15,所以语句等价于k=10*10<15 ? 10:15;,10*10比15大,因此k的值

将是15。故正确答案是B。

第四题

若有代码段

int *p = (int *)malloc(sizeof(int));

则向内存申请到的内存空间中存入整数123的语句为()

A---scanf("%d",p);

B---scanf("%d",&p);

C---scanf("%d",*p);

D---scanf("%d",**p);

正确答案:A

解析:A选项中,p 是 int 的指针类型,scanf 要求 %d 相应参数也是 int 的指针类型,所以直接
scanf("%d",p);即可。B 选项中, &p 又取了一次 p 的地址,相当于指针的指针, scanf 尝试写入原本是指针的地址,导致 p 的值被改变(本应写入 p 指向的内存),后续解引用 *p 可能导致访问非法内存 产生运行时读内存错误。C 选项中, *p 解引用取值,是一个未初始化的乱值, scanf 会把该值当作地址,可能导致运行时写内存错误或写入不被期望的内存区域。D选项中, p 只是一次指针, **p 会编译错误。

第五题

在32位编译器上,设有定义

char *str1 = "Hello", str2[] = "Hello"; 

则以下语句

printf("%d %d", sizeof(str1), sizeof(str2)); 

的输出结果是()

A---5        6 

B---5        5

C---6        6

D---4        6

正确答案:D

解析:str1表示一个char类型的指针, 指向只读区中“hello”位置。 所以sizeof(str1)仅表示指针的大小。32位系统指针大小为4B,64位系统指针大小为8B。而sizeof(str2)是整个数组大小,包括最后的'\0'。

第六题

设有定义语句

int x[6] = {2, 4, 6, 8, 5, 7}, *p = x, i;

要求依次输出x数组6个元素中的值,不能完成此操作的语句是()

A---for(i=0;i<6;i++)

        printf("%2d",*(p++));

B---for(i=0;i<6;i++)

        printf("%2d",*(p+i));

C---for(i=0;i<6;i++)

        printf("%2d",*p++);

D---for(i=0;i<6;i++)

        printf("%2d",(*p)++);

正确答案:D

解析:A选项和C选项,*(p++)和*p++都是指针移动取值。而D选项中,(*p)++为元素取值,输出结果为2、3、4、5、6、7 。所以选B。

第七题

为了提高程序的运行速度,在函数中对于整型或指针可以使用()型的变量。

A---auto

B---register

C---static

D---extern

正确答案:B

解析:

auto         自动变量类型,自动进行 推演
register    建议编译器将该变量放入cpu的寄存器中,(寄存器比内存速度读取更快)
static        静态变量
extern      声明变量,常用于多文件需要使用同一变量时

        一般情况下,变量的值是存放在内存中的。如果有一些变量使用频繁(例如进行100000次的循环),则为存取变量的值要花费不少时间。为提高执行效率,允许将局部变量的值存放在CPU的寄存器中,需要时直接从寄存器取出参与运算,不必再到内存中去存取。由于对寄存器的存取速度远远的高于对内存的存取速度,因此这样做可以提高执行效率。

第八题

有以下定义语句 double a,b; int w; long c;

若各变量已正确赋值,则下列选项中正确的表达式是()

A---a=a+b=b++

B---w%(int)(a+b)

C---(c+w)%(int)a

D---w=a==b;

正确答案:BC

解析:A选项中,a+b是右值表达式,所以无法对其赋值。D选项,因为有;所以这不是表达式而是一条语句。如果是一条表达式,则先进行==的计算,判断a与b的值是否相等,相等返回1,不然将判断后的返回值赋值给w。

        每一天都是一个新的机会,把握好,就会有新的希望。

举报

相关推荐

0 条评论