26.以下叙述中正确的是(A)。
A.字符常量用一对单撇号''作为单个字符的定界符
B.字符常量和字符串常量一样,都是用双引号括起来
C.字符常量存储时,自动在字符后加一个字符结束符号'\0'
D.字符常量和字符串常量所分配的内存空间大小是一样的
B错,一个字符加单引号是字符常量,1个字或多个字符加双引号是字符串常量。
C错,应该是字符串常量存储时,自动在字符后加一个字符结束符号'\0'
D错,字符常量和字符串常量所分配的内存空间大小不是一样的
27.已知'A'的ASCII码的十进制值为65,'0'的ASCII码的十进制值为48,则以下程序运行结果是(A)。
main()
{charch1,ch2;
ch1='A'+'5'-'3';
ch2='A'+'6'-'3';
printf("%d,%c\n",ch1,ch2);
}
A.67,DB.C,DC.C,68D.67,68
ch1='A'+'5'-'3'='A'+2所以ch1以%d格式输出是67,以%c输出是C
ch2='A'+'6'-'3'='A'+3所以ch2以%d格式输出是68,以%c输出是D
所以答案选A
28.若有定义intm=6;则正确的赋值表达式是(C)。
A.m*7B.m*5=8C.m-=m*6D.double(-m)
A、D不是赋值表达式,且D语法错误,应该改为(double)(-m)
赋值运算符左边不能是常量或表达式,B=左边是表达式,所以B错误
29.语句k=(m=5,n=++m);运行之后,变量k、m、n的值依次为(D)。
A.5,5,6B.5,6,5C.6,6,5D.6,6,6
n=++m即m先自增1,再赋值给n,所以m=6,n=6
逗号表达式的值等于其中最后一个表达式的值,所以
k=(m=5,n=++m)=(5,6)=6
30.语句x=5%4+(4/5);运行之后,整型变量x的值为(A)。
A.1B.2C.3D.0
x=5%4+(4/5)=1+0=1
31.(B)语句符合C语言语法。
A.floatz=28,intx,y=18;
B.intx=25,y=25,z=25;
C.intx=25:
y=25:
z=25;
D.intx+y=z;
32.若有定义inta,x;则语句a=(x=8,x+8);运行后,变量a、x的值依次为(A)。
A.16,8B.8,8C.16,16D.8,16
x=8
a=(x=8,x+8)=(8,16)=16
33.若变量m,n,t已定义且赋予初值,则正确的表达式是(B)。
A.m=m+1=t-nB.m=6+n+t,m++C.m=m\2D.m=int(5.6%4)
赋值运算符左边不能是表达式,所以A错
\不是运算符,/才是除法运算符,所以C错
D有2处错误:
1.模运算%,左右操作数只能是整型数据,
2..强制类型转换的一般形式:
(类型名)表达式;详细见课本P47
34.若有定义:
inta,b;floatx,则以下不符合C语言语法的表达式是(A)。
A.x%7B.x/=a-bC.a=b=2D.x=(float)a/b
模运算%,左右操作数只能是整型数据,所以A错
35.若有定义:
intm=4,n=5;floatk;,则以下符合C语言语法的表达式是(B)。
A.(m+n)*=kB.m=(n==5)C.k=float(n)/mD.n%2.5
赋值运算符左边不能是表达式,所以A错
强制类型转换的一般形式:
(类型名)表达式;详细见课本P47,所以C错
模运算%,左右操作数只能是整型数据,所以D错
36.若有定义:
inta=6;则语句a*=a-=a/=3;运行后,a的值是(B)。
A.10B.0C.34D.24
1.a/=3→a=a/3=6/3=2
2.a-=2→a=a-2=2-2=0
3.a*=0;→a=a*0=0*0=0
37.下面关于C语言变量的叙述中,错误的是(A)。
A.可以用define关键字定义变量
B.变量名用大小写字母是有区别的
C.C语言允许不同基本类型的变量之间进行混合运算
D.C语言中要求对变量作强制定义的主要理由是:
便于确定类型和分配空间
可以用define关键字定义常量,不可以用define关键字定义变量
38.若有定义:
inta=5,b=2;则表达式b=(a!
=5)的值为(B)。
A.5B.0C.3D.2
b=(a!
=5)=0
39.逗号表达式(a=15,a*4),a+15的值为(B)。
A.15B.30C.75D.60
(a=15,a*4),a+15→(15,60),30
逗号表达式(15,60),30的值为30
40.下列语句中,符合C语言语法的赋值语句是(C)。
A.a=7+b+c=a+7;B.a=7+b++=a+7;
C.a=7+b,b++,a+7;D.a=7=b,c=a+7;
赋值运算符左边不能是表达式或常量,所以A,C,D都错
41.(A)是正确的叙述。
A.(int)5.0/6与5/6等价B.'G'与"G"等价
C.5/6与5.0/6.0等价D.++3与4等价
B'G'是字符常量,占1个字节;"G"是字符串常量,占2个字节,所以B错
C5/6=05.0/6.0≈0.83所以C错
D++3语法错误,常量不能进行++运算
42.下面叙述中,错误的是(D)。
A.C语言中的表达式求值,是按其运算符的优先级先高后低的次序进行
B.自增与自减运算符的结合方向为“自右至左”
C.关系运算符的优先级低于算术运算符
D.C语言算术运算符不包含模运算符“%”
C语言算术运算符有5个:
+-*/%
43.(C)是正确的叙述。
A.表达式"m"+"M"是合法的
B.若变量x,y为整型,则(a+b)++是合法的
C.强制类型转换运算的优先级高于算术运算
D.表达式'm'*'n'是不合法的
字符串常量不能进行算术运算,所以A错
++运算操作对象不能是表达式或常量,所以B错
字符常量可以进行算术运算,’m’*’n’合法,所以D错
44.若有定义inti=1,j=9;则表达式(++j)*(i--)的值为(B)。
A.0B.10C.9D.8
++jj先自增1,再参与其他运算
i--i先参与其他运算,再自减1
所以(++j)*(i--)=10*1=10
45.设整型变量x为7,使整型变量y不为2的表达式是(A)。
A.y=x%3B.y=x/3
C.y=(++x)/3D.y=8-(--x)
y=x%3=7%3=1
46.若已定义inta=3,b=2,c=1;则语句++a||++b&&++c;运行后b的值为(D)。
A.0B.3C.1D.2
这题主要考逻辑运算中的“不完全计算”规则,详细见课本P51
&&优先级别高于||所以++a||++b&&++c等价于++a||(++b&&++c)
a=3→4||(++b&&++c)
不管(++b&&++c)是真是假,我们都可以断定4||(++b&&++c)为真。
根据“不完全计算”规则,不再执行++b&&++c。
所以运行后b值不变
47.若有定义:
inti=5,j=4;则语句i/=++j;运行后i的值为(B)。
A.10B.1C.1.25D.0
++jj先自增1,变为5,再参与其他运算,所以i/=5即i=i/5=5/5=1
48.若已定义:
inta=2,b=2;则表达式(a+(b++),b)的值是(B)。
A.2B.3C.4D.6
b++先参与其他运算,再自增1
所以(a+(b++),b)=(2+2,3)=3
49.若有定义:
intr,x=245;则语句r=x/100%9;运行后r的值为(A)。
A.2B.5C.0D.27
除法/和取模%优先级别相同,结合方向从左到右(详细见课本P42)
所以r=x/100%9=(x/100)%9=(245/100)%9=2%9=2
50.若已定义:
inti=6,t;则语句t=3+(--i);运行后t的值为(C)。
A.9B.7C.8D.5
--i先自减1,再参与其他运算
所以t=3+(--i)=3+5=8
51.C语言的%运算符按运算对象的个数属(C)。
A.单目运算符B.四目运算符C.双目运算符D.三目运算符
52.若已定义:
inta=5,b=9,c=6;则语句b++;++c;a=b-c;运行后a的值为(B)。
A.5B.3C.2D.4
执行b++;后b值变为10,执行++c;后c值变为7
所以a=b-c=10-7=3
53.以下程序运行时,若从键盘输入5,则输出结果是(D)。
main()
{inta;
scanf("%d",&a);
if(a++>5)printf("%d\n",a);
elseprintf("%d\n",a--);
}
A.7B.4C.5D.6
a++>5a参与其他运算再自增1,即a先与5比较大小,然后a自增1,变为6
所以5>5为假,执行elseprintf("%d\n",a--);先输出a,即6,然后a再自减1,a值变为5。
54.若已定义floatx;要从键盘输入数据36.582给变量x,则应选用(B)语句。
A.scanf("%2.3f",&x);B.scanf("%6f",&x);
C.scanf("%6.3f",&x);D.scanf("%5.3f",&x);
scanf函数不能指定输入小数位数
见课本P307-308
Scanf函数格式字符串的一半形式为:
%[*][输入数据宽度][长度]类型
例如
longb;
scanf(“%3ld”,&b);/*宽度为3,长度为l,类型为d*/
printf(“%ld”,b);
输入:
1234567输出:
123
55.若已定义doubley;拟从键盘输入一个值赋给变量y,则正确的函数调用是(C)。
A.scanf("%d",&y);B.scanf("%7.2f",&y);
C.scanf("%lf",&y);D.scanf("%ld",&y);
scanf函数不能指定输入小数位数
double------%lf
float--------%d
unsigned------------%u无符号十进制整数格式输出
long---------%ld
int----------%d
八进制-----%o
十六进制-------%x
char(字符变量)-------%c
字符串-----------%s
56.已有定义chars;使用scanf()函数输入一个字符给变量s,不正确的函数调用是(D)。
A.scanf("%c",&s);B.scanf("%d",&s);
C.scanf("%u",&s);D.scanf("%lf",&s);
字符在内存中以ascii码的形式存储的,所以字符可以以%d,%u,%c的格式输入输出
57.函数putchar()的功能是向终端输出(A)。
A.一个字符B.多个字符
C.一个关系表达式D.一个实型变量值
详细见课本P34
58.若已定义inta=11;执行以下语句后的输出结果是(B)。
printf("a=%d,a=%o,a=%x\n",a,a,a);
A.a=11,a=11,a=bB.a=11,a=13,a=b
C.a=11,a=13,a=cD.a=11,a=12,a=13
见55题解释
59.若有定义intm=4321,n=123,k=21;语句printf("%4d+%3d+%2d",m,n,k);执行后的输出结果是(C)。
A.4321432143211231231232121B.432112321
C.4321+123+21D.432+123+021
Printf中的格式控制字符串中字符分三种:
格式字符、转义字符、普通字符
其中普通字符+原样输出。
60.已有如下定义和输入语句,
charc1,c2;intx;
scanf("%c%d%c",&c1,&x,&c2);
若要求x、c1、c2的值分别为9、'K'和'H',正确的数据输入是(A)。
A.K9HB.K9HC.K9HD.9KH
字符在内存中以ascii码的形式存储的,所以字符可以以%d,%u,%c的格式输入输出
字符ascii码值见课本300
61.以下程序段的运行结果是(A)。
inta=1;
printf("%d,%d,%d\n",a,++a,a++);
A.3,3,1B.1,2,2C.1,2,3D.3,2,1
Printf函数中变量列表中如果有多个变量,计算顺序是从右到左,输出顺序是从左到右
62.以下程序的运行结果是(D)。
voidmain()
{inta=65;
charc='A';
printf("%d+%c=%d\n",a,c,a+c);
}
A.A+A=AAB.65+A=65AC.65+65=130D.65+A=130
字符以ascii码值参与算术运算。
字符ascii码值见课本300
63.若已定义:
intx=7;floaty=7.0;以下语句中能输出正确值的是(B)。
A.printf("%d%d",x,y);B.printf("%d%.3f",x,y);
C.printf("%.3f%.3f",x,y);D.printf("%.3f%d",x,y);
见55题解释
64.putchar函数可以向终端输出一个(A)。
A.字符或字符型变量值B.整型变量表达式值
C.实型变量值D.字符串
详细见课本P34
65.若已定义:
inta=6;floatb=1.5;要求输出形式为:
6*1.50=9.00,应选用的正确输出语句是(B)。
A.printf("%d*%f=%f",a,b,a*b);B.printf("%d*%.2f=%.2f",a,b,a*b);
C.printf("%d*%d=%.2f",a,b,a*b);D.printf("%.2f*%.2f=%.2f",a,b,a*b);
int--------------%d
float----------%f
%.02f以两位小数格式输出float变量值
*是普通字符原样输出
66.有以下程序:
main()
{intc;
while((c=getchar())!
='\n')
{switch(c-'2')
{case0:
case1:
putchar(c+4);
case2:
putchar(c+4);break;
case3:
putchar(c+3);
default:
putchar(c+2);break;
}
}
printf("\n");
}
当输入:
247<回车>,程序的输出结果是(B)。
A.689B.6689C.66778D.66887
c=getchar()作用是从键盘输入流中获取一个字符,然后赋值给c.
switch语句见课本P76.
第一次循环:
c=’2’→c-‘2’=0
所以从case0:
入口开始往下执行,一直语句break;才结束switch语句。
即执行以下语句:
case0:
case1:
putchar(c+4);
case2:
putchar(c+4);break;
输出:
66
第二次循环:
c=’4’→c-‘2’=2
所以从case2:
入口开始往下执行,一直语句break;才结束switch语句。
即执行以下语句:
case2:
putchar(c+4);break;
输出:
8
第二次循环:
c=’7’→c-‘2’=5
因为没有case值与5匹配,所以执行default分支。
即执行以下语句:
default:
putchar(c+2);break;
输出:
9
c=’\0’,结束循环。
最后输出结果:
6689
67.若已定义intx=5,y=9,z;语句z=x>=y;运行后z的值为(C)。
A.1B..t.C.0D..f.
见课本P42,关系运算符优先级别高于赋值运算符,所以>=优先级别高于=
z=x>=y;等价于z=(x>=y);所以z=(x>=y)=(5>=9)=0
68.判定逻辑值为“真”的最准确叙述是(C)。
A.1B.大于0的数C.非0的整数D.非0的数
这个标准答案有错,正确应该选D
69.若已定义intx=-16,y=-12,z;语句z=x<=y;运行后z的值为(B)。
A..t.B.1C..f.D.0
见67题解释:
z=(x<=y)=(-16<=-12)=1
70.能正确表示数学关系式100≤s<300的表达式为(C)。
A.(s>=100)&(s<300)B.100<=s<300
C.(s>=100)&&(s<300)D.(s>=100)and(s<300)
见课本P51
71.若定义inta=2,b=3;则表达式!
a||b的值为(B)。
A.0B.1C.2D.3
!
优先级别高于||
所以!
a||b等价于(!
a)||b,即0||3,所以值为1
72.若定义inta=-5,b=-8,c=-12;则表达式a>=b||bA.变量i的值B.变量j的值C.0D.1
关系运算符优先级别高于逻辑运算符,所以a>=b||b=b)||(b即(-5>=-8)||(-8<-12)的值为1
73.下列表达式