哈工大MOOC课件编程题参考答案79周.docx
《哈工大MOOC课件编程题参考答案79周.docx》由会员分享,可在线阅读,更多相关《哈工大MOOC课件编程题参考答案79周.docx(36页珍藏版)》请在冰豆网上搜索。
哈工大MOOC课件编程题参考答案79周
编程题参考答案(7-9周)
第七周_在线测试
1.递归法计算游戏人员的年龄
#include
unsignedintComputeAge(unsignedintn);
intmain(void)
{
unsignedintn;
scanf("%u",&n);
printf("Theperson'sageis%u\n",ComputeAge(n));
return0;
}
//函数功能:
用递归算法计算第n个人的年龄
unsignedintComputeAge(unsignedintn)
{
unsignedintage;
if(n==1)
{
age=10;
}
else
{
age=ComputeAge(n-1)+2;
}
returnage;
}
2.魔术师猜数
#include
intMagic(intm);
intmain()
{
intm,ret;
scanf("%d",&m);
ret=Magic(m);
if(ret!
=1)
{
printf("Thesumyoucalculatediswrong!
\n");
}
return0;
}
intMagic(intm)
{
inta,b,c,n;
for(a=1;a<9;a++)
{
for(b=1;b<9;b++)
{
for(c=1;c<9;c++)
{
n=122*a+212*b+221*c;
if(m==n)
{
printf("Thenumberis%d\n",100*a+10*b+c);
return1;
}
}
}
}
return0;
}
3.寻找中位数v1.0
#include
#include
intmid(inta,intb,intc);
intmain()
{
inta,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("Theresultis%d\n",mid(a,b,c));
return0;
}
intmid(inta,intb,intc)
{
inttmp1=a,tmp2,tmp3,tmp4;
if(tmp1>b)
{
tmp1=b;
tmp2=a;
tmp3=c;
if(tmp1>c)
{
tmp1=c;
tmp3=b;
}
if(tmp2>tmp3)
{
tmp4=tmp3;
tmp3=tmp2;
tmp2=tmp4;
}
}
else
{
tmp2=b;
tmp3=c;
if(tmp1>c)
{
tmp1=c;
tmp3=a;
}
if(tmp2>tmp3)
{
tmp4=tmp3;
tmp3=tmp2;
tmp2=tmp4;
}
}
returntmp2;
}
4.还原算术表达式
#include
#include
intmain()
{
intx,y,z,n,flag=0;
printf("Inputn(n<1000):
\n");
scanf("%d",&n);
for(x=0;x<=5;x++)
{
for(y=0;y<=5;y++)
{
for(z=0;z<=9;z++)
{
if(100*x+10*y+z+z+10*z+100*y==n)
{
printf("X=%d,Y=%d,Z=%d\n",x,y,z);
flag=1;
break;
}
}
}
}
if(flag==0)printf("Invalid\n");
return0;
}
第七周_练兵区
1.谐均值计算
#include
doubleCalculate(double,double);
intmain(void)
{
doublea,b;
printf("Inputtwodoubles:
\n");
scanf("%lf%lf",&a,&b);
printf("1/((1/x+1/y)/2)=%0.3f\n",Calculate(a,b));
return0;
}
doubleCalculate(doublex,doubley)
{
return1/((1/x+1/y)/2);
}
2.输出指定行列数的字符
#include
voidChline(charch,intcolumn,introw);
intmain(void)
{
intx,y;
charch;
printf("inputachar:
\n");
scanf("%c",&ch);
printf("inputcolumnandrow:
\n");
scanf("%d%d",&x,&y);
Chline(ch,x,y);
return0;
}
voidChline(charch,intcolumn,introw)
{
intx,y;
for(y=0;y{
for(x=0;xprintf("%c",ch);
printf("\n");
}
}
第八周_在线测试
1.计算礼炮声响次数
#include
intmain()
{
intt,n=0;
for(t=0;t<=140;t++)
{
if(t%5==0&&t<=21*5)
{
n++;
continue;
}
if(t%6==0&&t<=21*6)
{
n++;
continue;
}
}
if(t%7==0&&t<=21*7)
{
n++;
continue;
}
printf("n=%d",n);
return0;
}
2.兔子生崽问题
#include
#defineN12
intFibonacci(intf[],intn);
intmain()
{
}
intf[N],i,num,sum;
printf("Inputn(n<=12):
\n");
scanf("%d",&num);
sum=Fibonacci(f,num);
printf("\nTotal=%d\n",sum);
return0;
/*函数功能:
计算并打印Fibonacci数列的前n项*/
intFibonacci(intf[],intn)
{
inti,sum=0;
f[0]=1;
f[1]=2;
for(i=2;i{
f[i]=f[i-1]+f[i-2];
}
for(i=0;i{
printf("%4d",f[i]);
}
for(i=0;i{
sum=sum+f[i];
}
returnsum;
}
3.抓交通肇事犯
#include
intmain()
{
inta,b,c,d,i,j;
for(i=31;i<100;i++)
{
j=i*i;
a=j/1000;
d=j%10;
b=j%1000/100;
c=j%100/10;
if(a==b&&c==d&&a!
=c)
printf("k=%d,m=%d\n",j,i);
}
return0;
}
4.检验并打印幻方矩阵
#include
#define
N5
intmain(void)
{
inti,j;
intx[N][N];
for(i=0;i<=4;i++)
for(j=0;j<=4;j++)
{
scanf("%d",&x[i][j]);
}
introwSum[N],colSum[N],diagSum1,diagSum2;
intflag=1;
for(i=0;i{
rowSum[i]=0;
for(j=0;j{
rowSum[i]=rowSum[i]+x[i][j];
}
}
for(j=0;j{
colSum[j]=0;
for(i=0;i{
colSum[j]=colSum[j]+x[i][j];
}
}
diagSum1=0;
for(j=0;j{
diagSum1=diagSum1+x[j][j];
}
diagSum2=0;
for(j=0;j{
diagSum2=diagSum2+x[j][N-1-j];
}
if(diagSum1!
=diagSum2)
{
flag=0;
}
else
{
for(i=0;i{
if((rowSum[i]!
=diagSum1)||(colSum[i]!
=diagSum1))
flag=0;
}
}
if(flag)
{
printf("Itisamagicsquare!
\n");
for(i=0;i{
for(j=0;j{
printf("%4d",x[i][j]);
}
printf("\n");
}
}
else
{
printf("Itisnotamagicsquare!
\n");
}
return0;
}
第八周_练兵区
1.三天打渔两天晒网
#include
#include
intmain()
{
inty,m,d;
intsum=0;
scanf("%4d-%2d-%2d",&y,&m,&d);
if(y<1990)
{
printf("Invalidinput.");
return0;
}
if((y%100!
=0&&y%4==0)||(y%400==0))
{
switch(m)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
if(d>31||d<1)
{
printf("Invalidinput");
return0;
}
break;
case2:
if(d>29||d<1)
{
printf("Invalidinput");
return0;
}
break;
case4:
case6:
case9:
case11:
if(d>30||d<1)
{
printf("Invalidinput");
return0;
}
break;
default:
printf("Invalidinput");
return0;
break;
}
}
else
{
switch(m)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
if(d>31||d<1)
{
printf("Invalidinput");
return0;
}
break;
case2:
if(d>28||d<1)
{
printf("Invalidinput");
return0;
}
break;
case4:
case6:
case9:
case11:
if(d>30||d<1)
{
printf("Invalidinput");
return0;
}
break;
default:
printf("Invalidinput");
return0;
break;
}
}
inti;
if(y>1990)
{
for(i=1990;i{
if((i%100!
=0&&i%4==0)||(i%400==0))
{
sum=sum+366;
}
else
{
sum=sum+365;
}
}
}
inti1;
if(m>1)
{
for(i1=1;i1{
if((y%100!
=0&&y%4==0)||(y%400==0))
{
switch(i1)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
sum=sum+31;
break;
case2:
sum=sum+29;
break;
case4:
case6:
case9:
case11:
sum=sum+30;
break;
}
}
else
{
switch(i1)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
sum=sum+31;
break;
case2:
sum=sum+28;
break;
case4:
case6:
case9:
case11:
sum=sum+30;
break;
}
}
}
}
sum=sum+d;
sum=sum%5;
if(sum==0||sum==4)
{
printf("Heishavingarest");
}
else
{
printf("Heisworking");
}
return0;
}
2.统计用户输入
#include
intmain(void)
{
intspace=0,newline=0,others=0;
chara;
printf("Pleaseinputastringendby#:
\n");
while((a=getchar())!
='#')
if(a=='')space++;
elseif(a=='\n')newline++;
elseothers++;
printf("space:
%d,newline:
%d,others:
%d\n",space,newline,others);
return(0);
}
3.统计正整数中指定数字的个数
#include
intCountDigit(intnumber,intdigit)
{
intcount=0;
do
{
if(digit==number%10)count++;
number=number/10;
}while(number>9);
returncount;
}
intmain()
{
intm,n;
printf("Inputm,n:
\n");
scanf("%d,%d",&m,&n);
printf("%d\n",CountDigit(m,n));
return0;
}
4.玫瑰花数
#include
intmain()
{
inti,a,n,s,m;
for(a=1000;a<=9999;a++)//遍历所有的4位数
{
n=a;
for(s=0,i=1;i<=4;i++)
{
m=n%10;
n=n/10;
//求出当前n的最低位
//将n缩小10倍,去掉最低位
s=s+m*m*m*m;//计算4位数字的4次方之和
}
if(a==s)
{
//满足4位数等于其4位数字的4次方之和的即为玫瑰花数
printf("%d\n",a);
}
}
return0;
}
5.四位反序数
源码1:
#include
intmain()
{
inti,j,k,m;
for(i=1;i<=9;i++)//千位从1变化到9
{
for(j=0;j<=9;j++)//百位从0变化到9
{
for(k=0;k<=9;k++)//十位从0变化到9
{
for(m=1;m<=9;m++)//个位从1变化到9
{
if(9*(i*1000+j*100+k*10+m)==m*1000+k*100+j*10+i)
{
printf("%d\n",i*1000+j*100+k*10+m);
}
}
}
}
}
return0;
}
源码2:
#include
intmain()
{
inti;
for(i=1001;i<1111;i++)//遍历所有的9倍之后仍为4位数的数
{
if(i%10*1000+i/10%10*100+i/100%10*10+i/1000==i*9)
{
printf("%d\n",i);
}
}
return0;
}
6.8除不尽的自然数
源码1:
#include
intmain()
{
inta,find=0;
for(a=0;!
find;a++)
{
if(((a*8+7)*8+1)*8+1==(34*a+15)*17+4)
{
printf("%d\n",(34*a+15)*17+4);
find=1;
}
}
return0;
}
源码2:
#include
intmain()
{
inti,find=0;
for(i=1992;!
find;i++)
{
if(i%8==1)
{
if((i/8)%8==1)
{
if((i/8/8)%8==7)
{
if(i%17==4)
{
if((i/17)%17==15)
{
if((i/17/17)==2*(i/8/8/8))
{
printf("%d\n",i);
find=1;
}
}
}
}
}
}
}
return0;
}
第九周_在线测试
1.ISBN识别码判断
#include
intmain()
{
charisbn[13];
inti,k=0,last,p;
gets(isbn);
for(i=0,p=0;i<11;i++)
{
if(isbn[i]=='-')continue;
p++;
k+=(isbn[i]-48)*p;
}
last=k%11;
if(last==10)
last='X';
else
last+=48;
if(last==isbn[12])
printf("Right");
else
{
isbn[12]=last;
printf("%s",isbn);
}
return0;
}
2.摘苹果
#include
intmain()
{
inta[10];
intheight,get=0;
inti;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&height);
for(i=0;i<10;i++)
{
if((height+30)>=a[i])
{
get++;
}
}
printf("%d",get);
return0;
}
3.求最大素数
#include
#include
intsum_prime(inta[],intn);
intprime(intn);
intmain()
{
inti,a[10],sum;
intnum;
printf("Inputn(n<=500):
\n");
scanf("%d",&num);
sum=sum_prime(a,num);
for(i=0;i<10;i++)
printf("%6d",a[i]);
printf("\nsum=%d\n",sum);
return0;
}
intsum_prime(inta[],intn)
{
inti,j=n,sum=0;
for(i=0;i<10;)
{
if(prime(j))
{
sum=sum+j;
a[i]=j;
i++;
}
j--;
}
returnsum;
}
intprime(intn)
{
inti,k;
k=(int)sqrt((double)n);
for(i=2;i<=k;i++)
{
if(n%i==0)
return0;
}
if(i>=k+1)
return1;
}
4.字符串逆序
#include
#include
#defineN80
voidInverse(charstr[]);
intmain()
{
chara[N];
printf("Inputastring:
\n");
gets(a);
Inverse(a);
printf("Inversedresults:
\n");
puts(a);
return0;
}
voidInverse(charstr[]
|