国家二级C语言(运算符与表达式、基本语句)机试模拟试卷1
(总分62, 做题时间90分钟)
1. 选择题
1. 
表达式(int)((double)9/2)一9%2的值是(  )。
A 0
B 3
C 4
D 5
    分值: 2
答案:B
解析:先将整型数据9强制转换成double型,然后除以2,得到的结果与double型保持一致,即为4.5,然后将4.5强制转换成整型数据4,然后计算9%2的值为1,最后计算4—1的值为3,所以选择B选项。
2. 
若有定义int x,y;并已正确给变量赋值,则以下选项中与表达式(x-y)?(x++):(y++)中的条件表达式(x—y)等价的是(    )。
A (x—y<0 ‖ x-y>0)
B (x—y<0)
C (x—y>0)
D (x—y==0)
    分值: 2
答案:A
解析:条件表达式“x=表达式1?表达式2:表达式3”的含义是:先求解表达式1,若为非0(真),则求解表达式2,将表达式2的值赋给x;若表达式1的值为0(假),则求解表达式3,将表达式3的值赋给x。本题中与表达式1:(x—y)等价的是(x—y0)。
3. 
若变量已正确定义,在if(w)prinff(“%d\n”,k);中,以下不可替代w的是(    )。
a<>b+c
B ch=getchar()
C a==b+c
D a++
    分值: 2
答案:A
解析:选项A是非法的表达式,C语言中没有“<>”运算符。
4. 
若有定义语句:int x=10;,则表达式x-=x+x的值为(    )。
A 0
B 一20
C 一10
D 10
    分值: 2
答案:C
解析:算术运算符+的优先级高于一=,且一=的结合方向为自右向左,所以表达式x一=x+x可以表示成x=x一(x+x)=10一(10+10)=一10,选择C选项。
5. 
设有定义:int x=2;,以下表达式中,值不为6的是(    )。
A 2*x,x+=2
B x++,2*x
C X*=(1+x)
D x*=x+1
    分值: 2
答案:A
解析:A选项中逗号表达式先计算第一表达式2*x,然后计算表达式x+=2的值,即x=x+2即4,整个逗号表达式为第二个表达式的值4,所以选择A选项。B选项中首先计算逗号表达式中第一表达式x++,此时x为3,再执行第二个表达式2*x=2*3=6,所以逗号表达式为第二个表达式的值6。C选项的赋值表达式可以表示为x=x*(1+x)=2*(1+2)=6。D选项中的表达式可以表示为x=x*(x+1)=2*3=6。
6. 
若有定义语句:int x=12,y=8,z;,在其后执行语句z=0.9+x/y;,则z的值为(    )。
A 1
B 1.9
C 2
D 2.4
    分值: 2
答案:A
解析:先计算x/y,结果为1,然后计算0.9+1,结果为1.9,但由于变量z为整型,取值1,所以z的值为1。
7. 
表达式3.6—5/2+1.2+5%2的值是(  )。
A 4.3
B 4.8
C 3.3
D 3.8
    分值: 2
答案:D
解析:计算5/2,结果取整数值2。计算3.6—2,结果与高精度数据保持一致,即为1.6。计算1.6+1.2,结果为2.8。计算5%2,结果为1。计算2.8+1结果为3.8。所以选择D选项。
8. 
有定义语句:int a;long b;double x,y;,则以下选项中正确的表达式是(    )。
a=x<>y
B a%(int)(x-y)
C (a*y)%b
D y=x+y=x
    分值: 2
答案:B
解析:C语言中没有“<>”运算符,所以A选项错误。“%”运算符的两个操作值必须为整型数据,所以B选项正确。a*y的结果为double型,所以C选项错误。不能将值赋给像x+y这样的表达式,所以D选项错误。
9. 
设变量已正确定义并赋值,下列表达式中正确的是(    )。
A x=y+z+5,++y
B int(15.8%5)
C x=y*5=x+z
D x=25%5.0
printf函数中的格式控制包括    分值: 2
答案:A
解析:B选项与D选项中取模运算符%的左右两个操作数均应为整数,所以错误。C选项中不能将x+y的值赋给表达式y*5,所以C选项错误。
10. 
以下不能将s所指字符串正确复制到t所指存储空间的是(    )。
A do{*t++=*s++;}while(*s);
B for(i=0;t[i]=s[i];i++);
C while(*t=*s){t++;s++}
D for(i=0,j=0;t[i++]=s[j++];);
    分值: 2
答案:A
解析:“do{*t++=*s++;}while(*s);”不能因为当*s=‘\0’时,’while(*s)跳出循环,这样字符串结束标志‘\0’没有复制给* t,造成*t不完整。注意,*t++=*s++是先执行t=*s,然后才进行t=t+1,s=s+1。B、C、D选项都能将‘\0’复制过去。
11. 
设有定义:int k=0;,以下选项的4个表达式中与其他3个表达式的值不相同的是(    )。
A ++k
B k+=1
C k++
D k+1
    分值: 2
答案:C
解析:++k,先使得k的值自增l后再使用,k++是先取得k的值再将k的值自增1,所以C选项中表达式的值为0,而其他3个表达式的值均为1,所以选择C选项。
12. 
若有定义语句:int year=2009,*p=&year;,以下不能使变量year中的值增至2010的语句是(    )。
A (*p)++;
B *p++;
C ++(*p);
D *p+=1;
    分值: 2
答案:B
解析:由于自加运算符++的运算级别高于间接运算*的运算级别,所以B选项的表达式*p++不
能使变量year中的值增至2010,因此选择B选项。
13. 
若有定义:double a=22;int i=0,k=18;,则不符合C语言规定的赋值语句是(    )。
A i=(a+k)<=(i+k);
B i=a%11;
C a-a++,i++
D i=!a;
    分值: 2
答案:B
解析:取模运算符“%”、二元运算符具有左结合性,参与运算的量均为整型。B选项中的a变量是double实型,不符合规定。
14. 
若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是(    )。
A x+1=y
B ++x,y=x一一
C x=x+10=x+y
D double(x)/10
    分值: 2
答案:B
解析:A选项中不能将变量y赋给表达式,C选项的错误与A选项一样,D选项中强制类型转换表达式应写成(double)x/10。
15. 
若变量均已正确定义并赋值,以下合法的C语言赋值语句是(    )。
A x=y==5;
B x=n%2.5;
C x+n=i;
D x=5:4+1:
    分值: 2
答案:A
解析:B选项中运算符“%”的前后必须为整数,C选项中不能将变量赋给表达式x+n,D选项中不能将表达式4+1赋给常量5。
16. 
表达式a+=a一=a=9的值是(    )。
A 18
B 一9
C 0
D 9
    分值: 2
答案:C
解析:首先计算a=9,然后计算a一=9,即a=a一9,结果为0,然后计算a+=0,即a=a+0,所以最终结果为0。
17. 
设有以下语句:    int a=1,b=2,e;    c=a^(b<<2);    执行后,c的值为(    )。
A 7
B 9
C 8
D 6
    分值: 2
答案:B
解析:h为2,二进制为00000010,执行左移两位操作后为00001000,然后与a 00000001做异或运算的结果为00001001,即十进制的9。
18. 
若有以下程序段:    int r=8;    printf(”%d\n”,r>>1);    输出结果是(    )。
A 16
B 8
C 4
D 2
    分值: 2
答案:C
解析:本题考查位运算,属于基础知识。题目中的整型变量8,二进制表达为00001000,右移一位为00000100,即4,C选项正确。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。