admin 管理员组文章数量: 1086019
2024年5月17日发(作者:小程序开发服务好态度好)
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
max=b;
if(max max=c; printf(“最大数为“%d”,max); } 第三章 3.6写出以下程序运行的结果。 main() {char c1=’a’,c2=’b’,c3=’c’,c4=’101’,c5=’116’; printf(“a%cb%ctc%ctabcn”,c1,c2,c3); printf(“tb%c %c”,c4,c5); } 解 aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabc AㄩN 3.7 要将"China"译成密码译码规律是用原来字母后面的第4个字母代替原来的字母 例 如字母"A"后面第4个字母是"E""E"代替"A"。因此"China"应译为"Glmre"。请编一程 序用赋初值的方法使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%cn",c1,c2,c3,c4,c5); } 运行结果 密码是Glmre 3.9求下面算术表达式的值。 1x+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 12.5 23.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); } 解 911910 3.12 写出下面表达式运算后a的值设原来a=12。设a和n都已定义为整型变量。 1a+=a 2 a-=2 3 a*=2+3 4a/=a+a 5 a%=(n%=2)n的值等于5 6a+=a-=a*=a 解 (1) 24 (2) 10 (3) 60 (4) 0 (5) 0 (6) 0 第四章 44若a=3b=4c=5x=1.2y=2.4z=-3.6u=51274n=128765c1=’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) 2=ˊ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("a=%2d b=%2d c=%2dn",a,b,c); printf("x=%f,y=%f,z=%fn",x,y,z); printf("x+y=%5.2f y+z=%5.2f z+x=%5.2fn",x+y,y+z,z+x); printf("u=%6ld n=%9ldn",u,n); printf("%s %s %d%sn","c1=’a’","or",c1,"(ASCII)"); printf("%s %s %d%sn","c2=’a’","or",c2,"(ASCII)"); } 47用scanf下面的函数输入数据使a=3b=7x=8.5y=71.82c1=ˊAˊc2= ˊaˊ 问在键盘上如何输入 main() { int abfloat xychar c1c2 scanf"a=%d_b=%d"&a&b scanf"_x=%f_y=%e",&x&y scanf"_c1=%c_c2=%c"&c1&c2 } a=3_b=7 _x=8.5_y=71.82 _c1=A_c2=a 48设圆半径r=1.5圆柱高h=3求圆周长、圆面积、圆球表面积、圆球体积、圆柱体 积。 用scanf输入数据输出计算结果输出时要求文字说明取小数点后两位数字。请编程序。 main() {float r,h,C1,Sa,Sb,Va,Vb; scanf("%f,%f",&r,&h); 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("C1=%.2fn",C1); printf("Sa=%.2fnSb=%.2fnVa=%.2fnVb=%.2fn",Sa,Sb,Va,Vb); } 49输入一个华氏温度要求输出摄氏温度。公式为 c=5(F-32)/9 输出要求有文字说明取位2小数。 n() {float F,c; scanf("%f",&F); c=5*(F-32)/9; printf("c=%.2f",c); } 410编程序用getchar函数读入两个字符给c1、c2然后分别用函数和函数输出这两 个 字符。并思考以下问题变量c1、c2应定义为字符型或整形抑二者皆可要 求输出c1和c2值的ASCII码应如何处理用putchar函数还是printf函数整形 变量与字符变量是否在任何情况下都可以互相代替如 char c1c2 与 int c1c2 是否无条件的等价 #include"stdio.h" main() {char c1,c2; c1=getchar();c2=getchar(); putchar(c1);putchar(’n’);putchar(c2);putchar(’n’); } #include"stdio.h" main() {char c1,c2; c1=getchar();c2=getchar(); printf("c1=%d c2=%dn",c1,c2); printf("c1=%c c2=%cn",c1,c2); } 第五章 5.1 什么是算术运算什么是关系运算什么是逻辑运算 解略。 5.2 C语言中如何表示“真”和“假”系统如何判断一个量的“真”和“假” 解设有一个逻辑表达式若其结果为“真”则以1表示若其结果为“假”则以0表 示。 但是判断一个逻辑量的值时以0代表“真”以非0代表“假”。例如3&&5的值为“真” 系统给出3&&5的值为1。 5.3 写出下面各逻辑表达式的值。设a=3b=4c=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 main() { int a,b,c; printf("请输入3个整数"); scanf("%d,%d,%d",&a,&b,&c); if(a if(b else printf("max=%dn",b); else if(a else printf("max=%dn",a); } 方法二使用条件表达式可以使程序更加简明、清晰。 程序如下 #include main() { int a,b,c,temp,max; printf("请输入3个整数"); scanf("%d,%d,%d",&a,&b,&c); temp=(a>b)?a:b; /* 将a和b中的大者存人temp中 */ max=(temp>c)?temp:c; /* 将a和b中的大者与c比较取最大者*/ printf("3个整数的最大数是%dn”,max); } 5.5 有一函数 写一程序输入x值输出y值。 解 #include main() {int x,y; printf("输入x"); scanf("%d",&x); if(x<1) /* x<1 */ { y=x; printf("x=%3d, y=x=%dn",x,y); } else if (x<10) /* 1≤x-10 */ { y=2*x-1; printf("x=%3d, y=2*x-1=%dn",x,y); } else /* x≥10 */ { y=3*x-11; printf("x=%3d, y=3*x-11=%dn",x,y); } } 5.6 给一个百分制成绩要求输出等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’ 80~90分为’B’70~79分为’C’60分以下为’D’。 解 程序如下 #include main() { float score; char grade; printf("请输入学生成绩"); scanf("%f",&score); while(score>100||(score<0) { printf("n输入有误,请重新输入"); scanf("%f",&score); } switch((int)(score/10)) { case 10: case 9: grade=’A’;break; case 8: grade=’B’;break; e 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相应的等级是%c。n",score,grade); } 说明对输入的数据进行检查如小于0或大于100要求重新输入。(int)(score/10)的作 用 是将 (score/10) 的值进行强制类型转换得到一个整型值。 5.7 给定一个不多于5位的正整数要求① 求它是几位数② 分别打印出每一位数字 ③ 按逆序打印出各位数字。例如原数为321应输出123。 解 #include main() { long int num; int indiv,ten,hundred,thousand,ten_thousand,place; /*分别代表个位、十位、百位、千位、万位和位数*/ printf("请输入一个整数0~99999"); scanf("%ld",&num); 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("place =%dn", place); ten_thousand=num/10000; thousand=num/1000%10; hundred=num/100%10; ten=num%100/10; indiv=num%10; switch(place) { case 5: printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,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反序数字为"); printf("%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; } } 5.8 企业发放的奖金根据利润提成。利润I低于或等于10万元时奖金可提成10% 利润 高于10万元低于20万元100000 万元的部分可提成7.5% 200000 高于20万元的部分按5%提成400000 600000 〈I≤1000000时高于60万的部分按1.5%提成I>1000000时超过100万元的部分按1% 提成。从键盘输入当月利润I求应发放奖金总数。要求(1)用if语句编程序(2)用 switch 语句编程序。 解计算利润时要特别注意不同利润的不同提成比例。例如利润为15万元其中有10 万元按10%的比例提成另外5万元则按7.5%提成。 (1) 用if语句编程序。 #include main() { long i; float bonus,bon1,bon2,bon4,bon6,bon10; bon1=100000*0.1; /*利润为10万元时的奖金*/ bon2=bon1+100000*0.075; /*利润为20万元时的奖金*/ bon4=bon2+200000*0.05; /*利润为40万元时的奖金*/ bon6=bon4+200000*0.03; /*利润为60万元时的奖金*/ bon10=bon6+400000*0.015; /*利润为100万元时的奖金*/ printf("请输入利润i"); scanf("%ld",&i); if(i<=100000) bonus=i*0.1; /*利润在10万元以内按0.1提成奖金*/ else if(i<=200000) bonus=bon1+(i-100000)*0.075; /*利润在10万至20万元时的奖金*/ e if(i<=400000) bonus=bon2+(i-200000)*0.05; /*利润在20万至40万元时的奖金*/ else if(i<=600000) bonus=bon4+(i-400000)*0.03; /*利润在40万至60万元时的奖金*/ else if(i<=1000000) bonus=bon6+(i-600000)*0.015; /*利润在60万至100万元时的奖金*/ else bonus=bon10+(i-1000000)*0.01; /*利润在100万元以上时的奖金*/ printf(”奖金是%10.2fn",bonus); } 此题的关键在于正确写出每一区间的奖金计算公式。例如利润在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 main() { long i; 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; 10=bon6+400000*0.015; printf("请输入利润i"); scanf("%ld",&i); 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("奖金是%10.2f",bonus); } 5.9 输入4个整数要求按由大到小的顺序输出。 解此题采用依次比较的方法排出其大小顺序。在学习了循环和数组以后 序方法。 #include main() { int t,a,b,c,d; printf("请输入4个整数"); scanf("%d,%d,%d,%d",&a,&b,&c,&d); printf("n a=%d,b=%d,c=%d,d=%dn",a,b,c,d); 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("%d, %d, %d, %dn",a,b,c,d); } 5.10 有4个圆塔圆心分别为(22)、(-22)、(2-2)、(-2-2)圆半径为1。这 4个塔 的高度分别为10m。塔以外无建筑物。今输入任一点的坐标求该点的建筑高度(塔外的高 度为零)。 程序如下 #include 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",&x,&y); 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("该点高度为%dn",h); } 第六章 第六章 循环控制 6.1输入两个正整数m和n求其最大公约数和最小公倍数。 main() {long m,n,i=1,j,s; scanf("%ld,%ld",&m,&n); 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++); ntf("s=%ld,j=%ldn",s,j); } 6.2输入一行字符分别统计出其中英文字母、空格、数字和其他字符的个数。 #include"stdio.h" 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("i=%d,j=%d,k=%d,l=%dn",i,j,k,l); } 6.3求Sn=a+aa+aaa+?+aa?aaa有n个a之值 2+22+222+2222+22222n=5n由键盘输入。 #include"math.h" main() {int n,sum=0,i=1,s=2; scanf("%d",&n); while(i<=n) {sum=sum+s;s=s+2*pow(10,i); i++;} printf("sum=%dn",sum); } 6.4 求 即求1!+2!+3!+4!+5!+?+20! main() {int n,i=1;long sum=0,s=1; scanf("%d",&n); while(i<=n) {s=s*i;sum=sum+s;i++;} printf("sum=%ldn",sum); } 6.5 求 main() {double i=1,j=1,k=1,s1=0,s2=0,s3=0,sum; for(;i<=100;i++) s1=s1+i; 其中a是一个数字。例如 for(;j<=50;j++) s2=s2+j*j; for(;k<=10;k++) s3=s3+1/k; sum=s1+s2+s3; printf("sum=%fn",sum); } 6.6打印出所有"水仙花数"所谓"水仙花数"是指一个三位数其各位数字立方和等于该本 身。例如153是一个水仙花数因为153=1^3+5^3+3^3。 #include"math.h" 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("%5d",x);x++;} } 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 if(m%i==0) s=s+i; if(m-s==0) {printf("%5d its fastors are 1 ",m);for(j=2;j printf("%d ",j);printf("n");} } } 或 main() {int m,i,j,s; for(m=6;m<1000;m++) {s=m-1; for(i=2;i if(m%i==0) s=s-i; if(s==0) {printf("%5d its fastors are 1 ",m);for(j=2;j printf("%d ",j);printf("n");} } } 6.8有一分数序列 求出这个数列的前20项之和。 main() {int i=1,n;double t,x=1,y=2,s,sum=0; scanf("%ld",&n); le(i<=n) {s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;} printf("%fn",sum); } 6.9一球从100米高度自由下落每次落地后返回原高度的一半再落下。求它在第10次落 地时共经过多少米第10次反弹多高 main() {int i,n;double h=100,s=100; scanf("%d",&n); for(i=1;i<=n;i++) {h*=0.5;if(i==1) continue;s=2*h+s;} printf("h=%f,s=%fn",h,s); } 6.10猴子吃桃问题。猴子第一天摘下若干个桃子当即吃了一半还不过瘾又多吃了一个。 第二天早上又将剩下的桃子吃掉一半又多吃一个。以后每天早上都吃了前一天剩下的一半 零一个。到第10天早上想再吃时见只剩下一个桃子了。求第一天共摘多少桃子。 main() {int i=1,sum=0; for(;i<=10;sum=2*sum+1,i++); printf("sum=%dn",sum); } 6.11用迭代法求 。求平方根的迭代公式为 要求前后两次求出的得差的绝对值少于0.00001。 #include"math.h" main() {float x0,x1,a; scanf("%f",&a); x1=a/2; do {x0=x1;x1=(x0+a/x0)/2;} while(fabs(x0-x1)>=0.00001); printf("%.3fn",x1); } 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); ntf("x=%.3fn",x); } 6.13用二分法求方程在(-1010)之间的根 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("x1=%.3f,x2=%.3fn",x1,x2); } 6.14打印以下图案 * * * * * * * * * * * * * * * * * * * * * * * * * #include"math.h" 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("n"); } for(i=0;i<=2;i++) {for(j=0;j<=i;j++) printf(" "); for(k=0;k<=4-2*i;k++) printf("*"); printf("n"); } } 第七章 第七章 数组 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("%5d",a[i]); } } printf("n"); } 或 #include"math.h" 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 break; if(j>=k+1) printf("%5d",a[i]); } printf("n"); } 7.2用选择法对10个整数从小到大排序。 main() { int i,j,a[10],t; for(i=0;i<10;i++) scanf("%d",&a[i]); (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("%5d",a[i]); } 或 main() {static int a[10],i,j,k,t; for(i=1;i<11;i++) scanf("%d",&a[i]); 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("%d",a[i]); printf("n"); } 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("%d",&a[i][j]); s1=a[0][0]+a[1][1]+a[2][2]; s2=a[0][2]+a[1][1]+a[2][0]; printf("s1=%d,s2=%dn",s1,s2); } 或 main() { static int i,j,s1,s2,a[3][3]; for(i=1;i<=3;i++) for(j=1;j<=3;j++) scanf("%d",&a[i][j]); s1=a[1][1]+a[2][2]+a[3][3]; s2=a[1][3]+a[2][2]+a[3][1]; printf("%d,%dn",s1,s2); } 7.4已有一个已排好的数组今输入一个数要求按原来排序的规律将它插入数组中。 n() { static int a[10]={1,7,8,17,23,24,59,62,101};int i,j,t; scanf("%d",&a[9]); for(i=9;i>0;i--)
版权声明:本文标题:C语言程序设计第三版谭浩强课后习题答案完整版 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1715921296a690114.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论