上机题及答案.docx
《上机题及答案.docx》由会员分享,可在线阅读,更多相关《上机题及答案.docx(5页珍藏版)》请在冰豆网上搜索。
上机题及答案
上机题及答案
1温度转换描述 已知华氏温度到摄氏温度的转换公式为:
摄氏温度=(华氏温度-32)×5/9,写程序将给定的华氏温度转换为摄氏温度输出 输入说明 只有一个整数,表示输入的华氏温度 输出说明 输出一个表示摄氏温度的实数,小数点后保留2位有效数字,多余部分四舍五入 输入样例50 输出样例 2计算球体重量 描述 已知铁的比重是,金的比重是。
写一个程序,分别计算出给定直径的铁球与金球的质量,假定PI= 输入说明 输入两个整数,分别表示铁球与金球的直径 输出说明 输出两个浮点数,分别表示铁球与金球的质量,小数点后保留3位小数,两个浮点数之间用空格分隔 输入样例100100 输出样例 提示 #includeintmain(){ doubleFe=,Au=,Pi=;intm,n; 1 floatM1,M2; scanf(\%d\注意,要使输出的两个数据中间无逗号,“”之间要无逗号,下面也如此 M1=(/3)*Pi*m/2*m/2*m/2*Fe/1000;M2=(/3)*Pi*n/2*n/2*n/2*Au/1000;printf(\return0;} 3阶梯电价计费 描述 电价分三个档次,[0,110]度电,每度电元;(110,210]度电,超出110部分每度电元,超过210度电,超出210部分每度电元,给出一个家庭一月用电量,请计算出应缴的电费。
输入说明 第一行为1个整数m,表示有多少组数据。
其后一行为m个正实数,表示m个用电量数据 输出说明 一行输出1个电费数据后,换行。
输入样例3 100200 输出样例 自己的#include doublefare(doublem){doublen;if(m>=0&&m110){if(m 2 n=*110+*(210-110)+*(m-210);}returnn;} intmain(){ inta,b; doublec; scanf(\ for(b=0;b scanf(\ printf(\}return0;} 别人的 #include doublemoney(doublex){if(x>=100&&x110&&x210)return*110+*100+*(x-210);} intmain(){ inta,b;doublec; scanf(\for(b=0;b scanf(\ printf(\} return0;} 4计算某月天数 描述 3 每个月的1,3,5,7,8,10,12月有31天,4,6,9,11月有30天,闰年2月29天,其他年份2月28天,给定年份和月份求该月的天数 输入说明 多组数据,输入数据第一行为整数n,表示有几组数据数据,其后为n行,每行表示一组数据,每组数据两个正整数a和b构成,a表示年份,b表示月份,a和b之间用空格分隔 输出说明 根据年份和月份计算该月天数并输出,每输出一个天数后换行 输入样例3 200032011520082 输出样例313129 程序问题:
输入时年份和月份在同一行,按空格分开,不能按回车换行1别人的 #include voidtianshu(intx,inty){ if(y==1||y==3||y==5||y==7||y==8||y==10||y==12) printf(\elseif(y==4||y==6||y==9||y==11) printf(\ elseif((x%4==0&&x0!
=0||x@0==0)&&y==2) printf(\ elseif(y==2) printf(\} intmain() 4 { inta,b,m,n;scanf(\for(m=1;m #includeintmain(){inta,b;scanf(\for(b=0;b 5计算整数各位数字之和 5
描述 假设n是一个最多9位数字组成的正整数。
编写一个程序计算n的每一位数字之和 输入说明 有多组数据,输入数据第1行为整数m,表示有多少组数据,其后一行m个正整数 输出说明 对每一个整数n输出它的各位数字之和后换行 输入样例3 63704170498 输出样例61429 1别人的 #includevoidsum(inta){intx,y; intsum=0; for(x=100000000;x>0;x=x/10) { y=a/x; a=a-y*x; sum+=y; } printf(\} intmain(){ intm,n,x; scanf(\ 6 for(n=1;n 2自己的 #includeintmain(){intm,a;scanf(\for(a=1;a0;x=x/10){ y=n/x; sum+=y; n=n-x*y;}printf(\}return0;} 6完数 描述 请写一个程序,给出指定整数范围[a,b]内的所有完数,0 只有一组数据,即一行上的两个整数a和b,a和b之间用空格分隔 7 输出说明 输出[a,b]内的所有完数,每个数字占一行 输入样例110 输出样例6 1别人的 #include#includeintwanshu(intn){intm; intsum=0; for(m=1;m if(n==sum)return1;elsereturn0;} intmain(){ intm,n,i; scanf(\for(i=m;i if(wanshu(i)==1)printf(\} return0;} 2自己的 #includevoidwanshu(intn){ intm,sum=0; 8 for(m=1;m #includeintmain(){inta,b,m,x,sum=0; scanf(\for(x=a;x 7最大公约数描述 最大公约数指某几个整数共有因子中最大的一个,最大公约数具有如下性质,gcd(a,0)=agcd(a,1)=1 因此当两个数中有一个为0时,gcd是不为0的那个整数,当两个整数互质时最大公约数为 9 1。
定义函数:
intgcd(inta,intb),返回两个参数的最大公约数。
并写一个主函数调用该函数,实验各种输入参数情况。
输入说明 多组数据,每组数据同一行的两个正整数a和b构成,a和b之间用空格分隔,当a和b都为0时表示输入结束 输出说明 对每组数据输出其最大公约数后换行 输入样例241263500 输出样例261 输入实例:
241263500 #includeintgcd(inta,intb){intn;if(a==0&&b==0)return0;if(a==0)returnb;if(b==0)returna;for(n=(a>b?
b:
a);a%n!
=0||b%n!
=0;n--);returnn;} intmain(){inta,b;while
(1)//也可写为for{ 10
scanf(\if(a==0&&b==0) break; printf(\}return0;} 8角谷定理 描述测试, 角谷定理:
输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。
经过如此有限次运算后,总可以得到自然数值1。
求经过多少次可得到自然数1。
如:
例如数据22的变化过程:
221134175226134020105168421,数据变化次数为16。
可用迭代法或递归法实现。
输入说明 第一行1个整数m,表示有多少组数据。
其后一行为m个正整数,表示m个数据。
输出说明 一行输出1个数据变换次数后,换行 输入样例3 223343 输出样例162730 #includeintjg(intn){statici=0,m;++i;if(n==1){m=i;i=0;returnm; 11 }else{if(n%2==0) n=n/2;else n=n*3+1;jg(n);}} intmain(){inta,b,n;scanf(\for(b=0;b 9递归数列 描述 下列给定程序中,用递归实现函数fun,其功能是:
根据整型参数n,计算如下公式的值。
A
(1)=1,A
(2)=1/(1+A
(1)),A(3)=1/(1+A
(2)),?
?
,A(n)=1/(1+A(n-1))。
输入说明 第一行1个整数m,表示有多少组数据。
其后一行为m个正整数,表示m个整数。
输出说明 一行输出数列对应数据,换行。
小数点后保留6位有效数字,多余部分四舍五入。
输入样例3358 输出样例 12 #includedoublefun(intn){returnn==1?
1:
1/(1+fun(n-1));} intmain(){inta,b,c;scanf(\for(b=0;b 10水仙花数 描述 水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。
。
定义一个函数intfun(inta,intb),计算区间[a,b]或[b,a]的水仙花数。
输入说明 第一行1个整数m,表示有多少组数据。
每行表示一组数据,每组数据两个整数a和b构成,计算[a,b]或[b,a]间的水仙花数,a和b之间用空格分隔。
输出说明 输出区间[a,b]或[b,a]的水仙花数数量,换行。
输入样例2 310004005000 输出样例42 #include#include 13 enum{num=100};intfun(inta,intb){intk,c,d[num],i,m=0,sum=0;if(a=100&&a0;k++) c*=10;for(i=0;i intmain(){inta,b,m;scanf(\while(m--){scanf(\printf(\}return0;} 11歌德巴赫猜想描述 编写函数isPrime(longn),说明如下:
函数的功能是判断给定的正整数n是否为素数,函数的返回值1/0表示n是/不是素数。
编写main()函数,调用isPrime()验证歌德巴赫猜想:
任意一个大偶数都能分解为两个素数的和。
输入说明 第一行1个整数m,表示有多少组数据。
其后一行为m个正偶数,表示m 14 个数据。
输出说明 每行输出2个数据表示分解的素数,换行。
输入样例21020 输出样例37317 #includeintisprime(longn){intm;if(n intmain(){