上机题及答案.._第1页
上机题及答案.._第2页
上机题及答案.._第3页
上机题及答案.._第4页
上机题及答案.._第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1温度转换 描述 已知华氏温度到摄氏温度的转换公式为:摄氏温度= (华氏温度- 32)5/9,写程序将给定的华氏温度转换为摄氏温度输出 输入说明 只有一个整数,表示输入的华氏温度 输出说明 输出一个表示摄氏温度的实数,小数点后保留2位有效数字,多余部分四舍五入 输入样例 50 输出样例 10.00 2计算球体重量 描述 已知铁的比重是7.86,金的比重是19.3。写一个程序,分别计算出给定直径的铁球与金球的质量,假定PI=3.1415926 输入说明 输入两个整数,分别表示铁球与金球的直径(单位为毫米) 输出说明 输出两个浮点数,分别表示铁球与金球的质量(单位为克),小数点后保留3位小数,两个浮点数之间用空格分隔 输入样例 100 100 输出样例 4115.486 10105.456 提示 #includeint main()double Fe=7.86,Au=19.3,Pi=3.1415926;int m,n;float M1,M2;scanf(%d %d,&m,&n);/注意,要使输出的两个数据中间无逗号,“”之间要无逗号,下面也如此M1=(4.0/3)*Pi*m/2*m/2*m/2*Fe/1000;M2=(4.0/3)*Pi*n/2*n/2*n/2*Au/1000;printf(%.3f %.3f,M1,M2);return 0; 3阶梯电价计费 描述 电价分三个档次,0,110度电,每度电0.5元;(110,210度电,超出110部分每度电0.55元,超过210度电,超出210部分每度电0.70元,给出一个家庭一月用电量,请计算出应缴的电费(四舍五入,保留小数点后两位小数)。 输入说明 第一行为1个整数m(100 m 0),表示有多少组数据。 其后一行为m个正实数,表示m个用电量数据 输出说明 一行输出1个电费数据(四舍五入保留2位小数)后,换行。 输入样例 3100 200 329.75 输出样例 50.00104.50193.82 (1)自己的#includedouble fare(double m)double n;if(m=0&m110)if(m=210)n=0.5*110+0.55*(m-110);else n=0.5*110+0.55*(210-110)+0.70*(m-210);return n;int main () int a,b; double c; scanf(%d,&a); for(b=0;ba;b+) scanf(%lf,&c); printf(%.2fn,fare(c);return 0;(2)别人的# include double money(double x)if(x=100&x110&x210)return 0.5*110+0.55*100+0.7*(x-210);int main ()int a,b;double c;scanf(%d,&a);for(b=0;ba;b+)scanf(%lf,&c);printf(%.2fn,money(c);return 0;4计算某月天数 描述 每个月的1,3,5,7,8,10,12月有31天,4,6,9,11月有30天,闰年2月29天,其他年份2月28天,给定年份和月份求该月的天数 输入说明 多组数据,输入数据第一行为整数n(n100),表示有几组数据数据,其后为n行,每行表示一组数据,每组数据由两个正整数a和b构成,a表示年份,b表示月份,a和b之间用空格分隔 输出说明 根据年份和月份计算该月天数并输出,每输出一个天数后换行 输入样例 32000 32011 52008 2 输出样例 313129程序问题:输入时年份和月份在同一行,按空格分开,不能按回车换行1别人的#includevoid tianshu(int x,int y) if(y=1|y=3|y=5|y=7|y=8|y=10|y=12)printf(%dn,31);else if(y=4|y=6|y=9|y=11)printf(%dn,30); else if(x%4=0&x%100!=0|x%400=0)&y=2) printf(%dn,29); else if(y=2) printf(%dn,28);int main() int a,b,m,n;scanf(%d,&n);for (m=1;m=n;+m) scanf(%d %d,&a,&b);tianshu(a,b);return 0; 2 自己的#includeint main()int a,b;scanf(%dn,&a);for(b=0;ba;b+)int year,month,days;scanf(%d %d,&year,&month);switch(month)case 2: if(year%4=0&year%100!=0|year%400=0)days=29;elsedays=28;break;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;printf(%dn,days);return 0; 5计算整数各位数字之和 描述 假设n是一个由最多9位数字(d9, , d1)组成的正整数。编写一个程序计算n的每一位数字之和 输入说明 有多组数据,输入数据第1行为整数m(m100),表示有多少组数据,其后一行m个正整数 输出说明 对每一个整数n输出它的各位数字之和后换行 输入样例 36 3704 170498 输出样例 61429 1别人的# include void sum(int a) int x,y; int sum=0; for(x=100000000;x0;x=x/10) y=a/x; a=a-y*x; sum+=y; printf(%dn,sum);int main() int m,n,x; scanf(%d,&m); for(n=1;n=m;+n) scanf(%d,&x); sum(x);return 0;2自己的#includeint main()int m,a;scanf(%d,&m);for(a=1;a0;x=x/10)y=n/x;sum+=y;n=n-x*y;printf(%dn,sum);return 0; 6完数 描述 请写一个程序,给出指定整数范围a,b内的所有完数,0ab10000。一个数如果恰好等于除它本身外的所有因子之和,这个数就称为完数。例如6是完数,因为6=123 输入说明 只有一组数据,即一行上的两个整数a和b,a和b之间用空格分隔 输出说明 输出a,b内的所有完数,每个数字占一行 输入样例 1 10 输出样例 6 1别人的#include#includeint wanshu (int n)int m;intsum=0;for(m=1;mn;+m)if(n%m=0) sum+=m;if(n=sum)return 1;elsereturn 0;int main()int m,n,i;scanf(%d %d,&m,&n);for(i=m;i=n;+i)if(wanshu(i)=1)printf(%dn,i);return 0;2自己的#includevoid wanshu(int n)int m,sum=0;for(m=1;mn;m+)if(n%m=0)sum+=m;if(sum=n)printf(%dn,n);int main()int a,b,n;scanf(%d %d,&a,&b);for(n=a;n=b;n+)wanshu(n);printf(n);return 0;# include int main()int a,b,m,x,sum=0; scanf(%d %d,&a,&b);for(x=a;x=b;x+) for(m=1;mx;m+) if(x%m=0) sum+=m;if(sum=x)printf(%dn,x); return 0;7最大公约数 描述 最大公约数(GCD)指某几个整数共有因子中最大的一个,最大公约数具有如下性质,gcd(a,0)=agcd(a,1)=1因此当两个数中有一个为0时,gcd是不为0的那个整数,当两个整数互质时最大公约数为1。定义函数:int gcd(int a,int b),返回两个参数的最大公约数。并写一个主函数调用该函数,实验各种输入参数情况。输入说明 多组数据,每组数据由同一行的两个正整数a和b构成(0=a,b10000),a和b之间用空格分隔,当a和b都为0时表示输入结束输出说明 对每组数据输出其最大公约数后换行 输入样例 2 412 63 50 0 输出样例 261输入实例:2 4 12 6 3 5 0 0 #includeint gcd(int a,int b)int n;if(a=0&b=0)return 0;if(a=0)return b;if(b=0)return a;for(n=(ab?b:a);a%n!=0|b%n!=0;n-);return n;int main()int a,b;while(1)/也可写为for(; ;)scanf(%d %d,&a,&b);if(a=0&b=0)break; printf(%dn,gcd(a,b);return 0; 8角谷定理 描述 测试, 角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。如:例如数据22的变化过程: 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1,数据变化次数为16。可用迭代法或递归法实现。 输入说明 第一行1个整数m(100 m 0),表示有多少组数据。 其后一行为m个正整数,表示m个数据。 输出说明 一行输出1个数据变换次数后,换行 输入样例 322 33 43 输出样例 162730 #includeint jg(int n)static i=0,m;+i;if(n=1)m=i;i=0;return m;elseif(n%2=0)n=n/2;elsen=n*3+1;jg(n);int main()int a,b,n;scanf(%d,&a);for(b=0;b m 0),表示有多少组数据。 其后一行为m个正整数,表示m个整数。 输出说明 一行输出数列对应数据,换行。小数点后保留6位有效数字,多余部分四舍五入。 输入样例 33 5 8 输出样例 0.6666670.6250000.617647 #includedouble fun(int n)return n=1?1:1/(1+fun(n-1);int main()int a,b,c;scanf(%d,&a);for(b=0;b m 0),表示有多少组数据。每行表示一组数据,每组数据由两个整数a和b构成,计算a,b或b,a间的水仙花数,a和b之间用空格分隔。 输出说明 输出区间a,b或b,a的水仙花数数量,换行。 输入样例 23 1000 400 5000 输出样例 42 #include#includeenumnum=100;int fun(int a,int b)int k,c,dnum,i,m=0,sum=0;if(a=100&a0;k+)c*=10;for(i=0;ik&i m 0),表示有多少组数据。 其后一行为m个正偶数,表示m个数据。 输出说明 每行输出2个数据表示分解的素数(每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,从小到大输出),换行。 输入样例 210 20 输出样例 3 73 17 #includeint isprime(long n)int m;if(n=1)return 0;for(m=2;mn;m+)if(n%m=0)return 0;return 1;int main()int m,n;scanf(%d,&m);for(n=1;n=2;-b)if(isprime(b)=1&isprime(a-b)=1)break;printf(%ld %ldn,a-b,b);return 0; 12矩阵 描述 请写一个程序,对于一个m行m列(2m20)的方阵,求其每一行、每一列及主、辅对角线元素之和(注:主对角线是方正从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。 输入说明 只有一组数据;输入数据的第一行为一个正整数,表示m;接下来为m行、每行m个整数表示方阵的元素。 输出说明 从大到小排列的一行整数,每个整数后跟一个空格,最后换行。 输入样例 415 8 -2 631 24 18 71-3 -9 27 1317 21 38 69 输出样例 159 145 144 135 81 60 44 32 28 27 #includeint main()int m,i,j,a2020=0,b42=0,k; scanf(%d,&m); for(i=0;im;+i) for(j=0;jm;+j) scanf(%d,&aij); bi+=aij; if(j=m)printf(n); for(j=0,k=m;jm;+j,+k) for(i=0;im;+i) bk+=aij; for(i=0,j=0;im;+i,+j)bk+=aij; for(j=m-1,i=0;im;-j,i=m-1-j)bk+1+=aij; for(i=1;i=0&bjk;-j) bj+1=bj; if(j!=i-1)bj+1=k; for(i=2*m+1;i=0;-i)printf(%d%c,bi, ); printf(n); return 0; /自己做的排序,比较简单for(i=1;i=2*m+2;i+)for(j=1;j=2*m+2;j+)if(bj-1bj)t=bj-1;bj-1=bj;bj=t;for(j=0;j2*m+2;j+)printf(%d ,bj);13回文数 描述 若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no. 输入说明 输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。 输出说明 对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。 输入样例 213124 输出样例 5no #include#includeint main()int a200=0,b,c,d=0,m,n,i,k,p,sum=0;scanf(%d,&n);for(m=0;m0;+k)c*=10; /注意此处k与下面略有不同 for(i=0,p=k-1;ik;+i,-p) ai=(b%(int)pow(10,i+1)/(int)pow(10,i); sum+=ai; d+=ai*pow(10,p); if(d=b)printf(%dn,sum);else printf(non); sum=0;d=0;return 0; #include#includeint main()int a200,m,n,i,k,p,c,d=0,sum=0;scanf(%d,&m);while(m-)scanf(%d,&n);for(k=0,c=10;n/c0;k+)c*=10;for(i=0,p=k;i=k;i+,p-)ai=(n%(int)pow(10,i+1)/(int)pow(10,i);sum+=ai;d+=ai*(int)pow(10,p);if(d=n)printf(%dn,sum);elseprintf(non);sum=0;d=0;return 0;14排序 描述 给定N个不同的整数,要求对这N个整数按如下规则排序并输出。规则一:所有的偶数排在奇数前面。规则二:在规则一的前提下按照从大到小的顺序排序。 输入说明 只有一组数据。数据由两行构成,第一行为整数n(n=100),表示代排序整数的数量。第二行是n个整数,每个整数的取值区间都为-3276832767,整数之间以空格间隔。 输出说明 在一行输出排好序的整数,整数之间以空格间隔,然后换行。 输入样例 5 1 2 3 4 5 输出样例 4 2 5 3 1 #includeint da(int m,int n) if(m%2=0&n%2!=0)return 0; else if(m%2!=0&n%2=0)return 1; else if(mn)return 1; else return 0;int main() int n,i,j,t,a100; scanf(%d,&n); for(i=0;in;+i) scanf(%d,&ai); for(i=1;i=0&da(aj,t);-j) aj+1=aj; if(j!=i-1)aj+1=t; for(i=0;in;+i) printf(%d%c,ai, ); /printf(“%d ”,ai); printf(n); return 0;15拼数字 描述 对于给定的字符序列,从左至右将所有数字字符取出拼接成一个无符号整数(字符序列长度小于100,拼接出的整数小于231),计算并输出该整数的最大因子(如果是素数或0,则其最大因子为自身)。 输入说明 有多组数据;每组数据为一行字符序列,当输入一个空行时表示输入结束。 输出说明 对每个字符序列,求出所得整数的最大因子;若字符序列中没有数字或找出的整数为0,则输出0。每个整数占一行输出。 输入样例 sdf0ejg3.f?9f?4afd0s&2d79*(gabcde 输出样例 138570 #include#include#includeint yin(int n) int p,k=2; for(p=n;k*k=p;+k) if(n%k=0)n=p/k;break; return n;int main()int c,a100=0,b,k,i,d;while(c=getchar()!=n) i=0;b=0; /不能少while(c=getchar()!=n)if(isdigit(c)ai=c-0;+i; for(k=0,d=i;kd;+k,-i)b+=ak*(int)pow(10,i-1); printf(%dn,yin(b); return 0; 16马鞍点 描述 请写一个程序,找出给定矩阵的马鞍点。若一个矩阵中的某元素在其所在行最小而在其所在列最大,则该元素为矩阵的一个马鞍点。 输入说明 输入数据由m+1行构成,第一行只有两个整数m和n(0m100,0n100),分别表示矩阵的行数和列数,接下来的m行、每行n个整数表示矩阵元素(矩阵中的元素互不相同),整数之间以空格间隔。 输出说明 在一行上输出马鞍点的行号、列号(行号和列号从0开始计数)及元素的值(用一个空格分隔),之后换行;若不存在马鞍点,则输出一个字符串“no”后换行。 输入样例 4 311 13 121 407 72 8823 58 1 134 30 62 输出样例 1 1 72 #includeint main() int a100100,b,c=0,i,j,k,p,m,n,t; scanf(%d%d,&m,&n); for(i=0;im;+i) for(j=0;jn;+j) scanf(%d,&aij); for(i=0;im;+i)t=ai0;k=0; for(j=1;jaij)t=aij;k=j;t=a0k;b=0;for(p=1;pm;+p)if(tapk)t=apk;b=p;if(b=i) c=1;printf(%d %d %dn,b,k,abk); if(c=0)printf(non); return 0; 17等差数列 描述 请写一个程序,判断给定整数序列能否构成一个等差数列。 输入说明 第一行为整数T(T=10),代表测试数据的数目。每组数据由两行构成,第一行只有一个整数n(100),表示序列长度(该序列中整数的个数),第二行为n个整数,每个整数的取值区间都为-3276832767,整数之间以空格、跳格或换行间隔。 输出说明 对每一组数据输出判断结果,不能构成等差数列输出“no”,能构成等差数列输出表示公差(相邻两项的差)绝对值的一个整数,输出后换行。 输入样例 2623 15 4 18 35 1152 6 8 4 10 输出样例 no2 #includeint main() int m,n,p,i,j,t,a100; scanf(%d,&n); for(m=0;mn;+m) scanf(%d,&p); for(i=0;ip;+i) scanf(%d,&ai); for(i=1;i=0&taj;-j)aj+1=aj;if(j!=i-1)aj+1=t; for(i=2,j=a1-a0,t=1;ip;+i) if(ai-ai-1!=j)t=0;printf(non);break; if(t=1)printf(%dn,j); return 0; 18寻找最长的行 描述 寻找若干行文本中最张的一行 输入说明 输入为多个字符串(每个字符串长度不超过100个字符),每个字符串占一行,输入的行为“*end*”时表示输入结束 输出说明 输出其中最长的一行长度后换行再输出最长行的内容,如果最长行不止一个,则输出其中的第一行。 输入样例 abceabdf dlfd*end* 输出样例 9abdf dlfd #include#includeint main() int m,n=0;char a100,b100; while(strcmp(gets(a),*end*)!=0) m=strlen(a); if(mn)n=m;strcpy(b,a); if(m=n); printf(%dn%sn,n,b); return 0;19约瑟夫环 描述 编号为1,2,.,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。现在给定一个随机数m0,从编号为1的人开始,按顺时针方向1开始顺序报数,报到m时停止。报m的人出圈,同时留下他的密码作为新的m值,从他在顺时针方向上的下一个人开始,重新从1开始报数,如此下去,直至所有的人全部出圈为止。 输入说明 仅有一组数据,输入数据第一行为两个正整数n(0n100)和m(0m99999999),分别表示人的个数及初始随机数,第二行为n个整数Ai(0Ai99999999,i=1.n),表示每个人持有的密码。 输出说明 在一行输出n个整数表示依次出圈人的编号,整数之间用空格分隔 输入样例 7 53 8 1 22 4 9 15 输出样例 5 2 6 7 4 3 1 #includeint main() int m,n,i,j,k,p,q,a100; scanf(%d%d,&n,&m); for(i=0;in;+i) scanf(%d,&ai); for(k=0,i=0;kn;+k) for(j=i,p=0,q=0;pn-1)i=i%n; if(ai=0)-p; m=ai; ai=0; printf(%d%c,i+1, ); for(+in-1?i=i%n:i;kn-1?i=i%n:i); printf(n); return 0;20字符串压缩 描述 有一种简单的字符串压缩算法,对于字符串中连续出现的同一个字符,用该字符加上连续出现的次数来表示(连续出现次数小于3时不压缩),例如,字符串aaaaabbbabaaaaaaaaaaaaabbbb可压缩为a5b3aba13b4。请设计一个程序,将采用该压缩方法得到的字符串解压缩,还原出原字符串并输出。 输入说明 只有一组数据,数据为一个字符串(长度不大于50,只包含字母和数字) 输出说明 在一行上输出解压缩后的字符串(长度不超过100),最后换行。 输入样例 a5b3aba13b4 输出样例 Aaaaabbbabaaaaaaaaaaaaabbbb #include#includeint main() char a50; int i,j,c,n,m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论