C语言实验题及参考答案.docx
- 文档编号:25752612
- 上传时间:2023-06-12
- 格式:DOCX
- 页数:89
- 大小:109.79KB
C语言实验题及参考答案.docx
《C语言实验题及参考答案.docx》由会员分享,可在线阅读,更多相关《C语言实验题及参考答案.docx(89页珍藏版)》请在冰豆网上搜索。
C语言实验题及参考答案
实验一
1、计算整数各位数字之和(10分)
输入一个3位正整数,将其每一位的数字相加,输出和。
输入格式:
输入一个3位正整数。
变量数据类型为unsigned。
输出格式:
输出整数每一位相加后的整数和。
输入样例:
123
输出样例:
6
【参考答案】
#include""
intmain()
{unsignedinta,ge,shi,bai,sum;
scanf("%d",&a);
ge=a%10;
shi=a/10%10;
bai=a/100;
sum=ge+shi+bai;
printf("%d\n",sum);
return0;
}
2、计算代数表达式(10分)
求:
输入格式:
输入角度x。
变量数据类型为double。
π为。
输出格式:
输出y的值,精确到小数点后2位。
输入样例:
输出样例:
【参考答案】
#include<>
#include<>
#definePI
intmain()
{doublex,y;
scanf("%lf",&x);
y=sqrt((sin(60*PI/180)+1)*(sin(30*PI/180)+1)/cos(x*PI/180));
printf("%.2lf",y);
return0;
}
3、逆序的三位数(10分)
程序每次读入一个正3位数,然后输出按位逆序的数字。
注意:
当输入的数字含有结尾的0时,输出不应带有前导的0。
比如输入700,输出应该是7。
输入格式:
每个测试是一个3位的正整数。
输出格式:
输出按位逆序的数。
输入样例:
123
输出样例:
321
【参考答案】
#include""
intmain()
{inta,ge,shi,bai,b;
scanf("%d",&a);
ge=a%10;
shi=a/10%10;
bai=a/100;
b=ge*100+10*shi+bai;
printf("%d\n",b);
return0;
}
4、求整数均值(10分)
本题要求编写程序,计算4个整数的和与平均值。
题目保证输入与输出均在整型范围内。
输入格式:
输入在一行中给出4个整数,其间以空格分隔。
输出格式:
在一行中按照格式“Sum=和;Average=平均值”顺序输出和与平均值,其中平均值精确到小数点后一位。
输入样例:
1234
输出样例:
Sum=10;Average=
【参考答案】
#include""
intmain()
{inta,b,c,d,sum;
floatave;
scanf("%d%d%d%d",&a,&b,&c,&d);
sum=a+b+c+d;
ave=sum/;
printf("Sum=%d;Average=%.1f\n",sum,ave);
return0;
}
5、是不是太胖了(10分)
据说一个人的标准体重应该是其身高(单位:
厘米)减去100、再乘以所得到的公斤数。
已知市斤是公斤的两倍。
现给定某人身高,请你计算其标准体重应该是多少(顺便也悄悄给自己算一下吧……)
输入格式:
输入第一行给出一个正整数H(100 输出格式: 在一行中输出对应的标准体重,单位为市斤,保留小数点后1位。 输入样例: 169 输出样例: 【参考答案】 #include<> intmain() { inth; floatw; scanf("%d",&h); w=(h-100)**2; printf("%.1f\n",w); return0; } 6、日期格式化(10分) 世界上不同国家有不同的写日期的习惯。 比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。 下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。 输入格式: 输入在一行中按照“mm-dd-yyyy”的格式给出月、日、年。 题目保证给出的日期是1900年元旦至今合法的日期。 输出格式: 在一行中按照“yyyy-mm-dd”的格式给出年、月、日。 输入样例: 03-15-2017 输出样例: 2017-03-15 【参考答案】 #include<> intmain() {intyear,month,day; scanf("%d-%d-%d",&month,&day,&year); printf("%d-%02d-%02d\n",year,month,day); return0; } 7、整数四则运算(10分) 本题要求编写程序,计算2个正整数的和、差、积、商并输出。 题目保证输入和输出全部在整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A运算符B=结果”顺序输出和、差、积、商。 输入样例: 32 输出样例: 3+2=5 3-2=1 3*2=6 3/2=1 【参考答案】 #include"" intmain() {inta,b; scanf("%d%d",&a,&b); printf("%d+%d=%d\n",a,b,a+b); printf("%d-%d=%d\n",a,b,a-b); printf("%d*%d=%d\n",a,b,a*b); printf("%d/%d=%d\n",a,b,a/b); return0; } 8、计算存款利息(10分) 本题目要求计算存款利息,计算公式为interest=money×(1+rate)? year? ? money,其中interest为存款到期时的利息(税前),money是存款金额,year是存期,rate是年利率。 输入格式: 输入在一行中顺序给出三个正实数money、year和rate,以空格分隔。 输出格式: 在一行中按“interest=利息”的格式输出,其中利息保留两位小数。 输入样例: 10003 输出样例: interest= 【参考答案】 #include<> #include<> intmain() { floatmoney,rate,year,interest; scanf("%f%f%f",&money,&year,&rate); interest=money*pow((1+rate),year)-money; printf("interest=%.2f\n",interest); return0; } 实验二 1、比较大小(15分) 本题要求将输入的任意3个整数从小到大输出。 输入格式: 输入在一行中给出3个整数,其间以空格分隔。 输出格式: 在一行中将3个整数从小到大输出,其间以“->”相连。 输入样例: 428 输出样例: 2->4->8 【参考答案】 #include<> intmain() { inta,b,c,t; scanf("%d%d%d",&a,&b,&c); if(a>b){t=a;a=b;b=t;} if(a>c){t=a;a=c;c=t;} if(b>c){t=b;b=c;c=t;} printf("%d->%d->%d\n",a,b,c); return0; } 2、计算运费(15分) 运输公司对用户计算运费。 路程(s)越远,每千米运费就越低。 标准如下: s<250km,没有折扣; 250km≤s<500km,2%的折扣; 500km≤s<1000km,5%的折扣; 1000km≤s<2000km,8%的折扣; 2000km≤s<3000km,10%的折扣; 3000km≤s,15%的折扣。 设每千米每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费f的计算公式为: f=p×w×s×(1-d) 输入格式: 在一行中以小数形式输入基本运费、货重和距离,以空格作为分隔符。 输出格式: 在一行输出计算出来的运费,精确到小数点后2位的值。 输入样例: 在这里给出一组输入。 例如: 10020300 输出样例: 在这里给出相应的输出。 例如: freight= 【参考答案】 #include<> intmain() { intc,s; floatp,w,d,f; scanf("%f%f%d",&p,&w,&s); if(s>=3000)c=12; elsec=s/250; switch(c) { case0: d=0;break; case1: d=2;break; case2: case3: d=5;break; case4: case5: case6: case7: d=8;break; case8: case9: case10: case11: d=10;break; case12: d=15;break; } f=p*w*s*(1-d/; printf("freight=%.2f\n",f); return0; } 3、三天打鱼两天晒网(15分) 中国有句俗语叫“三天打鱼两天晒网”。 假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网” 输入格式: 输入在一行中给出一个不超过1000的正整数N。 输出格式: 在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“indayN”。 输入样例1: 103 输出样例1: Fishinginday103 输入样例2: 34 输出样例2: Dryinginday34 【参考答案】 #include"" intmain() {intN,x; scanf("%d",&N); x=N%5; if(x>=1&&x<=3)printf("Fishinginday%d\n",N); elseprintf("Dryinginday%d\n",N); return0; } 4、计算分段函数[2](15分) 本题目要求计算下列分段函数f(x)的值: 注: 可在头文件中包含,并调用sqrt函数求平方根,调用pow函数求幂。 输入格式: 输入在一行中给出实数x。 输出格式: 在一行中按“f(x)=result”的格式输出,其中x与result都保留两位小数。 输入样例1: 10 输出样例1: f= 输入样例2: 输出样例2: f= 【参考答案】 #include<> #include"" intmain() { floatx,y; scanf("%f",&x); if(x>=0)y=sqrt(x); elsey=(x+1)*(x+1)+2*x+1/x; printf("f(%.2f)=%.2f\n",x,y); return0; } 5、判断输入的字符是哪种类型(15分) 通过键盘输入一个字符,编程判断并输出用户输入的是什么类型的字符。 输入格式: 输入一个字符。 输出格式: 在一行中输出该字符是哪种类型的字符。 若用户输入字符为'0'和'9'之间,输出Thisisadigit. 若用户输入字符在'A'和'Z'之间,输出Thisisacapitalletter. 若用户输入字符在'a'和'z'之间,输出Thisisasmallletter. 其他情况,输出Othercharacter. 输入样例: 6 输出样例: Thisisadigit. 【参考答案】 #include<> intmain() { charc; c=getchar(); if(c>='0'&&c<='9')printf("Thisisadigit."); elseif(c>='A'&&c<='Z')printf("Thisisacapitalletter."); elseif(c>='a'&&c<='z')printf("Thisisasmallletter."); elseprintf("Othercharacter."); return0; } 6、求一元二次方程的根(15分) 本题目要求一元二次方程的根,结果保留2位小数。 输入格式: 输入在一行中给出3个浮点系数a、b、c,中间用空格分开。 输出格式: 根据系数情况,输出不同结果: 1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小; 2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的; 3)如果方程只有一个根,则直接输出此根; 4)如果系数都为0,则输出"ZeroEquation"; 5)如果a和b为0,c不为0,则输出"NotAnEquation"。 输入样例1: 输出样例1: 输入样例2: 123 输出样例2: + 输入样例3: 024 输出样例3: 输入样例4: 000 输出样例4: ZeroEquation 输入样例5: 001 输出样例5: NotAnEquation 【参考答案】 #include<> #include<> intmain() { floata,b,c; floatx1,x2,p,y; scanf("%f%f%f",&a,&b,&c); if(a==0&&b==0&&c==0){printf("ZeroEquation");return0;} if(a==0&&b==0&&c! =0){printf("NotAnEquation");return0;} p=b*b-4*a*c; if(a==0){x1=-c/b;printf("%.2f\n",x1);return0;} if(p>=0&&a! =0) if(p>0) {x1=(-b+sqrt(p))/(2*a); x2=(-b-sqrt(p))/(2*a); printf("%.2f\n%.2f\n",x1,x2); } else {x1=-b/(2*a);printf("%.2f\n",x1);} elseif(b! =0){p=sqrt(-p);x1=-b/(2*a);y=p/(2*a); printf("%.2f+%.2fi\n",x1,y); printf("%.2f-%.2fi\n",x1,y); } else{y=sqrt(-p)/(2*a); if(y>0)printf("+%.2fi\%.2fi\n",y,y); elseprintf("+%.2fi\%.2fi\n",-y,-y); } return0; } 7、A除以B(15分) 真的是简单题哈——给定两个绝对值不超过100的整数A和B,要求你按照“A/B=商”的格式输出结果。 输入格式: 输入在第一行给出两个整数A和B(? 100≤A,B≤100),数字间以空格分隔。 输出格式: 在一行中输出结果: 如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为Error。 输出的商应保留小数点后2位。 输入样例1: -12 输出样例1: -1/2= 输入样例2: 1-3 输出样例2: 1/(-3)= 输入样例3: 50 输出样例3: 5/0=Error 【参考答案】 #include<> #include<> intmain() {intA,B; scanf("%d%d",&A,&B); if(B==0) printf("%d/%d=Error\n",A,B); else if(B<0) printf("%d/(%d)=%.2f\n",A,B,(float)A/B); else printf("%d/%d=%.2f\n",A,B,(float)A/B); return0; } 8、计算火车运行时间(15分) 本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。 输入格式: 输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。 每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。 输出格式: 在一行输出该旅途所用的时间,格式为“hh: mm”,其中hh为2位小时数、mm为2位分钟数。 输入样例: 12011530 输出样例: 03: 29 【参考答案】 #include"" intmain() {inth1,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(men2 { men2=men2+60; hour2--; } a=hour2-hour1; b=men2-men1; printf("%02d: %02d\n",a,b); return0; } 实验三 1、求交错序列前N项和(15分) 本题要求编写程序,计算交错序列1-2/3+3/5-4/7+5/9-6/11+...的前N项之和。 输入格式: 输入在一行中给出一个正整数N。 输出格式: 在一行中输出部分和的值,结果保留三位小数。 输入样例: 5 输出样例: 【参考答案】 #include<> intmain() { inti,N,s=1; floata,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; a++;b=b+2; } printf("%.3f\n",sum); return0; } 2、统计整数的位数(15分) 从键盘读入一个整数,统计该数的位数。 例如,输入12534,输出5;输入-99,输出2;输入0,输出1。 输入格式: 输入一个整数N(? 10? 5? ? ≤N≤10? 5? ? )。 输出格式: 在一行中按如下格式输出该数的位数。 Itcontains位数digits. 输入样例: 12534 输出样例: Itcontains5digits. 【参考答案】 #include<> intmain() { intN,s=0; scanf("%d",&N); if(N==0)printf("Itcontains%ddigits.\n",++s); else{ if(N<0)N=-N; while(N! =0) { s++; N=N/10; } printf("Itcontains%ddigits.\n",s); } return0; } 3、最大公约数和最小公倍数(15分) 本题要求两个给定正整数的最大公约数和最小公倍数。 输入格式: 输入在一行中给出两个正整数M和N(≤1000)。 输出格式: 在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。 输入样例: 511292 输出样例: 732044 【参考答案】 #include<> intmain() { intM,N,gys,gbs; intt; scanf("%d%d",&M,&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); return0; } 4、统计字符(15分) 本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。 输入格式: 输入为10个字符。 最后一个回车表示输入结束,不算在内。 输出格式: 在一行内按照 letter=英文字母个数,blank=空格或回车个数,digit=数字字符个数,other=其他字符个数 的格式输出。 输入样例: aZ& 09Az 输出样例: letter=4,blank=3,digit=2,other=1 【参考答案】 #include<> intmain() { inti,letter,blank,digit,other; charc; letter=blank=digit=other=0; for(i=0;i<10;i++) {scanf("%c",&c); if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))letter++; elseif(c>='0'&&c<='9')digit++; elseif(c==''||c=='\n')blank++; elseother++; } printf("letter=%d,blank=%d,digit=%d,other=%d\n",letter,blank,digit,other); return0; } 5、简写转全称(15分) 在一行中输入若干个字符作为简写字符,字符之间没有空格间隔,并按如下规则产生输出: 每个简写字母对应一行输出 若字符为C或c,则该行输出"BEIJINGOLYMPICGAMES" 若字符为J或j,则该行输出"JAPANWORLDCUP" 若字符为K或k,则该行输出"KOREAWORLDCUP" 若为其他字符,则该行原样输出该字符。 输入格式: 输入在一行中输入若干个字符,字符之间没有空格间隔,以回车结束。 输出格式: 按题目要求产生若干行输出。 输入样例: kijckj 输出样例: KOREAWORLDCUP i JAPANWORLDCUP BEIJINGOLYMPICGAMES KOREAWORLDCUP JAPANWORLDCUP 【参考答案】 #includ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实验 参考答案