mooc C语言 第七周2 答案.docx

上传人:b****5 文档编号:6217760 上传时间:2023-01-04 格式:DOCX 页数:13 大小:32.07KB
下载 相关 举报
mooc C语言 第七周2 答案.docx_第1页
第1页 / 共13页
mooc C语言 第七周2 答案.docx_第2页
第2页 / 共13页
mooc C语言 第七周2 答案.docx_第3页
第3页 / 共13页
mooc C语言 第七周2 答案.docx_第4页
第4页 / 共13页
mooc C语言 第七周2 答案.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

mooc C语言 第七周2 答案.docx

《mooc C语言 第七周2 答案.docx》由会员分享,可在线阅读,更多相关《mooc C语言 第七周2 答案.docx(13页珍藏版)》请在冰豆网上搜索。

mooc C语言 第七周2 答案.docx

moocC语言第七周2答案

递归法计算游戏人员的年龄

题目内容:

 

有n个人围坐在一起,问第n个人多大年纪,他说比第n-1个人大2岁;问第n-1个人,他说比第n-2个人大2岁,…..,问第3个人,他说比第2个人大2岁;问第2个人,他说比第1个人大2岁。

第1个人说自己10岁,问第n个人多大年纪。

 

递归函数原型:

unsignedintComputeAge(unsignedintn); 

提示:

 

计算年龄的递归公式为:

输入格式:

“%u” 

输出格式:

“Theperson’sageis%u\n”

输入样例1:

 

5↙ 

输出样例1:

 

The_person’s_age_is_18 

输入样例2:

 

10↙ 

输出样例2:

 

The_person’s_age_is_28

#include

unsignedintComputeAge(unsignedintn);

intmain()

{

unsignedintage;

scanf("%u",&age);

printf("Theperson'sageis%u\n",ComputeAge(age));

return0;

}

unsignedintComputeAge(unsignedintn)

{

if(n==1)

return10;

else

{

returnComputeAge(n-1)+2;

}

}

∙1递归法计算两个数的最大公约数

题目内容:

 

利用最大公约数的性质计算。

对正整数a和b,当a>b时,若a中含有与b相同的公约数,则a中去掉b后剩余的部分a-b中也应含有与b相同的公约数,对a-b和b计算公约数就相当于对a和b计算公约数。

反复使用最大公约数的上述性质,直到a和b相等为止,这时,a或b就是它们的最大公约数。

这三条性质,也可以表示为:

 

性质1如果a>b,则a和b与a-b和b的最大公约数相同,即Gcd(a,b)=Gcd(a-b,b) 

性质2如果b>a,则a和b与a和b-a的最大公约数相同,即Gcd(a,b)=Gcd(a,b-a) 

性质3如果a=b,则a和b的最大公约数与a值和b值相同,即Gcd(a,b)=a=b

程序运行结果示例1:

 

Inputa,b:

16,24↙ 

8

程序运行结果示例2:

 

Inputa,b:

-2,-8↙ 

Inputerror!

输入提示信息:

”Inputa,b:

” 

输入格式:

”%d,%d” 

输出格式:

 

输出最大公约数:

”%d\n” 

输入错误提示信息:

”Inputerror!

\n”

#include

intGcd(inti,intj);

intmain()

{

inta,b;

intc;

printf("Inputa,b:

");

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

c=Gcd(a,b);

if(c==-1)

{

printf("Inputerror!

\n");

}

else

{

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

}

return0;

}

intGcd(inti,intj)

{

if(i<=0||j<=0)

{

return-1;

}

else

{

if(i==j)

{

returni;

}

elseif(i>j)

{

returnGcd(i-j,j);

}

else

{

returnGcd(i,j-i);

}

}

寻找中位数v1.0

题目内容:

 

编写一个函数返回三个整数中的中间数。

函数原型为:

intmid(inta,intb,intc); 

函数功能是返回a,b,c三数中大小位于中间的那个数。

 

输入格式:

“%d%d%d” 

输出格式:

”Theresultis%d\n” 

输入样例1:

 

12618↙ 

输出样例1:

 

The_result_is_12 

输入样例2:

 

-97-2↙ 

输出样例2:

 

The_result_is_-2

#include

intmid(inta,intb,intc);

intmain()

{

inti,j,k;

scanf("%d%d%d",&i,&j,&k);

printf("Theresultis%d\n",mid(i,j,k));

return0;

}

intmid(inta,intb,intc)

{

if((ab&&b>c))

{

returnb;

}

else

{

returnmid(b,c,a);

}

}

∙1还原算术表达式

题目内容:

 

编写程序求以下算式中XYZ的值,其中两数XYZ与YZZ相加的和n(99

 

程序运行结果示例1:

 

Inputn(n<1000):

 

532↙ 

X=3,Y=2,Z=1

程序运行结果示例2:

 

Inputn(n<1000):

 

977↙ 

Invalid

输入提示:

”Inputn(n<1000):

\n” 

输入格式:

“%d” 

输出格式:

”X=%d,Y=%d,Z=%d\n” 

计算不成功(无解)的输出提示:

”Invalid\n”

特别注意x>5ory>5orz>5;

#include

voidResolution(inti);

intmain()

{

intn;

printf("Inputn(n<1000):

\n");

scanf("%d",&n);

Resolution(n);

return0;

}

voidResolution(inti)

{

intfind=0;

intx,y,z;

for(x=1;x<=9;x++)

{

for(y=1;y<=9;y++)

{

for(z=1;z<=9;z++)

{

if(z*2+(y+z)*10+(x+y)*100==i)

{

printf("X=%d,Y=%d,Z=%d\n",x,y,z);

find=1;

break;

}

}

}

}

if(!

find)

{

printf("Invalid\n");

}

}

谐均值计算

题目内容:

 

两数值的谐均值可以这样计算:

首先对两数值的倒数取平均值,最后再取倒数。

编写一个带有两个double参数的函数,计算这两个参数的谐均值。

函数原型为:

 

doubleCalculate(doublex,doubley); 

程序运行结果示例1:

 

Inputtwodoubles:

 

34↙ 

1/((1/x+1/y)/2)=3.429 

程序运行结果示例2:

 

Inputtwodoubles:

 

6.53.8↙ 

1/((1/x+1/y)/2)=4.796

输入提示信息:

”Inputtwodoubles:

\n” 

输入格式:

“%lf%lf” 

输出格式:

”1/((1/x+1/y)/2)=%0.3f\n”(注意:

等号的两边各有一个空格)

#include

doubleCalculate(doublex,doubley);

intmain()

{

doublex,y;

printf("Inputtwodoubles:

\n");

scanf("%lf%lf",&x,&y);

printf("1/((1/x+1/y)/2)=%0.3f\n",Calculate(x,y));

return0;

}

doubleCalculate(doublex,doubley)

{

return1.0/((1.0/x+1.0/y)/2);

}

输出指定行列数的字符

题目内容:

 

编写一个函数,函数原型:

voidChline(charch,intcolumn,introw); 

该函数的3个参数是一个字符和两个整数。

字符参数是需要输出的字符。

第一个整数说明了在每行中该字符输出的个数,而第二个整数指的是需要输出的行数。

编写一个调用该函数的程序。

 

程序运行结果示例1:

 

inputachar:

 

k↙ 

inputcolumnandrow:

 

23↙ 

kk 

kk 

kk 

程序运行结果示例2:

 

inputachar:

 

a↙ 

inputcolumnandrow:

 

32↙ 

aaa 

aaa

字符输入提示信息:

”inputachar:

\n” 

行列数输入提示信息:

”inputcolumnandrow:

\n” 

输入格式:

 

“%c” 

“%d%d” 

输出格式:

”%c”

#include

voidChline(charch,intcolumn,introw);

intmain()

{

charc;

intcol,r;

printf("inputachar:

\n");

scanf("%c",&c);

printf("inputcolumnandrow:

\n");

scanf("%d%d",&col,&r);

Chline(c,col,r);

return0;

}

voidChline(charch,intcolumn,introw)

{

inti,j;

for(i=0;i

{

for(j=0;j

{

printf("%c",ch);

}

printf("\n");

}

}

题目内容:

 

在一种室内互动游戏中,魔术师要每位观众心里想一个三位数abc(a、b、c分别是百位、十位和个位数字),然后魔术师让观众心中记下acb、bac、bca、cab、cba五个数以及这5个数的和值。

只要观众说出这个和是多少,则魔术师一定能猜出观众心里想的原数abc是多少。

例如,观众甲说他计算的和值是1999,则魔术师立即说出他想的数是443,而观众乙说他计算的和值是1998,则魔术师说:

“你算错了!

”。

请编程模拟这个数字魔术游戏。

要求用函数实现,函数原型为:

intMagic(intm); 

其中形参m代表观众计算的和值。

输入格式:

”%d” 

输出格式:

 

观众计算错误,魔术师给出的结论:

”Thesumyoucalculatediswrong!

\n” 

观众计算正确,魔术师给出的结论:

”Thenumberis%d\n” 

输入样例1:

 

1998↙ 

输出样例1:

 

The_sum_you_calculated_is_wrong!

 

输入样例2:

 

1999↙ 

输出样例2:

 

The_number_is_443

计算礼炮声响次数

题目内容:

 

在海军节开幕式上,有A、B、C三艘军舰要同时开始鸣放礼炮各21响。

已知A舰每隔5秒放1次,B舰每隔6秒放1次,C舰每隔7秒放1次。

假设各炮手对时间的掌握非常准确,请编程计算观众总共可以听到几次礼炮声。

 

输入格式:

无 

输出格式:

”n=%d”

#include

 

intmain()

{

inta,b,count=21*3;

for(a=5;a<=21*5;a=a+5)

{

if(a%30==0)

{

count--;

}

if(a%35==0)

{

count--;

}

}

for(b=7;b<=21*7;b=b+7)

{

if(b%42==0)

{

count--;

}

}

printf("n=%d",count);

return0;

}

 

迭代法

#include

intMaxCommonFactor(inta,intb);

intmain()

{

inta,b,x;

printf("Inputa,b:

");

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

x=MaxCommonFactor(a,b);

if(x!

=-1)

{

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

}

else

{

printf("Inputerror!

\n");

}

return0;

}

//函数功能:

计算两个正整数的最大公约数,-1表示没有最大公约数

intMaxCommonFactor(inta,intb)

{

intr;

if(a<=0||b<=0)return-1;//保证输入的参数为正整数

do{

r=a%b;

a=b;

b=r;

}while(r!

=0);

returna;

}

水手分椰子

题目内容:

 

n(1

然后,第2个水手把剩下的n-1堆混合后重新分为等量的n堆,还剩下1个给了猴子,自己藏起1堆。

以后第3、4个水手依次按此方法处理。

最后,第n个水手把剩下的椰子分为等量的n堆后,同样剩下1个给了猴子。

请用迭代法编程计算并输出原来这堆椰子至少有多少个,n的值要求从键盘输入。

若输入的n值超出要求的范围,程序输出”Error!

”。

 

提示:

分成的等量的堆数应该与水手的数量一致. 

程序运行结果示例1:

 

Inputn(1

 

5↙ 

y=3121

程序运行结果示例2:

 

Inputn(1

 

7↙ 

Error!

输入提示信息:

“Inputn(1

\n” 

输入格式:

“%d” 

输出格式:

”y=%d\n” 

输入错误提示信息:

”Error!

\n”

这是一道著名的数学问题,解题通式为 

y=a(a/m)n-1-db/c

y──被分的椰子的总个数 

a──每次分的份数, 

n──总共分的次数 

b──每次分a份后的余数. 

c──每次分a份后拿走的份数 

d──每次分a份后拿走c份后,剩下再分的份数. 

m——(a/d)的最大公约数

#include

intdivide(intn,intm);

staticintpeople;

intmain()

{

inti;

intn;

printf("Inputn(1

\n");

scanf("%d",&n);

people=n;

if(n<=1||n>5)

{

printf("Error!

\n");

}

else

{

for(i=1;;i++)

{

if(divide(i,n))

{

printf("y=%d\n",i);

break;

}

}

}

return0;

}

intdivide(intn,intm)

{

if(n/people==0||n%people!

=1)

return0;

if(m==1)

return1;

returndivide(n-n/people-1,m-1);

}

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1