运算符和表达式
试题1
设a = 1,b = 2,c = 3,d = 4,则表达式: a<b?a:c<d?a:d结果为:
If a = 1,b = 2,c = 3,d = 4,then what is the value of the expersstion a<b?a:c<d?a:d:
A: 4 B: 3 C: 2 D: 1
基本功能题,重在考察程序员对表达式结合性的熟悉程度和对条件运算符的掌握程度.
解题方法:按照表达式自左向右的结合性分布计算表达式的值
a<b?a:c < d?a:d可写成(a<b?a:c)<d?a:d 先计算a<b?a:c结果为a,在计算a<d?a:d结果还是a
试题2
设x为int型变量,则执行以下语句后,x的值为:
If x is an int value,then what is x value when the following statements are excuted
x = 10; x += x -= x-x;
A: 10 B: 20 C: 30 D: 40
这是一个陷阱题,涉及到的知识点是复合赋值表达式的运算
解题方法:按赋值表达式的右结合性分布计算
x += x -= x-x可以写成x += (x -= (x-x))最后,x += 10就是20
试题3
设x,y,z,t均为int型变量,则执行以下语句后,t的值为:
If x,y,z,t is int value,then what is t value when the following statements are excuted:
x = y = z = t = 1; t = ++x || ++y && ++z
A: 不定值 B: 2 C: 1 D: 0
此题输入技巧题,考程序员对||运算符的理解
解题方法:在C语言中||和&&运算符得到的值为真即为1,为假即为0,考虑&&的仅优先级高于||,所以最后计
算||,但对于||来说只要表达式++x为真则不用再计算后面的,这里++x = 2显然为真即1,所以不需计算.
试题4
设x,y,z和k都是int型变量,初始值都是0,则执行表达式x = (y++, z += y, k = z + 2)后,x的值是:
If x,y,z and k are all int values,the initial values of them are all 0,what is the x value
when the statement "x = (y++, z += y, k = z + 2)" is excuted:
A: 0 B: 1 C: 2 D: 3
此题为基本功能题,考察逗号表达式的求值
解题方法:逗号表达式又叫顺序求值运算符,求解过程是自左至右,依次计算各表达式的值,逗号表达式的值
是最后一个表达式的值,所以如无必要不用计算各个表达式,但这里要依次计算三个表达式才可以,x = 3
试题5
#include <stdio.h>
#define SUB(X, Y) (X)*Y
void main()
{
int a = 3, b = 4;
printf("%d", SUB(a++, b++));
}执行结果是:
what is the output of the program above:
A: 12 B: 13 C: 16 D: 20
陷阱题,考察自增运算和表达式的值
解题方法:把SUB的宏展开成(a++)*b++,很显然,(a++)*b = 12(a先乘以b,再作自增运算)
试题6
下面程序的输出是:
What is the output of the following program:
main()
{
enum team(a, b = 4, c, d = c + 10);
printf("%d,%d,%d,%d", a, b, c, d);
}
A: 0 1 2 3 B: 0 4 0 10 C: 0 4 5 15 D: 0 4 4 14
基本题,考察C语言的基本数据类型枚举型
枚举型变量非常有用,编程时可一次定义一系列整型常量.一般格式如下:
enum valueName {value0, value1, value2, value3, ..., valuen};
value0的值是0,以后各常量的值依次递增,如果某个valueM用赋值语句被赋值为M,则value(M+1)的值就是
M+1(递增一个).此题显然是选C









评论人