C语言实验题及参考答案.doc

上传人:豆**** 文档编号:29928707 上传时间:2022-08-02 格式:DOC 页数:158 大小:400.50KB
返回 下载 相关 举报
C语言实验题及参考答案.doc_第1页
第1页 / 共158页
C语言实验题及参考答案.doc_第2页
第2页 / 共158页
点击查看更多>>
资源描述

《C语言实验题及参考答案.doc》由会员分享,可在线阅读,更多相关《C语言实验题及参考答案.doc(158页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验一1、计算整数各位数字之和 (2.1) (10 分)输入一个3位正整数,将其每一位的数字相加,输出和。输入格式:输入一个3位正整数。 变量数据类型为unsigned。输出格式:输出整数每一位相加后的整数和。输入样例:123输出样例:6【参考答案】#include stdio.hint main() unsigned int a,ge,shi,bai,sum; scanf(%d,&a); ge=a%10; shi=a/10%10; bai=a/100; sum=ge+shi+bai; printf(%dn,sum); return 0;2、计算代数表达式 (2.2) (10 分)求: 输入格

2、式:输入角度x。变量数据类型为double。为3.14159。输出格式:输出y的值,精确到小数点后2位。输入样例:12.3输出样例:1.69【参考答案】#include #include #define PI 3.14159int main()double x,y;scanf(%lf,&x);y=sqrt(sin(60*PI/180)+1)*(sin(30*PI/180)+1)/cos(x*PI/180); printf(%.2lf,y); return 0;3、逆序的三位数 (10 分)程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。

3、比如输入700,输出应该是7。输入格式:每个测试是一个3位的正整数。输出格式:输出按位逆序的数。输入样例:123输出样例:321【参考答案】#include stdio.hint main() int a,ge,shi,bai,b; scanf(%d,&a); ge=a%10; shi=a/10%10; bai=a/100; b=ge*100+10*shi+bai; printf(%dn,b); return 0;4、求整数均值 (10 分)本题要求编写程序,计算4个整数的和与平均值。题目保证输入与输出均在整型范围内。输入格式:输入在一行中给出4个整数,其间以空格分隔。 输出格式:在一行中按照

4、格式“Sum = 和; Average = 平均值”顺序输出和与平均值,其中平均值精确到小数点后一位。 输入样例:1 2 3 4输出样例:Sum = 10; Average = 2.5【参考答案】#include stdio.hint main()int a,b,c,d,sum; float ave; scanf(%d %d %d %d,&a,&b,&c,&d); sum=a+b+c+d; ave=sum/4.0; printf(Sum = %d; Average = %.1fn,sum,ave); return 0;5、是不是太胖了 (10 分)据说一个人的标准体重应该是其身高(单位:厘米)

5、减去100、再乘以0.9所得到的公斤数。已知市斤是公斤的两倍。现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自己算一下吧)输入格式:输入第一行给出一个正整数H(100 H 300),为某人身高。输出格式:在一行中输出对应的标准体重,单位为市斤,保留小数点后1位。输入样例:169输出样例:124.2【参考答案】#include int main() int h;float w; scanf(%d,&h); w=(h-100)*0.9*2; printf(%.1fn, w); return 0;6、日期格式化 (10 分)世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日

6、-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。输入格式:输入在一行中按照“mm-dd-yyyy”的格式给出月、日、年。题目保证给出的日期是1900年元旦至今合法的日期。输出格式:在一行中按照“yyyy-mm-dd”的格式给出年、月、日。输入样例:03-15-2017输出样例:2017-03-15【参考答案】#include int main() int year,month,day; scanf(%d-%d-%d,&month,&day,&year); printf(%d-%02d-%02dn,year,month,day); ret

7、urn 0; 7、整数四则运算 (10 分)本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。输入格式:输入在一行中给出2个正整数A和B。 输出格式:在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。 输入样例:3 2输出样例:3 + 2 = 53 - 2 = 13 * 2 = 63 / 2 = 1【参考答案】#include stdio.hint main() int a,b; scanf(%d %d,&a,&b); printf(%d + %d = %dn,a,b,a+b); printf(%d - %d = %dn,a,b,a-

8、b); printf(%d * %d = %dn,a,b,a*b); printf(%d / %d = %dn,a,b,a/b); return 0;8、计算存款利息 (10 分)本题目要求计算存款利息,计算公式为interest=money(1+rate)yearmoney,其中interest为存款到期时的利息(税前),money是存款金额,year是存期,rate是年利率。输入格式:输入在一行中顺序给出三个正实数money、year和rate,以空格分隔。输出格式:在一行中按“interest = 利息”的格式输出,其中利息保留两位小数。输入样例:1000 3 0.025输出样例:int

9、erest = 76.89【参考答案】#include #include int main() float money,rate,year,interest; scanf(%f %f %f,&money,&year,&rate); interest=money*pow(1+rate),year)-money; printf(interest = %.2fn, interest); return 0;实验二1、比较大小 (15 分)本题要求将输入的任意3个整数从小到大输出。输入格式:输入在一行中给出3个整数,其间以空格分隔。输出格式:在一行中将3个整数从小到大输出,其间以“-”相连。 输入样例:

10、4 2 8输出样例:2-4-8【参考答案】#include int main() int a,b,c,t; scanf(%d %d %d,&a,&b,&c); if(ab) t=a;a=b;b=t; if(ac) t=a;a=c;c=t; if(bc) t=b;b=c;c=t; printf(%d-%d-%dn,a,b,c); return 0; 2、计算运费 (3.4) (15 分)运输公司对用户计算运费。路程(s)越远,每千米运费就越低。标准如下: s250km ,没有折扣; 250kms500km, 2%的折扣; 500kms1000km, 5%的折扣; 1000kms2000km,8的

11、折扣; 2000kms3000km,10的折扣; 3000kms,15的折扣。设每千米每吨货物的基本运费为p,货物重为 w,距离为s,折扣为d,则总运费f的计算公式为: fpws(d)输入格式:在一行中以小数形式输入基本运费、货重和距离,以空格作为分隔符。输出格式:在一行输出计算出来的运费,精确到小数点后位的值。输入样例:在这里给出一组输入。例如:100 20 300输出样例:在这里给出相应的输出。例如:freight=588000.00【参考答案】#include int main() int c,s; float p,w,d,f; scanf (%f %f %d,&p,&w,&s); if

12、 (s=3000) c=12; else c=s/250; switch(c) case 0: d=0;break; case 1: d=2;break; case 2: case 3: d=5;break; case 4: case 5: case 6: case 7: d=8;break; case 8: case 9: case 10: case 11: d=10;break; case 12: d=15;break; f=p*w*s*(1-d/100.0); printf(freight=%.2fn,f); return 0; 3、三天打鱼两天晒网 (15 分)中国有句俗语叫“三天打鱼

13、两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?输入格式:输入在一行中给出一个不超过1000的正整数N。输出格式:在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。输入样例1:103输出样例1:Fishing in day 103输入样例2:34输出样例2:Drying in day 34【参考答案】#include stdio.hint main() int N,x; scanf(%d,&N); x=N%5; if(x=1&x=3)printf(Fishing

14、in day %dn,N); else printf(Drying in day %dn,N); return 0;4、计算分段函数2 (15 分)本题目要求计算下列分段函数f(x)的值:注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。 输入格式:输入在一行中给出实数x。输出格式:在一行中按“f(x) = result”的格式输出,其中x与result都保留两位小数。输入样例1:10输出样例1:f(10.00) = 3.16输入样例2:-0.5输出样例2:f(-0.50) = -2.75【参考答案】#include #include math.hint mai

15、n()float x,y; scanf(%f,&x);if(x=0) y=sqrt(x); else y=(x+1)*(x+1)+2*x+1/x; printf(f(%.2f) = %.2fn, x,y); return 0;5、判断输入的字符是哪种类型 (3.3) (15 分)通过键盘输入一个字符,编程判断并输出用户输入的是什么类型的字符。输入格式:输入一个字符。输出格式:在一行中输出该字符是哪种类型的字符。 若用户输入字符为0和9之间,输出This is a digit. 若用户输入字符在A和Z之间,输出This is a capital letter. 若用户输入字符在a和z之间,输出T

16、his is a small letter. 其他情况,输出Other character.输入样例:6输出样例:This is a digit.【参考答案】#include int main() char c; c=getchar(); if(c=0&c=A&c=a&c=z)printf(This is a small letter.); else printf(Other character.); return 0; 6、求一元二次方程的根 (15 分)本题目要求一元二次方程的根,结果保留2位小数。输入格式:输入在一行中给出3个浮点系数a、b、c,中间用空格分开。输出格式:根据系数情况,输

17、出不同结果:1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;3)如果方程只有一个根,则直接输出此根;4)如果系数都为0,则输出Zero Equation;5)如果a和b为0,c不为0,则输出Not An Equation。输入样例1:2.1 8.9 3.5输出样例1:-0.44-3.80输入样例2:1 2 3输出样例2:-1.00+1.41i-1.00-1.41i输入样例3:0 2 4输出样例3:-2.00输入样例4:0 0 0输出样例4:Zero Equation输入样

18、例5:0 0 1输出样例5:Not An Equation【参考答案】#include #include int main() float a,b,c; float x1,x2,p,y; scanf(%f %f %f,&a,&b,&c); if(a=0&b=0&c=0) printf(Zero Equation);return 0; if(a=0&b=0&c!=0) printf(Not An Equation); return 0; p=b*b-4*a*c; if(a=0) x1=-c/b; printf(%.2fn,x1);return 0; if(p=0&a!=0) if(p0) x1=

19、(-b+sqrt(p)/(2*a); x2=(-b-sqrt(p)/(2*a); printf(%.2fn%.2fn,x1,x2); else x1=-b/(2*a); printf(%.2fn,x1); else if(b!=0) p=sqrt(-p);x1=-b/(2*a);y=p/(2*a); printf(%.2f+%.2fin,x1,y); printf(%.2f-%.2fin,x1,y); else y=sqrt(-p)/(2*a); if(y0)printf(0.00+%.2fin0.00-%.2fin,y,y); else printf(0.00+%.2fin0.00-%.2f

20、in,-y,-y); return 0; 7、A除以B (15 分)真的是简单题哈 给定两个绝对值不超过100的整数A和B,要求你按照“A/B=商”的格式输出结果。输入格式:输入在第一行给出两个整数A和B(100A,B100),数字间以空格分隔。输出格式:在一行中输出结果:如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为Error。输出的商应保留小数点后2位。输入样例1:-1 2输出样例1:-1/2=-0.50输入样例2:1 -3输出样例2:1/(-3)=-0.33输入样例3:5 0输出样例3:5/0=Error【参考答案】#inc

21、lude #include int main()int A,B; scanf(%d %d,&A,&B); if(B=0) printf(%d/%d=Errorn,A,B); else if(B0) printf(%d/(%d)=%.2fn,A,B,(float)A/B); else printf(%d/%d=%.2fn,A,B,(float)A/B); return 0;8、计算火车运行时间 (15 分)本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。输入格式:输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(0

22、0-23)和2位分钟数(00-59),假设出发和到达在同一天内。输出格式:在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。输入样例:1201 1530输出样例:03:29【参考答案】#include stdio.hint main() int h1,h2,hour1,hour2,men1,men2,a,b; scanf(%d %d,&h1,&h2); hour1=h1/100; men1=h1%100; hour2=h2/100; men2=h2%100; if(men2men1) men2=men2+60; hour2-; a=hour2-hour1

23、; b=men2-men1; printf(%02d:%02dn,a,b); return 0;实验三1、求交错序列前N项和 (15 分)本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+. 的前N项之和。输入格式:输入在一行中给出一个正整数N。输出格式:在一行中输出部分和的值,结果保留三位小数。输入样例:5输出样例:0.917【参考答案】#include int main() int i,N,s=1; float a,b,t,sum=0; a=1; b=1; scanf(%d,&N); for(i=1;i=N;i+) t=a/b; sum+=s*t; s=-s;

24、a+; b=b+2; printf(%.3fn,sum); return 0; 2、统计整数的位数 (4.1) (15 分)从键盘读入一个整数,统计该数的位数。例如,输入12534,输出5;输入-99,输出2;输入0,输出1。输入格式:输入一个整数N(105N105)。输出格式:在一行中按如下格式输出该数的位数。It contains 位数 digits.输入样例:12534输出样例:It contains 5 digits.【参考答案】#include int main() int N,s=0; scanf(%d,&N); if(N=0) printf(It contains %d digi

25、ts.n,+s); else if(N0) N=-N; while(N!=0) s+; N=N/10; printf(It contains %d digits.n,s); return 0; 3、最大公约数和最小公倍数 (15 分)本题要求两个给定正整数的最大公约数和最小公倍数。输入格式:输入在一行中给出两个正整数M和N(1000)。输出格式:在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。输入样例:511 292输出样例:73 2044【参考答案】#include int main() int M, N, gys, gbs;int t;scanf(%d %d, &M,

26、 &N);if (M N)t = M; M = N; N = t;for (gys = N; gys-)if (M%gys = 0 & N%gys = 0) break;gbs = M*N / gys;printf(%d %d, gys, gbs);return 0;4、统计字符 (15 分)本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。输入格式:输入为10个字符。最后一个回车表示输入结束,不算在内。输出格式:在一行内按照letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数的

27、格式输出。输入样例:aZ &09 Az输出样例:letter = 4, blank = 3, digit = 2, other = 1【参考答案】#include int main() int i,letter,blank,digit,other; char c; letter=blank=digit=other=0; for(i=0;i=a&c=A&c=0&c=9) digit+; else if(c= |c=n) blank+; else other+; printf(letter = %d, blank = %d, digit = %d, other = %dn,letter,blank

28、,digit,other); return 0; 5、简写转全称 (15 分)在一行中输入若干个字符作为简写字符,字符之间没有空格间隔,并按如下规则产生输出: 每个简写字母对应一行输出 若字符为C或c,则该行输出BEIJING OLYMPIC GAMES 若字符为J或j,则该行输出JAPAN WORLD CUP 若字符为K或k,则该行输出KOREA WORLD CUP 若为其他字符,则该行原样输出该字符。输入格式:输入在一行中输入若干个字符,字符之间没有空格间隔,以回车结束。输出格式:按题目要求产生若干行输出。输入样例:kijckj输出样例:KOREA WORLD CUPiJAPAN WORL

29、D CUPBEIJING OLYMPIC GAMESKOREA WORLD CUPJAPAN WORLD CUP【参考答案】#include int main() char ch; ch=getchar(); while(ch!=n) if(ch=c|ch=C)printf(BEIJING OLYMPIC GAMESn); else if(ch=j|ch=J)printf(JAPAN WORLD CUPn); else if(ch=k|ch=K)printf(KOREA WORLD CUPn); else printf(%cn,ch); ch=getchar() ; return 0; 实验四

30、1、穷举法搬运砖块问题 (4.3) (15 分)这是中国古典算术问题,某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。有多少种搬法用N人正好搬N块砖?输入格式:在一行内输出正整数N(N500)输出格式:输出所有满足条件的搬法,每种搬法占一行。每行按如下格式依次输出该搬法中男人、女人、小孩的人数(中间用空格间隔,=前后没有多余的空格)。men=男人数 women=女人数 child=小孩数若没有满足条件的搬法,则输出No solution!输入样例1:45输出样例1:men=0 women=15 child=30men=3 women=10 child=32men=6 w

31、omen=5 child=34men=9 women=0 child=36输入样例2:1输出样例2:No solution!【参考答案】#include int main() int n,men,women,child,flag=0; scanf(%d,&n); for(men=0;men=n/3;men+) for(women=0;women=n/2;women+) child=n-men-women; if(men*3+women*2+child/2=n&child%2=0) printf(men=%d women=%d child=%dn,men,women,child); flag=1

32、; if(flag=0)printf(No solution!); return 0; 2、输出N以内的所有素数 (4.5) (15 分)编程找出N(2N500)以内(即小于等于N)的所有素数。输入格式:输入整数N(2N500)。输出格式:每8个一行输出N以内的所有素数。注意每个数据均占5列,且采用右对齐。输入样例1:50输出样例: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47【参考答案】#include int main() int n,i,j,m=0; scanf(%d,&n); if(n=2) printf(%5d,n); return 0; for(

33、i=2;i=n;i+) if(i=2)printf(%5d,i+);m+; for(j=2;j=i) if(m%8=0)printf(n); printf(%5d,i); m+; return 0; 3、求特殊方程的正整数解 (15 分)本题要求对任意给定的正整数N,求方程X2+Y2=N的全部正整数解。输入格式:输入在一行中给出正整数N(10000)。输出格式:输出方程X2+Y2=N的全部正整数解,其中XY。每组解占1行,两数字间以1空格分隔,按X的递增顺序输出。如果没有解,则输出No Solution。输入样例1:884输出样例1:10 2820 22输入样例2:11输出样例2:No Sol

34、ution【参考答案】#include int main() int n,x,y,flag=0; scanf(%d,&n); for(x=1;x*xn;x+) for(y=x;y*y=n-x;y+) if(x*x+y*y=n) flag=1; printf(%d %dn,x,y); ; if(flag=0) printf(No Solutionn); return 0; 4、打印菱形图案 (15 分)本题要求编写程序,打印一个高度为n的、由“*”组成的正菱形图案。输入格式:输入在一行中给出一个正的奇数n。 输出格式:输出由n行星号“*”组成的菱形,如样例所示。每个星号后跟一个空格。输入样例:7

35、输出样例: * * * * * * * * * * * * * * * * * * * * * * * * * 【参考答案】#include stdio.hint main() int n, n1;int i, j;scanf(%d, &n);n1=(n + 1) / 2;for (i = 1; i = n1; i+) for (j = 1; j = (2 * n1 - 2 * i); j+)printf( );for (j = 1; j = (2 * i - 1); j+)printf(* );printf(n);for (i = n1 + 1; i = n; i+)for (j = 1;

36、j = (2 * i - 2 * n1); j+)printf( );for (j = 1; j = (4 * n1 - 2 * i - 1); j+)printf(* );printf(n);return 0;5、跟奥巴马一起画方块 (15 分)美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!输入格式:输入在一行中给出正方形边长N(3N21)和组成正方形边的某种字符C,间隔一个空格。输出格式:输出由给定字符C画出的

37、正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。输入样例:10 a输出样例:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa【参考答案】#include int main()char c; int n,l,i,j; scanf(%d %c,&n,&c); l=(float)n/2+0.5; for(i=1;i=l;i+) for(j=1;j=n;j+) putchar(c); putchar(n); return 0;实验五1、数字金字塔 (4.10)(20分)输入一个正整数repeat(repeat10),做repeat次下列运算: 输入一个正整数n(n10),输出n行数字金字塔。输出时使用以下语句: printf( ); printf(%d , i); printf(n);输入格式:输入在第1行中给出1个正整数repeat(repeat10)接下来repeat行,每行给出一个正整数n(n10)输出格式:按照对应顺序的n值,依次输出repeat个数字金字塔 (n行数字金字塔的格式如样例所示,注意:每个数字后面跟一个空格。)输入样例:252输出样例: 1 2 2 2 3 3 3 3 3 4 4

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁