陕西师《c语言程序设计》作业,中国大学MOOC(C语言程序设计精髓)作业

第七周 练兵区编程题

1、谐均值计算(4分)

题目内容:

两数值的谐均值可以这样计算:首先对两数值的倒数取平均值,最后再取倒数。编写一个带有两个double参数的函数,计算这两个参数的谐均值。函数原型为:

double Calculate(double x,double y);

程序运行结果示例1:

Input two doubles:

3 4↙

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

程序运行结果示例2:

Input two doubles:

6.5 3.8↙

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

输入提示信息:“Input two doubles:\n”

输入格式: “%lf%lf”

输出格式:“1/((1/x+1/y)/2) = %0.3f\n” (注意:等号的两边各有一个空格)

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

时间限制:500ms内存限制:32000kb

C语言实现:

#include double Calculate(double x,double y);

int main()

{

double m, n, y;

printf("Input two doubles:\n");

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

y = Calculate(m, n);

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

return 0;

}

double Calculate(double x,double y)

{

double a;

a = (2 * x * y)/(x + y);

return a;

}

2、输出指定行列数的字符(4分)

题目内容:

编写一个函数,函数原型:void Chline(char ch, int column, int row);

该函数的3个参数是一个字符和两个整数。字符参数是需要输出的字符。第一个整数说明了在每行中该字符输出的个数,而第二个整数指的是需要输出的行数。编写一个调用该函数的程序。

程序运行结果示例1:

input a char:

k↙

input column and row:

2 3↙

kk

kk

kk

程序运行结果示例2:

input a char:

a↙

input column and row:

3 2↙

aaa

aaa

字符输入提示信息:“input a char:\n”

行列数输入提示信息:“input column and row:\n”

输入格式:

“%c”

“%d%d”

输出格式:"%c"

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

时间限制:500ms内存限制:32000kb

C语言实现:

#include void Chline(char ch, int column, int row);

int main()

{

int l, h;

char ch;

printf("input a char:\n");

scanf("%c", &ch);

printf("input column and row:\n");

scanf("%d%d", &l, &h);

Chline(ch, l, h);

return 0;

}

void Chline(char ch, int column, int row)

{

int i, r;

for(i=1;i<=row;i++)

{

for(r=1;r<=column;r++)

{

printf("%c", ch);

}

printf("\n");

}

}

3、魔术师猜数(4分)

题目内容:

在一种室内互动游戏中,魔术师要每位观众心里想一个三位数abc(a、b、c分别是百位、十位和个位数字),然后魔术师让观众心中记下acb、bac、bca、cab、cba五个数以及这5个数的和值。只要观众说出这个和是多少,则魔术师一定能猜出观众心里想的原数abc是多少。例如,观众甲说他计算的和值是1999,则魔术师立即说出他想的数是443,而观众乙说他计算的和值是1998,则魔术师说:“你算错了!”。请编程模拟这个数字魔术游戏。要求用函数实现,函数原型为:int Magic(int m);

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

输入格式:"%d"

输出格式:

观众计算错误,魔术师给出的结论:“The sum you calculated is wrong!\n”

观众计算正确,魔术师给出的结论:“The number is %d\n”

输入样例1:

1998↙

输出样例1:

The_sum_you_calculated_is_wrong!

输入样例2:

1999↙

输出样例2:

The_number_is_443

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

(注意:在输出中,“_”代表空格,如果直接将上段示例粘贴到代码中,应将其替换为空格。)

时间限制:500ms内存限制:32000kb

C语言实现:

#include #include int Magic(int m);

int main()

{

int m, n;

scanf("%d", &m);

n = Magic(m);

if (n == 0)

{

printf("The sum you calculated is wrong!\n");

}

else

{

printf("The number is %d\n", n);

}

return 0;

}

int Magic(int m)

{

int flag=0, n, a, b, c;

for(a=0;a<=9;a++)

{

for(b=0;b<=9;b++)

{

for(c=0;c<=9;c++)

{

n = 122*a + 212*b + 221*c;

if(m == n)

{

flag=1;

return (a*100+b*10+c);

}

}

}

}

return 0;

}

4、计算礼炮声响次数(4分)

题目内容:

在海军节开幕式上,有A、B、C三艘军舰要同时开始鸣放礼炮各21响。已知A舰每隔5秒放1次,B舰每隔6秒放1次,C舰每隔7秒放1次。假设各炮手对时间的掌握非常准确,请编程计算观众总共可以听到几次礼炮声。

输入格式:无

输出格式:“n=%d”

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

时间限制:500ms内存限制:32000kb

C语言实现:

#include int main()

{

int a, b, c, count=1;

a = b = c = 0;

while (c<=140)

{

if (a <= 100)

{

a++;

}

if (b <= 120)

{

b++;

}

if (c <= 140)

{

c++;

}

if (a%5 == 0 || b%6 == 0 || c%7 == 0)

{

count++;

}

}

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

return 0;

}

5、水手分椰子(4分)

题目内容:

n(1提示:分成的等量的堆数应该与水手的数量一致.

程序运行结果示例1:

Input n(15↙

y=3121

程序运行结果示例2:

Input n(17↙

Error!

输入提示信息: “Input n(1输入格式: “%d”

输出格式:“y=%d\n”

输入错误提示信息:“Error!\n”

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

时间限制:500ms内存限制:32000kb

C语言实现:

#include int divide(int n, int m);

static int people;

int main()

{

int i;

int n;

printf("Input n(15)

{

printf("Error!\n");

}

else

{

for (i=1;;i++)

{

if (divide(i, n))

{

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

break;

}

}

}

return 0;

}

int divide(int n, int m)

{

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

return 0;

if (m == 1)

return 1;

return divide(n - n / people - 1,m - 1);

}

6、递归法计算游戏人员的年龄(4分)

题目内容:

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

递归函数原型:unsigned int ComputeAge(unsigned int n);

提示:

计算年龄的递归公式为:

22e6fd68b231de377d039ec1324e5666.png

输入格式: “%u”

输出格式: “The person’s age is %u\n”

输入样例1:

5↙

输出样例1:

The_person’s_age_is_18

输入样例2:

10↙

输出样例2:

The_person’s_age_is_28

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

(注意:在输出中,“_”代表空格,如果直接将上段示例粘贴到代码中,应将其替换为空格。)

时间限制:500ms内存限制:32000kb

C语言实现:

#include unsigned int ComputeAge(unsigned int n);

int main()

{

unsigned int n;

scanf("%u", &n);

printf("The person's age is %u\n", ComputeAge(n));

return 0;

}

unsigned int ComputeAge(unsigned int n)

{

if (n==1)

{

return 10;

}

else

{

return 2 + ComputeAge(n-1);

}

}

7、递归法计算两个数的最大公约数(4分)

题目内容:

利用最大公约数的性质计算。对正整数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:

Input a,b:16,24↙

8

程序运行结果示例2:

Input a,b:-2,-8↙

Input error!

输入提示信息:“Input a,b:”

输入错误提示信息:“Input error!\n”

输入格式:"%d,%d"

输出格式:"%d\n"

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

时间限制:500ms内存限制:32000kb

C语言实现:

#include int Gcd(int a, int b);

int main()

{

int a, b;

printf("Input a,b:");

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

if (a<1 || b<1)

{

printf("Input error!\n");

}

else

{

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

}

return 0;

}

int Gcd(int a, int b)

{

if (a == b)

{

return a;

}

else if (a > b)

{

return (Gcd(a-b, b));

}

else

{

return (Gcd(a, b-a));

}

}

8、寻找中位数v1.0(4分)

题目内容:

编写一个函数返回三个整数中的中间数。函数原型为: int mid(int a, int b, int c);

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

输入格式: “%d%d%d”

输出格式:“The result is %d\n”

输入样例1:

12 6 18↙

输出样例1:

The_result_is_12

输入样例2:

-9 7 -2↙

输出样例2:

The_result_is_-2

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

(注意:在输出中,“_”代表空格,如果直接将上段示例粘贴到代码中,应将其替换为空格。)

时间限制:500ms内存限制:32000kb

C语言实现:

#include int mid(int a, int b, int c);

int main()

{

int a, b, c;

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

printf("The result is %d\n", mid(a,b,c));

return 0;

}

int mid(int a, int b, int c)

{

int term;

if (a

9、还原算术表达式(4分)

题目内容:

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

程序运行结果示例1:

Input n(n<1000):

532↙

X=3,Y=2,Z=1

程序运行结果示例2:

Input n(n<1000):

977↙

Invalid

输入提示:“Input n(n<1000):\n”

输入格式: “%d”

输出格式:“X=%d,Y=%d,Z=%d\n”

计算不成功(无解)的输出提示:“Invalid\n”

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

时间限制:500ms内存限制:32000kb

C语言实现:

#include int main()

{

int n, a, b, c, find = 0;

printf("Input n(n<1000):\n");

scanf("%d", &n);

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

{

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

{

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

{

if (a*100+b*110+c*12==n)

{

find=n;

goto sign;

}

}

}

}

sign:

if (find)

{

printf("X=%d,Y=%d,Z=%d\n", a, b, c);

}

else

{

printf("Invalid\n");

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值