《C语言程序设计》课后习题答案第四版谭浩强.docx
《《C语言程序设计》课后习题答案第四版谭浩强.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》课后习题答案第四版谭浩强.docx(170页珍藏版)》请在冰豆网上搜索。
《C语言程序设计》课后习题答案第四版谭浩强
第1章程序设计和C语言1
1.1什么是计算机程序1
1.2什么是计算机语言1
1.3C语言的发展及其特点3
1.4最简单的C语言程序5
1.4.1最简单的C语言程序举例6
1.4.2C语言程序的结构10
1.5运行C程序的步骤与方法12
1.6程序设计的任务14
1-5#include
intmain()
{printf("**************************\n\n");
printf("VeryGood!
\n\n");
printf("**************************\n");
return0;
}
1-6#include
intmain()
{inta,b,c,max;
printf("pleaseinputa,b,c:
\n");
scanf("%d,%d,%d",&a,&b,&c);
max=a;
if(max
max=b;
if(maxmax=c;
printf("Thelargestnumberis%d\n",max);
return0;
}
第2章算法——程序的灵魂16
2.1什么是算法16
2.2简单的算法举例17
2.3算法的特性21
2.4怎样表示一个算法22
2.4.1用自然语言表示算法22
2.4.2用流程图表示算法22
2.4.3三种基本结构和改进的流程图26
2.4.4用NS流程图表示算法28
2.4.5用伪代码表示算法31
2.4.6用计算机语言表示算法32
2.5结构化程序设计方法34
习题36
第章最简单的C程序设计——顺序程序设计37
3.1顺序程序设计举例37
3.2数据的表现形式及其运算39
3.2.1常量和变量39
3.2.2数据类型42
3.2.3整型数据44
3.2.4字符型数据47
3.2.5浮点型数据49
3.2.6怎样确定常量的类型51
3.2.7运算符和表达式52
3.3C语句57
3.3.1C语句的作用和分类57
3.3.2最基本的语句——赋值语句59
3.4数据的输入输出65
3.4.1输入输出举例65
3.4.2有关数据输入输出的概念67
3.4.3用printf函数输出数据68
3.4.4用scanf函数输入数据75
3.4.5字符数据的输入输出78
习题82
3-1#include
#include
intmain()
{floatp,r,n;
r=0.1;
n=10;
p=pow(1+r,n);
printf("p=%f\n",p);
return0;
}
3-2-1
#include
#include
intmain()
{floatr5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;
p=1000;
r5=0.0585;
r3=0.054;
r2=0.0468;
r1=0.0414;
r0=0.0072;
p1=p*((1+r5)*5);//一次存5年期
p2=p*(1+2*r2)*(1+3*r3);//先存2年期,到期后将本息再存3年期
p3=p*(1+3*r3)*(1+2*r2);//先存3年期,到期后将本息再存2年期
p4=p*pow(1+r1,5);//存1年期,到期后将本息存再存1年期,连续存5次
p5=p*pow(1+r0/4,4*5);//存活期存款。
活期利息每一季度结算一次
printf("p1=%f\n",p1);//输出按第1方案得到的本息和
printf("p2=%f\n",p2);//输出按第2方案得到的本息和
printf("p3=%f\n",p3);//输出按第3方案得到的本息和
printf("p4=%f\n",p4);//输出按第4方案得到的本息和
printf("p5=%f\n",p5);//输出按第5方案得到的本息和
return0;
}
3-2-2
#include
#include
intmain()
{doubler5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;
p=1000;
r5=0.0585;
r3=0.054;
r2=0.0468;
r1=0.0414;
r0=0.0072;
p1=p*((1+r5)*5);//一次存5年期
p2=p*(1+2*r2)*(1+3*r3);//先存2年期,到期后将本息再存3年期
p3=p*(1+3*r3)*(1+2*r2);//先存3年期,到期后将本息再存2年期
p4=p*pow(1+r1,5);//存1年期,到期后将本息存再存1年期,连续存5次
p5=p*pow(1+r0/4,4*5);//存活期存款。
活期利息每一季度结算一次
printf("p1=%f\n",p1);//输出按第1方案得到的本息和
printf("p2=%f\n",p2);//输出按第2方案得到的本息和
printf("p3=%f\n",p3);//输出按第3方案得到的本息和
printf("p4=%f\n",p4);//输出按第4方案得到的本息和
printf("p5=%f\n",p5);//输出按第5方案得到的本息和
return0;
}
3-2-3
#include
#include
intmain()
{floatr5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;
p=1000;
r5=0.0585;
r3=0.054;
r2=0.0468;
r1=0.0414;
r0=0.0072;
p1=p*((1+r5)*5);//一次存5年期
p2=p*(1+2*r2)*(1+3*r3);//先存2年期,到期后将本息再存3年期
p3=p*(1+3*r3)*(1+2*r2);//先存3年期,到期后将本息再存2年期
p4=p*pow(1+r1,5);//存1年期,到期后将本息存再存1年期,连续存5次
p5=p*pow(1+r0/4,4*5);//存活期存款。
活期利息每一季度结算一次
printf("p1=%10.2f\n",p1);//输出按第1方案得到的本息和
printf("p2=%10.2f\n",p2);//输出按第2方案得到的本息和
printf("p3=%10.2f\n",p3);//输出按第3方案得到的本息和
printf("p4=%10.2f\n",p4);//输出按第4方案得到的本息和
printf("p5=%10.2f\n",p5);//输出按第5方案得到的本息和
return0;
}
3-3.
#include
#include
intmain()
{floatd=300000,p=6000,r=0.01,m;
m=log10(p/(p-d*r))/log10(1+r);
printf("m=%6.2f\n",m);
return0;
}
3-4
#include
intmain()
{intc1,c2;
c1=197;
c2=198;
printf("c1=%c,c2=%c\n",c1,c2);
printf("c1=%d,c2=%d\n",c1,c2);
return0;
}
3-5
#include
intmain()
{inta,b;
floatx,y;
charc1,c2;
scanf("a=%db=%d",&a,&b);
scanf("%f%e",&x,&y);
scanf("%c%c",&c1,&c2);
printf("a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n",a,b,x,y,c1,c2);
return0;
}
3-6
#include
intmain()
{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("passworis%c%c%c%c%c\n",c1,c2,c3,c4,c5);
return0;
}
3-7
#include
intmain()
{floath,r,l,s,sq,vq,vz;
floatpi=3.141526;
printf("请输入圆半径r,圆柱高h∶");
scanf("%f,%f",&r,&h);//要求输入圆半径r和圆柱高h
l=2*pi*r;//计算圆周长l
s=r*r*pi;//计算圆面积s
sq=4*pi*r*r;//计算圆球表面积sq
vq=3.0/4.0*pi*r*r*r;//计算圆球体积vq
vz=pi*r*r*h;//计算圆柱体积vz
printf("圆周长为:
l=%6.2f\n",l);
printf("圆面积为:
s=%6.2f\n",s);
printf("圆球表面积为:
sq=%6.2f\n",sq);
printf("圆球体积为:
v=%6.2f\n",vq);
printf("圆柱体积为:
vz=%6.2f\n",vz);
return0;
}
3-8-1
#include
intmain()
{
intc1,c2;//整型定义
printf("请输入两个整数c1,c2:
");
scanf("%d,%d",&c1,&c2);
printf("按字符输出结果:
\n");
printf("%c,%c\n",c1,c2);
printf("按ASCII码输出结果为:
\n");
printf("%d,%d\n",c1,c2);
return0;
}
3-8-2
#include
intmain()
{
charc1,c2;//定义字符型变量
inti1,i2;//定义整型变量
printf("请输入两个字符c1,c2:
");
scanf("%c,%c",&c1,&c2);
i1=c1;//赋值给整型变量
i2=c2;
printf("按字符输出结果:
\n");
printf("%c,%c\n",i1,i2);
printf("按整数输出结果:
\n");
printf("%d,%d\n",c1,c2);
return0;
}
3-8-3
#include
intmain()
{
charc1,c2;//定义为字符型
inti1,i2;//定义为整型
printf("请输入两个整数i1,i2:
");
scanf("%d,%d",&i1,&i2);
c1=i1;//将整数赋值给字符变量
c2=i2;
printf("按字符输出结果:
\n");
printf("%c,%c\n",c1,c2);
printf("按整数输出结果:
\n");
printf("%d,%d\n",c1,c2);
return0;
}
3-8
#include
intmain()
{
charc1,c2;
printf("请输入两个字符c1,c2:
");
c1=getchar();
c2=getchar();
printf("用putchar语句输出结果为:
");
putchar(c1);
putchar(c2);
printf("\n");
printf("用printf语句输出结果为:
");
printf("%c%c\n",c1,c2);
return0;
}
第4章选择结构程序设计85
4.1选择结构和条件判断85
4.2用if语句实现选择结构87
4.2.1用if语句处理选择结构举例87
4.2.2if语句的一般形式89
4.3关系运算符和关系表达式91
4.3.1关系运算符及其优先次序91
4.3.2关系表达式92
4.4逻辑运算符和逻辑表达式92
4.4.1逻辑运算符及其优先次序93
4.4.2逻辑表达式94
4.4.3逻辑型变量96
4.5条件运算符和条件表达式97
4.6选择结构的嵌套99
4.7用switch语句实现多分支选择结构102
4.8选择结构程序综合举例105
习题111
4-4-1
#include
intmain()
{
inta,b,c;
printf("请输入三个整数:
");
scanf("%d,%d,%d",&a,&b,&c);
if(a
if(bprintf("max=%d\n",c);
else
printf("max=%d\n",b);
elseif(aprintf("max=%d\n",c);
else
printf("max=%d\n",a);
return0;
}
4-4-2
#include
intmain()
{inta,b,c,temp,max;
printf("请输入三个整数:
");
scanf("%d,%d,%d",&a,&b,&c);
temp=(a>b)?
a:
b;/*将a和b中的大者存入temp中*/
max=(temp>c)?
temp:
c;/*将a和b中的大者与c比较,取最大者*/
printf("三个整数的最大数是%d\n",max);
return0;
}
4-5-2
#include
#include
#defineM1000
intmain()
{
inti,k;
printf("请输入一个小于%d的整数i:
",M);
scanf("%d",&i);
while(i>M)
{printf("输入的数不符合要求,请重新输入一个小于%d的整数i:
",M);
scanf("%d",&i);
}
k=sqrt(i);
printf("%d的平方根的整数部分是:
%d\n",i,k);
return0;
}
4-5
#include
#include
#defineM1000
intmain()
{
inti,k;
printf("请输入一个小于%d的整数i:
",M);
scanf("%d",&i);
if(i>M)
{printf("输入的数不符合要求,请重新输入一个小于%d的整数i:
",M);
scanf("%d",&i);
}
k=sqrt(i);
printf("%d的平方根的整数部分是:
%d\n",i,k);
return0;
}
4-6.
#include
intmain()
{intx,y;
printf("输入x:
");
scanf("%d",&x);
if(x<1)/*x<1*/
{y=x;
printf("x=%3d,y=x=%d\n",x,y);
}
elseif(x<10)/*1={y=2*x-1;
printf("x=%d,y=2*x-1=%d\n",x,y);
}
else/*x>=10*/
{y=3*x-11;
printf("x=%d,y=3*x-11=%d\n",x,y);
}
return0;
}
4-7-1
#include
intmain()
{
intx,y;
printf("enterx:
");
scanf("%d",&x);
y=-1;
if(x!
=0)
if(x>0)
y=1;
else
y=0;
printf("x=%d,y=%d\n",x,y);
return0;
}
4-7-2
#include
intmain()
{
intx,y;
printf("pleaseenterx:
");
scanf("%d",&x);
y=0;
if(x>=0)
if(x>0)y=1;
elsey=-1;
printf("x=%d,y=%d\n",x,y);
return0;
}
4-8
#include
intmain()
{floatscore;
chargrade;
printf("请输入学生成绩:
");
scanf("%f",&score);
while(score>100||score<0)
{printf("\n输入有误,请重输");
scanf("%f",&score);
}
switch((int)(score/10))
{case10:
case9:
grade='A';break;
case8:
grade='B';break;
case7:
grade='C';break;
case6:
grade='D';break;
case5:
case4:
case3:
case2:
case1:
case0:
grade='E';
}
printf("成绩是%5.1f,相应的等级是%c\n",score,grade);
return0;
}
4-9
#include
#include
intmain()
{
intnum,indiv,ten,hundred,thousand,ten_thousand,place;//分别代表个位,十位,百位,千位,万位和位数
printf("请输入一个整数(0-99999):
");
scanf("%d",&num);
if(num>9999)
place=5;
elseif(num>999)
place=4;
elseif(num>99)
place=3;
elseif(num>9)
place=2;
elseplace=1;
printf("位数:
%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);
break;
case4:
printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);
printf("\n反序数字为:
");
printf("%d%d%d%d\n",indiv,ten,hundred,thousand);
break;
case3:
printf("%d,%d,%d",hundred,ten,indiv);
printf("\n反序数字为:
");
printf("%d%d%d\n",indiv,ten,hundred);
break;
case2:
printf("%d,%d",ten,indiv);
printf("\n反序数字为:
");
printf("%d%d\n",indiv,ten);
break;
case1:
printf("%d",indiv);
printf("\n反序数字为:
");
printf("%d\n",indiv);
break;
}
return0;
}
4-10-1
#include
intmain()
{
inti;
doublebonus,bon1,bon2,bon4,bon6,bon10;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+100000*0.05;
bon6=bon4+100000*0.03;
bon10=bon6+400000*0.015;
printf("请输入利润i:
");
scanf("%d",&i);
if(i<=100000)
bonus=i*0.1;
elseif(i<=200000)
bonus=bon1+(i-100000)*0.075;
elseif(i<=400000)
bonus=bon2+(i-200000)*0.05;
elseif(i<=600000)
bonus=bon4+(i-400000)*0.03;
elseif(i<=1000000)
bonus=bon6+(i-600000)*0.015;
else
bonus=bon10+(i-1000000)*0.01;
printf("奖金是:
%10.2f\n",bonus);
return0;
}
4-10-2
#include
intmain()
{
inti;
doublebonus,bon1,bon2,bon4,bon6,bon10;
intbranch;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
pr