C语言测验题错题小结

  • 下列程序段的输出结果为
int x=1, y=012;
printf("%d", y*x++);

正确答案:10.因为012是八进制数10,y++是加一之前的值。

  • 下面程序段的输出结果是:
int k;
while(k!=0) k=k-1;
printf("%d", k);

正确答案:是不能输出结果的,但是可以编译通过。然而答案居然是无论k初值如何,最终都会减到0,k如果正好为负数呢?这一题有疑惑。

  • include是编译预处理指令,不是C的关键字。
  • C语言进制的表示:十进制既无前缀也无后缀,八进制前缀加0,十六进制前缀加0x
  • 语句printf(“%d”,(a=2)&&(b= -2));的输出结果是:

正确答案:1.两个赋值语句都是true

  • 以下表达式x&&1用在if的条件中时,和哪个是等价的:

正确答案:x!=0.因为x只要不是0就是逻辑真,右面的1不起作用。

  • 对于以下代码:
    int i=6;
	if ( i<= 6 ) 
		printf("hello\n");;
	else
		printf("bye-bye\n");;

是否能打印出结果?

正确答案:无法编译。因为else没有匹配的if语句。

  • 下列代码执行后,输出的结果是:
int i=0;
if ( i==0 ) {
    int i=3;
}
printf("%d\n", i);

正确答案:0.因为在括号内定义的i是局部变量。

  • 如果i是变量,而p是指向i的指针,则哪个表达式可以代替i?

正确答案:*&i

  • 有如下定义:
char str1[8], str2[8] = "good";

则不能将str2的内容交给str1数组的是:

正确答案:str1 = str2.因为数组变量不能接受赋值。

  • 判断str1和str2的内容是否相同用strcmp(str1,str2) == 0.
  • 判断str1和str2的地址是否相同用str1 == str2(通常指的是str1和str2的地址和内容完全相同)
  • 两个指针变量,所指的类型相同,则它们之间不能进行的运算是:

正确答案:+   因为地址加地址没有意义。

  • 假如str是字符数组,下面哪个选项与其他选项不等价
A.strcpy(str,"");

B.strcat(str,"");

C.str[0] = '\0';

D.*str = 0;

正确答案:B。因为B是把空字符连接在str的后面,而其他项是使str成为空串。

  • 假设有定义
int k;
for (k=1; k; k++)  
    printf ("%d ", k);

上面程序段编译运行情况是:

正确答案:能运行,正常结束。

  • 循环语句:
while (!x&&!y)

中的循环条件表达式等价于:

A.!(x==0 && y==0)

B.!(x==0 || y==0)

C.x=0 && y=0

D.!(x || y)

正确答案:D因为C是两个赋值语句做与运算,不是指等于==

while( *s++ = *t++ );

等价的程序段是:

A.while ( *s ) 
    *s++ = *t++;

B.do { 
    *s = *t++;  
} while ( *s++ );

C.while ( *t ) 
   *s++ = *t++;

D.do { 
    *s++ = *t++;  
} while ( *t  );

正确答案:B

  • 当文件打开出现错误时,fopen返回的是NULL
  • 若有定义:
struct { 
    int k; 
    char s[30]; 
} a[5] = {1, "ABC", 2, "abc"}, *p = a;

那么表达式*(p++)->s的值是:

正确答案:'A'

  • main不是C语言的关键字
  • 下面程序运行后,a的值是
if (4/5 > 3/4) 
    a=1; 
else 
    a=0;

正确答案:0因为分数相除均为整型的0

  • 若int a = 6, b = 0, c = 3,则表达式a && b || b - c的结果是:

正确答案:1,因为非0就是逻辑1,负数也属于非0

  • 一下代码的输出是
void f( int *pa, int *pb ) 
{
    int pt;
    pt = *pa, *pa = *pb, *pb = *pa;
}
int main(void)
{    
    int x=1, y=2;
    f(&x, &y);
    printf("%d%d", x, y);
}

正确答案:22.并非是交换两个数的程序,细心呀!

 

 

你可能感兴趣的:(C语言复习)