易错题目

1.能正确表示a和b同时为正或同时为负的逻辑表达式是( D )。

  A.(a>=0||b>=0)&&(a<0||b<0)             B.(a>=0&&b>=0)&&(a<0&&b<0)

  C.(a+b>0)&&(a+b<=0)                       D.a*b>0

解析:0是非正非负数

2.在C语言中,if语句后的一对圆括号中,用以决定分支流程的表达式( D )。

  A.只能用逻辑表达式                        B.只能用逻辑表达式或关系表达式

  C.只能用关系表达式                        D.可用任意表达式

3.有如下程序段

  float x=2.0,y;

  if(x<0.0) y=0.0;

  else if(x<5.0)y=1.0/x;

  else y=1.0;

  printf("%f\n",y);

该程序段的输出结果是( C )。

  A.0.000000                                         B.0.250000

  C.0.500000                                         D.1.000000

解释:y是float类型,且除数是浮点数形式

4.求解以下值:

(1)0&&1||0  (2)0&&1||1  (3)1&&0||0&&1||1  (4)1||1&&0

解释(1):等价于((0&&1)||0)》0||0》0

解释(2):等价于((0&&1)||1)》0||1》1

解释(3):等价于((((1&&0)||0)&&1)||1)》(((0||0)&&1)||1)》((0&&1)||1)》(0||1)》1

解释(4):等价于(1||(1&&0))》(1||0)》1

总结:&&优先级大于||;&&于||结合性为做到右

5.若int k, m = 1; 则 k = -m–;语句后,k的值为多少?

解析:优先级相同时,由结合性判断。负号与自减优先级相同,且它们的结合性为右到左,因此k = -m-- 等价于k = -(m–),由于自减在变量右侧,因此得到 k = -m = -1

6.以下数值中,不正确的八进制数或十六进制数是©.

A:0x16

B:16

C:-16

D:0xaaaa

解析:八进制和十六进制数前面是不可带负号

7 14159 中,用宏名 PI 代替一个字符串

解析:对宏的具体定义是: #define 标识符 字符串

宏替换只是字符替换。

8.以下程序输出结果是?

#include <stdio.h>

main()

{

char c[2][5]={"6934","8254"},*p[2];

int i,j,s=0;

for(i=0;i<2;i++)

p[i]=c[i];

for(i=0;i<2;i++)

for(j=0;p[i][j]>0&&p[i]j]<=9;j+=2)

s=s*10+p[i][j]-‘0’;

printf("%d\n",s);

}

本题的意图在于将c中两个字符串的偶数位置的数字组成一个新数,找到的四个数字分别是6,3,8,5,所以输出的结果就是6385,需注意程序中的p[i][j]-‘0’,这个在c语言中的作用是把char型数字转化为int型。所以可以直接用6,3,8,5运算,若将p[i][j]-'0’去掉,其输出的结果就是ASC码值。

9.以下程序段中的变量已正确定义

for(i=0;i<4;i++,i++)

for(k=1;k<3;k++);printf(“*”);

程序段的输出结果是()

A********B****

C**D*

解析:注意第二个for后执行语句为空,故答案为D。

10.若变量已正确定义,有以下程序段

Int a=3,b=5,c=7;

If(a>b)a=b;c=a;

If(c!=a)c=b;

printf(“%d,%d,%d\n”,a,b,c);

其输出结果是()

A程序语段有语法错误B3,5,3

C3,5,5D3,5,7

解析:注意第一个If语句之后的分号,c=a是不属于If语句的,故答案为B。

11.有如下程序段

#include<stdio.h>

#define PT5.5

#define S(x)PTxx

main()

{int a=1,b=2;

printf(“%4.1f\n”,S(a+b));

}

该程序的输出结果是()

A49.9B9.5C22.0D45.0

解析:函数调用时是先求出实参表达式的值,然后代入形参,但是使用带参数的宏只是进行简单的字符替换,故答案为B

12.下列符号中,不属于转义字符的是()
①\ ②\x00 ③\ ④\09
【分析】只要是以“\”开头的、后跟指定单个字符的都是“转义字符”。

13.下列符号串中,属于C语言合法标识符的是()
①else ②a-2 ③_00 ④00
【分析】标识符必须是“字母”或者“下划线”开头的,由字母、数字、下划线组成的一串符号,并且不能是保留字。
【答案】③

14.下列说法中,正确的是()
①主函数名是由程序设计人员按照“标识符”的规则选取的
②分号和回车符号都可以作为一个语句的结束符号
③在程序清单的任何地方都可以插入一个或多个空格符号
④程序的执行,总是从源程序清单的第1行开始
【分析】主函数名规定为“main”,不是程序设计人员自由选取的;分号是表示语句结束的唯一符号;程序的执行总是由主函数的第1条语句开始执行的。
【答案】③

15.下面程序的输出是_________。

main()

{ int k=11;

printf(”k=%d,k=%o,k=%x\n”,k,k,k);

}

A)k=l1,k=12,k=l1 B)k=ll,k=13,k=13

C)k=l1,k=013,k=0xb D)k=l1,k=13,k=B

答案:D

评析:在C语言格式字符的输出中,“%d”是以带符号的十进制形式输出整数;“%0”是以8进制无符号形式输出整数(不输出前导符O);“O/ox”是以16进制无符号形式输出整数(不输出前导符0x)。

16.下面程序段中c的二进制值是__________。

char a=3,b=6,c;

c=a^b<<1:

A)00001011 B)00001111 C)00011110 D)00011100

答案:B

评析:c语言提供六种位运算符,按优先级由高到低的顺序分别为:取反(~)、左移((>)、按位与(&)、按位异或(八)、按位或(I)。所以表达式c=aAb<<l先运算b<<l得二进制值为00001 100,再运算aA00001 100,最后得二进制值00001ll1。B

17.以下叙述中正确的是__________。

A)C语言比其他语言高级

B)C语言可以不用编译就能被计算机识别执行

C)C语言以接近英语国家的自然语言和数学语言作为语言的表达形式

D)C语言出现的最晚,具有其他语言的一切优点

答案:C

评析:计算机语言分为低级语言、汇编语言和高级语言,c语言属于高级语言,但并不是说c语言比其他语言高级,所以选项A错误;除了低级语言外,其他各种语言都必须编译成能被计算机识别的二进制数才能执行,选项B错误;C语言出现从1972年到1973年间,并不是出现最晚的语言,所以选项D也是错误的。

18.列可用于C语言用户标识符的一组是__________。

A)void define WORD B)a3_b3 _123 Car

C)For -abc IFCase D)2aDO sizeof

答案:B

评析:c语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线,所以排除c和D。c语言还规定标识符不能为c语言的关键字,从而选项A(void是关键字)是错误的。

19.fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是________。

A)只读 B)追加 C)读或读写 D)以上均正确

答案:D

评析:fgetc函数是指从指定的文件读入一个字符,该文件必须是以读或读写方式打开的。电etc”函数的调用形式为:ch=fgetc(fp);。

20.请选出正确的程序段_________。

A)intp B)ints,k;

Scanf(“”%d””,p); *s=100;

…… ……

C)ints,k; D)ints,k;

Char *p,c; char *p,e;

s=&k: s=&k

p=&c; p=&c;

*p=’a’; s=p;

…… *s=l;

……

答案:C

评析:本题的A和B犯了一个同样的错误,即指针变量p定义后并没有指向具体的变量,因此不能进行赋值操作。另外,在选项D中,s是int指针变量,p是char型指针变量,所指向的内存单元所占用的字节数是不同的,因而不能将字符指针变量p的值赋给整型指针变量s。

21.下面程序的输出是_________。

main()

{ int x=3,y=6,a=0;

while(x++!=(y-=1))

{ a+=1;

if(y<x)break;

}

primf(”x=%d,y=%d,a=%d\n”,x,y,a);

}

A)x=4,y=4,a=1 B)X=5,y=5,a=1

C)x=5,y=4,a=3 D)x=5,y=4,a=l

答案:D

评析:注意的是x++中x值的引用时,这里应当是先引用,后自加,具体执行过程如下:

第一次while循环:条件为真,执行a=a+l=l;此时,x的值已为4,判断y<x不成立,继续执行循环;

第二次while循环:条件为假,此时x的值已为5,退出while循环,执行printf。

22.若有程序:

fun(int a,int b)

{

static int c=O:

c+:a+b:

return C;

}

main()

{

int x=5,y=3,z=7,r;

r=fun((y,x+y),z);

r=fun(x,y);

printf(”%d\n”,r);

}

上面程序的输出结果是__________。

A)23 B)15 C)19 D)18

答案:A

评析:stoic声明的外部变量只限于被本文件引用,而不能被其他文件引用。用static来声明一个变量的作用有:①对局部变量用static声明,则为该变量分配的空间在整个程序执行期间始终存在;②全部变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。调用第一个fun,其两个实参的值为(3,5+3)与7即8与7,在函数fun执行结束返回15。第二次调用fun时,由于stat~为静态类型,其值保留,执行fun(5,3)后,其返回值为23,故选A。

23.面程序的输出是________。

main()

{char*s=”12134211”;

int vl=0,v2=0,v3=0,v4=0,k;

for(k=0;s[k];k++)

switch(s[k])

{ default:v4++;

case’l’:vl++;

case’3′:v3++;

case’2′:v2++;

}

printf(”v1=%d,v2=%d,v3=%d,v4=%d\n”,v1,v2,v3,v4);

}

A)vl=4,v2=2,v3=l,v4=l B)vl=4,v2=9,v3=3,v4=l

C)vl=5,v2=8,v3=6,v4=l D)vl=8,v2=8,v3=8,v4=8

答案:C

评析:当switch后面括弧内的表达式的值与某一个case后面的常量的表达式的值相等时,就执行此caSe后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。

24.下面程序

main()

{

int x=32:

printf(”%d\n”,x=x<<1);

}

的输出是________。

A)100 B)160 C)120 D)64

答案:D

评析:<<是c语言中规定的左移运算符,例如,a=a<<2,这个语句即是将a的二进制数左移两位,左移一位相当于该数乘于2,左移两位相当于该数乘以2的2次方。所以,x<<1=32.2=64。

25.下面程序

main()

{ int x=100,a=10,b=20,okl=5,ok2=0;

if(a<b)

if(b!=15)

if(10k1) x=l;

else i“oL2)x。10;

X=-1;

Printf(%d\n”,x);

}

的输出是________。

A)-1 B)0 C)1 D)不确定的值

答案:A

评析:第一个判断值为真,过渡到下一个判断,第二个判断为真,过渡到第三个判断……如此循环,在打印输出语句的前一行,程序给变量x赋了值,为.1,所以,无论前期如何变化,最后的x值依然为-1。

26.以下对枚举类型名的定义中正确的是________。

A)enum a={one,two,three}; B)enum a{one=9,two=-1,three};

C)enum a={“one”,”two”,”three”}; D)enum a{“one”,”two”,”three”};

答案:B

评析:声明枚举类型用enum开头。例如:enum weekday(sun,mon,tue,wed,thu,fri,sat);

说明:1、在c编译中,对枚举元素按常量处理,同时可以改变他们的值。2、枚举值可以用来做判断比较。3、一个整数不能直接赋给一个枚举变量。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值