第二章练习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、选择题
1)C语言中运算对象必须是整型的运算符是(A)。
A .% B./ C.! D.* *
分析总结:“%”为取余运算符,要求左右两边的运算对象必须是整形数据。
“/”是除运算符,当左右两边的运算对象是整数时,结果也是整数,即产生整除效应。
2)若变量已正确定义并赋值,符合C语言语法的表达式是(B)。
A.a=a+7; B.a=7+b+c,a++
C.int(12.3%4) D.a=a+7=c+b
分析总结:注意题目中要求找的是表达式,而不是语句。所以A选项是错误的,首先排除。B选项是逗号表达式。C选项%的左边不是整数,错误。D选项赋值运算符的左边只能是变量不能使常量和表达式,所以也是错误的。
3)以下中叙述中正确的是(A)。
A.a是实型变量,C允许进行赋值a=10,但不可以这样说:实型变量中允许存放整型值B.在赋值表达式中,赋值号左边既可以是变量也可以是任意表达式
C.执行表达式a=b后,在内存中a和b存储单元中的原有值都将被改变,a的值已由原值改变为b的值,b的值由原值变为0
D.已有a=3,b=5,当执行了表达式a=b,b=a之后,使a中的值为5,b中的值为3
分析总结:A选项:a是实型变量,C允许进行赋值a=10,因C语言的灵活性,系统会自动的将10转换成10.0小数形式进行储存。课堂上讲过整型数据和实型数据的储存形态是不同的。B选项:赋值号左边只能是变量,从运算方向和存储上来理解。C选项:执行表达式a=b 后,在内存中a的值已由原值改变为b的值,b的值不变。D选项:已有a=3,b=5,执行表达式a=b,将变量b的值赋值给a变量,使a中的值为5,b中的值不变仍为5;执行第二个表达式b=a,将a变量的值5传递给b,所以最终结果a、b都为5。
4)若a,b,c,d都是int型变量且初值为0,以下选项中不正确的赋值表达式是(C)。A.a=b=c=100 B.d++
C.c+b D.d=(c=22)-(b++)
分析总结:注意语句和表达式的区别。赋值运算符的左边只能是变量,不能是常量或者表达式。
5)下列选项中不是C语句的是(C)。
A.{int i; i++; printf(“%d\n”,i);} B.;
C.a=5,c=10 D.{ ; }
分析总结:注意语句和表达式的区别。
6)合法的C语言赋值语句是(D)。
A.a=b=58 B.k=int(a+b);
C.a=58,b=58 D.- -i;
分析总结:强制转换符需加括号,即(int)(a+b)。而D选项- -i;等价于i=i-1;
7)有以下程序
#include
main()
{
int x=10,y=3;
printf("%d\n",y=x/y);
}
执行后的输出结果是(C)。
A.0 B.1 C.3 D.不确定的值
分析总结:整除
8)若变量已正确定义为int型,要给a,b,c输入数据,正确的输入语句是(D)。A.read(a,b,c);
B.scanf(“%d%d%d”,a,b,c);
C.scanf(“%D%D%D”,&a,%b,%c);
D.scanf(“%d%d%d”,&a,&b,&c);
分析总结:&取地址符一定不能忘记!
9)若变量a,b,t已正确定义,要将a和b中的数进行交换,以下选项中不正确的语句组是(C)
A.a=a+b,b=a-b,a=a-b; B.t=a,a=b,b=t;
C.a=t;t=b;b=a; D.t=b;b=a;a=t;
10)若有正确定义语句
double x=5.16894;
语句printf(“%f\n”,(int)(x*1000+0.5)/(double)1000);的输出结果是(D)。
A.输出格式说明与输出项不匹配,输出无定值
B.5.170000 C.5.168000 D.5.169000
分析总结:强制转化类型的书写格式为:(转换类型)(需转换的表达式或者常量)
11)若有以下程序段:
int c1=1,c2=2,c3;
c3=c1/c2;
printf(“%d\n”,c3);
执行后的输出结果是(A)。
A.0 B.1/2 C.0.5 D.1
12)若有以下程序段
int a=0,b=0,c=0;
c=(a-=a-5),(a=b,b+3);
printf(“%d,%d,%d\n”,a,b,c);
执行后的输出结果是(B)。
A.3,0,-10 B.0,0,5
C.-10,3,-10 D.3,0,3
分析总结:c=(a-=a-5),(a=b,b+3);是两个逗号表达式c=(a-=a-5)和(a=b,b+3)组成一个大的逗号表达式。
二、填空题
1)若k为int型变量且赋值11。请写出运算k++后表达式的值__11__和变量k的值__12___。
分析总结:自增自减运算符的要点是:无论是++i还是i++,变量i的值必然要增加一个。
表达式的取值按照从左往右的方向取值。
2)表达式s=10应当读做___将10赋值给变量s_________。
3)把a1,a2定义成双精度实型变量,并赋初值1的定义语句是_ double a1=1,a2=1;_ 。4)若x为double型变量,请写出运算x=3.2,++x后表达式的值__4.200000___和变量x的值__4.200000____。
5)若有以下定义,请写出以下程序段中输出语句执行后的输出结果__见图______。
int i=-200,j=2500;
printf("(1)%d,%d",i,j);
printf("(2)i=%d,j=%d\n",i,j);
printf("(3)i=%d\nj=%d\n",i,j);
6)变量i,j,k已定义为int类型并均有初值0,用以下语句进行输入时:
scanf("%d",&i);scanf("%d",&j);scanf("%d",&k);
•从键盘输入:12.3
•则变量i,j,k的值分别是__12__,___0____,____0___。
分析总结:12.3的整数部分为12赋值给变量i,剩下0.3是小数无法赋值给%d类型的整型变量j,所以j和k变量的值仍然为初值0。
7)复合语句在语法上被认为是__一条语句____,空语句的形式是___;____。
8)C语句的最后用__;___结束。
三、编程题和改错题
1)更正后程序为:
#include
void main()
{
double a,b,c,s,v;
printf("input a,b,c:\n");
scanf("%lf%lf%lf",&a,&b,&c);
s=a*b;
v=a*b*c;
printf("%f %f %f\n",a,b,c);
printf("s=%f\n,v=%f\n",s,v);
}
分析总结:scanf和printf中的格式控制串%d,%f,%lf与数据类型int,float,double都需严格的一一对应。