《《C语言-程序设计》课后习题.答案(第四版.)谭浩强.doc》由会员分享,可在线阅读,更多相关《《C语言-程序设计》课后习题.答案(第四版.)谭浩强.doc(112页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 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 程序设计的任务 141-5 #include int main ( ) printf (“*nn“);printf(“ Very Good!nn“);printf (“*n“);return 0; 1-6#include int main() int a,b,c,max;printf(“please i
2、nput a,b,c:n“);scanf(“%d,%d,%d“,max=a;if (max #include int main() float p,r,n;r=0.1;n=10;p=pow(1+r,n); printf(“p=%fn“,p);return 0; 3-2-1 #include #include int main() float r5,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)
3、*(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=%fn“,p1); / 输出按第 1 方案得到的本息和 printf(“p2=%fn“,p2); / 输出按第 2 方案得到的本息和 printf(“p3=%fn“,p3); / 输出按第 3 方案得到的本息和 printf(
4、“p4=%fn“,p4); / 输出按第 4 方案得到的本息和 printf(“p5=%fn“,p5); / 输出按第 5 方案得到的本息和 return 0; 3-2-2 #include #include int main() double r5,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)*
5、(1+2*r2); / 先存 3 年期,到期后将本息再存 2 年期 p4=p*pow(1+r1,5); / 存 1 年期,到期后将本息存再存 1 年期,连续存 5 次 p5=p*pow(1+r0/4,4*5); / 存活期存款。活期利息每一季度结算一次 printf(“p1=%fn“,p1); / 输出按第 1 方案得到的本息和 printf(“p2=%fn“,p2); / 输出按第 2 方案得到的本息和 printf(“p3=%fn“,p3); / 输出按第 3 方案得到的本息和 printf(“p4=%fn“,p4); / 输出按第 4 方案得到的本息和 printf(“p5=%fn“,p
6、5); / 输出按第 5 方案得到的本息和 return 0; 3-2-3#include #include int main() float r5,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);
7、 / 存 1 年期,到期后将本息存再存 1 年期,连续存 5 次 p5=p*pow(1+r0/4,4*5); / 存活期存款。活期利息每一季度结算一次 printf(“p1=%10.2fn“,p1); / 输出按第 1 方案得到的本息和 printf(“p2=%10.2fn“,p2); / 输出按第 2 方案得到的本息和 printf(“p3=%10.2fn“,p3); / 输出按第 3 方案得到的本息和 printf(“p4=%10.2fn“,p4); / 输出按第 4 方案得到的本息和 printf(“p5=%10.2fn“,p5); / 输出按第 5 方案得到的本息和 return 0;
8、 3-3. #include #include int main() float d=300000,p=6000,r=0.01,m;m=log10(p/(p-d*r)/log10(1+r);printf(“m=%6.2fn“,m);return 0; 3-4#include int main() int c1,c2;c1=197;c2=198;printf(“c1=%c,c2=%cn“,c1,c2);printf(“c1=%d,c2=%dn“,c1,c2);return 0; 3-5 #include int main() int a,b;float x,y;char c1,c2;scanf(
9、“a=%d b=%d“,scanf(“%f %e“,scanf(“%c%c“,printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%cn“,a,b,x,y,c1,c2);return 0; 3-6 #include int main() char c1=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(“passwor is %c%c%c%c%cn“,c1,c2,c3,c4,c5);return 0; 3-7 #include int main () float h,r,l,s,sq,
10、vq,vz;float pi=3.141526;printf(“请输入圆半径 r,圆柱高 h“);scanf(“%f,%f“, /要求输入圆半径 r 和圆柱高 h l=2*pi*r; /计算圆周长 ls=r*r*pi; /计算圆面积 ssq=4*pi*r*r; /计算圆球表面积 sqvq=3.0/4.0*pi*r*r*r; /计算圆球体积 vqvz=pi*r*r*h; /计算圆柱体积 vzprintf(“圆周长为: l=%6.2fn“,l);printf(“圆面积为: s=%6.2fn“,s); printf(“圆球表面积为: sq=%6.2fn“,sq);printf(“圆球体积为: v=%
11、6.2fn“,vq);printf(“圆柱体积为: vz=%6.2fn“,vz);return 0;3-8-1 #include int main() int c1,c2; /整型定义 printf(“请输入两个整数 c1,c2:“);scanf(“%d,%d“,printf(“按字符输出结果:n“);printf(“%c,%cn“,c1,c2);printf(“按 ASCII 码输出结果为:n“);printf(“%d,%dn“,c1,c2);return 0; 3-8-2 #include int main() char c1,c2; /定义字符型变量int i1,i2; /定义整型变量
12、printf(“请输入两个字符 c1,c2:“);scanf(“%c,%c“,i1=c1; /赋值给整型变量 i2=c2;printf(“按字符输出结果:n“);printf(“%c,%cn“,i1,i2);printf(“按整数输出结果:n“);printf(“%d,%dn“,c1,c2);return 0; 3-8-3#include int main() char c1,c2; /定义为字符型 int i1,i2; /定义为整型 printf(“请输入两个整数 i1,i2:“);scanf(“%d,%d“,c1=i1; /将整数赋值给字符变量 c2=i2;printf(“按字符输出结果:
13、n“);printf(“%c,%cn“,c1,c2);printf(“按整数输出结果:n“);printf(“%d,%dn“,c1,c2);return 0; 3-8 #include int main() char c1,c2; printf(“请输入两个字符 c1,c2:“); c1=getchar(); c2=getchar(); printf(“用 putchar 语句输出结果为:“); putchar(c1); putchar(c2); printf(“n“); printf(“用 printf 语句输出结果为:“); printf(“%c %cn“,c1,c2); return 0
14、; 第 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 逻辑运算符及其优先次序 934.4.2 逻辑表达式 94 4.4.3 逻辑型变量 96 4.5 条件运算符和条件表达式 97 4.6 选择结构的嵌套 99 4.7 用 switch 语句实现多分支选择结构 102 4.8 选择结构程序综合
15、举例 105 习题 111 4-4-1 #include int main() int a,b,c;printf(“请输入三个整数:“);scanf(“%d,%d,%d“,if (a int main() int a,b,c,temp,max;printf(“请输入三个整数:“);scanf(“%d,%d,%d“,temp=(ab)?a:b; /*将 a 和 b 中的大者存入 temp 中*/max=(tempc)?temp:c; /*将 a 和 b 中的大者与 c 比较,取最大者*/printf(“三个整数的最大数是%dn“,max);return 0; 4-5-2 #include #in
16、clude #define M 1000 int main()int i,k; printf(“请输入一个小于%d 的整数 i:“,M);scanf(“%d“,while (iM) printf(“输入的数不符合要求,请重新输入一个小于%d 的整数 i:“,M);scanf(“%d“,k=sqrt(i);printf(“%d 的平方根的整数部分是:%dn“,i,k);return 0; 4-5 #include #include #define M 1000 int main() int i,k; printf(“请输入一个小于%d 的整数 i:“,M);scanf(“%d“,if (iM)
17、printf(“输入的数不符合要求,请重新输入一个小于%d 的整数 i:“,M);scanf(“%d“,k=sqrt(i);printf(“%d 的平方根的整数部分是:%dn“,i,k);return 0; 4-6. #include int main() int x,y;printf(“输入 x:“);scanf(“%d“,if(x=10 */ y=3*x-11;printf(“x=%d, y=3*x-11=%dn“,x,y); return 0; 4-7-1 #include int main() int x,y;printf(“enter x:“);scanf(“%d“,y=-1;if(
18、x!=0)if(x0)y=1;elsey=0; printf(“x=%d,y=%dn“,x,y);return 0; 4-7-2 #include int main() int x,y;printf(“please enter x:“);scanf(“%d“,y=0;if(x=0)if(x0) y=1;else y=-1; printf(“x=%d,y=%dn“,x,y);return 0; 4-8 #include int main() float score;char grade;printf(“请输入学生成绩:“);scanf(“%f“,while (score100|score #in
19、clude int main() int num,indiv,ten,hundred,thousand,ten_thousand,place; /分别代表个位,十位,百位,千 位,万位和位数 printf(“请输入一个整数(0-99999):“);scanf(“%d“,if (num9999)place=5;else if (num999)place=4;else if (num99)place=3;else if (num9)place=2;else place=1;printf(“位数:%dn“,place);printf(“每位数字为:“);ten_thousand=num/10000;
20、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)case 5:printf(“%d,%d,%d,%d,%d“,ten_thousand,thousand,hu
21、ndred,ten,indiv);printf(“n 反序数字为:“);printf(“%d%d%d%d%dn“,indiv,ten,hundred,thousand,ten_thousand);break;case 4:printf(“%d,%d,%d,%d“,thousand,hundred,ten,indiv);printf(“n 反序数字为:“);printf(“%d%d%d%dn“,indiv,ten,hundred,thousand);break;case 3:printf(“%d,%d,%d“,hundred,ten,indiv);printf(“n 反序数字为:“);print
22、f(“%d%d%dn“,indiv,ten,hundred);break;case 2:printf(“%d,%d“,ten,indiv);printf(“n 反序数字为:“);printf(“%d%dn“,indiv,ten);break;case 1:printf(“%d“,indiv);printf(“n 反序数字为:“);printf(“%dn“,indiv);break;return 0;4-10-1 #include int main() int i;double bonus,bon1,bon2,bon4,bon6,bon10;bon1=100000*0.1;bon2=bon1+1
23、00000*0.075;bon4=bon2+100000*0.05;bon6=bon4+100000*0.03;bon10=bon6+400000*0.015;printf(“请输入利润 i:“);scanf(“%d“,if (i int main() int i;double bonus,bon1,bon2,bon4,bon6,bon10;int branch;bon1=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+200000*0.05;bon6=bon4+200000*0.03;bon10=bon6+400000*0.015;printf(“请输
24、入利润 i:“);scanf(“%d“,branch=i/100000;if (branch10) branch=10;switch(branch) case 0:bonus=i*0.1;break;case 1:bonus=bon1+(i-100000)*0.075;break;case 2:case 3: bonus=bon2+(i-200000)*0.05;break;case 4:case 5: bonus=bon4+(i-400000)*0.03;break;case 6:case 7:case 8:case 9: bonus=bon6+(i-600000)*0.015;break;
25、case 10: bonus=bon10+(i-1000000)*0.01;printf(“奖金是 %10.2fn“,bonus);return 0;4-11 #include int main()int t,a,b,c,d;printf(“请输入四个数:“);scanf(“%d,%d,%d,%d“,printf(“a=%d,b=%d,c=%d,d=%dn“,a,b,c,d);if (ab) t=a;a=b;b=t;if (ac) t=a;a=c;c=t;if (ad) t=a;a=d;d=t;if (bc) t=b;b=c;c=t;if (bd) t=b;b=d;d=t;if (cd) t=
26、c;c=d;d=t;printf(“排序结果如下: n“);printf(“%d %d %d %d n“ ,a,b,c,d);return 0;4-12 #include int main()int h=10;float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;printf(“请输入一个点(x,y):“);scanf(“%f,%f“,d1=(x-x4)*(x-x4)+(y-y4)*(y-y4); /*求该点到各中心点距离*/d2=(x-x1)*(x-x1)+(y-y1)*(y-y1);d3=(x-x2)*(x-x2
27、)+(y-y2)*(y-y2);d4=(x-x3)*(x-x3)+(y-y3)*(y-y3);if (d11 /*判断该点是否在塔外*/printf(“该点高度为 %dn“,h);return 0;第 5 章循环结构程序设计 114 5.1 为什么需要循环控制 114 5.2 用 while 语句实现循环 115 5.3 用 dowhile 语句实现循环 117 5.4 用 for 语句实现循环 120 5.5 循环的嵌套 124 5.6 几种循环的比较 125 5.7 改变循环执行的状态 125 5.7.1 用 break 语句提前终止循环 126 5.7.2 用 continue 语句提前
28、结束本次循环 127 5.7.3break 语句和 continue 语句的区别 128 5.8 循环程序举例 131 习题 140 5-2 #include #include / 程序中用到数学函数 fabs,应包含头文件 math.n int main() int sign=1,count=0; / sign 用来表示数值的符号,count 用来统计循环次数double pi=0.0,n=1.0,term=1.0; / pi 开始代表多项式的值,最后代表 的值, n 代表分 母,term 代表当前项的值while(fabs(term)=1e-8) / 检查当前项 term 的绝对值是否大于
29、或等于 10 的(-6) 次方pi=pi+term; / 把当前项 term 累加到 pi 中n=n+2; / n+2 是下一项的分母 sign=-sign; / sign 代表符号,下一项的符号与上一项符号相反term=sign/n; / 求出下一项的值 termcount+; / count 累加 1pi=pi*4; / 多项式的和 pi 乘以 4,才是 的近似值printf(“pi=%10.8fn“,pi); / 输出 的近似值 printf(“count=%dn“,count); / 输出循环次数return 0; 5-3 #include int main()int p,r,n,m,
30、temp;printf(“请输入两个正整数 n,m:“);scanf(“%d,%d,“,if (n int main()char c;int letters=0,space=0,digit=0,other=0;printf(“请输入一行字符:n“);while(c=getchar()!=n)if (c=a printf(“a,n=:“);scanf(“%d,%d“,while (i int main()double s=0,t=1;int n;for (n=1;n int main()int n1=100,n2=50,n3=10;double k,s1=0,s2=0,s3=0;for (k=1
31、;k int main()int i,j,k,n;printf(“parcissus numbers are “);for (n=100;n int main()int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;int i,a,n,s;for (a=2;a1) printf(“%d,%d“,k1,k2); /* n1 表示 a 至少有 2 个因子 */if (n2) printf(“,%d“,k3); /* n2 表示至少有 3 个因子,故应再输出一 个因子 */ if (n3) printf(“,%d“,k4); /* n3 表示至少有 4 个因子,故应再输出一 个因子
32、*/if (n4) printf(“,%d“,k5); /* 以下类似 */if (n5) printf(“,%d“,k6);if (n6) printf(“,%d“,k7);if (n7) printf(“,%d“,k8);if (n8) printf(“,%d“,k9);if (n9) printf(“,%d“,k10);printf(“n“); return 0;5-9-2 #include int main()int m,s,i;for (m=2;m int main()int i,n=20;double a=2,b=1,s=0,t;for (i=1;i int main()doubl
33、e sn=100,hn=sn/2;int n;for (n=2;n int main()int day,x1,x2;day=9;x2=1;while(day0)x1=(x2+1)*2; /*第 1 天的桃子数是第 2 天桃子数加 1 后的 2 倍.*/x2=x1;day-;printf(“total=%dn“,x1);return 0;5-13 #include #include int main()float a,x0,x1;printf(“enter a positive number:“);scanf(“%f“,x0=a/2;x1=(x0+a/x0)/2;dox0=x1;x1=(x0+a
34、/x0)/2;while(fabs(x0-x1)=1e-5);printf(“The square root of %5.2f is %8.5fn“,a,x1);return 0;5-14 #include #include int main()double x1,x0,f,f1;x1=1.5;dox0=x1;f=(2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x1=x0-f/f1;while(fabs(x1-x0)=1e-5);printf(“The root of equation is %5.2fn“,x1);return 0;5-15 #include #in
35、clude int main()float x0,x1,x2,fx0,fx1,fx2;doprintf(“enter x1 scanf(“%f,%f“,fx1=x1*(2*x1-4)*x1+3)-6;fx2=x2*(2*x2-4)*x2+3)-6;while(fx1*fx20);dox0=(x1+x2)/2;fx0=x0*(2*x0-4)*x0+3)-6;if (fx0*fx1)=1e-5);printf(“x=%6.2fn“,x0);return 0;5-16 #include int main()int i,j,k;for (i=0;i int main()char i,j,k; /*是
36、a 的对手;j 是 b 的对手;k 是 c 的对手*/for (i=x;i #include int main() int i,j,n,a101;for (i=1;i int main() int i,j,min,temp,a11;printf(“enter data:n“);for (i=1;iaj) min=j;temp=ai;ai=amin;amin=temp;printf(“nThe sorted numbers:n“);for (i=1;i int main() int a33,sum=0; int i,j;printf(“enter data:n“);for (i=0;i int
37、main() int a11=1,4,6,9,13,16,19,28,40,100;int temp1,temp2,number,end,i,j;printf(“array a:n“);for (i=0;iend)a10=number;elsefor (i=0;inumber)temp1=ai; ai=number; for (j=i+1;j #define N 5 int main() int aN,i,temp;printf(“enter array a:n“); for (i=0;i #define N 10 int main() int i,j,aNN;for (i=0;i int m
38、ain() int a1515,i,j,k,p,n;p=1;while(p=1)printf(“enter n(n=1-15):“);scanf(“%d“,if (n!=0) j=j-1;elseif (in) j=1;if (aij=0)aij=k;elsei=i+2;j=j-1;aij=k;for (i=1;i #define N 4#define M 5 /* 数组为 4 行 5 列 */ int main() int i,j,k,aNM,max,maxj,flag;printf(“please input matrix:n“);for (i=0;imax)max=aij; /* 将本行
39、的最大数存放在 max 中 */maxj=j; /* 将最大数所在的列号存放在 maxj 中 */flag=1; /* 先假设是鞍点,以 flag 为 1 代表 */for (k=0;kakmaxj) /* 将最大数和其同列元素相比 */flag=0; /* 如果 max 不是同列最小,表示不是鞍点令 flag1 为 0 */continue;if(flag) /* 如果 flag1 为 1 表示是鞍点 */ printf(“a%d%d=%dn“,i,maxj,max); /* 输出鞍点的值和所在行列号 */break; if(!flag) /* 如果 flag 为 0 表示鞍点不存在 */p
40、rintf(“It is not exist!n“);return 0;6-9 #include #define N 15 int main() int i,number,top,bott,mid,loca,aN,flag=1,sign;char c;printf(“enter data:n“);scanf(“%d“,i=1;while(i=ai-1)i+;elseprintf(“enter this data again:n“);printf(“n“);for (i=0;iaN-1) /要查的数不在查找区间内loca=-1; / 表示找不到while (!sign) char text380
41、;upp=low=dig=spa=oth=0;for (i=0;i=Aint i,j,k;char space= ;for (i=0;i int main() int j,n;char ch80,tran80;printf(“input cipher code:“);gets(ch);printf(“ncipher code :%s“,ch);j=0;while (chj!=0) if (chj=A) char ch80;printf(“input cipher code:n“);gets(ch);printf(“ncipher code:%sn“,ch);j=0;while (chj!=0)
42、 if (chj=A) int i=0,j=0;printf(“input string1:“);scanf(“%s“,s1);printf(“input string2:“);scanf(“%s“,s2);while (s1i!=0)i+;while(s2j!=0)s1i+=s2j+;s1i=0;printf(“nThe new string is:%sn“,s1);return 0;6-14 #include int main() int i,resu;char s1100,s2100;printf(“input string1:“);gets(s1);printf(“ninput str
43、ing2:“);gets(s2);i=0;while (s1i=s2i) if (s1i=0 elseresu=s1i-s2i;printf(“nresult:%d.n“,resu);return 0;6-15 #include #include int main() char s180,s280;int i;printf(“input s2:“);scanf(“%s“,s2);for (i=0;i int main()int hcf(int,int);int lcd(int,int,int); int u,v,h,l;scanf(“%d,%d“,h=hcf(u,v);printf(“H.C.F=%dn“,h);l=lcd(u,v,h);printf(“L.C.D=%dn“,l);return 0;int hcf(int u,int v) int t,r;if (vu)t=u;u=v;v=t;while (r=u%v)!=0)u=v;v=r;return(v); int lcd(int u,int v,int h)return(u*v/h);7-1-2 #include int Hcf,Lcd; int main()void hcf(int,int);void lcd(int,int