二级c语言程序设计习题及解答ch13.docx
《二级c语言程序设计习题及解答ch13.docx》由会员分享,可在线阅读,更多相关《二级c语言程序设计习题及解答ch13.docx(15页珍藏版)》请在冰豆网上搜索。
二级c语言程序设计习题及解答ch13
12)计算机能直接执行的程序是(B )。
A)源程序 B)目标程序 C)汇编程序 D)可执行程序
13)以下叙述中正确的是(D)
A)程序设计的任务就是编写程序代码并上机调试
B)程序设计的任务就是确定所用数据结构
C)程序设计的任务就是确定所用算法
D)以上三种说法都不完整
例年真题:
#include
main()
{
Int a;
A=5; /*给A变量赋值5
A+=3; 再赋值后再加3*/
Printf(“%d”,a);
}
(11)以下叙述中正确的是( C )。
A)C 程序的基本组成单位是语句 B)C 程序中的每一行只能写一条语句
C)简单C 语句必须以分号结束 D)C 语句必须在一行内写完
(11)以下叙述中正确的是(C)
A)C程序中的注释只能出现在程序的开始位置和语句的后面
B)C程序书写格式严格,要求一行内只能写一个语句
C)C程序书写格式自由,一个语句可以写在多行上
D)用C语言编写的程序只能放在一个程序文件中
(12)以下选项中,能用作用户标识符的是(C)
A)void
B)8_8
C)_0_
D)unsigned
【解析】A:
关键字不可以B:
不以数字开头C:
正确D:
关键字
(13)以下选项中合法的标识符是(C)
A) 1-1B)1—1 C)-11 D)1—
【解析】A:
不以数字开头,出现非法字符-而不是_B:
不以数字开头,非法字符C:
正确D:
不以数字开头,出现非法字符
(14)以下选项中不合法的标识符是 (C)
A)printB)FOR C)&a D)_00
【解析】C:
出现非法字符&
(15)以下选项中,能用作数据常量的是 (D)
A)o115B) 0118C)1.5e1.5 D) 115L
【解析】A:
八进制以0开头而不是以o开头B:
八进制最大值为7,范围0-7C:
指数必须为整数D:
长整型正确
(13)以下选项中不能作为C 语言合法常量的是( A )。
A)'cd' B)0.1e+6C)"\a"D)'\011'
【解析】A:
字符常量只能有一个字符
(16)以下选项中不属于字符常量的是 (B)
A)'C' B)"C" C)'\xCC0'D)'\072'
【解析】B:
字符常量以单引号作为标志,其为字符串
(14)表达式:
4-(9)%2的值是(B)
A)0
B)3
C)4
D)5
【解析】(9)%2=1(取余),4-1=3
(14)设变量已正确定义并赋值,以下正确的表达式是 (C)
A)x=y*5=x+z
B)int(15.8%5)
C)x=y+z+5,++y
D)x=25%5.0
【解析】A:
等号左边必须为变量,不可以为表达式,y*5是表达式B:
%只适用于整型变量D:
%只适用于整型变量
(15)若有定义语句:
int x=10;,则表达式x-=x+x的值为(B)
A)-20
B)-10
C)0
D)10
【解析】先算右边得20,x-=20,则10-20=-10
(14)设有定义:
int x=2;,以下表达式中,值不为6的是 (D)
A) x*=x+1x=x*(x+1)
B) x++,2*x
C)x*=(1+x)
D)2*x,x+=2
【解析】逗号表达式的最终结果看最后一个表达式,x+=2,结果为4
(17)若变量均已正确定义并赋值,以下合法的C语言赋值语句是 (A)
A)x=y==5;
B)x=n%2.5;
C)x+n=I
D)x=5=4+1;
【解析】等号左边必为变量,不能为常量或数字排除C、D,%只能用于整数排除B
第三章输入输出
习题讲解
(13)阅读以下程序
#include
main()
{ int case;float printF;
printf(“请输入2个数:
”);
scanf(“%d%f”,&case,&pjrintF);
printf(“%d%f\n”,case,printF);
}
该程序编译时产生错误,其出错原因是( A )
A)定义语句出错,case是关键字,不能用作用户自定义标识符
B)定义语句出错,printF不能用作用户自定义标识符
C)定义语句无错,scanf不能作为输入函数使用
D)定义语句无错,printf不能输出case的值
(16)有以下程序
#include
main()
{ int a=1,b=0;
printf(“%d,”,b=a+b);
printf(“%d\n”,a=2*b);
}
程序运行后的输出结果是 ( D )
A)0,0
B)1,0
C)3,2
D)1,2
【解析】b=a+b即b=1,a=2*b,a=2
(15)程序段:
int x=12;
doubley=3.141593; printf(“%d%8.6f”,x,y);的输出结果是 ( A )
A)123.141593
B)12
3.141593
C)12,3.141593
D)123.141593
【解析】“%d%8.6f”原样输出,没有,也没有空格,所以x与y相连,小数总共8位,小数点之后6位
#include
main()
{
double a=123.456;
printf("%6.2f",a);
}
结果:
123.46
例题:
int x;
x=11/3;
int y=5;
printf("%%d,%%%d\n",x,y); 结果是:
%d,%3
【解析】"%%d,%%%d\n"原样输出,%%d中第一个%为转义字符,不是输出占位符,所以原样输出%d,然后%%转义只输出一个%,%d\n只有一个占位符,所以只输出x的值为3
[3.5] 若变量已正确说明为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);
【解析】scanf中赋值必须用&(取地址符),即将输入的字符放在指定位置中
[3.6] 若变量已正确说明为float类型,要通过以下赋值语句给a赋予10、b赋予22、c赋予33,以下不正确的输入形式是( B )
A)10 B)10.0,22.0,33.0 C)10.0 D)10 22
22 22.033.0 33
33
scanf(“%f%f%f”,&a,&b,&c);
【解析】输入时可以空格可以回车,但是不可以出现,
复合语句:
多个语句被{}括起来,当成一条语句来执行。
空语句:
最后的表示只有一个;
程序举例:
1。
编写一个程序,从键盘上输入两个数字,让后让他们互换一下。
#include
main()
{
int a,b;
printf("请输入两个数字:
");
scanf("%2d%3d",&a,&b);
printf("qian:
%d%d",a,b);
int c;
c=a,a=b,b=c;
printf("后:
%d%d",a,b);
}
2。
编写程序,对一个double型数据进行四舍五入运算。
要求保留两位有效数字。
123.4567
两种算法:
(1)
#include
main()
{
doublek=1234.4567;
k+=0.005;
printf("%7.2f",k);
}
(2)
#include
main()
{
doublek=1234.4567;
k*=100;
k+=0.5;
k=(int)k;
k/=100;
printf("%7.2f",k);
}
3。
编写程序,使从键盘中输入的三位数倒着输出。
#include
main()
{
inta,three,two,one;
printf("请输入一个三位数:
");
scanf("%d",&a);
three=a/100;//取出百位
two=a%100/10;//取出十位
one=a%10;//取出个位
printf("%d%d%d",one,two,three);
}
选择题
[3.1] 若a、b、c、d、都是int类型变量且初值为0,以下选项中不正确的赋值语句是(C)
A)a=b=c=d=100; B)d++; C)c+b; D)d=(c=22)-(b++);
【解析】C是表达式,无法完成赋值
[3.2] 以下选项中不是C语句的是(C)
A){int i; i++; printf(“%d\n”,i);} B);
C)a=5,c=10 D){;}
【解析】C是表达式,没有;结尾,只有;的语句是空语句
[3.3] 以下合法的C语言赋值语句是(D)
A)a=b=58 B)k=int(a+b); C)a=58,b=58 D)--i;
【解析】语句必须以;结尾,B中强制类型转换的正确写法为k=(int)(a+b);
[3.4] 以下程序的输出结果是(C)
A)0 B)1 C)3 D)不确定的值
main( )
{ int x=10,y=3;
printf(“%d\n”,y=x/y);}
【解析】除法并且两边都为整型,最后也是整型
[3.7] 若变量已正确定义,要将a和b中的数进行交换,下面不正确的语句组是(D)
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;
[3.8] 若变量已正确定义,以下程序段的输出结果是(D)
A) 输出格式说明与输出项不区配,输出无定值 B)5.17
C)5.168 D)5.169
X=5.16894;
Printf(“%f\n”,(int)(x*1000+0.5)/(float)1000);
【解析】其上市四舍五入发,保留3位有效数字
[3.9] 若有以下程序段,c3中的值是(A)
A)0 B)1/2 C)0.5 D)1
int c1=1,c2=2,c3;
c3=c1/c2;
【解析】不够除,商0
[3.10] 若有以下程序段,其输出结果是(B)
A)3,0,-10 B)0,0,5 C)-10,3,-10 D)3,0,3
int a=0,b=0,c=0;
c=(a-=a-5),(a=b,b+3);
printf(“%d,%d,%d\n”,a,b,c);
【解析】a-=a-5得a=5,赋值给c=5,后面将b赋值给a,a=0,b+3执行了,但是并没有改变b的值
辨析:
inta=0,b=0,c=0;
c=((a-=a-5),(a=b,b+3));
printf("%d,%d,%d\n",a,b,c);
【解析】a-=a-5得a=5,没有赋值给c,后面将b赋值给a,a=0,b+3执行后赋值给了c;因为逗号表达式永远是最后一个逗号后的值赋值给c,只是相差一个(),结果就不同了。
填空题
[3.21] 若有以下定义,请写出以下程序段中输出语句执行后的输出结果。
(1)-200,2500
(2)i=-200,j=500 (3)i=-200 回车 j=2500
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);
[3.22] 变量i、j、k已定义为int类型并有初值0,用以下语句进行输入时
scanf(“%d”,&i); scanf(“%d”,&j); scanf(“%d”,&k);
当执行第一个输入语句,从键盘输入:
12.3 表示Enter键
则变量i、j、k的值分别是____12____、____0___、__0____。
【解析】因为只输入一个数,而且定义i为整型,所以会自动将12.3进行截断,变成12
[3.23] 复合语句在语法上被认为是 一条语名。
空语句的形式是 ;
[3.24]C语句的最后用 ;结束。
[3.25] 以下程序段,要求通过scanf语句给变量赋值,然后输出变量的值。
写出运行时给k输入100,给a输入25.81,给x输入1.89234 时的三种可能的输入形式_____、_____、_____。
int k;floata; doublex;
scanf(“%d%f%lf”,&k,&a,&x);
pirntf(“k=%d,a=%f,x=%f\n”,k,a,x);
以空格隔开输入
以回车隔开输入
回车和空格连用输入
编程题和改错题
[3.29] 以下程序多处有错。
要按下面指定的形式输入数据和输出数据时,请对该程序做相应的修改。
main
{double a,b,c,s,v;
printf(input a,b,c:
\n);
scanf(“%d%d%d”,a,b,c);
s=a*b; /*计算长方形面积*/
v=a*b*c; /*计算长方体体积*/
printf(“%d %d %d”,a,b,c);
printf(“s=%f\n”,s,”v=%d\n”,v);
}
当程序执行时,屏幕的显示和要求输入形式如下:
inputa,b,c:
2.02.03.0 此处的2.0 2.0 3.0是用户输入的数据
a=2.000000,b=2.000000,c=3.000000 此处是要求的输出形式
s=4.000000,v=12.000000
代码改成如下:
#include
main()
{floata,b,c,s,v;
printf("inputa,b,c:
\n");
scanf("%f%f%f",&a,&b,&c);
s=a*b;/*计算长方形面积*/
v=a*b*c;/*计算长方体体积*/
printf("%f%f%f\n",a,b,c);
printf("s=%f,v=%f\n",s,v);
}
[3.30] 编写程序,把560分钟换算成用小时和分钟表示,然后进行输出。
#include
main()
{
intminute=560,hour;
hour=minute/60;
minute%=60;
printf("560分钟=%d小时%d分钟\n",hour,minute);
}
[3.31] 编写程序,输入两个整数:
1500和350,求出它们的商数和余数并进行输出。
#include
main()
{
inta,b,result,redundancy;
printf("请输入两个整数:
\n");
scanf("%d%d",&a,&b);
result=a/b;
redundancy=a%b;
printf("a/b商为:
%d,余数为:
%d\n",result,redundancy);
}
[3.32] 编写程序,读入三个双精度数,求它们的平均值并保留此平均值小数后一位数,对小数点后第二位数进行四舍五入,最后输出结果。
#include
main()
{
doublea,b,c,avg;
printf("请输入三个双精度的小数:
\n");
scanf("%lf%lf%lf",&a,&b,&c);
avg=(a+b+c)/3;
printf("四舍五入之前三个数的平均数为:
%lf\n",avg);
avg*=10;
avg+=0.5;
avg=(int)avg;
avg/=10;
printf("四舍五入之后三个数的平均数为:
%.1lf\n",avg);
}
[3.33] 编写程序,读入三个整数给a、b、c,然后交换它们中的数,把a中原来的值给b,把b中原来的值给c, 把c中原来的值给 a。
#include
main()
{
inta,b,c,t;
printf("请输入三个整数:
\n");
scanf("%d%d%d",&a,&b,&c);
printf("交换位之前,a=%d,b=%d,c=%d\n",a,b,c);
t=c;
c=b;
b=a;
a=t;
printf("交换位之后,a=%d,b=%d,c=%d\n",a,b,c);
}