c程序设计第三版习题参考解答全文档格式.docx
- 文档编号:18948827
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:157
- 大小:115.22KB
c程序设计第三版习题参考解答全文档格式.docx
《c程序设计第三版习题参考解答全文档格式.docx》由会员分享,可在线阅读,更多相关《c程序设计第三版习题参考解答全文档格式.docx(157页珍藏版)》请在冰豆网上搜索。
100…001(溢出)
14
long型
24
11…1110
31
00…0100…001
1614
short型
100…000011001
8
15
signedchar(8位)
100011001
11111110
00000001(溢出)
unsignedint型
8
11…110
100…001
unsignedlong型
24
unsignedshort型
8
unsignedchar型
00011001
00000001
其中int和short类型,其取值范围是-32768~32767。
32769在这两种类型中实际表示负数,它是一个负数的补码,对其再求一次补码可得其真值,即-(65536-32769)=-32767。
char和unsignedchar为8位,若将int或long类型数据赋给这种类型,则截取数据低8位。
同理,若将long赋给int,则截取低16位。
3.5字符常量和字符串常量有什么区别?
字符常量是一个字符,用单引号括起来。
字符串常量是由0个或若干个字符组合而成,用双引号括起来,存储时自动在字符串最后加一个结束符号’\0’。
3.6写出以下程序运行的结果:
{charcl=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’;
printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3);
printf(“\t\b%c%c”,c4,c5);
程序运行的结果为:
aabbccabc
AN
3.7要将“China”译成密码,密码规律是:
用原来的字母后面第4个字母代替原来的字母。
例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。
因此,“China”应译为“Glmre”。
请编一程序,用赋初值的方法使c1,c2,c3,c4,c5这5个变量的值分别为’C’,’h’,’i’,’n’,’a’,经过运算,使c1,c2,c3,c4,c5的值分别变为’G’,’l’,’m’,’r’,’e’,并输出。
{charcl=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’;
c1+=4;
c2+=4;
c3+=4;
c4+=4;
c5+=4;
printf(“密码是%c%c%c%c%c\n,c1,c2,c3,c4,c5);
运行结果:
密码是Glmre
3.8例2.6能否改成如下:
{intc1,c2;
(原为charc1,c2)
c1=97;
c2=98;
printf(“%c%c\n”,c1,c2);
printf(“%d%d\n”,c1,c2);
可以。
因为在可输出的字符范围内,用整型和用字符型作用相同。
3.9求下面算术表达式的值。
x+a%3*(int)(x+y)%2/4
设x=2.5,a=7,y=4..7
(float)(a+b)/2+(int)x%(int)y
设a=2,b=3,x=3.5,y=2.5
(1)2.5
(2)3.5
3.10写出程序运行的结果。
{inti,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(“%d,%d,%d,%d”,i,j,m,n);
运行结果为:
9,11,9,10
3.11写出下面赋值的结果。
格中写了数值的是要将它赋给其他类型的变量,将所有空格填上赋值后的数值。
int
99
42
char
‘d’
ⅹ
unsignedint
76
65535
float
53.65
longint
68
100
53
-1
‘c’
‘L’
‘5’
‘D’
‘*’
99.000000
100.000000
76.000000
68.000000
42.000000
65535.000000
3.12出下面表达式运算后a的值,设原来a=12。
设a和n都已定义为整型变量。
(1)a+=a
(2)a-=2
(3)a*=2+3(4)a/=a+a
(5)a%=(n%=2),n的值等于5(6)a+=a-=a*=a
(1)24
(2)10
(3)60(4)0
(5)0(6)0
第4章最简单的C程序设计——顺序程序设计
4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51247,n=128765,c1=’a’,c2=’b’,想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。
要求输出的结果如下:
a=□3□□b=□4□□c=□5
x=1.200000,y=2.400000,z=-3.600000
x+y=□3.60□□y+z=-1.20□□z+x=-2.40
u=□51247□□n=□□□128765
c1=’a’□or□97(ASCII)
c2=’b’□or□98(ASCII)
{
inta,b,c;
longintu,n;
floatx,y,z;
charc1,c2;
a=3;
b=4;
c=5;
x=1.2;
y=2.4;
z=-3.6;
u=51247;
n=128765;
c1=’a’;
c2=’b’;
printf(“a=%2d□□b=%2d□□c=%2d\n”,a,b,c);
printf(“x=%.6f,y=%.6f,z=%.6f\n”,x,y,z);
printf(“x+y=□%.2f□□y+z=%.2f□□z+x=%.2f\n”,x+y,y+z,z+x);
printf(“u=%6ld□□n=%9ld\n”,u,n);
printf(“c1=’%c’or%d(ASCII)\n”,c1,c1);
printf(“c2=’%c’or%d(ASCII)\n”,c2,c2);
4.5请写出下面程序的输出结果:
{inta=5,b=7;
floatx=67.8564,y=-789.124;
charc=’A’;
longn=1234567;
unsignedu=65535;
printf(“%d%d\n”,a,b);
printf(“%3d%3d\n”,a,b);
printf(“%f,%f\n”,x,y);
printf(“%-10f,%-10f\n”,x,y);
printf(“%8.2f,%8.2f,%4f,%4f,%3f,%3f\n”,x,y,x,y,x,y);
printf(“%e,%10.2e\n”,x,y);
printf(“%c,%d,%o,%x\n”,c,c,c,c);
printf(“%ld,%lo,%x\n”,n,n,n);
printf(“%u,%o,%x,%d\n”,u,u,u,u);
printf(“%s,%5.3s\n”,”COMPUTER”,”COMPUTER”);
5□7
□□5□□7
67.856400,-789.124023
67.856400□,-789.124023
□□□67.86,□□-789.12,67.8564,-789.1240,67.856400,-789.124023
6.785640e+01,□□-7.9e+02
A,65,101,41
1234567,4553207,d687
65535,177777,ffff,-1
COMPUTER,□□COM
可以发现,输出数据中若有负号、e和小数点,这些字符也占位。
4.6用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’。
问在键盘上如何输入?
#include<
stdio.h>
voidmain()
inta,b;
floatx,y;
charc1,c2;
scanf(“a=%db=%d”,&
a,&
b);
scanf(“%f%e”,&
x,&
y);
scanf(“%c%c”,&
c1,&
c2);
a=3□b=7
□8.5□71.82
□A□a
4.7下面的scanf函数输入数据,使a=10,b=20,c1=’A’,c2=’a’,x=1.5,y=-3.75,z=67.8,请问在键盘上如何输入数据?
scanf(“%5d%5d%c%c%f%f%*f,%f”,&
c1,&
c2,&
x,&
y,&
z);
inta,b;
floatx,y,z;
scanf(“%5d%5d%c%c%f%f%*f,%f”,&
printf(“a=%d,b=%d,c1=5c,c2=%c,x=%6.2f,y=6.2f,z=6.2f\n”),a,b,c1,c2,x,y,z);
运行情况如下:
□□□10□□□20Aa1.5–3.75□1.5,67.8(此行为输入的数据,其中□为空格)
a=10,b=20,c1=A,c2=a,x=1.50,y=-3.75,z=67.80(此行为输出)
说明:
按%5d格式的要求输入a和b时,要先键入三个空格,然后再键入10与20。
%*f是用来禁止赋值的。
在输入时,对应于%*f的地方,随意打入了一个数1.5,该值不会赋给任何变量。
4.8圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。
用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。
请编程序。
floatpi,h,r,l,s,sq,vq,vz;
pi=3.1415926;
printf(“请输入圆半径r,圆柱高h:
\n”);
scanf(“%f,%f”,&
r,&
h);
l=2*pi*r;
s=r*r*pi;
sq=4*pi*r*r;
vq=3.0/4.0*pi*r*r*r;
vz=pi*r*r*h;
printf(“圆周长为:
l=%6.2f\n”,l);
printf(“圆面积为:
s=%6.2f\n”,s);
printf(“圆球表面积为:
sq=%6.2f\n”,sq);
printf(“圆球体积为:
sv=%6.2f\n”,vq);
printf(“圆柱体积为:
sz=%6.2f\n”,vz);
请输入圆半径r,圆柱高h:
1.5,3↙
圆周长为:
l=9.42
圆面积为:
s=7.07
圆球表面积为:
sq=28.27
圆球体积为:
sv=7.95
圆柱体积为:
sz=21.21
4.9输入一个华氏温度,要求输出摄氏温度,公式为C=(5/9)(F-32)
输出要有文字说明,取2位小数。
{floatc,f;
printf(“请输入一个华氏温度:
scanf(“%f”,&
f);
c=(5.0/9.0)*(f-32);
/*注意5和9要用实型表示,否则5/9的值为0*/
printf(“摄氏温度为:
%5.2f\n”,c);
};
请输入一个华氏温度:
78↙
摄氏温度为:
25.56
第5章选择结构程序设计
5.2语言中如何表示“真”和“假”?
系统如何判断一个量的“真”和“假”?
设有一个逻辑表达式,若其结果为“真”,则以1表示;
若其结果为“假”,则以0表示。
但是判断一个逻辑量的值时,以0代表“真”,以非0代表“假”。
例如3&
&
5的值为“真”,系统会给出3&
5的值为1。
5.3写出下面各逻辑表达式的值。
设a=3,b=4,c=5。
(1)a+b>
c&
b==c
(2)a||b+c&
b-c
(3)!
(a>
b)&
!
c||1
(4)!
(x=a)&
(y=b)&
(5)!
(a+b)+c-1&
b+c/2
(1)0
(2)1
(3)1
(4)0
(5)1
5.4有3个整数a,b,c,由键盘输入,输出其中最大的数。
方法一:
程序如下:
{inta,b,c;
printf(“请输入3个整数:
”);
scanf(“%d,%d,%d”,&
if(a<
if(b<
printf(“max=%d\n”,c);
else
printf(“max=%d\n”,b);
elseif(a<
printf(“max=%d\n”,c);
else
printf(“max=%d\n”,a);
请输入3个整数:
12,34,9↙
max=34
方法二:
使用条件表达式,可以使程序更简明,清晰。
{inta,b,c,temp,max;
temp=(a>
b)?
a:
b;
/*将a和b中的大者存入temp中*/
max=(temp>
c)?
temp:
c;
/*将a和b中的大者与c比较,取最大者*/
printf(“3个整数中最大数是%d\n”,max);
方法三:
a>
b?
c?
a:
c):
(b>
b:
12,34,9↙
3个整数的最大数是34。
5.5有一函数:
写一程序,输入x值,输出y值。
程序如下
{intx,y;
printf(“输入x:
scanf(“%d”,&
x);
if(x<
1)/*x<
1*/
{y=x;
printf(“x=%d3d,y=x=%d\n”,x,y);
}
elseif(x<
10)/*1≤x<
10*/
{y=2*x-1;
printf(“x=%3d,y=2*x-1=%d\n”,x,y);
else/*x≥10*/
{y=3*x-11;
printf(“x=%3d,y=3*x-11=%d\n”,x,y);
输入x:
4↙
x=4,y=2*x-1=7
-1↙
x=-1,y=x=-1
20↙
x=20,y=3*x-11=49
5.6给出一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。
90分以上为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。
#include"
stdio.h"
floatscore;
chargrade;
printf("
请输入学生成绩:
"
);
scanf("
%f"
&
score);
while(score>
100||score<
0)
{
\n输入有误,请重输"
switch((int)(score/10))
case10:
case9:
grade='
A'
;
break;
case8:
B'
case7:
C'
case6:
D'
case5:
case4:
case3:
case2:
case1:
case0:
E'
\n成绩是%5.1f,相应的等级是%c。
\n"
score,grade);
5.7给定一个不多于5位的正整数,要求:
①求它是几位数;
②分别打印出每一位数字;
③按逆序打印出各位数字。
例如原数为321,应输出123。
{
longintnum;
intindiv,ten,hundred,thousand,ten_thousand,place;
/*分别代表个位,十位,百位,千位,万位和位数*/
printf(“请输入一个整数(0~99999):
scanf(“%ld”,&
num);
if(num>
9999)
place=5;
elseif(num>
999)
place=4;
99)
place=3;
elseif(num>
9)
place=2;
elseplace=1;
printf(“place=%d\n”,place);
printf(“每位数字为:
ten_thousand=num/10000;
thousand=(int)(num-ten_thousand*10000)/1000;
hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;
ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;
indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);
switch(place)
{case5:
printf(“%d,%d,%d,%d,%d”,ten_thousand,thousand,hundred,ten,indiv);
printf(“\n反序数字为:
printf(“%d%d%d%d%d\n”,indiv,ten,hundred,thousand,ten_thousand);
case4:
printf(“%d,%d,%d,%d”,thousand,hundred,ten,indiv);
printf(“\n反序数字为:
printf(“%d%d%d%d\n”,indiv,ten,hundred,thousand);
case3:
printf(“%d,%d,%d”,hundred,ten,indiv);
printf(“%d%d%d\n”,indiv,ten,hundred);
case2:
printf(“%d,%d”,ten,indiv);
printf(“%d%d\n”,indiv,ten);
case1:
printf(“%d”,indiv);
printf(“%d\n”,indiv);
请输入一个整数(0~99999):
98765↙
位数=5
每位数字为:
9,8,7,6,5
反序数字为:
56789
5.8企业发放的奖金根据利润提成。
利润I低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元(100000<
I≤200000)时,其中10万元按10%提成,高于10万元的部分,可提成7.5%;
200000
<
I≤400000时,其中20万元仍按上述办法提成(下同),高于20万元的部分按5%提成;
400000<
I≤600000时,高于40万元的部分按3%提成;
600000<
I≤1000000时,高于60万的部分按1.5%提成;
I>
1000000时,超过100万的部分按1%提成。
从键盘输入当月利润I,求应发放奖金总数。
要求:
(1)用if语句编程序;
(2)用switch语句编程序。
计算利润时,要特别注意不同利润的不同提成比例。
例如,利润为15万元,其中由10万元按10%的比例提成,另外5万元则按7.5%提成。
用i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 第三 习题 参考 解答