全国计算机等级考试二级C语言复习资料 下载本文

聪智学校

i-- i参与运算后再自减1

++和- -的运算对象只能为变量,不能是常量或表达式。

例1:(2009-09-06)若有定义语句:int a=5;则表达式:a++的值是 5 。

【解析】表达式a++的值是a未加1之前的值,即5。.

? 当++或—与printf语句结合时,若++/--x的形式,则先自增/自减,然后输出;若x++/--的形式,则先输出x原值,在进行自增/自减操作。 例2:(2011-03-26)有以下程序 #include main()

{ int x=011; printf(\ }

程序运行后的输出结果是(C)

A)12 B)11 C)10 D)9

【解析】011是一个八进制的数,转为十进制则为1*8+1=9;++x是x先自增1再参与其他运算,所以先x自增1为10再输出即为10,故选C。

14.知识点:赋值表达式

? 一般形式:变量名=表达式

? 赋值运算符左边必须是变量,而不是表达式。

例1:(2010-03-14)若有定义:double a=22;int i=0,k=18;则不符合C语言规定的赋值语句是( C) A)a=a++,i++; B)i=(a+k)<=(i+k); C)i=a; D)i=!a;

【解析】a为double型,参与%运算的操作数均为整型,故C项错误。 例2:(2011-03-26)若有定义语句:int a=3,b=2,c=1;,以下选项中错误的赋值表达式是(A) A)a=(b=4)=3; B)a=b=c+1; C)a=(b=4)+c; D)a=1+(b=c=4); 【解析】赋值表达式的左边必须是变量不能是表达式。而答案A中,(b=4)是一个赋值表达式。 ? 复合赋值运算符和表达式

+=、—=、*=、/=、%=、<<=、>>=、 &=、 ^=、 |=

第 9 页 共 81 页

聪智学校

例2:(2010-09-16)表达式a+=a-=a=9的值是(D) A)9 B)-9 C)18 D)0

【解析】赋值运算符的结合性是从右到左,a=9→a=a-9=0→a=a+0=0+0=0。故答案是D。

15.知识点:位运算

? 按位与运算&

规则:0&0=0 0&1=0 1&0=0 1&1=1 ? 按位或运算|

规则:0|0=0 0|1=1 1|0=1 1|1=1 ? 按位异或运算∧

规则:0∧0=0 0∧1=1 1∧0=1 1∧1=0 ? 求反运算~ 规则:~0=1 ~1=0 ? 左移运算<<

规则:把<<左边的运算数的各二进位全部左移若干位,高位丢弃,低位补0。左移一位相当于该数乘以2。左移n位相当于该数乘以2。 例1:(2010-09-40)有以下程序 #include main() {short c=124; c=c____D____; printf(“%d\\n”,c); }

若要使程序的运行结果为248,应在下划线处填入的是

第 10 页 共 81 页

n

聪智学校

A)>>2 B)|248 C)&0248 D)<<1

【解析】左移一位相当于该数乘以2,124>>1相当于124乘以2,等于248。故答案是D。 例2:(2009-04-39)有以下程序 #include main() {int a=5,b=1,t; t=(a<<2)|b; printf(“%d\\n”,t); }

程序运行后的输出结果是(A) A)21 B)11 C)6 D)1

【解析】左移2位相当于该数乘以2。5<<2相当于5乘以4等于20。20|1=21。故答案是A。 ? 右移运算>>

把>>左边的运算数的各二进位全部右移若干位。高位补0,低位丢弃。右移一位相当于该数除以2。右移n位相当于除以2。 例3:(2009-09-39)若有以下程序段 int r=8;

printf(“%d\\n”,r>>1); 输出结果是(C)

A)16 B)8 C)4 D)2

【解析】右移一位相当于该数除以2。8>>1相当于除以2,等于4,故答案是C。

n

2

16.知识点:关系运算符和表达式

例1:(2010-09-08)在C语言中,当表达式值为0时表示逻辑值“假”,当表达式值为

第 11 页 共 81 页

聪智学校

非0 时表示逻辑值“真”。

例2:(2010-03-06)设x为int型变量,请写出一个关系表达式 (x%3==0)&&(x%7==0) ,用以判断x同时为3和7的倍数时,关系表达式的值为真。

17.知识点:逻辑运算符和表达式

? 逻辑运算符优先级从高到低:!、&&、|| ? 逻辑运算的真值表

a 真 真 假 假 b 真 假 真 假 a&&b 真 假 假 假 a||b 真 真 真 假 !a 假 假 真 真 ? 进行逻辑运算时,若&&左边的值为0,则不再对右边的运算对象进行运算,整个表达式的值为0。

例1:(2011-09-17)若有定义语句:int k1=10,k2=20;,执行表达式(k1=k1>k2)&&(k2=k2>k1)后,k1和k2的值分别为 (B) A. 0和1

B.0和20

C.10和1 D. 10和20

【解析】k1>k2为假,因此k1= k1>k2结果0,逻辑与左边表达式为假,右边表达式不再处理,因此k1结果为0,k2不变,仍为20 例2:int a=2;则表达式(!a==1)&&(a++==2)的值为0,a的值为2。

【解析】!a为0,!a==1的值为0,&&左边的值为0,则不再对右边的运算对象进行运算,所以a的值为2。 ? 若||左边的运算对象的值为1,则不再对右边的运算对象进行运算,整个表达式的值为1。 例2:(2010-03-17)若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是(A) A)1 B)0 C)2 D)不知道a的值,不能确定

【解析】a的值有两种情况:a等于1或a不等于1。故逻辑表达式(a==1)||(a!=1)的值为1。

18.知识点:格式输入函数printf()

(1)一般形式:printf(“格式控制字符串”,输出列表);

第 12 页 共 81 页