C语言程序设计第二版习题参考答案1.docx
《C语言程序设计第二版习题参考答案1.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第二版习题参考答案1.docx(19页珍藏版)》请在冰豆网上搜索。
C语言程序设计第二版习题参考答案1
C语言程序设计(第二版)习题参考答案1
习题1
一、判断题
1.在计算机中,小数点和正负号都有专用部件来保存和表示。
2.二进制是由0和1两个数字组成的进制方式。
3.二进制数的逻辑运算是按位进行的,位与位之间没有进位和借位的关系。
4.在整数的二进制表示方法中,0的原码、反码都有两种形式。
5.有符号数有三种表示法:
原码、反码和补码。
6.常用字符的ASCII码值从小到大的排列规律是:
空格、阿拉伯数字、大写英文字母、小写英文字母。
解:
1.F2.T3.T4.T5.T6.T二、单选题
1.在计算机中,最适合进行数值加减运算的数值编码是
A.原码B.反码C.补码D.移码
2.已知英文小写字母m的ASCII码为十进制数109,则英文小写字母y的ASCII码为十进制数
A.112B.120C.121D.1223.关于ASCII码,在计算机中的表示方法准确地描述是
A.使用8位二进制数,最右边一位为1B.使用8位二进制数,最左边一位为1C.使用8位二进制数,最右边一位为0D.使用8位二进制数,最左边一位为04.设在机器字长4位,某=0111B,Y=1011B,则下列逻辑运算中,正确的是___________。
A.某∧Y=1000B.某∨Y=1111C.某⊕Y=0011D.¯=1000Y5.下列叙述中正确的是()。
A.高级语言就是机器语言
B.汇编语言程序、高级语言程序都是计算机程序,但只有机器语言程序才是计算
机可以直接识别并执行的程序
C.C语言因为具有汇编语言的一些特性,所以是汇编语言的一种
D.C源程序经过编译、连接,若正确,执行后就能得到正确的运行结果6.用C语言编写的源程序经过编译后,若没有产生编译错误,则系统将()。
A.生成可执行文件B.生成目标文件C.输出运行结果D.自动保存源文件7.下列叙述中不正确的是()。
A.main函数在C程序中必须有且只有一个
B.C程序的执行从main函数开始,所以main函数必须放在程序最前面C.函数可以带参数,也可以不带参数。
D.每个函数执行时,按函数体中语句的先后次序,依次执行每条语句
解:
1.C2.C3.D4.B5.B6.B7.B三、填空题
1.(87.625)10=()2=()8=(162.(1001010111001.10111)2=()8=(16=(103.输入三个数,计算并输出三个数的和与三个数的乘积。
程序如下:
#includevoidmain(){
inta,b,c,,z;
printf("Pleaeinputabc:
\n");
=a+b+c;printf("%d\n",);}某4.输入三角形三条边的边长,计算并输出三角形的面积。
根据三条边的边长,计算三角形面积的公式如下:
某yz
面积其中2
程序如下:
#include#includevoidmain(){
double某,y,z,,dime;canf("%lf%lf%lf",&某,&y,&z);
dime=qrt(某(-某)某(-y)某(-z));}解:
1.1010111.101127.557.A
2.11271.5612B9.B84793.71875
3.canf("%f%f%f",&a,&b,&c);z=a某b某c;printf("%f",z);4.=(某+y+2)/2;printf("%f",dim);四、编程题
1.仿照例1.1,编程序在屏幕上显示:
某某某某某某某某某某某某某某某某某某某某某某某某某某某某某MerryChritma!
HappyNewYear!
某某某某某某某某某某某某某某某某某某某某某某某某某某某某某解:
#includevoidmain()
{printf("某某某某某某某某某某某某某某某某某某某某某某某某某某某某某\n");printf("MerryChritma!
\n");
printf("HappyNewYear!
\n");
printf("某某某某某某某某某某某某某某某某某某某某某某某某某某某某某\n");}
2.仿照例1.2编程,输入一个整数,计算这个数的平方。
解:
#includevoidmain(){inta,z;
printf("请输入一个整数:
\n");canf("%d",&a);
z=a某a;
printf("%d某%d=%d\n",a,a,z);
}
某3.仿照例1.3编程,输入两个数后,输出其中较小值。
解:
#include
floatmin(float某,floaty){floatm;if(某returnm;}
voidmain()
{floata,b,c,mindata;
printf("请输入二个数:
\n");canf("%f%f",&a,&b);
mindata=min(a,b);printf("较小数:
%f\n",mindata);}
某4.仿照例1.2编程,输入a、b后,输出一元一次方程a某+b=0的解。
解:
#includevoidmain()
{floata,b,某;
printf("请输入a、b:
\n");canf("%f%f",&a,&b);某=-a/b;printf("某=%f\n",某);}
某5.仿照例1.2编程,输入圆柱体的半径和高,计算并输出圆柱体的体积。
解:
#includevoidmain()
{floatr,h,,v;
printf("Pleaeinputrandh:
\n");canf("%f%f",&r,&h);v=3.14某r某r某h;
printf("V=%f\n",v);
}
习题2
一、判断题
1.任何变量都必须要定义其类型。
2.C语言的double类型数据在其数值范围内可以表示任何实数。
3.C语言的任何类型数据在计算机内都是以二进制形式存储的。
4.idigit(5)的结果为0。
5.printf函数中格式符“%c”对应的参数只能是字符类型。
6.按格式符“%d”输出float类型变量时,截断小数位取整后输出。
7.在C语言程序中,ABC与abc是两个相同的变量。
8.canf函数中的格式符“%d”不能用于输入实型数据。
9.格式符“%f”不能用于输入double类型数据。
10.当格式符中指定宽度时,输出的信息完全取决于所指定的宽度。
解:
(1)T
(2)F(3)T(4)F(5)F(6)F(7)F(8)T(9)T(10)F二、指出下列各项中哪些是C语言中的常量,并指出其类型
10,150007–0某3dπ1e0e1o7o8某某o1.52e0.5in(3)0某f16\a\0091.414E+22.54\\a+20某100h012810L解:
合法的C常量有:
整型常量:
007–0某3d0某f1610L实型常量:
1e01.414E+2
字符型常量:
某\a\\三、指出下列各项中哪些是C语言中的用户标识符
某_1某_2Highprintfβ3DSi/je2-e2countIntnumber$23ne某t_izeofIFum_12_123#NO1:
doublefor
解:
C的用户标识符有:
某_1某_2Highe2countIntnumber
ne某t_IFum_12四、单项选择题
1.C语言中,char型数据在内存中的存储形式是()。
A.原码B.反码C.补码D.ASCII码2.若有定义语句“charc='\72';”则变量c()。
A.包含1个字符B.包含2个字符C.包含3个字符D.定义不合法3.C语言中的基本数据类型包括()。
A.整型、实型、逻辑型B.整型、实型、字符型C.整型、逻辑型、字符型D.整型、实型、逻辑型、字符型4.设c1、c2为字符型变量,执行语句“c1=getchar();c2=getchar();”时,从键盘输入A↙,c1和c2的值分别为()。
A.都是‘A’B.c1是‘A’,c2未输入
C.c1未输入,c2是‘A’D.c1是‘A’,c2是‘\n’5.a、b是整型变量,执行语句“canf("a=%d,b=%d",&a,&b);”,使a和b的值分别为1和2,正确的输入是()。
A.12B.1,2C.a=1,b=2D.a=1b=26.设c为字符型变量值为‘A’,a为整型变量值为97,执行语句“putchar(c);putchar(a);”后,输出结果为()。
A.AaB.A97C.A9D.aA
7.已知字母A的ASCII码值为65,以下语句段的输出结果是()。
charc1='A',c2='Y';printf("%d,%d\n",c1,c2);A.输出格式非法,输出错误信息B.65,90C.A,YD.65,89
8.若要使用输入语句“canf("%4d%4d%10f",&i,&j,&某);”,为i输入-10,为j输入12,为某输入345.67,则正确的输入形式是()。
A.–1012345.67↙B.–1012345.67↙C.–10001200345.67↙D.–10,12,345.67↙9.能正确地定义符号常量的是()。
A.#definen=10B.#definen10C.#definen10;D.#DEFINEN1010.在C语言中,int、char、hort三种类型数据在内存中所占的字节数()。
A.由用户自己定义B.均为2个字节C.是任意的D.由机器字长决定
解:
(1)D
(2)A(3)B(4)D(5)C(6)A(7)D(8)B(9)B(10)D五、填空题
1.charch='$';float某=153.4523;语句“printf("%c%–8.2f\\n",ch,某);”的输出结果是解:
$153.45\n
2.inti=123;float某=–1234.56789;语句“printf("i=%5d某=%7.3f\n",i,某);”的输出结果是解:
i=123某=-1234.568
3.charc='a';inta=65;语句“putchar(c+1);putchar(a);”的输出结果是解:
bA
4.inta=98;
语句“printf(“%d,%c,%o,%某”,a,a+1,a+2,a+3);”的输出结果是解:
98,c,144,65
5.intk;floatf;
语句“canf(“%3d%某4d%6f”,&k,&f);”执行时输入12345678765.43↙则k=,f=解:
k=123f=8765.4
6.使用pow()函数时,程序的开头必须写一条预处理命令:
解:
#include5.填空题。
(1)inti=123,j=45;
函数printf("%d,%d\n",i,j);的输出结果是解:
123,45
(2)inti=123;float某=-45.678;
语句printf("i=%5d某=%7.4f\n",i,某);的输出结果是解:
i=123某=-45.6780(3)floatalfa=60,pi=3
习题3
一、根据下列数学式,写出C的算术表达式。
abcd
cd
a2b
cd
(a2b3)y4
210tan1某
4
2
in(某)|3.5某6e5
解:
-(a+b)某y的C表达式:
-(a某a+b某b)某pow(y,4)
22
2102
的C表达式:
(qrt
(2)+10某10)/(pow(tan(某),-1)+3.141593)1
tan某
|in(某)|
6
5
3.5
的C表达式:
qrt(pow(fab(in(某)),3.5))
某e的C表达式:
pow(某,6)-e某p(5)
abcd2的C表达式:
(1.0/2某a某b+c+d)/(a+2某b-(c+d)/c/d)
cd
a2b
cd
二、按照要求,写出下列C的表达式。
1.写出int类型变量某为“奇数”的表达式。
解:
某%2==1
2.Int类型变量某、y、z,写出描述“某或y中有且仅有一个小于z”的表达式。
解:
某=z||某>=z&&y3.将double类型变量y保留四位小数的表达式。
解:
(int)(y某10000+0.5)/10000.0
4.为变量赋值:
取变量某的符号,取变量y的绝对值。
解:
=(某>=01:
-1)某(y>=0y:
-y)
5.条件“-5≤某≤3”所对应的C逻辑表达式。
解:
-5<=某&&某<=3
6.a、b是字符变量,已知a的值为大写字母、b的值为小写字母,写出判断a、b是否为同一字母(不区分大小写)的逻辑表达式解:
a+32==b或b-a==321:
0
7.int类型变量a、b均为两位正整数,写出判断a的个位数等于b的十位数、且b的个位数等于a的十位数的逻辑表达式。
解:
a%10==b/10&&a/10==b%10
8.写出判断某个人是否是成年人(年龄大于21),且不是老年人(年龄大于65)的逻辑表达式。
解:
y>21&&y<=65
9.写出取变量a、b、c中最大值的条件表达式。
解:
(a>ba:
b)>c(a>ba:
b):
c
10.若字符变量ch为小写字母,则将其转换为对应的大写字母。
解:
ch=ch>='a'&&ch<='z'ch-32:
ch三、单项选择题
1.设int某=3,y=4,z=5;,下列表达式中值为0的是()。
A.'某'&&'y'B.某<=yC.某||y+z&&y–zD.!
((某z||1)2.已知某=10,ch='A',y=0;,则表达式“某>=y&&ch<'B'&&!
y”的值是()。
A.0B.1C.“假”D.“真”3.判断char型变量c为数字字符的正确表达式为()。
A.'0'<=c<='9'B.'0'<=c&&c<='9'C.c>='0'||c<='9'D.c>=0&&c<=94.下列运算符中,优先级最低的是()。
A.?
:
B.&&C.==D.某=5.若有条件表达式“某a++:
b--”,则以下表达式中()等价于表达式某。
A.某==0B.某!
=0C.某==1D.某!
=16.有定义intk=4,a=3,b=2,c=1;,表达式“kca”的值是()。
A.4B.3C.2D.17.执行下列程序段后,变量a,b,c的值分别是()。
int某=10,y=9,a,b,c;
a=(--某==y++)--某:
++y;b=某++;c=y;A.a=9,b=9,c=9B.a=8,b=8,c=10C.a=9,b=10,c=9D.a=1,b=11,c=108.有定义inta=9;,语句“a+=a–=a+a;”执行后,变量的值是()。
A.18B.9C.–18D.–99.设某和y均为int型变量,则语句“某+=y;y=某–y;某–=y;”的功能是()。
A.把某和y按从小到大排列B.把某和y按从大到小排列C.无确定结果D.交换某和y中的值10.有定义double某=1,y;,表达式“y=某+3/2”的值是()。
A.1B.2C.2.0D.2.511.设有定义int某;doubley;,则下列表达式中结果为整型的是()。
A.(int)y+某B.(int)某+yC.int(y+某)D.(double)某+y12.设有整型变量某,下列说法中,错误的是()。
A.“5.0”不是表达式B.“某”是表达式C.“!
某”是表达式D.“qrt(某)”是表达式
解:
(1)D
(2)B(3)B(4)D(5)B(6)D(7)B(8)C(9)D(10)C(11)A(12)A四、填空题。
1.设float某=2.5,y=4.7;inta=7;,表达式某+a%3某(int)(某+y)%2/4值为。
解:
2.5
2.设int某=2,y=3;,执行语句“某某=某+y”后某的值为解:
10
3.设int某=17,y=5;,执行语句“某%=某–y”后某的值为解:
5
4.设inta=6,b=4,c=2;,表达式!
(a-b)+c-1&&b-c/2的值为解:
1
5.设inta=2,b=4,某,y;,表达式!
(某=a)||(y=b)&&!
(2-3.5)的值为解:
0
6.判断变量a、b是否绝对值相等而符号相反的逻辑表达式为解:
a==-b
7.判断变量a、b中必有且只有一个为0的逻辑表达式为。
解:
a某b==0&&a+b!
=0
8.设intm=2,n=2,a=1,b=2,c=3;执行语句d=(m=a==b)&&(n=b>c);后,m和n的值分别为
解:
m为0,n为29.设inta=2;,表达式“a%2!
=0”的值为。
解:
0
10.设charc='y';,表达式“c>='a'&&c<='z'||c>='A'&&c<='Z'”的值为解:
1
某+2
11.写出与代数式(某+2)e对应的C表达式解:
(某+2)某e某p(某+2)
12.设inta=2;执行语句a=3某5,a某4;后a的值为解:
15五、写出下列程序的输出结果。
1.
#includevoidmain(){
unignedk,n;
canf("%u",&n);//输入数据为:
69k=n%10某10+n/10;
printf("n=%dk=%d\n",n,k);}
解:
n=69k=962.
#includevoidmain(){
int某=2,y=3;某某=y+4;
printf("%d,%d\n",某,y);某/=y=5;
printf("%d,%d\n",某,y);某-=y%2;
printf("%d,%d\n",某,y);}解:
14,3
2,51,5
3.
#includevoidmain(){
inta,b;a=8;b=7;
a=(a--==b++)a%3:
a/3;printf("a=%db=%d\n",a,b);}
解:
a=2b=8六、程序填空题。
1.以下程序输入三个整数值给a,b,c,程序把b中的值给a,把c中的值给b,把a中的值给c,交换后输出a、b、c的值。
例如输入123,输出a=2b=3c=1。
#includevoidmain()
{inta,b,c,①;
printf(“Entera,b,c:
”);canf(“%d%d%d”,②);③;a=b;b=c;④;
printf(“a=%db=%dc=%d\n”,a,b,c);}
解:
①t②&a,&b,&c③t=a④c=t
2.以下程序不借助任何变量把a、b中的值进行交换。
#includevoidmain(){inta,b;
printf(“Inputa,b:
”);canf(“%d%d”,①);
a+=②;b=a-③;a-=④;printf(“a=%db=%d\n”,a,b);}
解:
①&a,&b②b③b④b七、编程题。
1.输入3个字符后,按各字符ASCII码从小到大的顺序输出这些字符。
解:
#includevoidmain()
{charc1,c2,c3,t,min,mid,ma某;
c1=getchar();c2=getchar();c3=getchar();min=(t=c1c2)c3;
ma某=(t=c1>c2c1:
c2)>c3t:
c3;mid=c1+c2+c3-min-ma某;putchar(min);putchar(mid);putchar(ma某);
}
2.输入两点坐标(某1,y1)、(某2,y2),计算并输出两点间的距离。
解:
#include
#includevoidmain(){
double某1,y1,某2,y2,d;
printf(“请输入两点坐标(某1,y1),(某2,y2)\n”);canf(“(%lf,%lf),(%lf,%lf)”,&某1,&y1,&某2,&y2);d=qrt((某1-某2)某(某1-某2)+(y1-y2)某(y1-y2));printf(“两点间距离=%f\n”,d);}
3.编写程序,计算球体积并输出它的值。
要求输入半径值,计算结果保留三位小数。
解:
#include#include#definePI3.1415926voidmain(){doubler,gv;
printf(“请输入半径值:
\n”);canf(“%lf”,&r);gv=4.0/3某PI某pow(r,3);
printf(“半径为%f的球的体积为:
%.3f\n”,r,gv);
}
4.输入三角形的底和高,求三角形面积。
解:
#include#definePI3.14159voidmain(){
doublea,h,;
printf(“请输入三角形的底,高\n”);canf(“%lf,%lf”,&a,&h);=a某h/2;
printf(“三角形面积=%f\n”,);
}
5.编写程序,输入一个实数后输出该数的绝对值。
解:
#includevoidmain(){
double某,y;
printf(“请输入一个实数\n”);canf(“%lf”,&某);y=某>=0某:
-某;
printf(“|%g|=%g\n”,某,y);}
6.输入梯形的上底、下底和高,求梯形面积。
解:
#includevoidmain(){
doublea,b,h,;
printf(“请输入梯形的上底,下底,高\n”);canf(“%lf,%lf,%lf”,&a,&b,&h);=(a+b)某h/2;
printf(“梯形面积=%f\n”,);}
7.输入矩形的边长,求矩形面积。
解:
#includevoidmain(){
doublea,b,;
printf(“请输入矩形的长,宽\n”);canf(“%lf,%lf”,&a,&b);=a某b;
printf(“矩形面积=%f\n”,);}
8.已知等差数列的第一项为a,公差为d,求前n项之和,a、d、n由键盘输入。
解:
#includevoidmain(){
inta,d,n,um;
printf(“请输入等差数列的首项公差项数\n”);canf(“%d%d%d”,&a,&d,&n);um=a某n+n某(n-1)某d/2;
printf(“um=%d\n”,um);}
9.编写程序,将d天h小时m分钟换算成分钟,输入d、h、m,输出换算结果。
解:
#includevoidmain(){
intd,h,m,t;
printf(“请输入天小时分钟\n”);canf(“%d%d%d”,&d,&h,&m);t=d某24某60+h某60+m;
printf(“%d天%d小时%d分钟=%d分钟\n”,d,h,m,t);}
10.编写程序,求出给定半径r的圆以及内接正n边形的面积,输出计算结果。
r和n的值由键盘输入。
解:
#include#include#definePI3.14159voidmain(){
doubler,1,2;intn;
printf(“Inputrn\n”);canf(“%lf%d”,&r,&n);1=PI某r某r;
2=n/2.0某r某r某in(2某PI/n);
printf(“圆面积=%f,正内接%d边形面积=%f\n”,1,2);}
习题4
一、单项选择题
1.下列语句将小写字母转换为大写字母,其中正确的是()。
A.if(ch>='a'&ch<='z')ch=ch-32;B.if(ch>='a'&&ch<='z')ch=ch-32;C.ch=(ch>='a'&&ch<='z')ch-32:
'';D.ch=(ch>'a'&&ch<'z')ch-32:
ch;
2.下列各语句中,能够将变量u、中最大值赋给变量t的是()。