C语言程序设计 - 谭浩强 - 第三版 - 课后习题答案
更新时间:2023-03-08 07:15:20 阅读量: 综合文库 文档下载
- c语言程序设计课后题答案推荐度:
- 相关推荐
1.5请参照本章例题,编写一个C程序,输出以下信息: ************************** Very Good!
************************** 解: mian()
{printf(“**************************”); printf(“\\n”);
printf(“Very Good!\\n”); printf(“\\n”);
printf(“**************************”); }
1.6 编写一个程序,输入a、b、c三个值,输出其中最大值。 解: mian()
{int a,b,c,max;
printf(“请输入三个数a,b,c:\\n”); scanf(“%d,%d,%d”,&a,&b,&c); max=a; if(max
printf(“最大数为:“%d”,max); }
第三章
3.6写出以下程序运行的结果。 main()
{char c1=’a’,c2=’b’,c3=’c’,c4=’\\101’,c5=’\\116’; printf(“a?%c\\tc%c\\tabc\\n”,c1,c2,c3); printf(“\\t\\b%c %c”,c4,c5); } 解:
aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabc AㄩN
3.7 要将\译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母\后面第4个字母是\.\代替\。因此,\应译为\。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。 解:
#include
{ char c1=’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\}
运行结果: 密码是Glmre
3.9求下面算术表达式的值。 (1)x+a%3*(int)(x+y)%2/4 设x=2.5,a=7,y=4.7
(2)(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写出程序运行的结果。 main() {int i,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.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.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’。想得到以下输出格式和结果,请写出程序(包括定义变量类型和设计输出)。 a=_3_ _b=_4_ _c=_5
x=1.200000,y=2.400000,z=-3.600000 x+y=_3.600_ _y+z=-1.20_ _z+x=-2.40 c1=ˊaˊ_or_97(ASCII) c2=ˊbˊ_or_98(ASCII) main()
{int a=3,b=4,c=5;
long int u=51274,n=128765; float x=1.2,y=2.4,z=3.6; char c1=’a’,c2=’b’;
printf(\printf(\
printf(\printf(\
printf(\n\ printf(\n\ }
4.7用scanf下面的函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=ˊAˊ,c2=ˊaˊ,问在键盘上如何输入? main() {
int a,b;float x,y;char c1c2; scanf(\,&a,&b); scanf(\,&y);
scanf(\,&c1,&c2); }
a=3_b=7
_x=8.5_y=71.82 _c1=A_c2=a
4.8设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 main()
{float r,h,C1,Sa,Sb,Va,Vb; scanf(\C1=2*3.14*r; Sa=3.14*r*r; Sb=4*Sa;
Va=4*3.14*r*r*r/3; Vb=Sa*h;
printf(\
printf(\}
4.9输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9
输出要求有文字说明,取位2小数。 main() {float F,c;
scanf(\c=5*(F-32)/9; printf(\
}
4.10编程序,用getchar函数读入两个字符给c1、c2,然后分别用函数和函数输出这两个字符。并思考以下问题:(1)变量c1、c2应定义为字符型或整形?抑二者皆可?(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整形变量与字符变量是否在任何情况下都可以互相代替?如: char c1,c2; 与
int c1,c2;
是否无条件的等价? #include\main()
{char c1,c2;
c1=getchar();c2=getchar();
putchar(c1);putchar(’\\n’);putchar(c2);putchar(’\\n’); }
#include\main()
{char c1,c2;
c1=getchar();c2=getchar();
printf(\printf(\}
第五章
5.1 什么是算术运算?什么是关系运算?什么是逻辑运算? 解:略。
5.2 C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?
解:设有一个逻辑表达式,若其结果为“真”,则以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)&&0 (5) !(a+b)+c-1&&b+c/2 解: (1) 0 (2) 1 (3) 1 (4) 0
(5) 1
5.4 有3个整数a、b、c,由键盘输入,输出其中最大的数。 解: 方法一
#include
printf(\请输入3个整数:\scanf(\if(a
if(b else if(a 方法二:使用条件表达式,可以使程序更加简明、清晰。 程序如下: #include { int a,b,c,temp,max; printf(\请输入3个整数:\scanf(\temp=(a>b)?a:b; max=(temp>c)?temp:c; printf(\个整数的最大数是%d\\n”,max); } 5.5 有一函数: 写一程序,输入x值,输出y值。 解: #include printf(\输入x:\scanf(\ if(x<1) { y=x; printf(\ } else if (x<10) { y=2*x-1; printf(\} else { y=3*x-11; printf(\} } 5.6 给一个百分制成绩,要求输出等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’,80~90分为’B’,70~79分为’C’,60分以下为’D’。 解: 程序如下: #include { float score; char grade; case 2: printf(\请输入学生成绩:\scanf(\ while(score>100||(score<0) { printf(\输入有误,请重新输入:\scanf(\} 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 1: case 0: grade=’E’; } printf(\成绩是%5.1f,相应的等级是%c。\\n\} 说明:对输入的数据进行检查,如小于0或大于100,要求重新输入。(int)(score/10)的作用是将 (score/10) 的值进行强制类型转换,得到一个整型值。 5.7 给定一个不多于5位的正整数,要求:① 求它是几位数;② 分别打印出每一位数字;③ 按逆序打印出各位数字。例如原数为321,应输出123。 解: #include { long int num; int indiv,ten,hundred,thousand,ten_thousand,place; printf(\请输入一个整数(0~99999):\scanf(\if (num>9999) place=5; else if(num>999) place=4; else if(num>99) place=3; else if(num>9) place=2; else place=1; printf(\ten_thousand=num/10000; thousand=num/1000; hundred=num/100; ten=num0/10; indiv=num; switch(place) { case 5: printf(\ printf(\反序数字为;\ printf(\ break; case 4: printf(\ printf(\反序数字为:\ printf(\ break; case 3: printf(\ printf(\反序数字为:\ printf(\ break; case 2: printf(\ printf(\反序数字为:\ printf(\ break; case 1: printf(\ printf(\反序数字为:\ printf(\ break; } } 5.8 企业发放的奖金根据利润提成。利润I低于或等于10万元时,奖金可提成 10% ;利润高于10万元,低于20万元(1000001000000时,超过100万元的部分按1%提成。从键盘输入当月利润I,求应发放奖金总数。要求:(1)用if语句编程序;(2)用switch语句编程序。 解:计算利润时,要特别注意不同利润的不同提成比例。例如,利润为15万元,其中有10万元按10%的比例提成,另外5万元则按7.5%提成。 (1) 用if语句编程序。 #include float bonus,bon1,bon2,bon4,bon6,bon10; 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(\请输入利润i:\scanf(\if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bon1+(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.015; else bonus=bon10+(i-1000000)*0.01; printf(”奖金是.2f\\n\} 此题的关键在于正确写出每一区间的奖金计算公式。例如利润在10万元至20万时,奖金应由两部分组成:①利润为10万元时应得的奖金。即100000ⅹ0.1;②10万元以上部分应得的奖金。即(num-100000)ⅹ0.075。同理,20万~40万这个区间的奖金也应由两部分组成:①利润为20万元时应得的奖金,即100000ⅹ0.1ⅹ10万ⅹ0.075;②20万元以上部分应得的奖金,即(num-200000)ⅹ0.05。程序中先把10万、20万、40万、60万、100万各关键点的奖金计算出来,即bon1、bon2、bon4、bon6、hon10;然后再加上各区间附加部分的奖金。 (2) 用switch语句编程序。 输入利润i,确定相应的提成等级branch 根据branch确定奖金值 0 奖金=i*0.1 1 奖金=bon1+(i-105)*0.075 2 奖金=bon2+(i-2*105)*0.05 3 4 奖金=bon4+(i-4*105)*0.03 5 6 奖金=bon6+(i-6*105)*0.015 7 8 9 10 奖金=bon10+(i-106)*0.01 输出奖金 #include float bonus, bon1, bon2, bon4, bon6, bon10; int c; 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(\请输入利润i:\scanf(\c=i/100000; if(c>10) c=10; switch(c) { case 0: bonus=1*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; case 10: bonus=bon10+(i-1000000)*0.01; } printf(\奖金是.2f\ } 5.9 输入4个整数,要求按由大到小的顺序输出。 解:此题采用依次比较的方法排出其大小顺序。在学习了循环和数组以后,可以有更多的排序方法。 #include { int t,a,b,c,d; printf(\请输入4个整数:\ scanf(\ printf(\if(a>b) {t=a; a=b; b=t;} if(a>c) {t=a; a=c; c=t;} if(a>d) {t=a; a=d; d=t;} if(b>c) {t=a; b=c; c=t;} if(b>d) {t=b; b=d; d=t;} if(c>d) {t=c; c=d; d=t;} printf(\排序结果如下:\\n\ printf(\} 5.10 有4个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1。这4个塔的高度分别为10m。塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。 程序如下: #include 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(\ d1=(x-x1)*(x-x1)+(y-y1)*(y-y1); d2=(x-x2)*(x-x2)+(y+y2)*(y+y2); d3=(x+x3)*(x+x3)+(y-y3)*(y-y3); d4=(x+x4)*(x-x4)*(y+y4)*(y+y4); if(d1>1&&d2>1&&d3>1&&d4>1) h=0; printf(\该点高度为%d\\n\ } 第六章 第六章 循环控制 6.1输入两个正整数m和n,求其最大公约数和最小公倍数。 main() {long m,n,i=1,j,s; scanf(\for(;i<=m&&i<=n;i++) {if(m%i==0&&n%i==0) s=i;} if(m>=n) j=m; else j=n; for(;!(j%m==0&&j%n==0);j++); printf(\} 6.2输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #include\main() {char c;int i=0,j=0,k=0,l=0; while((c=getchar())!=’\\n’) {if(c>=65&&c<=90||c>=97&&c<=122) i++; else if(c>=48&&c<=57) j++; else if(c==32) k++; else l++;} printf(\} 6.3求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(n=5),n由键盘输入。 #include\main() {int n,sum=0,i=1,s=2; scanf(\while(i<=n) {sum=sum+s;s=s+2*pow(10,i); i++;} printf(\} 6.4 求 ,(即求1!+2!+3!+4!+5!+…+20!) main() {int n,i=1;long sum=0,s=1; scanf(\ while(i<=n) {s=s*i;sum=sum+s;i++;} printf(\ } 6.5 求 main() {double i=1,j=1,k=1,s1=0,s2=0,s3=0,sum; for(;i<=100;i++) s1=s1+i; for(;j<=50;j++) s2=s2+j*j; for(;k<=10;k++) s3=s3+1/k; sum=s1+s2+s3; printf(\} 6.6打印出所有\水仙花数\,所谓\水仙花数\是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=1^3+5^3+3^3。 #include\main() {int x=100,a,b,c; while(x>=100&&x<1000) {a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b; if(x==(pow(a,3)+pow(b,3)+pow(c,3))) printf(\} 6.7一个数如果恰好等于它的因子之和,这个数就称为\完数\。例如,6的因子为1、2、3,而6=1+2+3,因此6是\完数\。编程序找出1000之内的所有完数,并按下面格式输出其因子: 6 its factors are 1、2、3 main() {int m,i,j,s; for(m=6;m<10000;m++) {s=1; for(i=2;i {printf(\printf(\} } 或 main() {int m,i,j,s; for(m=6;m<1000;m++) {s=m-1; for(i=2;i {printf(\printf(\} } 6.8有一分数序列: 求出这个数列的前20项之和。 main() {int i=1,n;double t,x=1,y=2,s,sum=0; scanf(\ while(i<=n) {s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;} printf(\ } 6.9一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米?第10次反弹多高? main() {int i,n;double h=100,s=100; scanf(\for(i=1;i<=n;i++) {h*=0.5;if(i==1) continue;s=2*h+s;} printf(\} 6.10猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。 main() {int i=1,sum=0; for(;i<=10;sum=2*sum+1,i++); printf(\} 6.11用迭代法求 。求平方根的迭代公式为: 要求前后两次求出的得差的绝对值少于0.00001。 #include\main() {float x0,x1,a; scanf(\x1=a/2; do {x0=x1;x1=(x0+a/x0)/2;} while(fabs(x0-x1)>=0.00001); printf(\} 6.12 用牛顿迭代法求方程在1.5附近的根。 main() {double x,y;x=1.5; do{y=2*x*x*x-4*x*x+3*x-6; x=x-y/(6*x*x-8*x+3);} while(y!=0); printf(\} 6.13用二分法求方程在(-10,10)之间的根 main() {double x1,x2,y1,y2;x1=-10;x2=10; do{y1=2*x1*x1*x1-4*x1*x1+3*x1-6; x1=x1-y1/(6*x1*x1-8*x1+3);} while(y1!=0); do {y2=2*x2*x2*x2-4*x2*x2+3*x2-6; x2=x2-y2/(6*x2*x2-8*x2+3);} while(y2!=0); printf(\} 6.14打印以下图案 * * * * * * * * * * * * * * * * * * * * * * * * * #include\main() {int i,j,k; for(i=0;i<=3;i++) {for(j=0;j<=2-i;j++) printf(\ for(k=0;k<=2*i;k++) printf(\ printf(\ } for(i=0;i<=2;i++) {for(j=0;j<=i;j++) printf(\ for(k=0;k<=4-2*i;k++) printf(\ printf(\ } } 第七章 第七章 数组 7.1 用筛法求之内的素数。 main() { int i,j,a[100]; for(i=2;i<100;i++) { a[i]=i; for(j=2;j<=i;j++) {if(j if(a[i]%j==0) break; if(a[i]-j==0) printf(\} } printf(\} 或 #include\main() {static int i,j,k,a[98]; for(i=2;i<100;i++) {a[i]=i;k=sqrt(i); for(j=2;j<=a[i];j++) if(j if(j>=k+1) printf(\} printf(\} 7.2用选择法对10个整数从小到大排序。 main() { int i,j,a[10],t; for(i=0;i<10;i++) scanf(\for(j=1;j<10;j++) for(i=0;i<=9-j;i++) if(a[i]>a[i+1]) {t=a[i+1];a[i+1]=a[i];a[i]=t;} for(i=0;i<10;i++) printf(\} 或 main() {static int a[10],i,j,k,t; for(i=1;i<11;i++) scanf(\for(j=1;j<10;j++) for(i=1;i<=10-j;j++) if (a[i]>a[i+1]) {t=a[i+1];a[i+1]=a[i];a[i]=t;} for(i=1;i<11;i++) printf(\printf(\} 7.3求一个3×3矩阵对角线元素之和。 main() {int i=0,j=0,a[3][3],s1,s2; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(\ s1=a[0][0]+a[1][1]+a[2][2]; s2=a[0][2]+a[1][1]+a[2][0]; printf(\} 或 main() { static int i,j,s1,s2,a[3][3]; for(i=1;i<=3;i++) for(j=1;j<=3;j++) scanf(\ s1=a[1][1]+a[2][2]+a[3][3]; s2=a[1][3]+a[2][2]+a[3][1]; printf(\} 7.4已有一个已排好的数组今输入一个数要求按原来排序的规律将它插入数组中。 main() { static int a[10]={1,7,8,17,23,24,59,62,101};int i,j,t; scanf(\for(i=9;i>0;i--) if(a[i] {t=a[i-1];a[i-1]=a[i];a[i]=t;} for(i=0;i<10;i++) printf(\} 或 main() { static int a[5]={1,4,5,6,7}; int i,t,b; scanf(\for(i=0;i<5;i++) {if(b<=a[i]) {t=a[i];a[i]=b;b=t;} printf(\printf(\} 7.5将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1,4,5,6,8。 main() { int i,b[10]; for(i=0;i<10;i++) scanf(\for(i=9;i>-1;i--) printf(\printf(\ 7.6打印出以下杨辉三角形(要求打印出10行)。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ∶ ∶ main() { static int m,n,k,b[15][15]; b[0][1]=1; for(m=1;m<15;m++) { for(n=1;n<=m;n++) { b[m][n]=b[m-1][n-1]+b[m-1][n]; printf(\ } printf(\} } } 或 main() { int i,j,n,k,a[10][10]; static a[][1]={{1},{1},{1},{1},{1},{1},{1},{1},{1},{1}}; a[1][1]=1; for(k=2,k<11;k++) for(i=2;i<=k;i++) for(j=2;j<=i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(k=1;k<11;k++) for(i=1;i<=k;i++) for(j=1;j<=i;j++) printf(\} 7.7 打印“魔方阵”,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为 8 1 6 3 5 7 4 9 2 要求打印出由1~n2的自然数构成的魔方阵。 解: #include { int a[16][16],i,i,k,p,m,n; p=1; while(p==1) { printf(\~15):\ scanf(\ if((n!=0)&&(n<=15)&&(n%2!=0)) p=0; } for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i][j]=0 7-8 #include int a[4][4],i,j,max,min,k1,k2,flag; printf(\输入一个4*4的数组\\n\\n\ for(i=0;i<4;i++) { for(j=0;j<4;j++) { scanf(\ } } printf(\鞍点为:\\n\\n\ for(i=0;i<4;i++) { max=a[i][0]; for(j=0;j<4;j++) { if(max<=a[i][j]) { max=a[i][j]; k1=j; } } min=a[0][k1]; for(j=0;j<4;j++) { if(min>=a[j][k1]) { min=a[j][k1]; k2=j; } } if((max!=min)) flag=0; else { flag=1; printf(\ break; } } if(flag==0) printf(\不存在\\n\\n\} 7-9 #include { float a[15]={100,98,65,55,34,23,23,12,11,9,7,6,4,3,2},n; int i,low,high,mid; printf(\原数组为:\\n\\n\ for(i=0;i<15;i++) { printf(\ } printf(\输入一个数n\\n\\n\ scanf(\ low=0; high=14; i=0; while(low<=high) { mid=(low+high)/2; if(a[mid]==n) { printf(\该数是数组中第%d个元素\\n\\n\ i++; break; } else if(a[mid] if(i==0) printf(\无此数!!\\n\\n\} 7-10 #include char a[3][80]; int i,j,upon=0,low=0,num=0,spa=0,oth=0; for(i=0;i<3;i++) { printf(\输入第%d行文字\\n\\n\ gets(a[i]); for(j=0;j<80&&a[i][j]!='\\0';j++) { if(a[i][j]>='A'&&a[i][j]<='Z') upon+=1; else if(a[i][j]>='a'&&a[i][j]<='z') low+=1; else if(a[i][j]>=48&&a[i][j]<=57) num+=1; else if(a[i][j]==' ') spa+=1; else oth+=1; } } printf(\英文大写字母:%d个\\n\\n\ printf(\英文小写字母:%d个\\n\\n\ printf(\数字: %d个\\n\\n\ printf(\空格: %d个\\n\\n\ printf(\其他字符: %d个\\n\\n\} 7-11 #include int i,j; for(i=0;i<5;i++) { for(j=0;j<=i;j++) { printf(\\ } for(j=i;j printf(\ } printf(\ } } 7-12 #include char a[80],b[80]; int i,j; printf(\输入密码\\n\\n\ gets(a); for(i=0;i<80&&a[i]!='\\0';i++) { if((a[i]>='A')&&(a[i]<='Z')) { b[i]=155-a[i]; } else if((a[i]>='a')&&(a[i]<='z')) { b[i]=219-a[i]; } else b[i]=a[i]; } b[i]='\\0'; printf(\密文为:\\n\\n\ puts(a); printf(\原文为:\\n\\n\ puts(b); } 7-13 #include char a[80],b[80]; int i,j,k; printf(\输入第1个字符串\\n\\n\ gets(a); printf(\输入第2个字符串\\n\\n\ gets(b); for(i=0;i<80;i++) { if(a[i]=='\\0') { k=i; for(j=0;j<80&&b[j]!='\\0';j++) { a[k]=b[j]; k++; } a[k]='\\0'; break; } } printf(\连接后字符串为:\\n\\n\ puts(a); } 7-14 #include char a[80],b[80]; int i,j,k; printf(\输入第1个字符串\\n\\n\ gets(a); printf(\输入第2个字符串\\n\\n\ gets(b); for(i=0;(i<80)&&(a[i]!='\\0')&&(b[i]!='\\0');i++) { k=a[i]-b[i]; if(k>0) { printf(\字符串a大于字符串b:M\\n\\n\ break; } else if(k<0) { printf(\字符串a小于字符串b:M\\n\\n\ break; } else k=0; } if(k==0) printf(\字符串a等于字符串b:M\\n\\n\} 7-15 #include char s1[80],s2[80]; int i,j; printf(\输入数组s1\\n\\n\ gets(s1); printf(\输入数组s2\\n\\n\ gets(s2); for(i=0;i<80&&s2[i]!='\\0';i++) { s1[i]=s2[i]; } s1[i]='\\0'; printf(\复制后的数组为:\\n\\n\ puts(s1); } 第八章 8-1 #include int max_div(int,int); int min_mul(int,int); int m,n; printf(\输入两个整数\\n\\n\ scanf(\ if(max_div(m,n)==0) printf(\无最大公约数为\\n\\n\ else printf(\最大公倍数为:%d\\n\\n\ printf(\最大公倍数为:%d\\n\\n\} int max_div(int k1,int k2) { int min(int,int); int i,k,flag; k=min(k1,k2); for(i=k;i>1;i--) { if((k1%i==0)&&(k2%i==0)) { return(i); flag=1; break; } else flag=0; } if(flag==0) return(0); } int min_mul(int k1,int k2) { int max(int,int); int i,k; k=max(k1,k2); for(i=k;;i++) { if((i%k1==0)&&(i%k2==0)) { return(i); break; } } } int min(int k1,int k2) { int min; min=k1; if(k1>k2) min=k2; return(min); } int max(int k1,int k2) { int max; max=k1; if(k1 #include void root1(float,float,float); void root2(float,float,float); void root3(float,float,float); float a,b,c,k; printf(\输入a,b,c的值\\n\\n\ scanf(\ k=b*b-4*a*c; if(k>0) root1(a,b,c); else if(k==0) root2(a,b,c); else root3(a,b,c); } void root1(float a,float b,float c) { float p,q; p=-b/(2*a); q=sqrt(b*b-4*a*c)/(2*a); printf(\方程的两个根为:x1=%6.2f,x2=%6.2f\\n\\n\} void root2(float a,float b,float c) { float p; p=-b/(2*a); printf(\方程的两个根为:x1=x2=%6.2f\\n\\n\} void root3(float a,float b,float c) { float p,q; p=-b/(2*a); q=sqrt(-b*b+4*a*c)/(2*a); printf(\方程的两个根为:x1=%6.2f+%6.2fi,x2=%6.2f-%6.2fi\\n\\n\} 8-3 #include int prime(int); int x; printf(\输入一个正整数\\n\\n\ scanf(\ if(prime(x)==0) printf(\此数为素数\\n\\n\ else printf(\此数不是素数\\n\\n\} int prime(int x) { int i,flag; for(i=2;i if(x%i==0) { flag=1; break; } else flag=0; } return(flag); } 8-4 #include void exchange(int a[3][3]); int a[3][3],i,j; printf(\输入一个3*3的矩阵\\n\\n\ for(i=0;i<3;i++) { for(j=0;j<3;j++) { scanf(\ } } exchange(a); printf(\转置后的矩阵为:\\n\\n\ for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf(\ } printf(\ } } 8-5 #include void exchange(char str[]); char str[80]; printf(\输入一个字符串\\n\\n\ gets(str); exchange(str); printf(\反序字符串为:\\n\\n\ puts(str); } void exchange(char str[]) { int i,j,k; char temp; for(i=0;;i++) { if(str[i]=='\\0') break; } k=i/2; for(j=0;j<=k;j++) { temp=str[j]; str[j]=str[i-1-j]; str[i-1-j]=temp; } str[i]='\\0'; } 8-6 #include void strcat(char str1[],char str2[]); char str1[80],str2[80]; printf(\输入str1\\n\\n\ gets(str1); printf(\输入str2\\n\\n\ gets(str2); strcat(str1,str2); printf(\连接后的字符串为:\\n\\n\ puts(str1); } void strcat(char str1[],char str2[]) { int i,j; for(i=0;;i++) { if(str1[i]=='\\0') { for(j=0;str2[j]!='\\0';j++) { str1[i]=str2[j]; i+=1; } break; } } str1[i]='\\0'; } 8-7 #include void strcpy(char str1[],char str2[]); char str1[80],str2[80]; printf(\输入str2\\n\\n\ gets(str2); strcpy(str1,str2); printf(\复制后的字符串为:\\n\\n\ puts(str1); } void strcpy(char str1[],char str2[]) { int i,j=0; for(i=0;str2[i]!='\\0';i++) { if((str2[i]=='a')||(str2[i]=='e')||(str2[i]=='i')||(str2[i]=='o')||(str2[i]=='u')) { str1[j]=str2[i]; j++; } } str1[j]='\\0'; } 8-8 #include void stradd(char str[]); char str[80]; printf(\输入一串数字\\n\\n\ gets(str); stradd(str); printf(\加空格后的字符串\\n\\n\ puts(str); } void stradd(char str[]) { char a[80]; int i=0,j; for(j=0;str[j]!='\\0';j++) { a[i]=str[j]; a[i+1]=' '; i+=2; } a[i]='\\0'; for(i=0;a[i]!='\\0';i++) { str[i]=a[i]; } str[i]='\\0'; } 8-9 #include void num(char str[],int a[]); char str[80]; int a[4]={0}; printf(\输入一个字符串\\n\\n\ gets(str); num(str,a); printf(\字母个数为: %d\\n\ printf(\数字个数为: %d\\n\ printf(\空格个数为: %d\\n\ printf(\其它字符个数为:%d\\n\} void num(char str[],int a[]) { int i,word=0,num=0,span=0,oth=0; for(i=0;str[i]!='\\0';i++) { if((str[i]>='A'&&str[i]<='Z')||(str[i]>='a'&&str[i]<='z')) word+=1; else if(str[i]>=48&&str[i]<=57) num+=1; else if(str[i]==' ') span+=1; else oth+=1; } a[0]=word; a[1]=num; a[2]=span; a[3]=oth; } 8-10 #include int word(char c); int longest(char str[]); int i; char str[80]; printf(\输入一行字符串\\n\\n\ gets(str); printf(\最长的单词为:\\n\\n\ for(i=longest(str);word(str[i]);i++) printf(\ printf(\} int word(char c) { if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) return 1; else return 0; } int longest(char str[]) { int i,flag=1,len=0,point,max_len=0,max_point; for(i=0;i<=strlen(str);i++) { if(word(str[i])) { if(flag==1) { point=i; flag=0; } else len++; } else { flag=1; if(len>max_len) { max_len=len; max_point=point; } len=0; } } return (max_point); } 8-11 #include char str[80]; void sort(char str[]); printf(\输入一个字符串\\n\\n\ gets(str); sort(str); printf(\字符由小到大排序为:\\n\\n\ puts(str); } void sort(char str[]) { int i,j; char temp; for(i=0;i for(j=0;j if(str[j]>str[j+1]) { temp=str[j]; str[j]=str[j+1]; str[j+1]=temp; } } } } 8-12 #include int a,b,c,d; float root(int a,int b,int c,int d); printf(\输入a,b,c,d\\n\\n\ scanf(\ printf(\在1附近的根为:%f\\n\\n\} float root(int a,int b,int c,int d) { float x=1,x1,f,f1; do { x1=x; f=((a*x1+b)*x1+c)*x1+d; f1=(a*x1+b)*x1+c; x=x1-f/f1; }while(fabs(x-x1)>=1e-5); return(x); } 8-13 #include float p(int,float); int n; float x; printf(\输入n和x\\n\\n\ scanf(\ printf(\阶勒德让多项式的值为:%f\\n\\n\} float p(int n,float x) { if(n==0) return 1; else if(n==1) return x; else return ((2*n-1)*x-p(n-1,x)-(n-1)*p(n-2,x))/n; } 8-14 #include float a_stu[n1],a_cou[n2]; void main() { void input(float a[][n2]); void stu_aver(float a[][n2]); void cou_aver(float a[][n2]); int hightest(int *s,int *c,float a[][n2]); float d(float a[][n2]); int i,j,s=0,c=0; float score[n1][n2],h; input(score); stu_aver(score); cou_aver(score); printf(\序号 课程 1 2 3 4 5 平均成绩\\n\\n\ for(i=0;i printf(\NO.%d \ for(j=0;j printf(\ } printf(\ } printf(\课程平均\ for(i=0;i printf(\ } h=hightest(&s,&c,score); printf(\最高成绩为:%f 是第%d号学生,第%d门课的成绩\\n\\n\ printf(\平均方差为:%f\\n\\n\} void input(float a[][n2]) { int i,j; for(i=0;i printf(\输入%d个学生的5个成绩\\n\\n\ for(j=0;j scanf(\ } } } void stu_aver(float a[][n2]) { int i,j; float s; for(i=0;i for(j=0;j s+=a[i][j]; } a_stu[i]=s/n2; } } void cou_aver(float a[][n2]) { int i,j; float s; for(i=0;i for(j=0;j s+=a[j][i]; } a_cou[i]=s/n1; } } int hightest(int *s,int *c,float a[][n2]) { float hightest=0; int i,j; for(i=0;i for(j=0;j if(a[i][j]>hightest) { hightest=a[i][j]; *s=i+1; *c=j+1; } } } return(hightest); } float d(float a[][n2]) { int i; float x=0,y=0; for(i=0;i x+=a_stu[i]*a_stu[i]; y+=a_stu[i]; } return(x/n1-(y/n1)*(y/n1)); } 8-15 #include void input(int num[],char name[N][8]); void sort(int num[],char name[N][8]); void search(int num[],char name[N][8],int n); int flag,n,num[N]; char c,name[N][8]; input(num,name); sort(num,name); for(flag=1;flag;) { printf(\输入要查找的职工号\\n\\n\ scanf(\ search(num,name,n); printf(\是否继续查找?Y/N ?\\n\\n\ c=getchar(); if(c=='N'||c=='n') flag=0; } } void input(int num[],char name[N][8]) { int i; for(i=0;i printf(\输入职工号\\n\\n\ scanf(\ printf(\输入职工姓名\\n\\n\ getchar(); gets(name[i]); } } void sort(int num[],char name[N][8]) { int i,j,min,temp1; char temp2[8]; for(i=0;i { min=i; for(j=i;j if(num[min]>num[j]) min=j; } temp1=num[i]; strcpy(temp2,name[i]); num[i]=num[min]; strcpy(name[i],name[min]); num[min]=temp1; strcpy(name[min],temp2); } printf(\排序结果如下:\\n\\n\ for(i=0;i printf(\职工号:m 姓名:s\\n\\n\ } } void search(int num[],char name[N][8],int n) { int low,high,mid,flag; flag=0; low=0; high=N-1; if((n mid=(low+high)/2; if(n==num[mid]) { flag=mid+1; printf(\第M号职工的名字为:%8s\\n\\n\ break; } else if(n if(flag==0||flag==-1) printf(\不存在该职工\\n\\n\} 8-16 #include #define N1 1000 void main() { int exchange(char a[]); int i=0,flag=0,flag1=1; char c,a[N1]; printf(\输入一个十六进制数\\n\\n\ while(((c=getchar())!='\\0')&&(i if(((c>='0')&&(c<='9'))||((c>='a')&&(c<='f'))||((c>='A')&&(c<='F'))) { a[i++]=c; flag=1; } else if(flag==1) { a[i]='\\0'; printf(\对应的十进制数为:%d\\n\\n\ printf(\是否继续?Y/N ?\\n\\n\ c=getchar(); if(c=='N'||c=='n') flag1=0; else { flag=0; i=0; printf(\输入一个十六进制数\\n\\n\ } } } } int exchange(char a[]) { int i,n=0; for(i=0;a[i]!='\\0';i++) { if((a[i]>='0')&&(a[i]<='9')) n=n*16+a[i]-'0'; if((a[i]>='a')&&(a[i]<='f')) n=n*16+a[i]-'a'+10; if((a[i]>='A')&&(a[i]<='F')) n=n*16+a[i]-'A'+10; } return(n); } 8-17 #include void main() { void exchange(int n); int n; printf(\输入一个整数\\n\\n\ scanf(\ printf(\输出是:\\n\\n\ if(n<0) { putchar('-'); n=-n; } exchange(n); printf(\} void exchange(int n) { int i; if((i=n/10)!=0) exchange(i); putchar(n+'0'); } 8-18 #include int day_num(int year,int mon,int day); int year,mon,day; printf(\输入年、月、日\\n\\n\ scanf(\ printf(\输入的日期是当年的第%d天\\n\\n\} int date[]={31,28,31,30,31,30,31,31,30,31,30,31}; int day_num(int year,int mon,int day) { int i,days=0; for(i=0;i days+=date[i]; } days+=day; if((year%4==0)&&((year0)!=0)||(year@0==0)) days+=1; return days; } 第九章 9-1 #include #define exchange(x,y) t=x;x=y;y=t void main() { int x,y,t; printf(\输入x,y\\n\\n\ scanf(\ exchange(x,y); printf(\交换后x=%d,y=%d\\n\\n\} 9-2 #include int x,y; printf(\输入x,y\\n\\n\ scanf(\ printf(\余数为%d\\n\\n\} 9-3 #include #define s(a,b,c) ((a+b+c)/2) #define area(a,b,c,s) sqrt(s*(s-a)*(s-b)*(s-c)) void main() { float a,b,c,s,area; char m; int flag=1; while(flag==1) { printf(\输入a,b,c\\n\\n\ scanf(\ if(a>0&&b>0&&c>0&&(a+b>c||a+c>b||b+c>a)&&(fabs(a-b) area=area(a,b,c,s);
正在阅读:
C语言程序设计 - 谭浩强 - 第三版 - 课后习题答案03-08
惠济区人民医院全员全岗全程优质服务活动简报2014.5期11109-24
各章节练习题及答案10-23
2015年湖南省农村信用社招考复习资料03-29
湖北省财政厅官方网站:http://www.ecz.gov.cn02-15
努力做良好从政环境的营造者——领导干部要带头引领社会风尚07-24
素质拓展训练心得优秀8篇03-22
1999年-2014年作文主题汇总表12-02
生物化学试题001-25
Proe加工参数详解(图文说明)01-23
- 二年级下册音乐测试题
- 浙江财经大学中微题库答案
- 小升初常考古诗填空练习(80首古诗 含答案)
- 全国导基 第十章 中国旅游诗词、楹联、游记鉴赏 练习题 及答案
- 华师大版七年级科学(生物)下册5.1《种群和群落》导学案(含答
- 人教版七年级语文上册练习:《我的老师》课时训练(附答案)-精
- NOIP2015浙江省复赛普及组成绩
- 长虹公司的应收账款管理
- 快递行业同业竞争对手调查报告
- “十三五”重点项目-牦牛骨髓粉项目节能评估报告(节能专篇)
- 钢结构生产制造部各岗位职责及任职要求
- 对H企业应收账款管理与核算现状的调查报告
- 中国化学会第24届全国高中学生化学竞赛(省级赛区)试题、标准答
- 本科成本会计
- “众包”创新模式在我国潜在的风险的探讨
- 语文基础全套复习资料(有他足够了
- 中外合作出版合同(1)
- STM32-GPIO及EXTI初始化详解
- 2018年中国控制技术市场现状调研与发展前景分析报告目录
- 大学物理试题第四章 冲量和动量
- 浩强
- 课后
- 习题
- 程序设计
- 答案
- 语言
- 员工考勤制度及日常规范(new)
- 考试试卷
- 有趣的四川方言童谣
- 2017注会《审计》每日一大题:业务工作底稿
- 广西柳州高级中学2018届高三5月冲刺模拟理综物理试题
- 宣城人应该知道的宣城事
- 对王庄煤矿巷道小煤柱支护的稳定性研究
- 智能非接触式体温计的毕业设计
- 绿化监理实施细则
- 三严三实学习体会——在严于修身中树立军队领导干部良好形象
- 汽车4S店客服经理岗位职责及工作内容说明书
- 箱涵基坑放坡开挖专项施工方案 - 图文
- 统计复习题
- 长株潭总体改革与区域规划(定稿) - 图文
- 2010和2011年计算机c程序设计真题及答案
- 廉政建设责任制(公司内部资料)
- 剑桥雅思4-5听力同义转换整理
- 中建三局建设
- 土方开挖及基坑支护工程施工方案
- 17-18版 第5章 第3节 课时提能练16 机械能守恒定律及其应用