上机题及答案汇总.docx

上传人:b****6 文档编号:16560296 上传时间:2023-07-14 格式:DOCX 页数:43 大小:25.55KB
下载 相关 举报
上机题及答案汇总.docx_第1页
第1页 / 共43页
上机题及答案汇总.docx_第2页
第2页 / 共43页
上机题及答案汇总.docx_第3页
第3页 / 共43页
上机题及答案汇总.docx_第4页
第4页 / 共43页
上机题及答案汇总.docx_第5页
第5页 / 共43页
上机题及答案汇总.docx_第6页
第6页 / 共43页
上机题及答案汇总.docx_第7页
第7页 / 共43页
上机题及答案汇总.docx_第8页
第8页 / 共43页
上机题及答案汇总.docx_第9页
第9页 / 共43页
上机题及答案汇总.docx_第10页
第10页 / 共43页
上机题及答案汇总.docx_第11页
第11页 / 共43页
上机题及答案汇总.docx_第12页
第12页 / 共43页
上机题及答案汇总.docx_第13页
第13页 / 共43页
上机题及答案汇总.docx_第14页
第14页 / 共43页
上机题及答案汇总.docx_第15页
第15页 / 共43页
上机题及答案汇总.docx_第16页
第16页 / 共43页
上机题及答案汇总.docx_第17页
第17页 / 共43页
上机题及答案汇总.docx_第18页
第18页 / 共43页
上机题及答案汇总.docx_第19页
第19页 / 共43页
上机题及答案汇总.docx_第20页
第20页 / 共43页
亲,该文档总共43页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

上机题及答案汇总.docx

《上机题及答案汇总.docx》由会员分享,可在线阅读,更多相关《上机题及答案汇总.docx(43页珍藏版)》请在冰点文库上搜索。

上机题及答案汇总.docx

上机题及答案汇总

1温度转换

描述

已知华氏温度到摄氏温度的转换公式为:

摄氏温度=(华氏温度-32)×5/9,写程序将给定的华氏温度转换为摄氏温度输出

输入说明

只有一个整数,表示输入的华氏温度

输出说明

输出一个表示摄氏温度的实数,小数点后保留2位有效数字,多余部分四舍五入

输入样例

50

输出样例

10.00

2计算球体重量

描述

已知铁的比重是7.86,金的比重是19.3。

写一个程序,分别计算出给定直径的铁球与金球的质量,假定PI=3.1415926

输入说明

输入两个整数,分别表示铁球与金球的直径(单位为毫米)

输出说明

输出两个浮点数,分别表示铁球与金球的质量(单位为克),小数点后保留3位小数,两个浮点数之间用空格分隔

输入样例

100100

输出样例

4115.48610105.456

提示

#include

intmain(){

doubleFe=7.86,Au=19.3,Pi=3.1415926;

intm,n;

floatM1,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);

return0;

}

3阶梯电价计费

描述

电价分三个档次,[0,110]度电,每度电0.5元;(110,210]度电,超出110部分每度电0.55元,超过210度电,超出210部分每度电0.70元,给出一个家庭一月用电量,请计算出应缴的电费(四舍五入,保留小数点后两位小数)。

输入说明

第一行为1个整数m(100>m>0),表示有多少组数据。

其后一行为m个正实数,表示m个用电量数据

输出说明

一行输出1个电费数据(四舍五入保留2位小数)后,换行。

输入样例

3

100200329.75

输出样例

50.00

104.50

193.82

(1)自己的

#include

doublefare(doublem){

doublen;

if(m>=0&&m<=100)

n=0.5*m;

if(m>110){

if(m<=210)

n=0.5*110+0.55*(m-110);

else

n=0.5*110+0.55*(210-110)+0.70*(m-210);

}

returnn;

}

intmain()

{

inta,b;

doublec;

scanf("%d",&a);

for(b=0;b

{

scanf("%lf",&c);

printf("%.2f\n",fare(c));

}

return0;

}

(2)别人的

#include

doublemoney(doublex)

{

if(x>=100&&x<=110)

return0.5*x;

if(x>110&&x<=210)

return0.5*110+0.55*(x-110);

if(x>210)

return0.5*110+0.55*100+0.7*(x-210);

}

intmain()

{

inta,b;

doublec;

scanf("%d",&a);

for(b=0;b

{

scanf("%lf",&c);

printf("%.2f\n",money(c));

}

return0;

}

4计算某月天数

描述

每个月的1,3,5,7,8,10,12月有31天,4,6,9,11月有30天,闰年2月29天,其他年份2月28天,给定年份和月份求该月的天数

输入说明

多组数据,输入数据第一行为整数n(n<100),表示有几组数据数据,其后为n行,每行表示一组数据,每组数据由两个正整数a和b构成,a表示年份,b表示月份,a和b之间用空格分隔

输出说明

根据年份和月份计算该月天数并输出,每输出一个天数后换行

输入样例

3

20003

20115

20082

输出样例

31

31

29

程序问题:

输入时年份和月份在同一行,按空格分开,不能按回车换行

1别人的

#include

voidtianshu(intx,inty)

{

if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)

printf("%d\n",31);

elseif(y==4||y==6||y==9||y==11)

printf("%d\n",30);

elseif((x%4==0&&x%100!

=0||x%400==0)&&y==2)

printf("%d\n",29);

elseif(y==2)

printf("%d\n",28);

}

intmain()

{

inta,b,m,n;

scanf("%d",&n);

for(m=1;m<=n;++m)

{

scanf("%d%d",&a,&b);

tianshu(a,b);

}

return0;

}

2自己的

#include

intmain()

{

inta,b;

scanf("%d\n",&a);

for(b=0;b

{

intyear,month,days;

scanf("%d%d",&year,&month);

switch(month)

{

case2:

if(year%4==0&&year%100!

=0||year%400==0)

days=29;

else

days=28;

break;

case1:

case3:

case5:

case7:

case8:

case10:

case12:

days=31;

break;

case4:

case6:

case9:

case11:

days=30;

break;

}

printf("%d\n",days);

}

return0;

}

5计算整数各位数字之和

描述

假设n是一个由最多9位数字(d9,…,d1)组成的正整数。

编写一个程序计算n的每一位数字之和

输入说明

有多组数据,输入数据第1行为整数m(m<100),表示有多少组数据,其后一行m个正整数

输出说明

对每一个整数n输出它的各位数字之和后换行

输入样例

3

63704170498

输出样例

6

14

29

1别人的

#include

voidsum(inta)

{intx,y;

intsum=0;

for(x=100000000;x>0;x=x/10)

{

y=a/x;

a=a-y*x;

sum+=y;

}

printf("%d\n",sum);

}

intmain()

{

intm,n,x;

scanf("%d",&m);

for(n=1;n<=m;++n)

{scanf("%d",&x);

sum(x);

}

return0;

}

2自己的

#include

intmain()

{

intm,a;

scanf("%d",&m);

for(a=1;a<=m;a++)

{

intsum=0,x,y,n;

scanf("%d",&n);

for(x=100000000;x>0;x=x/10)

{

y=n/x;

sum+=y;

n=n-x*y;

}

printf("%d\n",sum);

}

return0;

}

6完数

描述

请写一个程序,给出指定整数范围[a,b]内的所有完数,0

一个数如果恰好等于除它本身外的所有因子之和,这个数就称为"完数"。

例如6是完数,因为6=1+2+3

输入说明

只有一组数据,即一行上的两个整数a和b,a和b之间用空格分隔

输出说明

输出[a,b]内的所有完数,每个数字占一行

输入样例

110

输出样例

6

1别人的

#include

#include

intwanshu(intn)

{

intm;

intsum=0;

for(m=1;m

if(n%m==0)

sum+=m;

}

if(n==sum)return1;

else

return0;

}

intmain()

{

intm,n,i;

scanf("%d%d",&m,&n);

for(i=m;i<=n;++i){

if(wanshu(i)==1)printf("%d\n",i);

}

return0;

}

2自己的

#include

voidwanshu(intn)

{

intm,sum=0;

for(m=1;m

{

if(n%m==0)

sum+=m;

}

if(sum==n)

printf("%d\n",n);

}

intmain()

{

inta,b,n;

scanf("%d%d",&a,&b);

for(n=a;n<=b;n++)

wanshu(n);

printf("\n");

return0;

}

#include

intmain()

{

inta,b,m,x,sum=0;

scanf("%d%d",&a,&b);

for(x=a;x<=b;x++)

{

for(m=1;m

{

if(x%m==0)

sum+=m;

}

if(sum==x)

printf("%d\n",x);

}

return0;

}

7最大公约数

描述

最大公约数(GCD)指某几个整数共有因子中最大的一个,最大公约数具有如下性质,

gcd(a,0)=a

gcd(a,1)=1

因此当两个数中有一个为0时,gcd是不为0的那个整数,当两个整数互质时最大公约数为1。

定义函数:

intgcd(inta,intb),返回两个参数的最大公约数。

并写一个主函数调用该函数,实验各种输入参数情况。

输入说明

多组数据,每组数据由同一行的两个正整数a和b构成(0<=a,b<10000),a和b之间用空格分隔,当a和b都为0时表示输入结束

输出说明

对每组数据输出其最大公约数后换行

输入样例

24

126

35

00

输出样例

2

6

1

输入实例:

241263500

#include

intgcd(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(;;)

{

scanf("%d%d",&a,&b);

if(a==0&&b==0)

break;

printf("%d\n",gcd(a,b));

}

return0;

}

8角谷定理

描述

测试,

角谷定理:

输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。

经过如此有限次运算后,总可以得到自然数值1。

求经过多少次可得到自然数1。

如:

例如数据22的变化过程:

221134175226134020105168421,数据变化次数为16。

可用迭代法或递归法实现。

输入说明

第一行1个整数m(100>m>0),表示有多少组数据。

其后一行为m个正整数,表示m个数据。

输出说明

一行输出1个数据变换次数后,换行

输入样例

3

223343

输出样例

16

27

30

#include

intjg(intn)

{

statici=0,m;

++i;

if(n==1)

{

m=i;

i=0;

returnm;

}

else

{

if(n%2==0)

n=n/2;

else

n=n*3+1;

jg(n);

}

}

intmain()

{

inta,b,n;

scanf("%d",&a);

for(b=0;b

{

scanf("%d",&n);

printf("%d\n",jg(n));

}

return0;

}

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(100>m>0),表示有多少组数据。

其后一行为m个正整数,表示m个整数。

输出说明

一行输出数列对应数据,换行。

小数点后保留6位有效数字,多余部分四舍五入。

输入样例

3

358

输出样例

0.666667

0.625000

0.617647

#include

doublefun(intn)

{

returnn==1?

1:

1/(1+fun(n-1));

}

intmain()

{

inta,b,c;

scanf("%d",&a);

for(b=0;b

{

scanf("%d",&c);

printf("%.6f\n",fun(c));

}

return0;

}

10水仙花数

描述

水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。

(例如:

1^3+5^3+3^3=153)。

定义一个函数intfun(inta,intb),计算区间[a,b]或[b,a]的水仙花数。

输入说明

第一行1个整数m(100>m>0),表示有多少组数据。

每行表示一组数据,每组数据由两个整数a和b构成,计算[a,b]或[b,a]间的水仙花数,a和b之间用空格分隔。

输出说明

输出区间[a,b]或[b,a]的水仙花数数量,换行。

输入样例

2

31000

4005000

输出样例

4

2

#include

#include

enum{num=100};

intfun(inta,intb){

intk,c,d[num],i,m=0,sum=0;

if(a<100)

a=100;

for(;a>=100&&a<=b;a++)

{

for(c=10,k=1;a/c>0;k++)

c*=10;

for(i=0;i

{

d[i]=(a%(int)pow(10,i+1)/(int)pow(10,i));

sum+=(int)pow(d[i],k);

}

if(sum==a)

m++;

sum=0;

}

returnm;

}

intmain()

{

inta,b,m;

scanf("%d",&m);

while(m--)

{

scanf("%d%d",&a,&b);

printf("%d\n",fun(a,b));

}

return0;

}

11歌德巴赫猜想

描述

编写函数isPrime(longn),说明如下:

函数的功能是判断给定的正整数n是否为素数,函数的返回值1/0表示n是/不是素数。

编写main()函数,调用isPrime()验证歌德巴赫猜想:

任意一个大偶数都能分解为两个素数的和。

输入说明

第一行1个整数m(100>m>0),表示有多少组数据。

其后一行为m个正偶数,表示m个数据。

输出说明

每行输出2个数据表示分解的素数(每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,从小到大输出),换行。

输入样例

2

1020

输出样例

37

317

#include

intisprime(longn)

{

intm;

if(n<=1)

return0;

for(m=2;m

if(n%m==0)

return0;

return1;

}

intmain()

{

intm,n;

scanf("%d",&m);

for(n=1;n<=m;n++)

{

longa,b;

scanf("%ld",&a);

for(b=a-1;b>=2;--b)

if(isprime(b)==1&&isprime(a-b)==1)

break;

printf("%ld%ld\n",a-b,b);

}

return0;

}

12矩阵

描述

请写一个程序,对于一个m行m列(2

主对角线是方正从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。

输入说明

只有一组数据;输入数据的第一行为一个正整数,表示m;接下来为m行、每行m个整数表示方阵的元素。

输出说明

从大到小排列的一行整数,每个整数后跟一个空格,最后换行。

输入样例

4

158-26

31241871

-3-92713

17213869

输出样例

159145144135816044322827

#include

intmain(){

intm,i,j,a[20][20]={0},b[42]={0},k;

scanf("%d",&m);

for(i=0;i

for(j=0;j

scanf("%d",&a[i][j]);

b[i]+=a[i][j];

if(j==m)printf("\n");}

for(j=0,k=m;j

for(i=0;i

b[k]+=a[i][j];

for(i=0,j=0;i

for(j=m-1,i=0;i

for(i=1;i<2*m+2;++i){

for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)

b[j+1]=b[j];

if(j!

=i-1)b[j+1]=k;

}

for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');

printf("\n");

return0;

}

//自己做的排序,比较简单

for(i=1;i<=2*m+2;i++)

{

for(j=1;j<=2*m+2;j++)

if(b[j-1]

{

t=b[j-1];

b[j-1]=b[j];

b[j]=t;

}

}

for(j=0;j<2*m+2;j++)

printf("%d",b[j]);

13回文数

描述

若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。

判断给出的整数是否是回文数。

若是,则输出该整数各位数字之和,否则输出no.

输入说明

输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。

输出说明

对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。

输入样例

2

131

24

输出样例

5

no

#include

#include

intmain(){

inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;

scanf("%d",&n);

for(m=0;m

scanf("%d",&b);

for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同

for(i=0,p=k-1;i

a[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);

sum+=a[i];

d+=a[i]*pow(10,p);

}

if(d==b)printf("%d\n",sum);

elseprintf("no\n");

sum=0;d=0;

}

return0;

}

#include

#include

intmain()

{

inta[200],m,n,i,k,p,c,d=0,sum=0;

scanf("%d",&m);

while(m--)

{

scanf("%d",&n);

for(k=0,c=10;n/c>0;k++)

c*=10;

for(i=0,p=k;i

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2