C语言程序设计习题与上机指引答案.docx
- 文档编号:1345613
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:127
- 大小:220.84KB
C语言程序设计习题与上机指引答案.docx
《C语言程序设计习题与上机指引答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计习题与上机指引答案.docx(127页珍藏版)》请在冰点文库上搜索。
C语言程序设计习题与上机指引答案
《C语言程序设计习题与上机指南》答案
第一部分习题篇第一章C语言概述
一.单选题
1.以下说法中正确的是(C)。
A)C语言程序总是从第一个函数开始执行
B)在C语言程序中,要调用函数必须在main()函数中定义
C)C语言程序总是从main()函数开始执行
D)C语言中的main()函数必须放在程序的开始部分
2.一个C语言程序是由(B)。
A)一个主程序和若干子程序组成B)函数组成
C)若干过程组成D)若干子程序组成
3.C语言规定,在一个源程序中,main函数的位置(C)。
A)必须在最开始B)必须在系统调用的库函数的后面
C)可以任意D)必须在最后
4.以下叙述不正确的是(D)。
A)一个C源程序可由一个或多个函数组成
B)一个C源程序必须包含一个main函数
C)C程序的基本组成单位是函数
D)在C程序中,注释只能位于一条语句的后面
5.下列关于C语言的说法不正确的是(D)。
A)C语言既有高级语言的功能,也具有低级语言的一些功能
B)C语言中的一条执行语句都必须用分号结束
C)注释可以出现在程序中任意合适的地方D)include命令行后面必须加分号6.用C语言编写的代码程序(B)。
A)可以立即执行B)是一个源程序
C)经过编译即可执行D)经过编译解释才能执行
7.用高级语言(如C语言)编写的程序称为(A)
A)源程序B)目标程序C)可执行程序D)编译程序
8.一个函数的组成有(A)。
A)函数首部和函数体B)函数名和函数的声明部分
C)主函数和子函数D)声明部分和执行部分
9.在C语言中,用来表示“取地址”的符号是(B)。
A)#B)&C)*D)@
10.C语言是计算机高级语言,它适合于作为系统描述语言,它(A)。
A)既可用来写系统软件,也可用来写应用软件
B)只能写系统软件,不能用来写应用软件
C)不能写系统软件,只能用来写应用软件
D)既不能写系统软件,也不能写应用软件
二.填空题
1.C语言用函数作为程序的模块单位,便于实现程序的模块化。
2.C语言允许直接访问物理地址,能进行位操作。
3.用C语言编写的程序,每一个语句和数据定义的结尾必须要有一个分号。
4.每个C程序中必须有一个main()函数。
5.C程序中的函数体由{}括起来。
6.C程序中的“\n”表示在程序运行中换行。
7.C程序中,“/*⋯⋯*/”表示注释部分。
8.C程序中,一个函数由函数首部和函数体组成。
9.一个C程序总是从main()函数开始执行的,不论该函数在整个程序中的位置如何。
10.在纸上编好一个C源程序后,要经过编辑、编译、连接、运行这几个步骤进行上机运行
判断题
1.C语言不具有低级语言的特性。
(错)
2.C语言之所以也被称为中级语言,是因为它比高级语言的功能要少,而比低级语言的功能多。
(错)
3.C语言与其他高级语言一样具有结构化的控制语句。
(对)
4.C语言允许直接访问物理地址。
(对)
5.每一个C程序必须有一个main函数。
(对)
6.C程序的语句最后应有一个分号。
(对)
7.C程序中的main函数必须放在整个程序的最前头。
(错)8.计算机高级语言对源程序进行翻译有两种方式:
编译和解释。
(对)四.编程题
1.编写一个C程序,输出以下信息:
Iamastudent.
#include
\n”);
2.编写一个C程序,输入a、b两个数,输出其中大的数。
(只用一个主函数)
#include
{
inta,b;
/*注意输入两个数之间用逗号分隔*/
printf(“Pleaseinputa,b:
\n”);scanf(“%d,%d”,&a,&b);
if(a>b)
printf(“%d”,a);
elseprintf(“%d”,b);
}
3.编写一个C程序,输入a、b、c三个数,输出其中最大数。
(只用一个主函数)#include
voidmain()
{
inta,b,c,max;
printf(“Pleaseinputa,b,c:
\n”);scanf(“%d,%d,%d”,&a,&b,&c);
max=a;if(a
printf(“Thelargestnumberis%d”,max);
}
第二章数据与运算
.单选题
1.C语言中最简单的数据类型包括(B)。
A)整型、实型、逻辑型B)整型、实型、字符型
C)整型、字符型、逻辑型D)字符型、实型、逻辑型
2.C语言中运算对象必须是整型的运算符是(D)。
A)*B)/C)=D)%
3.在C程序中,以下不正确的叙述是(D)。
A)逗号运算符的优先级最低
B)ABC和abc是两个不同的变量
C)若a和b类型相同,在执行了赋值表达式a=b后,b中的值将放入a中,而b的值不变
D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数据4.设有intx=8,表达式x++*1/3的值是(A)。
A)2B)3C)8D)9
5.若m,x,y,z都是整型变量,则计算表达式m=(x=5,y=10,z=25)执行后,m的值为(C)。
A)5B)10C)25D)40
6.设变量i是int类型,f是float型,d是double型,执行表达式5+'i'-f*d,其结果的数据类型为(B)。
A)int型B)double型C)float型D)非法表达式
7.设变量i是int类型,执行语句i='A'+2.5后,正确的叙述是(C)。
A)i的值是字符DB)i的值是字符A的ASCII值加上2.5
C)i的值是字符A的ASCII值加上2D)非法表达式8.下列是用户自定义标识符的是(B)。
A)intB)_xyC)2xyD)3-xy
9.下面与x=y++完全等价的表达式是(A)。
A)x=y,y=y+1B)x=x+1,y=xC)x=++yD)x+=y+1
10.已知各变量的类型说明如下:
C)k=(a=8,b=6,a-b)D)a+=a-=(b=2)*(a=5)(D)。
B)'123'只能赋值给字符数组
D)c2是字符变量,只能赋以字符常量
intk,a,b;longw=8;floatx=2.56;以下不符合C语言语法的表达式是(A)。
A)x%5B)w-=5
11.运行以下程序段时编译出错,其原因是charc1='a',c2='123';printf("%c,%d\n",c1,c2);
A)字符串要用"123"表示
C)c2是字符变量,不能用%d格式输出
12.若定义floata;,现要从键盘输入a数据,其整数位为3位,小数位为2位,则选用(A)。
A)scanf("%6f",&a);B)scanf("%5.2f",a);
C)scanf("%6.2f",&a);D)scanf("%f",a);
C)6.0D)7.0
C语言中错误的表达式是(A)。
13.若定义doublet;,则表达式t=1,t+5,++t的值为(B)。
A)1.0B)2.0
B)w+=2
D)a+=a-=(b=4*(a=3))
14.已知各变量的类型说明如下,则intk,a,b;unsignedlongw=5;doublex=1.42;
A)x%(-3)
C)k=(a=2,b=3,a+b)15.以下程序段的运行结果是(C)。
inta=0,b=0,c=0;if(a&&++b)c++;printf("%d,%d\n",b,c);
A)1,1B)1,0
二.填空题
1.在C语言中,一个float型数据在内在中所占的字节数为4,一个double型数据在内在中所占的字节数是8。
2.下面程序的输出结果是28。
main()
{
inta=2,b=3,c=4;
a*=16+(b++)-(++c);
printf(“%d”,a);
}
3.下面程序的输出结果是5。
main()
{
intx=17,y=26;
printf(“%d”,y/=(x%=6));
}
4.执行下面程序段后,c3中的值是0。
intc1=1,c2=2,c3;
c3=1.0/c2*c1;
5.进行下列变量定义后,表达式a*b+d-c的类型是double。
chara;
intb;
floatc;
doubled;6.下面程序的输出结果是8,10。
main(){
intx=010,y=10;printf(“%d,%d\n”,x,y);
}7.下面程序的输出结果是12。
main()
{
intx=3,y=5;
printf(“%d\n”,x=(x--)*(--y));
}
8.已知字母A的ASCII码是十进制数65,设c为字符型变量,则表达式c='A'+'5'-'2'的值为D或68。
9.下面程序的输出结果是52。
main()
{
intx=065;
printf(“%d\n”,--x);/
}10.下面程序的输出结果是25,21,37。
main(){inta,b,c;a=25;b=025;c=0x25printf(“%d,%d,%d\n”,a,b,c);
}11.下面程序的输出结果是48。
main(){
intx=0110;printf(“%x\n”,x);
}12.下面程序的输出结果是20200.000000。
main()
{
charc;intn=100;
floatf=10;
doublex;
x=f*=n/=(c=5);
printf(“%d%f\n”,n,x);
}
13.写出下面程序的运行结果。
(请用∪表示空格)
main()
{
charc1='a',c2='b',c3='c',c4='\101',c5='\116';
printf(“a%c∪b%c\tc%c\tabc\n”,c1,c2,c3);
printf(“\t\b%c∪%c\n”,c4,c5);
}
程序的运行结果是:
aa∪bb∪∪∪cc∪∪∪∪∪∪abc
A∪N
14.下面程序的运行结果是9,11,9,10。
main()
{
inti,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(“%d,%d,%d,%d\n”,i,j,m,n);
}
15.以下程序的运行结果是11.50。
#include
voidmain()
{
inti=5,j=9;
floatx=2.3,y=4.5;
printf("%8.2f\n",i%(int)(x+y)*j/2/3+y);
}
三.判断题
1.C语言中,字符常量可以用单引号或双引号括起来。
(错)
2.C语言中,字符常量只能包含一个常量(字符)。
(对)
3.在C语言中,字符串常量隐含处理成以‘\0'结尾。
(对)
4.下面程序段的输出结果是9。
(错)
inta=9;
printf(“%o\n”,a);(注意:
%o中的o是字母o,不是数字0)
5.C语言中,用户所定义的标识符允许使用关键字。
(错)
6.C语言中,用户所定义的标识符中,大、小字母代表不同标识。
(对)
7.C语言中,符号常量的值在程序运行过程中可以改变。
(错)
8.C语言中,不要求对程序中所用到的变量进行强制定义。
(错)
9.C语言中,一个整数如果其值在-323768~32767范围内,认为它是int型,只能赋值给int型变量。
(错)
10.设一个C系统的float型有效数字是7位,则超过7位数的运算是不准确的。
(对)
四.计算题
1.求下面表达式的值。
1)x+a%3*(int)(x+y)%2/4设x=2.5,a=7,y=4.7
第1步:
(int)(x+y)=(int)(7.2)=7
第2步:
a%3*7%2/4=7%3*7%2/4=1*7%2/4=1/4=0
第3步:
x+0=x=2.5(计算机显示为2.500000)
2)(float)(a+b)/2+(int)x%(int)y设a=2,b=3,x=3.5,y=2.5
第1步:
(float)(a+b)/2=(float)(2+3)/2=(float)(5)/2=5.0/2=2.5第2步:
(int)x%(int)y=(int)(3.5)%(int)(2.5)=3%2=1第3步:
2.5+1=3.5(计算机显示为3.500000)2.写出下面赋值表达式运算后a的值,设原来a=12,n=5。
1)a+=aa=a+a=12+12=24
2)a-=2a=a-2=12-2=10
3)a*=2+3a=a*(2+3)=12*5=60
4)a/=a+aa=a/(a+a)=12/24=0注意a是整型
5)a%=(n%=2)已知:
n=5a=0
6)a+=a-=a*=a从右向左解:
a=a*a=144;a=a-a=0;a=a+a=0
五.编程题
1.要将“China”译成密码,规律是:
用原来的字母后面第4个字母代替原来的字母。
例如,“A”用字母“E”来替代。
因此,“China”应译为“Glmre”。
编程:
用赋初值的方法使c1.c2.c3.c4.c5这五个变量的值分别为‘C'、‘h'、‘i'、‘n'、‘a',经过运算,这五个变量分别变为‘G'、‘l'、‘m'、‘r'、‘e',并输出。
#include
{
charc1='C',c2='h',c3='i',c4='n',c5='a';
c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;
printf(“passwordisn”,c1,c2,c3,c4,c5);
}运行结果:
passwordisGlmre也可以用循环和数组:
#include
voidmain()
{
charc[]={“China”};printf(“passworids“);
for(inti=0;i<=4,i++)printf(“%c”,c[i]+=4);
printf(“\n”);
c1.c2这两个变量的值分别为97和98,然后分别按整
}2.请编程,要求用赋初值的方法使型和字符型输出。
#include
voidmain()
{
charc1=97,c2=98;
printf(“%d,%dn”,c1,c2);
printf(“%c,%cn”,c1,c2);
}
3.编写程序,从键盘输入三个单精度数a、b、c,计算总和、平均值、x=a2+b2+c2的值,并计算x平方根的值。
所有运行数据保留三位小数,第四位四舍五入。
#include
#include
voidmain()
{
doublea,b,c,total,average,square,squareroot;printf("请输入三个单精度实数:
");scanf("%f%f%f",&a,&b,&c);
total=a+b+c;average=total/3.0;square=a*a+b*b+c*c;squareroot=sqrt(square);printf("三个数的和=%-15.3f,三个数的平均值=%-15.3f\n",total,average);printf("三个数的平方和x=%.3f,x的平方根=%.3f\n",square,squareroot);
}运行结果:
请输入三个单精度实数:
1.234.567.89三个数的和=13.680,三个数的平均值=4.560三个数的平方和x=84.559,x的平方根=9.196
4.输入三角形的三个边长,计算并输出三角形的面积。
#include
#include
voidmain()
{
floata,b,c,k,area;
printf("请输入三角形三条边的边长:
");scanf("%f%f%f",&a,&b,&c);
if((a+b<=c)||(a+c<=b)||(b+c<=a))
printf("您输入的三条边无法构成三角形。
\n");
else{
k=(a+b+c)/2;area=sqrt(k*(k-a)*(k-b)*(k-c));/*函数sqrt(x)是求x的平方根*/
printf("该三角形的面积是%6.2f\n",area);
}}
5.输入两个长整型数,输出它们(整数除的)商和余数
#include
voidmain()
{
longa1,a2,a3,a4;
printf("请输入两个整数:
");
scanf("%ld%ld",&a1,&a2);
a3=a1/a2;
a4=a1%a2;
printf("两数进行整数除的商是%ld,余数是%ld\n",a3,a4);
}
运行结果:
请输入两个整数:
654321789
两数进行整数除的商是829,余数是240
6.输入两个整数,输出它们(实数除)的商,并输出商的第二位小数位(例如:
15/8.0=1.875,1.875的第二位小数位是7)。
#include
voidmain()
{
inta,b,c;
floatf;
printf("请输入两个整数:
");
scanf("%d%d",&a,&b);
f=1.0*a/b;
c=(int)(f*100)%10;
printf("两数进行实数除,商是%f,商的第二位小数位是%d\n",f,c);
}
运行结果:
请输入两个整数:
158
两数进行实数除,商是1.875000,商的第二位小数位是7
7.输入一个(unsigned类型)无符号整数,分别输出它的低四位和高四位。
#include
{
unsignedu,high4,low4;
printf("请输入一个无符号整数:
");
scanf("%u",&u);
low4=(u&0xf);/*u的低四位保留原值,其余位置0*/high4=(u&0xf000)>>12;/*u的高四位保留原值,其余位置0,并右移12位*/printf("%u的十六进制是%x\n",u,u);
printf("十六进制表示%u的低四位是%x,高四位是%x\n",u,low4,high4);
}
运行结果:
请输入一个无符号整数:
54332
54332的十六进制是d43c
十六进制表示54332的低四位是c,高四位是d
8.输入两个小写字母分别赋值给字符变量ch1与ch2,将它们转换成大写字母,并交换ch1与ch2的值,最后输出ch1与ch2的值。
#include
voidmain()
{
charc1,c2,t;
printf("请输入两个半角的小写英文字母:
");
c1=getchar();
c2=getchar();
c1-=32;
c2-='a'-'A';/*与32等价*/
t=c1;
c1=c2;
c2=t;
printf("%c%c\n",c1,c2);
}
运行结果:
请输入两个半角的小写英文字母:
dbBD
9.输入秒数,将它转换,用小时、分钟、秒来表示。
例如输入7278秒,则输出:
2小时1
分18秒。
#include
voidmain()
{
intk;
inthour,minute,second;
printf("请输入秒数:
");
scanf("%d",&k);
hour=k/3600;
k%=3600;
minute=k/60;
second=k%60;
printf("%d小时%d分钟%d秒。
\n",hour,minute,second);
}
运行结果:
请输入秒数:
7278
2小时1分钟18秒。
10.输入两个复数的实部和虚部,输出这两个复数积的实部和虚部。
两复数的积按下面的公式计算:
(a+bi)·(c+di)=(ac-bd)+(ad+bc)i。
#include
voidmain()
{
floata,b,c,d,real,imag;
printf("请输入第一个数的实部和虚部:
");
scanf("%f%f",&a,&b);
printf("请输入第二个数的实部和虚部:
");
scanf("%f%f",&c,&d);
real=a*c-b*d;
imag=a*d+b*c;
printf("两个复数积的实部和虚部分别是%f,%f\n",real,imag);
}
运行结果:
请输入第一个数的实部和虚部:
1.12.2
请输入第二个数的实部和虚部:
3.34.4
两个复数积的实部和虚部分别是-6.050000,12.100000
第三章C程序的基本控制结构
一.单选题
1.若变量已经正确定义为float型,要通过语句scanf(“%f%f%f”,&a,&b,&c)。
给a输入10.0,n输入20.0,c输入30.0,下列不正确的输入形式是(B)。
A)10<回车>20<回车>30<回车>B)10.0,20.0,30.0<回车>
C)10.0<回车>20.030.0<回车>D)1020<回车>30<回车>
2.若有说明语句:
charc='65';则变量c(D)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 习题 上机 指引 答案