《《C语言程序设计》课后习题答案(第四版)》由会员分享,可在线阅读,更多相关《《C语言程序设计》课后习题答案(第四版)(53页珍藏版)》请在金锄头文库上搜索。
1、第1章程序设计和C语言11 .1 什么是计算机程序11 .2 什么是计算机语言11.3 C语言的发展及其特点31 .4 最简单的C语言程序51.4 . 1最简单的C语言程序举例61.4 . 2 c语言程序的结构101 .5 运行C程序的步骤与方法121 .6 程序设计的任务141-5 #include int main () printf( ”* ,printf(Very Good!nnH);pnntf( ”*n)return 0;7-l-6#include int main()int a,b,c,max;printf(Hplease input a,b,c:rT);scanf(H%d,%d,
2、%dn,&a,&b,&c);max=a;if (maxb)max=b;if (maxc)max=c;printf(HThe largest number is %dn,max);return 0;)第 2 章算法程序的灵魂162.1 什么是算法162.2 简单的算法举例172.3 算法的特性212.4 怎样表示一个算法222.4.1 用自然语言表示算法222.4.2 用流程图表示算法222.4.3 三种基本结构和改进的流程图262.4.4 用 N S 流程图表示算法282.4.5 用伪代码表示算法312.4.6 用计算机语言表示算法322.5 结构化程序设计方法34习题36第章最简单的C 程序
3、设计顺序程序设计373.1 顺序程序设计举例373.2 数据的表现形式及其运算393.2.1 常量和变量393.2.2 数据类型423.2.3 整型数据443.2.4 字符型数据473.2.5 浮点型数据493.2.6 怎样确定常量的类型513.2.7 运算符和表达式523.3 C语句573 3 1 C语句的作用和分类573.3.2最基本的语句赋值语句593.4 数据的输入输出653.4.1 输入输出举例653.4.2 有关数据输入输出的概念673.4.3 用 prin廿函数输出数据683.4.4 用 scant函数输入数据753.4.5 字符数据的输入输出78习题823-1 #include
4、 #include int main()float p,r,n;r=0.1;n=10;p=pow(l+r,n);printf(Mp=%fnn,p);return 0;4#include int main()float r5 ,r3 ,r2,r 1 ,r0,p,p 1 ,p2,p3 ,p4,p5;p=I000;r5=0.0585;r3=0.054;r2=0.0468;r I =0.0414;r0=0.0072;pl=p*(l+r5)*5);p2=p*( 1 +2*r2)*( 1 +3*r3);p3=p*(l+3*3)*(l+2* ;p4=p*pow(l +r 1,5);p5=p*pow( 1 +
5、r0/4,4*5);printf(p 1 =%fnM,p 1);printf(Mp2=%fn,p2);printf(p3 二 fn,p3);printf(p4 二 Anp4);printf(np5=%fn,p5);/ / 一次存5年期先存2年期,到期后将本息再存3年期/ / 先存3年期,到期后将本息再存2年期 存1年期,到期后将本息存再存1年期,连续存5次/ / 存活期存款。活期利息每一季度结算一次/ / 输出按第1方案得到的本息和/ / 输出按第2方案得到的本息和/ / 输出按第3方案得到的本息和/ / 输出按第4方案得到的本息和/ / 输出按第5方案得到的本息和return 0;3-2-2
6、#include #include int main()double r5,r3,r2,rl ,rO,p,pl ,p2,p3,p4,p5;p=1000;5=0.0585;r3=0.054;r2=0.0468;r 1=0.0414;r0=0.0072;pl=p*(l+r5)*5);p2=p*(l +2*r2)*(l +3*r3);p3=p*(l+3*r3)*(l +2*r2);p4=p*pow(l +rl,5);p5=p*pow(l +r0/4,4*5);printf(Mp 1 =%fnM,p 1);printf(np2=%hn;p2);printf(,p3=%fnn,p3);printf(np
7、4=%fn;p4);printf(,p5=%fn,p5);/ / 一次存5年期先存2年期,到期后将本息再存3年期先存3年期,到期后将本息再存2年期 存1年期,到期后将本息存再存1年期,连续存5次/ / 存活期存款。活期利息每一季度结算一次/ / 输出按第1方案得到的本息和/ / 输出按第2方案得到的本息和输出按第3方案得到的本息和/ / 输出按第4方案得到的本息和/ / 输出按第5方案得到的本息和return 0;3-2-3#include #include int main()float r5,r3,r2,rl,r0,p,pl ,p2,p3,p4,p5;p=1000;r5=0.0585;r3
8、=0.054;r2=0.0468;rl=0.0414;10=0.0072;pl=p*(l+r5)*5);p2=p*( 1 +2*r2) *(1+3 *r3);p3=p*(l+3*r3)*(l +2*r2);p4=p*pow(l+rl,5);p5=p*pow( 1 +r0/4,4*5);printf(p 1 =% 10.2fnH,p 1);printf(Hp2=% 10.2fnn,p2);printf(Mp3=% 10.2fnH,p3);printf(p4=%10.2fn,p4);printf(np5=%10.2fn,p5);return 0;/ / 一次存5年期先存2年期,到期后将本息再存3年
9、期先存3年期,到期后将本息再存2年期 存1年期,到期后将本息存再存1年期,连续存5次/ / 存活期存款。活期利息每一季度结 算 次/ / 输出按第1方案得到的本息和输出按第2方案得到的本息和/ / 输出按第3方案得到的本息和/ / 输HI按第4方案得到的本息和/ / 输出按第5方案得到的本息和3-3.#include #include int main()float d=300000,p=6000,r=0.0 l,m;m=log 10(p/(p-d*r)/log 10(1 +r);printf(nm=%6.2fnn,m);return 0;3-4#include int main()int c
10、l,c2;cl=197;c2=198;printf(c 1 =%c,c2=%cn,c l,c2);printf(Hcl=%d, c2=%dnH,cl,c2);return 0;3-5#include int main()int a,b;float x,y;char cl,c2;scanf(Ma=%d b=%dH,&a,&b);scanf(%f %e*,&x,&y);scanf(,%c%c,&c 1 ,&c2);printf(,a=%d,b=%d,x=%f,y=%f,c 1 =%c,c2=%cnn,a,b,x,y,c 1 ,c2);return 0;3-6#include int main()c
11、har cl-C,c2=,hc3=,i,c4=n,c5-a;cl=cl+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;printf(Mpasswor is %c%c%c%c%cn,cl,c2,c3,c4,c5);return 0;)3-7#include int main ()float h,r,l,s,sq,vq,vz;float pi=3.141526;printf( 请输入圆半径r , 圆柱高h : );scanfC%fMF;&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;要求输
12、入圆半径r 和圆柱高h计算圆周长1计算圆面积s计算圆球表面积sq计算圆球体积vq/ / 计算圆柱体积vzprintfC1 圆周长为: l=%6.2fnn,l);printf( 圆面积为: s=%6.2fn*,s);printf( 圆球表面积为: sq=%6.2fnM,sq);printf( 圆球体积为: v=%6.2fn,vq);printf( 圆柱体积为: vz=%6.2fnM,vz);return 0;3-8-1#include int main()(intcl,c2; 整型定义printf( ” 请输入两个整数cl,c2:H);scanf(”d,%d&cl,&c2);printf( 按字
13、符输出结果:n”);printf(c,%cn”,c 1 ,c2);printf( 按ASCII码输出结果为: n“);printf(n%d,%dnn,cl,c2);return 0;)3-8-2#include int main()(char cl,c2; 定义字符型变量int il,i2;定义整型变量printf( 请输入两个字符cl,c2:*);scanf(%c,%c,&c 1 ,&c2);il=cl;i2=c2;printf( 按字符输出结果: n);printf(n%c,%cnu,i 1 ,i2);printf( 按整数输出结果: n);printf(%d,%dnn,cl,c2);re
14、turn 0;赋值给整型变量3-8-3#include int main()char cl,c2;定义为字符型int il,i2;printf( 请输入两个整数il,i2:);scanf(%d,%d,&il,&i2);cl=il;c2=i2;printf( 按字符输出结果:n);printf(H%c,%cnc 1 ,c2);printf( 按整数输出结果: n);printf(n%d,%dn,c 1 ,c2);return 0;定义为整型将整数赋值给字符变量3-8#include int main()(char cl,c2;printf( 请输入两个字符cl,c2:n);cl=getchar(
15、);c2=getchar();printf( 用putchar语句输出结果为putchar(cl);putchar(c2);printf(nn);printf( ” 用 printf语句输出结果为printf(M%c %cn,cl,c2);return 0;)第 4 章选择结构程序设计854 .1 选择结构和条件判断854 .2 用 if语句实现选择结构874.2.1 用 if语句处理选择结构举例874.2.2i f 语句的一般形式894 .3 关系运算符和关系表达式914.3.1 关系运算符及其优先次序914.3.2 关系表达式924 .4 逻辑运算符和逻辑表达式924.4.1 逻辑运算符及
16、其优先次序934.4.2 逻辑表达式944.4.3 逻辑型变量964 .5 条件运算符和条件表达式974 .6 选择结构的嵌套994.7 用 switch语句实现多分支选择结构1024 .8 选择结构程序综合举例105习题1114-4-1#include int main()(int a,b,c;printf( 请输入三个整数: ) ;scanf(”d,%d,%d”,&a,&b,&c);if(ab)if (bc)printf( max=%dnM ,c);elseprintf(max=%dnn,b);else if (ac)printf(max=%dn,c);elseprintf(max=%dn
17、,a);return 0;)4-4-2#include int main() int a,b,c,temp,max;printf( ” 请输入三个整数: ) ;scanf(H%d,%d,%du,&a,&b,&c);temp=(ab)?a:b; / * 将 a 和 b 中的大者存入temp中* /max=(tempc)?temp:c; / * 将 a 和 b 中的大者与c 比较, 取最大者* /primf(”三个整数的最大数是dn”,max);return 0;4-5-2#include #include #define M 1000int main()int i,k;printf( 请输入一个
18、小于% d的整数scanf(M%dH,&i);while (iM)printff输入的数不符合要求,请重新输入一个小于% d的整数scanf(,%d,&i);k=sqrt(i);printf(n% d的平方根的整数部分是:dn”,i,k);return 0;)4-5#include #include #define M 1000int main()(int i,k;printf( 请输入个小于(1的整数scanf(”d”,&i);if(iM)printf( 输入的数不符合要求,请重新输入一个小于d的整数scanf(d”,&i);)k=sqrt(i);printf(n% d的平方根的整数部分是:
19、%dn,i,k);return 0;4-6.#include int main() int x,y;printfT输入 x:H);scanf(n%d,&x);if(xl) y=x;printf(Mx=%3d,)else if(x 10) y=2*x-l;printf(Mx=%d,/* xl */y=x=%dnu ,x,y);/* 1=X=l 0 */ y=3*x-l 1;printf(Mx=%d, y=3*x-ll=%dn,x,y);return 0;4-7-1#include int main()(int x,y;printf(nenter x:);scanf(n%dn,&x);y=-i;i
20、f(x!=0)if(x0)y=i;elsey=0;printf(x=%d,y=%dnH,x,y);return 0;4-7-2#include int main()(int x,y;printf(Mplease enter x:u);scanf(n%d,&x);y=o;if(x=0)if(x0) y=l;else y=-l;printf(,x=%d,y=%dn,x,y);return 0;4-8#include int main() float score;char grade;printf( ” 请输入学生成绩: ” ) ;scanf(n%f,&score);while (score 100
21、|score0)printf(n输入有误, 请重输)scanf(n%f&score);)switch(int)(score/10)case 10:case 9: grade=A,;break;case 8: grade=B;break;case 7: grade=C,;break;case 6: grade=D,;break;case 5:case 4:case 3:case 2:case 1:case 0: grade=E*;)printf( 成绩是 %5.1f,相应的等级是cn ,score,grade);return 0;4-9#include #include int main()(i
22、nt num,indiv,ten,hundred,thousand,ten_thousand,place; 分别代表个位, 卜位, 百6/, 千位, 万位和位数printf( 请输入一个整数(0-99999):);scanf(%d,&num);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;thousand=(i
23、nt)(num-ten_thousand* 10000)/1000;hundred=(int)(num-ten_thousand* 10000-thousand*l 000)/100;ten=(int)(num-tenhousand* 10000-thousand* 1 OOO-hundred* 100)/10;indiv=(int)(num-ten_thousand* 1 OOOO-thousand* 1 OOO-hundred* 100-ten* 10);switch(place)case 5:printf(n%d,%d,%d,%d,%d,ten_thousand,thousand,hun
24、dred,ten,indiv);printf(n反序数字为: ) ;printf(%d%d%d%d%dn,indiv,ten,hundred,thousand,ten_thousand);break;case 4:printf(%d,%d,%d,%dH,thousand,hundred,ten,indiv);printf(n反序数字为printf(%d%d%d%dnH,indiv,ten,hundred,thousand);break;case 3:printf(n%d,%d,%d,hundred,ten,indiv);printf(n反序数字为: ) ;printf(,%d%d%dn,ind
25、iv,ten,hundred);break;case 2:printf(%d,%d,ten,indiv);printf(n反序数字为: ) ;printf(n%d%dn,indiv,ten);break;case 1 :printf(%d,indiv);printf(n反序数字为: ) ;printf(M%dnM,indiv);break;return 0;4-10-1#include int main()(int i;double bonus,bon 1 ,bon2,bon4,bon6,bon 10;bon 1 = 100000*0.1;bon2=bon1 +100000*0.075;bon
26、4=bon2+100000*0.05;bon6=bon4+100000*0.03;bon 10=bon6+400000*0.015;printf( 请输入利润i:”);scanf(d”成 i);if (i= 100000)bonus=i*0.1;else if (i=200000)bonus=bonl+(i-100000)*0.075;else if(i=400000)bonus=bon2+(i-200000)*0.05;else if(i=600000)bonus=bon4+(i-400000)*0.03;else if (i= 1000000)bonus=bon6+(i-600000)*0
27、.015;elsebonus=bon 10+(i-l 000000)*0.01;printf( 奖金是: %10.2fn,bonus);return 0;4-10-2#include int main()(int i;double bonus,bon 1 ,bon2,bon4,bon6,bon 10;int branch;bon 1 = 100000*0.1;bon2=bon 1 +100000*0.075;bon4=bon2+200000*0.05;bon6=bon4+200000*0.03;bon 10=bon64-400000*0.015;printf(”请输入利润i:);scanf(%
28、d,&i);branch=i/100000;if (branch 10) branch=10;switch(branch) case 0:bonus=i*0.1 ;break;case 1 :bonus=bon 1 +(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;case 10:
29、 bonus=bon 10+(i-1000000)*0.01;)printf( 奖金是 %10.2ftn,bonus);return 0;4-11#include int main()int t,a,b,c,d;printf( 请输入四个数scanf(n%d,%d,%d,%d,&a,&b,&c,&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=c
30、;c=d;d=t;printf( 排序结果如下: n);printf(H%d %d %d %d nu ,a,b,c,d);return 0;4-12#include int main()(int h=10;float x l=2,y 1 =2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d 1 ,d2,d3,d4;printf( 请输入一个点(x,y):);scanf( 1 ,&x ,&y);dl=(x-x4)*(x-x4)+(y-y4)*(y-y4); / * 求该点到各中心点距离* /d2=(x-x l)*(x-x 1 )+(y-y l)*(y-y 1);d
31、3=(x-x2)*(x-x2)+(y-y2)*(y-y2);d4=(x-x3)*(x-x3)+(y-y3)*(y-y3);if(dll & d2l & d3l & d4l) h=0; / * 判断该点是否在塔外 * /printf( 该点高度为 %dn,h);return 0;)第 5 章循环结构程序设计1145 .1 为什么需要循环控制1145 .2 用 while语句实现循环1155 .3 用 do.while语句实现循环1175 .4 用 fo r语句实现循环1205 .5 循环的嵌套1245 .6 几种循环的比较1255 .7 改变循环执行的状态1255.7.1 用 break语句提前
32、终止循环1265.7.2 用 continue语句提前结束本次循环1275.7.3 break语句和continue语句的区别1285 .8 循环程序举例131习题1405-2int main()#include #include / / 程序中用到数学函数fa b s,应包含头文件math.n次方int sign= 1 ,count=0;double pi=0.0,n= 1.0,term= 1.0;term代表当前项的值/ sign用来表示数值的符号, count用来统计循环次数/ p i开始代表多项式的值, 最后代表n 的值, n 代表分母,while(fabs(term)= 1 e-8)
33、/ / 检查当前项term 的绝对值是否大于或等于10的(-6)pi=pi+term;n=n+2;sign=-sign;/ / 把当前项term累加到p i中/n+2是下一项的分母sign代表符号,下一项的符号与上一项符号相反term=sign/n;/ / 求出下一项的值termcount+;)pi=pi*4;printf(pi=%10.8fn,pi);/ count 累加 1/ / 多项式的和p i乘以4 , 才是”的近似值输出n 的近似值printf(,count=%dn,count);return 0;/ / 输出循环次数5-3#include int main()(int p,r,n,
34、m,temp;printf( 请输入两个正整数n,m:M);scanf(d,%d,”,&n,&m);if(nm)(temp=n;n=m;m=temp;)p=n*m;while(m!=O)(r=n%m;n=m;m=r;)printf( 它们的最大公约数为: %dn”,n);printf( 它们的最小公约数为: %dn”,p/n);return 0;)5-4#include int main()(char c;int Ietters=0,space=0,digit=0,other=0;printf( ” 请输入一行字符:n);while(c=getchar()!=,n,)(if (c=a & c=
35、,A, & c=,0 & c-9)digit+;elseother+;printf( 字母数: dn 空格数: %dn 数字数:%dn 其它字符数: dn”,letters,space,digit,other);return 0;5-5#include int main()(int a,n,i= l,sn=O,tn=O;printf(na,n=:n);scanf(%d,%d,&a,&n);while (i=n)(tn=tn+a; / *赋值后的tn 为 i 个 a 组成数的值*/sn=sn+tn; /*赋值后的sn 为多项式前i 项之和*/a=a*10;+i;printf(,a+aa+aaa+
36、.=%dn,sn);return 0;5-6#include int main()double s=O,t= I;int n;for (n=l;n=20;n+)(t=t*n;s=s+t;)printf(l!+2!+.+20!=%22.15en,s);return 0;)5-7#include int main()(int n 1 = 100,n2=50,n3= 10;double k,s 1 =0,s2=0,s3=0;for (k= 1 ;k=n 1 ;k+) / *计算 1 到 100 的和*/sl=sl+k;for (k= 1 ;k=n2;k+) / *计 算 1至 U 50各数的平方和*
37、/s2=s2+k*k;)for (k=l ;k=n3;k+) / *计算 1 到 10 的各倒数和*/s3=s3+l/k;pMntf(sum=% 15.6fn”,s 1+s2+s3);return 0;5-8#include int main()(int i,j,k,n;printf(Mparcissus numbers are );for (n=100;n1000;n+)(i=n/100;j=n/10-i*10;k=n%10;if (n=i*i*i + j*j*j + k*k*k)printf(M%d ,n);)return 0;5-9-1#define M 1000#include int
38、 main()/ *定义寻找范围*/int kl,k2,k3,k4,k5,k6,k7,k8,k9,k10;int i,a,n,s;for (a=2;a=M;a+)n=0;s=a;for (i=l;i 1) printf(n%d,%dn,k l,k2);if(n2) printf(,%d,k3);因 子 */if(n3) printf(;%dH,k4);因 子 */if(n4) printf(u,%d,k5);if(n5) printf(H,%dn,k6);if (n6) printf(u,%d,k7);if(n7) printf(u,%d,k8);if(n8) printf(u,%dn,k9)
39、;if(n9) printf(u,%d,klO);printf(Mn,);/* n l表示a 至少有2 个 因 子5 f7/* n2表示至少有3 个因子, 故应再输出一个/* n3表示至少有4 个因子, 故应再输出一个/* 以下类似*/return 0;5-9-2#include int main()int m,s,i;for (m=2;m1000;m4-+)s=0;for (i=l;im;i+)if (m%i)=0) s=s+i;if(s=m)printf(u%d,its factors are u,m);for (i=l;im;i+)if (m%i=0) printf(%d n,i);pr
40、intf(Mnu);)return 0;5-10#include int main()(int i,n=20;double a=2,b= 1 ,s=O,t;for (i=l;i=n;i+)(s=s+a/b;t=a,a=a+b,b=t;)printf(sum=% 16.1 Ofnu,s);return 0;)5-11#include int main()(double sn=100,hn=sn/2;int n;for (n=2;n=10;n+)sn=sn+2*hn; / *第n次落地时共经过的米数*/hn=hn/2; / *第n次反跳高度*/printf( 第10次落地时共经过f 米n,sn);
41、printf( 第 10 次反弹f 米n,hn);return 0;)5-12#include int main()(int day,xl,x2;day=9;x2=l;while(day0)x 1=(x2+1)*2; / *第 1天的桃子数是第2 天桃子数加1后的2 倍. */x2=xl;day ;)printf(,total=%dn,xl);return 0;5-13#include #include int main()(float a,x0,xl;printf(enter a positive number:);scanf(n%f,&a);x0=a/2;xl=(x0+a/x0)/2;do
42、x0=xl;xl=(x0+a/x0)/2; while(fabs(xO-x 1)= le-5);printf(nThe square root of %5.2f is %8.5ftn,a,x 1);return 0;5-14#include #include int main()double xl,xO,f,fl;xl=1.5;doxO=xl;f=(2*x0-4)*x0+3)*x0-6;fl=(6*xO-8)*xO+3;xl=xO-f/fl; while(fabs(x 1 -x0)=le-5);printf(The root of equation is %5.2fnxl);return 0;
43、)5-15#include #include int main()float x0,x 1 ,x2,fx0,fx 1 ,fx2;doprintf(enter xl & x2:);scanf(%f,%f,&x 1 ,&x2);fxl=xl *(2*x l-4)*x 1 +3)-6;fx2=x2*(2*x2-4)*x2+3)-6;while(fxl*fx20);dox0=(xl+x2)/2;fx0=x0*(2*x0-4)*x0+3)-6;if(fx0*fxl)=le-5);printf(,x=%6.2fn,x0);return 0;5-16#include int main()int i,j,k;
44、for (i=0;i=3;i+)for(j=0;j=2-i;j+)printf( 巧;for (k=0;k=2*i;k+)printf(n*n);printf(,nH);)for (i=0;i=2;i+)for(j=0;j=i;j+)printfO;for (k=0;k=4-2*i;k+)prmtf(n*n);printfCXn1);)return 0;I5-17#include int main()(char i,j,k; / *是 a 的对手;j 是 b 的对手;k 是 c 的对手*/for (i=x,;i=,z,;i+)for (j=x;j=z;j+)if(i!=j)for (k=,x,
45、;k-z,;k+)if(i!=k &j!=k)if(i!=x&k!=,x&k!=,z,)printf(A %cnB %cnC %cnn,ij,k);return 0;第 6 章利用数组处理批量数据1426 .1 怎样定义和引用一维数组1426.1.1 怎样定义一维数组1436.1.2 怎样引用一维数组元素1446.1.3 一维数组的初始化1456.1.4 一维数组程序举例1466 .2 怎样定义和弓I用二维数组1486.2.1 怎样定义二维数组1496 . 2 . 2 怎样引用二维数组的元素1 5 06 . 2 . 3 二维数组的初始化1 5 16 . 2 . 4 二维数组程序举例1 5 26
46、 . 3字符数组1 5 46 . 3. 1 怎样定义字符数组1 5 46 . 3. 2 字符数组的初始化1 5 56 . 3. 3 怎样引用字符数组中的元素1 5 56 . 3. 4 字符串和字符串结束标志1 5 66 . 3. 5 字符数组的输入输出1 5 96 . 3. 6 使用字符串处理函数1 6 16 . 3. 7 字符数组应用举例1 6 5习题1 6 86 - 1# i n c l u d e # i n c l u d e i n t m a i n ( ) i n t i , j , n , a 1 0 1 ;f o r ( i = l ;i = 1 0 0 ;i +)a i =
47、 i ;a l = 0 ;f o r ( i = 2 ;i s q r t ( 1 0 0 ) ;i +)f o r ( j = i +1 ;j = 1 0 0 ;j +) i f ( a i ! = 0 & a j ! = 0 )i f ( a j % a i J = = 0 )a j = O ;)p r i n t f (n nn) ;f o r ( i = 2 , n = 0 ;i = 1 0 0 ;i +) i f ( a i ! = 0 ) p r i n t f (n%5dn, a i ) ;n +;)i f ( n = = 1 0 ) p r i n t f (n nM) ;n
48、= 0 ;)p r i n t f (n nM) ;r e t u r n 0 ;6 - 2# i n c l u d e int main()int ij,min,temp,al 1;printf(nenter data:nn);for (i=l;i=10;i+)printf(a%d=,i);scanf(n%dn,&ai);)printf(,n,);printf(nThe orginal numbers:n);for (i=l;i=10;i+)printf(%5d,ai);printf(nnM);for (i=l;i=9;i+)min=i;for (j=i+1 ;jaj) min=j;tem
49、p=ai;ai=amin;amin=temp;)printf(nnThe sorted numbers:nn);for (i=l;i=10;i+)printf(%5d,ai);printf(n);return 0;)6-3#include int main()(int a33,sum=0;int i,j;printf(enter data:nn);for (i=0;i3;i+)for (j=0;j3;j+)scanf(3d”,&aiUD;for (i=0;i3;i+)sum=sum+aiil;printf(H sum=%6dnn ,sum);return 0;6-4#include int m
50、ain() intall= 1,4,6,9,13,16,19,28,40,100;int templ,temp2,number,end,i,j;printfCaiTay a:rT);for (i=0;iend)a10=number;elsefor (i=0;inumber)templ=ai;ai=number;for (j=i+ljll;j+)temp2=aj;a|jj=templ;templ=temp2;)break;printf(nNow array a:nM);for (i=0;il l; i+)printf(n%5dn,ai);printf(nnn);return 0;)6-5#inc
51、lude #define N 5int main() int aN,i,temp;printf(enter array a:rT);for (i=0;iN;i+)scanf(M%dn,&ai);printf(array a:n);for (i=0;iN;i+)printf(,%4d,ai);for (i=0;iN/2;i+) 循环的作用是将对称的元素的值互换 temp=ai;ai=aN-i-l;aN-i-l=temp;)printf(nNow,array a:n);for (i=0;iN;i+)printf(n%4d,ai);printf(HnM);return 0;6-6#include #
52、define N 10int main() int i,j,aNN;for (i=0;iN;i+)aii=l;aiOJ=l;)for (i=2;iN;i+)for (j=l;j=i-l;j+)aiU=ai-lU-l+ai4U;for (i=0;iN;i+)for (j=O;j=i;j+)printf(6d”,ai 皿) ;printf(nn);)printf(MnM);return 0;6-7#include int main() int a1515,i,j,k,p,n;P=l;while(p=l)printf(enter n(n=l 15):n);scanf(,%d,&n);if (n!=0
53、) & (n=15) & (n%2!=0)p=0;)for (i=l;i=n;i+)for (j=l;j=n;j+)ai 皿=0;j=n/2+1;alj=l;for (k=2;k=n*n;k+)i=i-l;j=j+l;if(in)i=i+2;j=j-l;)elseif(in)j=l;)if(aij=O)aij=k;elsei=i+2;j=j-l;aij=k;)for (i=l ;i=n;i+)for (j=l;j=n;j+)printf(%5d,aij|j);printf(n);)return 0;6-8#include #define N 4#define M 5int main()/ *
54、数组为4行5歹I*/int i,j,k,aNJMJ,max,maxj,flag;printf(please input matrix:nH);for (i=0;iN;i+)for (j=O;jM;j+)scanf(u%d;&aij);for (i=0;iN;i+)max=ai0;maxj=0;for (j=O;jmax)max=aijl;maxj=j;/ *输入数组*/ * 开始时假设ai 最 大 */ *将列号0 赋给maxj保 存 */ *找出第i 行中的最大数*/ *将本行的最大数存放在max中 */ *将最大数所在的列号存放在maxj中*1flag=l;for (k=0;kakmaxj
55、l)flag=0;continue;if(flag)/ * 先假设是鞍点,以 flag为 1代 表 */ *将最大数和其同列元素相比刃/ * 如果max不是同列最小,表示不是鞍点令flagl为 0 */ * 如果flagl为 1 表示是鞍点*/printf(,a%d%d=%dn,i,maxj,max); / * 输出鞍点的值和所在行列号 */break;if(!flag)printf(MIt is not exist!nn);return 0;/ * 如果flag为 0 表示鞍点不存在*/6-9#include #define N 15int main() int i,number,top,b
56、ott,mid,loca,alNJ,flag=l,sign;char c;printf(Menter data:n);scanf(”d”,&a0);i=l;while(i=ai-l)i+;elseprintf(enter this data againAn);printf(Mn);for (i=0;iN;i+)printf(n%5dn,ai);printf(n);while(flag)printf(input number to look fbr:n);scanf(d”,&number);sign=0;top=0; /top是查找区间的起始位置bott=N-l; /bott是查找区间的最末位置
57、if (numberaN-1 ) 要查的数不在查找区间内loca=-l; / / 表示找不到while (!sign) & (top=bott)mid=(bott+top)/2;if (number=amid)loca=mid;printf(nHas found %d, its position is %dnn,number,loca+1);sign=l;)else if (numberamid)bott=mid-1;elsetop=mid+l;)if(!sign|loca=-l)printf(cannot find %d.n,number);printf(continu or not(Y/N
58、)?);scanf(n %c,&c);if( c=N|c=n)flag=0;)return 0;6-10#include int main()int i,j,upp,low,dig,spa,oth;char text380;upp=low=dig=spa=oth=0;for (i=0;i3;i+) printf(Mplease input line %d:nH,i+l);gets(texti);for (j=0;j=,A,& textij=,a, & textij=0, & textij=,9,)dig+;else if (textijl=-)spa+;elseoth+;printf(nupp
59、er case: %dn,upp);printf(lower case: %dnu,low);printf(digit : %dnn,dig);printf(space : %dn,spa);printf(other : %dnoth);return 0;6-11#include int main() c h a ra5 = * ?* ?* mint i,j,k;char space=for (i=0;i5;i+) printf(nn);printf(M M);for (j=l;j=i;j+)printf(n%c,space);for (k=0;k5;k+)printf(M%cn,ak);)p
60、rintf(nnM);return 0;)6-12a-c#include int main() int j,n;char ch801, tran80;printfCinput cipher code:);gets(ch);printf(nncipher code :%s,ch);j=0;while (chj!=,O,) if(chj=A) & (chj=a,) & (chj=,z)tranj=219-chj;elsetranj=chj;j+;)n=j;printf(Hnoriginal text:);for (j=O;jn;j+)putchar(tran|jj);printf(Mnn);ret
61、urn 0;6-12b#include int main()intj,n;char ch80J;printf(input cipher code:nH);gets(ch);printf(nncipher code:%snu,ch);j=0;while (chj!=O,) if(chj=A,) & (ch|j=,a,) & (ch|jj=z)chj=219-chUJ;elsechj=chfj;j+;)n=j;printfCoriginal text:);for (j=O;jny+)putchar(chj);printf(nH);return 0;6-13#include int main() c
62、harsl80,s240;int i=0,j=0;printf(input string 1:0);scanf(n%ssl);printf(ninput string2:1 1);scanf(n%s;s2);while (sli!= ,0*)i+;while(s2j!=0,)sli+卜s2j+;sli=0,;printf(MnThe new string is:%snM,sl);return 0;)6-14#include int main() int i,resu;charsl100,s2100;printf(Minput stringl:u);gets(sl);printf(Mninput
63、 string2:H);gets(s2);i=0;while (sli=s2i) & (sli!=!0,)i+;if(slij=O & s2iJ=,0,)resu=0;elseresu=sli-s2i;printf(nresult:%d.nresu);return 0;)6-15#include #include int main() charsl80,s280;int i;printf(input s2:);scanf(,%ss2);for (i=0;i=strlen(s2);i4-+)sli=s2i;printf(ns 1 :%snH,s 1);return 0;第 7 章用函数实现模块化
64、程序设计1707.1 为什么要用函数1707.2 怎样定义函数1727.2.1 为什么要定义函数1727.2.2 定义函数的方法1737.3 调用函数1747.3.1 函数调用的形式1747.3.2 函数调用时的数据传递1757.3.3 函数调用的过程1777 3 4 函数的返回值1787.4 对被调用函数的声明和函数原型1797.5 函数的嵌套调用1827.6 函数的递归调用1847.7 数组作为函数参数1927.7.1 数组元素作函数实参1937.7.2 数组名作函数参数1947.7.3 多维数组名作函数参数1977.8 局部变量和全局变量1997.8.1 局部变量1997.8.2 全局变
65、量2007.9 变量的存储方式和生存期2047.9.1 动态存储方式与静态存储方式2047.9.2 局部变量的存储类别2057.9.3 全局变量的存储类别2087.9.4 存储类别小结2127.10 关于变量的声明和定义2147.11 内部函数和外部函数2157.11.1 内部函数2157.11.2 外部函数215习题2187-1-1#include int main()int hcf(int,int);int lcd(int,int,int);int u,v,h,l;scanf(H%d,%dH,&u,&v);h=hcf(u,v);printf(,H.C.F=%dnM,h);l=lcd(u,v
66、,h);printf(”L.C.D=%dn”J);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(intjnt);void lcd(int,int);int u,v;scanf(n%d,%d,&u,&v);hcf(u,v);lcd(u,v);printf(nH.C.F=%dn,Hcf);p
67、rintf(L.C.D=%dnH,Lcd);return 0;)void 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;)Hcf=v;)void lcd(int ujnt v)(Lcd=u*v/Hcf;7-2#include #include float xl,x2,disc,p,q;int main()void greater_than_zero(float,float);void equal_to_zero(float,float);void smaller_than_zero(float,float
68、);float a,b,c;printf(Hinput a,b,c:n);scanf(n%f,%f,%r,&a,&b,&c);printf(Mequation: %5.2f*x*x+%5.2f*x+%5.2f=0nn,a,b,c);disc=b*b-4*a*c;printf(nroot:nu);if (disc0)(greater_than_zero(a,b);printf(x 1 =%fttx2=%ftn,x l,x2);)else if (disc=0)equal_to_zero(a,b);printf(Mx 1 =%fttx2=%ftnM,x l,x2);Ielsesmal ler_th
69、an_zero(a,b);printf(x 1 =%f+%fitx2=%f-%fin,p,q,p,q);)return 0;)void greater_than_zero(float a,float b)x 1 =(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);)void equal_to_zero(float a,float b)(xl=x2=(-b)/(2*a);)void smaller_than_zero(float a,float b)(p=-b/(2*a);q=sqrt(-disc)/(2*a);7-3#include int main()
70、int prime(int);int n;printf(input an integer:u);scanf(,%d&n);if(prime(n)printf(n%d is a prime.nu,n);elseprintf(%d is not a prime.nH,n);return 0;)int prime(int n)int flag=l,i;for (i=2;in/2 & flag= 1 ;i+)if( n%i=O)flag=O;return(flag);)7-4#include #define N 3int arrayNN;int main() void convert(int arra
71、y3);int i,j;printf(Minput array:nH);for (i=0;iN;i+)for (j=O;jN;j+)scanf(%du,&arrayij);printf(nnoriginal array :n);for (i=0;iN;i+)for (j=O;jN;j+)printf(%5d,arraylijjj);printf(nH);)convert(array);printf(Hconvert array:nM);for (i=0;iN;i+)for(j=0;jN;j+)printf(%5d,arrayij);printf(n);)return 0;)void conve
72、rt(int array3)intfor (i=0;iN;i+)for (j=i+l;jN;j+)t=arrayij;arrayij|j=array|jjlij;arrayji=t;)#include #include ini main()void inverse(char str);char str100;printf(ninput string:0);scanf(s”,str);inverse(str);printfC* in verse string:%snstr);return 0;)void inverse(char str)char t;int i,j;for (i=0,j=str
73、len(str);i(strlen(str)/2);i+,j )t=stri;stri=strj-l;str|j-lj=t;)7-6#include int main()void concatenate(char string 1 J,char string2,char stringJ);char slf 1001,s2100,s100;printf(Minput string l:u);scanf(”s”,sl);printf(Minput string2:u);scanf(n%sn,s2);concatenate(s l,s2,s);printf(MnThe new string is %
74、snu,s);return 0;)void concatenate(char string 1,char string2,char stringf)int ij;for (i=O;stringlfi!=O,;i+)stringi=stringli;for(j=0;string2j!=0,;j+)stringi+j=string2j;string)7-7#include int main()void cpy(char ,char );char str8O,c8Ol;printf(input string:);gets(str);cpy(str,c);printf(MThe vowel lette
75、rs are:%sn,c);return 0;)void cpy(char s,chai c) int i,j;for (i=0,j=0;si!=0*;i+4-)if(si=,al|si=,A|si=,e,|si=E,|si=T|si=T|si=,o|si=,O|si=,u,|si=,U,)cj=si;j+;)cU=W;)7-8#include #include int main()char str 80;void insert(char );printf(ninput four digits:);scanf(H%sM,str);insert(str);return 0;)void inser
76、t(char str)inti;for (i=strlen(str);iO;i-)str2*i=stri;)printf(output:n%sn,str);)7-9#include int letter,digit,space,others;int main()void count(char );char text80;printf(ninput string:nu);gets(text);printf(string:n);puts(text);letter=0;digit=O;space=0;others=0;count(text);printf(Mnletter:%dndigit:%dns
77、pace:%dnothers:%dn,letter,digit,space,others);return 0;)void count(char str)inti;for (i=0;stri!=W;i+)if(stri=,a,& strliJ=,A, & strli=0, & str i=9,)digit+;else if (stri=32)space+;elseothers+;)7-10#include #include int main()int alphabetic(char);int longest(char );int i;char line100;printfCinput one l
78、ine:nM);gets(line);printf(MThe longest word is :);for (i=longest(line);alphabetic(linei);i+)printf(n%cn,linei);printf(n);return 0;)int alphabetic(char c)if(c=a, & c=,A,&c=z,)return(l);elsereturn(O);Iint longest(char stringlJ)int len=O,i,length=O,flag= 1 ,place=0,point;for (i=O;i=length)length=len;pl
79、ace=point;len=0;)return(place);7-11#include #include #define N 10char strN;int main()void sort(char );int i,flag;for (flag=l;flag=l;)printf(Hinput string:nn);scanf(%s,&str);if (strlen(str)N)printf(nstring too long,input again!);elseflag=0;)sort(str);printf(nstring sorted:n);for (i=0;iN;i+)printf(%c”
80、,stiji);printf(n)return 0;)void sort(char strJ)int i,j;char t;for(j=l;jN;j+)for (i=O;(istri+l)t=stri;stri=stri+l;stri+1 =t;7-12#include #include int main()float solut(float a,float b,float c,float d);float a,b,c,d;printf(input a,b,c,d:u);scanf(%f,%f,%f,%F,&a,&b,&c,&d);printf(x=%10.7fn,solut(a,b,c,d)
81、;return 0;float solut(float a,float b,float c,float d)float x=l,xO,f,fl;doxO=x;f=(a*xO+b)*xO+c)*xO+d;fl=(3*a*x0+2*b)*x0+c;x=xO-f/fl;)while(fabs(x-xO)= 1 e-3);retum(x);7-13#include #define N 10#define M 5float scoreNJlMJ;float a_stuN,a_courM;int r,c;int main() int i,j;float h;float s_var(void);float
82、highest();void input_stu(void);void aver_stu(void);void aver_cour(void);input_stu();aver_stu();aver_cour();printf(n NO. courl cour2 cour3 cour4 cour5for(i=0;iN;i+)printf(n NO %2dfor(j=0;jM;j+)printf(n%8.2f,scoreilj);printf(%8.2fn”,a_stu(j);)printf(nnaverage:);for (j=O;jM;j+)printf(,%8.2f,a_cour|jj);
83、avernH);printf(nM);h=highest();printf(nhighest:%7.2f NO. %2d course %2dn,h,r,c);printf(variance %8.2fnu,s_var();return 0;)void input_stu(void)int i,j;for (i=0;iN;i+)printf(Hninput score of student%2d:n,i+1);for (j=O;jM;j+)scanf(u%f &scorei j);void aver_stu(void)int i,j;float s;for (i=0;iN;i+)for (j=
84、O,s=O;jM;j+)s+=scoreij;a_stuli=s/5.0;)void aver_cour(void)int i,j;float s;for (j=O;jM;j+)s=0;for (i=0;iN;i+)s+=scoreij;a_courj=s/(float)N;)float highest()float high;int i,j;high=score00;for (i=0;iN;i+)for (j=O;jhigh)high=scoreij;r=i+l;c =j+1;)retum(high);)float s_var(void)int i;float sumx,sumxn;sumx
85、=0.0;sumxn=0.0;for (i=0;iN;i+)sumx+=a_stui*a_stui;sumxn+=a_stui;)retum(sumx/N-(sumxn/N)*(sumxn/N);7-*14#include #define N 10#define M 5float scoreNM;float a_stuNJ,a_courIM J;int r,c;int main() int i,j;float h;float s_var(void);float highest();void input_stu(void);void aver_stu(void);void aver_cour(v
86、oid);input_stu();aver_stu();aver_cour();printf(nn NO. courl cour2 cour3 cour4 cour5 avernH);for(i=0;iN;i+)printf(n NO %2d i+l);for(j=0;jM;j+)printf(n%8.2fscoreij);printf(n%8.2fn,a_stui);)printf(Mnaverage: );for (j=O;jM;j+)printf(M%8.2f,a_courj);printf(n!);h=highest();printf(highest:%7.2f NO. %2d cou
87、rse %2dn”,h,r,c);printf(Mvariance %8.2fn,s_var();return 0;)void input_stu(void)int i,j;for (i=0;iN;i+)printf(ninput score of student%2d:nn,i+1);for (j=O;jM;j+)scanf(u%f &scorei J j J);)void aver_stu(void)int ij;float s;for (i=0;iN;i+)for (j=O,s=O;jM;j+)s+=scorei|jj;a_stui=s/5.0;)void aver_cour(void)
88、int ij;float s;for (j=O;jM;j+)s=0;for (i=0;iN;i+)s+=scoreifj;a_cour|j=s/(float)N;float highest()float high;int ij;high=scoref00;for (i=0;iN;i+)for (j=O;jhigh)high=scoreij;尸i+1;c=j+l;)return(high);)float s_var(void)int i;float sumx,sumxn;sumx=0.0;sumxn=0.0;for (i=O;iN;i+)sumx+=a_stu i *a_stui ;sumxn+
89、=a_stufi;)return(sumx/N-(sumxn/N)*(sumxn/N);)7-15#include #include #define N 10int main()void input(int fl,char name8);void sort(int U,char namel8J);void search(int ,int ,char name8);int numlN,number,flag=l,c;char nameN8;input(num,name);30rt(num,name);while (flag= 1)printf(ninput number to look for:
90、);scanf(d”,&number);search(number,num,name);printf(ncontinue ot not(Y/N)?0);getchar();c=getchar();if (c=,N,|c=,n,)flag=O;)return 0;)void input(int num,char nameN8)int i;for (i=0;iN;i+)printf(Hinput N O .:);scanf(,%d,&numi);printf(input name:);getchar();gets(namei);)void sort(int num,char nameNJl8J)
91、int i,j,min,tempi;char temp2l8J;for (i=0;iN-l;i+)min=i;for (j=i;jnumj) min=j;templ=numi;strcpy(temp2,namelij);numi=nummin;strcpy (namei,namemin);nummin=templ;strcpy(namemin,temp2);)printf(Mn result:nM);for (i=0;iN;i+)printf(*n %5d% 1 OsH,numi,namei);void search(int n,int num,char nameN8)int top,bott
92、,mid,loca,sign;top=0;bott=N-l;loca=0;sign=l;if (nnumN-l)loca=-l;while(sign=l) & (top=bott)mid=(bott+top)/2;if (n=nummid)loca=mid;printf(MNO. %d , his name is %s.n,n,nameloca);sign=-1;)else if (nnummid)bott=mid-l;elsetop=mid+l;)if (sign=l | loca=-l)printf(%d not been found.n,n);7-16#include #define M
93、AX 1000int main() int htoi(char s);int c,i,flag,flag1;char tMAX;i=0;flag=0;flag 1 = 1;printf(input a HEX number:);while(c=getchar()!=,O, & i=O & c=,a, & c=A & c=0& si=a & si=,A, & si=fF)n=n* 16+siA+10;return(n);)7-17#include int main() void convert(int n);int number;printf(ninput an integer: );scanf
94、(%d,&number);printf(noutput: );if (number0)putchar(,-1);putchar(, *); / * 先 输 出 一 个 号 和 空 格 * /number=-number;)convert(number);printfCAn0);return 0;)void convert(int n) int i;if (i=n/10)!=0)convert(i);putchar(n%10+,0,);putchar(32);)7-18#include int main()int sum_day(int month,int day);int leap(int y
95、ear);int year,month,day,days;printf(input date(year,month,day):,1);scanf(d,%d,%d”,&year,&month 成 day);printf(n%d/%d/%d ,year,month,day);days=sum_day(month,day); / * 调用函数 sum_day */if(leap(year)&month=3) / * 调用函数 leap*/days=days+1;printf(is the %dth day in this year.n,days);return 0;)int sum_day(int
96、month,int day) / * 函数 sum_day:计算日期 * /int day_tab13=0,31,28,31,30,31,30,31,31,30,31,30,31);int i;for (i=l;imonth;i+)day+=day_tabi; / * 累加所在月之前天数* /retum(day);/ * 函数leap:判断是否为闰年* /int leap(int year)intleap;leap=year%4=0&year% 100! =0|y ear%400=0;retum(leap);)struct student bLB= 103,MZhangM, 104; Man,
97、 105; Chen, 107,nGuoM, 108,HluiH);int i;struct student *p,*pl,*p2,*headl,*head2;headl=a;head2=b;printf(n list A: n);for (pl=headl,i=l;i=LA;i+)if(inext=a+i;else pl-next=NULL;printf(%4d%8sn,p 1 -num,p l-name);if(inext;)printf(Mn list B:rT);for (p2=head2,i=l ; i=LB;i+)if (inext=b+i;else p2-next=NULL;pr
98、intf(,%4d%8sn,p2-num,p2-name);if (inext;)pl=headl;while(pl!=NULL)p2=head2;while (pl-num != p2-num) & (p2-next!=NULL)p2=p2-next;if (pl-num = p2-num)if (pl=headl)headl=pl-next;elsep-next=p 1 -next;p 1 =p I -next;)elsep=p l;pl=pl -next;)printf(nresult:n);pl=headl;while(pI!=NULL)printf(n%4d %7s n,p 1 -num,p 1 -name);pl=pl-next;return 0;