内容正文:
专题二 赋值语句
1、 选择题
1.若变量已正正确定义并赋值,如下符合C语言语法表达式的是( )
A.a:=b+1
B.a=b=c+2
C. int 18.5%3
D. a=a+7=c+b
答案:B
解析:选项A中包括一种不合法运算符“:=”;选项C应改为(int)18.5%3;选项D可理解为两个表达式:a+7=c+b和 a=a+7,其中第一种是错,由于c语言规定赋值号左边只能是单个变量,不能是表达式或常量等。因而,正确答案是选项B,它事实上等价于a= (b=c+2),进而可分解为两个表达式 b=c+2和a=b。
2. 以下能正确地定义整型变量a,b和c并为其赋初值5的语句是( )
A. int a=b=c=5;
B. int a,b,c=5 ;
C.int a=5,b=5,c=5 ;
D.a=b=c=5;
答案:C
解析:本题考察C语言变量的定义和初始化,注意在变量定义时进行初始化,每个变量要分开赋值,故A错误,选项C正确。选项B中,只有c进行初始化,选项D中,变量没有定义。
3.若有以下定义,则不正确的赋值语句是( )
int a, b=0;
float x;
A.a=1,b=2;
B.b++;
C.a=b=5;
D.b=int(x);
答案:D
解析:本题考察赋值语句,以及强制类型转换。选项D应改为b =(int)x;
4.已知 ch是字符型变量,下面不正确的赋值语句是( )
A.ch='atb';
B.ch='\O3’;
C.ch='7'+'9’;
D.ch=5;
答案:D
解析:字符型类型在内存中占一个字节,其变量只能存放一个字符,而选项A中有多个字符,无法存储,故错误。
5.若int a,i;以下合法的赋值语句是( )
A.a==1;
B.++i;
C.a=a+i=5;
D.a++=i;
答案:B
解析:c语言规定赋值号左边只能是单个变量,不能是表达式或常量等。因而,正确答案是选项B。选项A为关系表达式语句,不是赋值语句。
6.执行下列程序后,其输出结果是( ).
main()
{int a=9;
a+=a-=a+a;
printf("%d
",a);
}
A. 18 B. 9 C. -18 D. -9
答案:C
解析:a+=a-=a+a;等价于a=a-(a+a),a=-9; a=a+a,a=-9+(-9), a=-18.
7. 设a=12, 且a 定义为整型变量. 执行语句a+=a-=a*=a;后a 的值为( ).
A. 12
B. 144
C. 0
D. 132
答案:C
解析:表达式a+=a-=a*=a等价于
(1) a=a*a [a=12*12=144]
(2) a=a-a [a=144-144=0]
(3) a=a+a [ a=0+0=0]
8. 已定义ch 为字符型变量,以下赋值语句中错误的是( ).
A. ch='\';
B. ch=62+3;
C. ch=NULL;
D. ch='\xaa';
答案:A
解析:C语言中的字符‘\’,需要输入‘\\’,故A错误。选项B中整型可以自动转换为字符型数据,选项C中NULL表示空字符,选项D中'\xaa'为十六进制转义字符。
2、 填空题
1. 设x 的值为15,n 的值为2,则表达式x+=(n+3)运算后x 的值是 。
答案:20
解析:x+=(n+3)等价于x=x+(n+3)
2. 已知i=5,写出语句i*=i+1; 执行后整型变量i的值是 。
答案:30
解析:i*=i+1等价于i=i*(i+1)
3. 已知i=5,写出语句i-=0x12; 执行后整型变量i的值是 。
答案:-13
解析:i-=0x12等价于i=i-0x12,0x12为十六进制数,对应的十进制是18
4. 表达式a+=b 相当于表达式 。
答案:a=a+b
5. 表达式i++ 相当于表达式 。
答案:i=i+1
6. int a=1,b=2,c=3; 执行语句a=b=c;后a 的值是 。
答案:3
解析:赋值是先将c的值赋值给b,b为3,再将b的值赋值给a,a也变为3.
7. int a=1,b=2,c=3; 执行语句a += b *= c;后a 的值 。
答案:7
解析:a += b *= c 先执行b *= c,b=6,再执行a+=b,a变为7
8. 已知x=3,y=2,则表达式x*=y+8 的值为 。
答案:30
解析:x*=y+8等价于x=x*(y+8)
3、 读程序,写结果
1.main()
{
int a =15;