《C语言程序设计实验指导书课后答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验指导书课后答案.docx(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C 语言程序设计实验指导书课后答案实验一(1) 编程求 37+29 的值,实习 VC 环境。#includevoid main()int a,b,sum; a=37;b=29;sum=a+b;printf(sum=%d,sum);(2) 从键盘输入三个整数,求出最大数并输出。#includevoid main()int a,b,c,y;int max(int x,int y); printf(input a,b,and c:);scanf(%d,%d,%d,&a,&b,&c); y=max(a,b);y=max(y,c); printf(nmax=%dn,y);int max(int x,in
2、t y)int z; if(xy) z=x; else z=y; return(z);(3) 通过上机实践,运行下列程序并分析输出结果。A 程序代码#include void main()char ch=a;printf(%c对应的 ASCII 码是:%dn,ch,ch);程序输出结果:a 对应的 ASC|码是:97B程序代码#include void main()int a=168;float b=123.456; float x=35.567,y; printf(a=%5dn,a); printf(a=%-5dn,a);printf(b=%6.2fn,b);printf(b=%en,b);
3、 y=(int)(x*100+0.5)/100.0;printf(x=f,y=%fn,x,y);程序输出结果:a=168 a=168b=123.46b=1.234560e+002 x=f,y=35.567001C 程序代码#include void main()int a=168;printf(十进制数%d 对应的八进制数是%on,a,a); printf(十进制数%d 对应的十六进制数是%xn,a,a);程序输出结果:十进制数 168 对应的八进制数是 250十进制数 168 对应的十六进制数是 a8C 语言程序设计实验指导书课后答案实验二2.1 顺序结构2.1.1 已知 a=1.5,b=5
4、.3,c=2.9,计算 s=-4ac 的结果并输出。#includevoid main()float a,b,c,s;a=1.5;b=5.3;c=2.9;s=b*b-4*a*c;printf(s 的值是%fn,s);2.1.2 输入某学生的三个科目的期末考试成绩,计算出该学生的成绩总分和平均分。#include void main()int math,english,c_program; float sum ,average;printf(input math,english,c_program:); scanf(%d,%d,%d,&math,&english,&c_program); sum
5、=math+english+c_program;average=sum/3;printf(sum=%.0f,average=%.5f,sum,average);2.1.3 输入圆的半径,计算圆的面积,设圆周率为 3.1416. #includeint main()float r,s;printf(请输入半径:); scanf(%f,&r); s=3.1416*r*r;printf(圆的面积为%.6f,s);C 语言程序设计实验指导书课后答案2.1.4 输入一个两位数,将其个位数和十位数互换后变成一个新的数,输出这个数。#include int main(void)int n,a,b; prin
6、tf(input n:);scanf(%d,&n); b=n%10;a=n/10; n=b*10+a; printf(%dn,n); return 0;2.1.5 输入两个数 a 和 b,将两数的值互换后输出新值。#include void main()int x,y,t; scanf(%d%d,&x,&y); t=x;x=y;y=t; printf(x=%d,y=%dn,x,y);2.2 简单分支结构2.2.1 输入两个整数,求出其中的较小值输出。#includeint main()int a,b,min;printf(请输入a,b:n);scanf(%d,%d,&a,&b); if (ab
7、)min=a;C 语言程序设计实验指导书课后答案elsemin=b;printf(最小值是%dn,min); return 0;2.2.2 输入 x 的值并计算分段函数 y 的值。+2xx=2#include int main(void)double x,y; scanf(%lf,&x); if(x2)y=x*x+2*x; elsey=2*x-1; printf(%.6f,y); return 0;2.2.3 输入两个整数并判断两数是否相等,输出相应结论。#includeint main()int a,b;printf(请输入两个整数:n); scanf(%d,%d,&a,&b);if(a=b
8、)printf(a等于 b); elseprintf(a不等于 b); return 0;2.2.4 输入一个整数,若为负数,求出它的平方;若为正数,求出它的立方,并输出结果。#includeC 语言程序设计实验指导书课后答案void main()printf(请输入一个整数:); double x,y; scanf(%lf,&x);if(x0)y=x*x; elsey=x*x*x;printf(y=f(%f)=%fn,x,y);2.2.5 输入三个整数,用 if-else 结构求出其中的最大值。提示:首先求出两个数的较大值放在一个变量里,然后用这个变量和第三个数再进行一次比较。#includ
9、eint main()int a,b,c,max;printf(请输入三个数); scanf(%d,%d,%d,&a,&b,&c); if(ab)max=a; elsemax=b; if(cmax)max=c; elsemax=a;printf(最大值为%dn,max); return 0;2.3 简单循环结构2.3.1 计算 1+4+7+301。#include void main()int i,sum; sum=0;for(i=1;i=301;i=i+3) sum=sum+i;printf(sum=%dn,sum);2.3.2 循环输入某学生八个科目期末考试成绩,计算出该学生成绩总分和平均
10、分。#include int main(void)int i,a;float sum,average; sum=0; for(i=1;i=8;i+)scanf(%d,&a); sum=sum+a;printf( 成绩总分为%fn,sum); printf( 平均分为%fn,sum/8); return 0;2.3.3 输入 n 的值,计算 n! #includeint main(void)int n,i,a;a=1;printf(请输入 n 的值:%dn); scanf(%d,&n);for(i=1;i=n;i+) a=a*i;printf(积=%dn,a); return 0 ;2.3.4
11、显示 110 平方,输出结果如下图所示: 1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100#include int main(void)int i,a;for(i=1;i=10;i+)a=i*i; printf(%d*%d=%dn,i,i,i*i);return 0;2.3.5 计算 1-3/4+5/7-7/10+的前 n 项之和。#include void main()int i,n;float item,flag,sum;sum=0; flag=1;scanf(%d,&n); for(i=1;i=n;i+)item=f
12、lag*(2*i-1)/(3*i-2); sum=sum+item; flag=-flag;printf(%fn,sum);-5x0Y=0=x1#include int main(void)float x,y; printf(x= );scanf(%f,&x); if(x1) y=x/2;else y=x*x+2;printf(对应值为return 0 ;3.1.3+b的实数解。#includeint main(void)int a,b,c,d,x1,x2;printf(a= ,b= ,c= ); scanf(%d,%d,%d,&a,&b,&c); d=b*b-4*a*c;if(d0)doub
13、le sqrt(double d);C 语言程序设计实验指导书课后答案x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a); printf(x1=%dn,x2=%dn,x1,x2);else if(d=0)elsex1=(-b+sqrt(d)/(2*a); printf(x1=x2=%dn,x1);printf(没有实数解);return 0;3.1.5从键盘输入 10 个字符,将所有的英文字母转换为大写后输出。#include int main(void)char i,ch;printf(请输入); for(i=1;i=a&ch=z)ch=ch-32; putc
14、har(ch);return 0;3.1.6从键盘输入 10 个字符,统计其中英文字母、空格、数字字符和其他字符的个数。#include int main(void)char ch,i;int letter,space,digiter,other; letter=space=digiter=other=0; for(i=1;i=a&ch=A&ch=0&ch=9) digiter+;elseother+;printf(letter=%d,space=%d,digiter=%d,other=%dn,letter,space,digiter,other); return 0;3.2.1输入一个四位整
15、数的年份,判断是否为闰年。#include int main(void)int x,a,b,c;printf(输入年份:);scanf(%d,&x); a=x%4; b=x%100; c=x%400;if(a=0 & b!=0)|(c=0) printf(闰年);elseprintf(不是闰年);return 0;3.2.2假设自动售货机出售 4 种商品,薯片、爆米花、巧克力和可乐,售价分别是每份 3.0 元、2.5 元、4.0 元和 3.5 元。在屏幕上显示以下菜单,用户可以连续查询商品的价格,当查询次数超过五次时,退出查询;不到五次时,用户可以选择退出。当用户输入编号 14,显示对应商品的
16、价格;输入 0,退出查询;输入其他编号,显示价格为 0。#include int main(void)char price; int i;printf(请输入商品的名称:n);for(i=1;i=5;i+)price=getchar();getchar(); switch(price)case 1:printf(售价 3.0 元n);break;case 2:printf(售价 2.5 元n);break;case 3:printf(售价 4.0 元n);break;case 4:printf(售价 3.5 元n);break; case 0:printf(退出查询n);break; defa
17、ult :printf(价格为 0 元n);break;return 0;3.2.3编写一个程序输入某人的身高(cm)和体重(kg),按下式确定其体重是否为标准、过胖或过瘦。判断标准为:标准体重=身高-110;超过标准体重 5kg 为过胖;低于标准体重5kg 为过瘦。#include int main(void)int x,y,z;printf(请输入身高和体重:n); scanf(%d,%d,&x,&y);z=x-110;if(y-z5)printf(过胖); else if(y-z-5) printf(过瘦);elseprintf(标准); return 0;3.2.4编写一个程序,计算购
18、买某物品的总金额,该物品的单价为 5 元/公斤,购买 5 公斤以上打九折,购买 10 公斤以上打八折,购买 20 公斤以上打 7 折,购买 50 公斤以上打 6 折,购买100 公斤以上打 5 折。(用多分支 if 语句求解)#includeint main(void)float x,y;printf(购买量n);scanf(%f,&x); if(x=5 & x=10 & x=20 & x=50 & x100)y=0.5*5*x;elsey=5*x;printf(付款%.2fn,y); return 0;3.2.5编写一个程序,输出给定的某年某月的天数。#include int main(vo
19、id)int year,month,days,leap; printf( 年 , 月 :); scanf(%d,%d,&year,&month);switch(month)case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31;break;case 4: case 6: case 9: case 11: days=30;break;case 2: if(year%4=0 & year%100!=0 | year%400=0) leap=1;elseleap=0; if (leap)days=29; elsedays=2
20、8;printf(%d 年%d 月的天数为%d 天n,year,month,days);实验四4.1.1输入一批正整数(以零或负数为结束标志)求其中的奇数和。#include #include int main(void)int data,sum; sum=0;printf(输入一批正整数(以零或负数为结束标志): ); scanf(%d,&data);while(data0)if(data%2=1)sum=sum+data; scanf(%d,&data);printf(奇数和是%d.n,sum); return 0;4.1.2输入两个整数 a 和 n,求 a+aa+aaa+(n 个 a)之
21、和。例如输入 2 和 3,输出 24(6提示:可采用递推的方法计算当前项 item=item*10+a#include int main(void)2+22+222)int a,n,item,i,sum; i=1;sum=0; item=0;printf(请输入两个整数 a 和 n: ); scanf(%d,%d,&a,&n);while(i=n)item=item*10+a; sum=sum+item;i=i+;printf(结果为%dn,sum); return 0;4.1.3编写程序:计算 2/1+3/2+5/3+8/5的 近似值。要求计算前 n 项之和,保留 2 位小数(该序列从第二项
22、起,每一项的分子是前一项分子与分母的和,分母是前一项的分子) #includeint main(void)float n,i,sum,a,b,item; printf(请输入 n 的值:); scanf(%f,&n);sum=0; i=1; a=2; b=1;item=0; while(i=n)sum=sum+a/b; item=a; a=a+b; b=item;i=i+;printf(结果为%.2fn,sum); return 0;4.1.4编写一个程序,找出被 2,3,5 整除时余数均为 1 的最小的 10 个自然数。#include int main(void)int x,i; i=0;
23、 x=1;while(i10)if(x%2=1 & x%3=1 & x%5=1) x+;printf(%dn,x); i+;return 0;4.1.5输入一个正整数,求它的位数以及各位数字之和,例如 123 的位数是 3,各位数字之和是6.#include int main(void)int number,digit,i,sum; i=0;sum=0;printf(输入一个正整数:); scanf(%d,&number); while(number!=0)digit=number%10; number=number/10; sum=sum+digit; i=i+;printf(n,digit
24、);printf(该整数的位数是%dn,各位数字之和是%dn,i,sum); return 0;4.1.6猴子吃桃问题。猴子第一天摘下若干个桃子,当时就吃了一半,还不过瘾,就又吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第 10 天在想吃的时候就剩一个桃子了,求第一天共摘下来多少个桃子?#include int main(void)int i,a; a=1;for(i=1;i=9;i+)a=(a+1)*2;printf(一共摘了%dn 个桃子,a);return 0;4.2.1求 100 以内的全部素数,每行输出 10 个。素数就是只能被 1 和
25、它本身整除,1 不是素数,2 是素数。#include int main(void)int i,m=0,n; for(n=2;n=99;n+)for(i=2;i=n)return 0;printf(%4d,n); m+; if(m%10=0)printf(n);4.2.2 有一个四位数,千位上的数字和百位上的数字都被擦掉了,已知十位上的数字是 1, 个位上的数字是 2,又知道这个数如果减去 7 就能被 7 整除,减去 8 就能被 8 整除,减去 9 就能被 9 整除。编写一个程序求这个四位数。提示:利用穷举法来解决该问题。#include void main()int x,m,n; for(x
26、=1000;x=9999;x+)m=x%10; n=x/10%10;if(m=2 & n=1 & (x-7)%7=0 & (x-8)%8=0 & (x-9)%9=0) printf(%dn,x);4.2.3取 1 元、2 元和 5 元的纸币共 10 张,现在要支付 15 元。编写程序输出所有的付法。针对每一种付法,输出各种面额的纸币数量。要求将 1 元、2 元和 5 元设置在最合理的取值范围内。#include int main()int m, n, k;for (m=0; m=10; m+)for (n=0; n=10; n+)for (k=0; k=10; k+)if (m+2*n+5*k
27、=15)printf(1 元:%d 张t2 元:%d 张t5 元:%dn, m, n, k);return 0;4.2.4找出 200 以内的所有完数,并输出其因子。有一个数的因子之和为该数本身,称其为完数。提示:使用二重循环嵌套,外层循环针对 2200 之间的所有数,而内层循环对其中的每一个数判断其是否是完数,即判断 m 的每个因子之和是否等于 m。其中因子是 2m/2 之间能被 m 整除的数。#include int main(void)int i,j,k; for(i=1;i=200;i+)k=1;for(j=2;j=i/2;j+)if(i%j=0)k=k+j;if(k=i)printf
28、(%d=1,i);for(j=2;j=i/2;j+) if(i%j=0)printf(+%d,j);printf(n);return 0;4.2.5 请编写程序显示下列输出:00 10 1 20 1 2 30 1 2 3 40 1 2 30 1 20 10#include int main(void)int i,j; for(i=0;i=4;i+)for(j=0;j=i;j+) printf(%d ,j);printf(n);for(i=0;i=4;i+)for(j=0;j4-i;j+) printf(%d ,j);printf(n);return 0;4.2.6 编写程序打出下列图案。*#i
29、nclude void main()int i,j; for(i=1;i=4;i+)for(j=1;j=8-(2*i-1);j+) printf( );for(j=1;j=2*i-1;j+) printf(* );printf(n);for(i=2;i=4;i+)for(j=1;j=2*i-1;j+) printf( );for(j=1;j=8-(2*i-1);j+) printf(* );printf(n);实验五5.1输入两个整形变量 a b 的值,输出 a+b,a-b,a*b,a/b,(float)a/b,a%b 的结果,要求算式的结果连同算式一起输出,每个算式占一行。#include
30、void main()int a,b;scanf(%d%d,&a,&b); printf(%d+%d=%dn,a,b,a+b); printf(%d-%d=%dn,a,b,a-b); printf(%d*%d=%dn,a,b,a*b); printf(%d/%d=%dn,a,b,a/b); printf(float)%d/%d=%fn,a,b,(float)a/b); printf(%d%d=%dn,a,b,a%b);5.2求前驱字符和后继字符。输入一个英文字符,找出它的前驱字符和后继字符,并按字符的ASCII 码值从大到小的顺序输出这三个字符及其对应的 ASCII 码值。#include i
31、nt main(void)char ch,before,after; ch=getchar(); before=ch-1; after=ch+1;if(beforeA|(beforeZ)before=before+26;printf(%c %c %c %d %d %dn,before,after,ch,before,after,ch);else if(afterz| (afterZ & aftera)after=after-26;printf(%c %c %c %d %d %dn,ch,before,after,ch,before,after);elseprintf(%c %c %c %d %
32、d %dn,after,ch,before,after,ch,before);5.3输入某个点 A 的平面坐标(x,y),判断(输出)A 点是在圆内、圆外还是在圆周上,其中圆心坐标为(2,2),半径为 1.#include int main(void)float x,y;scanf(%f%f,&x,&y);if(x-2)*(x-2)+(y-2)*(y-2)=1)printf(点 A 在圆上);else if(x-2)*(x-2)+(y-2)*(y-2)1) printf(点 A 在圆内);elseprintf(点 A 在圆外);return 0;5.4求爱因斯坦数学题。有一条长阶,若每步跨两阶
33、,则最后剩余一阶;若每步跨三阶,则最后剩两阶,若每步跨五阶,则最后剩四阶;若每步跨六阶,则最后剩五阶;若每步跨七阶, 最后正好一阶不剩。求长阶的阶梯数目。#include int main(void)int i; for(i=1;i=200;i+)if(i%2=1)&(i%3=2)&(i%5=4)&(i%6=5)&i%7=0)printf(%d 阶,i);return 0;5.5输入一个正整数,判断其中的各位数字是否奇偶数交替出现,是输出“yes”否则输出“not”#include int main(void)int m,n;printf(请输入一个正整数:n); scanf(%d,&m);n
34、=m%10;m=m/10; if(n%2+m%10%2 !=1)elseprintf(not);printf(n);printf(yes);printf(n);return 0;5.6输入一个三位数,判断是否是一个水仙花数。水仙花数是指三位数的各位数字立方和等于这个三位数本身。例如:153=1*1*1+5*5*5+3*3*3。#include int main(void)int n,i,j,k;printf(请输入一个三位数: n); scanf(%d,n);i=n/100;j=(n-i*100)/10; k=n-i*100-j*10;if(i*i*i+j*j*j+k*k*k=n)printf
35、(%d 是一个水仙花数,n);elseprintf(%d 不是水仙花数,n);实验六6.1.1 输入一个正整数 n(1n=10),再输入 n 个整数,输出偶数位置上数值的平均值(保留两位小数)#include int main(void)int a10,i,n,count; float sum,avg; printf(Enter n: );scanf(%d,&n);printf(Enter %d intergers: ,n); for(i=0;in;i+)scanf(%d,&ai); sum=0;count=0; for(i=0;in;i+)if(i+1)%2=0)sum=sum+ai; co
36、unt+;avg=sum/count; printf(avg=%.2fn,avg); printf(n);6.1.2输入一个正整数 n(1=n=10),再输入 n 个整数,输出最小值及下标(设最小值唯一,下标从 0 开始)。#include int main(void)int i,n,min,index ; int a10; printf(Enter n: );scanf(%d,&n);printf(Enter %d intergers: ,n); for(i=0;in;i+)scanf(%d,&ai); min=a0; index=0;for(i=1;iai)min=ai; index=i;
37、printf(min=%d,index=%dn,min,index);6.1.3输入一个正整数 n(1=n=10),再输入 n 个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的 n 个数。#include int main(void)int i,n,min,max,index ,indexx,t,h; int a10;printf(Enter n: );scanf(%d,&n);printf(Enter %d intergers: ,n); for(i=0;in;i+)scanf(%d,&ai); min=a0;max=a0; index=0; indexx=0;for(i=1;iai)min=ai; index=i;t=a0; a0=aindex; aindex=t;if(maxai)max=ai; indexx=i;h=an-1;an-1=aindexx;aindexx=h;for(i=0;i10;i+) printf(%d,ai);return 0;6.1.4输入一个正整数 n(1n=10),再输入 n 个数,逆序重新存放并输入这些数。#include int main(void)int n,i,j,t;int a10; printf(Enter n:
限制150内