哈工大C语言程序设计精髓第七周

news/2024/7/11 1:53:21 标签: html, jquery, css

由于这些代码也是我初学时写的代码,故其中的规范程度及简洁程度并不很好(此处我后来写的有可以参考一下->C语言代码规范),但是能很好的接近出初学者的水平,也更有参考价值!排版不易,喜欢就点个赞吧!如有问题,请勿吐槽,欢迎留言互相学习。

第7周编程题在线测试

1. n层嵌套平方根的计算


题目内容
编写程序利用递归法实现如下所示n层嵌套平方根的计算:
递归函数原型:double Y(double x, int n);
程序运行结果示例1:
Please input x and n: 16,1↙
Result=4.00
程序运行结果示例2:
Please input x and n: 16,2↙
Result=4.47
程序运行结果示例3:
Please input x and n: 16,3↙
Result=4.52
程序运行结果示例4:
Please input x and n: 16,0↙
Result=0.00
输入提示信息:“Please input x and n:”
输入格式: “%lf,%d”
输出格式: “Result=%.2f\n”

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double Y(double x, int n);
int main()
{
    double x;
    int n;
    printf("Please input x and n:");
    scanf("%lf,%d",&x,&n);
    printf("Result=%.2f\n",Y(x,n));
    return 0;
}
double Y(double x, int n)
{
    double y;
    for(y=0;n>0;n--)
    {
        y+=x;
        y=sqrt(y);
    }
    return y;
}

2. 递归法求和


题目内容
用递归方法计算如下求和计算
sum = 1 + 2 + 3 + … + n
递归函数原型:int Sum(int n);
程序运行结果示例1:
Please input n: 5↙
sum=15
程序运行结果示例2:
Please input n: 0↙
data error!
程序运行结果示例3:
Please input n: -3↙
data error!
输入提示信息:“Please input n:”
输入错误提示信息:“data error!\n”
输入格式:"%d"
输出格式:“sum=%d\n”

代码实现

#include <stdio.h>
#include <stdlib.h>
int Sum(int n);
int main()
{
    int n;
    printf("Please input n:");
    scanf("%d",&n);
    if(n>0)
    {
        printf("sum=%d\n",Sum(n));
    }
    else
    {
        printf("data error!\n");
    }
    return 0;
}
int Sum(int n)
{
    int a;
    for(a=0;n>0;n--)
    {
        a+=n;
    }
    return a;
}

3. 猴子吃桃程序_扩展3


题目内容
猴子第一天摘了若干个桃子,吃了一半,不过瘾,又多吃了1个。第二天早上将剩余的桃子又吃掉一半,并且又多吃了1个。此后每天都是吃掉前一天剩下的一半零一个。到第n天再想吃时,发现只剩下1个桃子,问第一天它摘了多少桃子?为了加强交互性,由用户输入天数n,即假设第n天的桃子数为1。
要求采用递归法求解。
递归函数原型:int Monkey(int n, int x);
函数功能:从第n天只剩下一个桃子反向逆推出第1天的桃子数
程序运行结果示例1:
Input days n: 5↙
x=46
程序运行结果示例2:
Input days n: 10↙
x=1534
输入提示信息:“Input days n:”
输入格式: “%d”
输出格式:“x=%d\n”

代码实现

#include <stdio.h>
#include <stdlib.h>
int Monkey(int n, int x);
int main()
{
    int n,a;
    printf("Input days n:");
    scanf("%d",&n);
    printf("x=%d\n",Monkey(n,a));
    return 0;
}
int Monkey(int n, int x)
{
    int a;
    for(a=1;n>1;n--)
    {
        a=(a+1)*2;
    }
    return a;
}

4. 网购打折商品V2.0


题目内容
某网上购物网站对用户实行优惠,买家购物货款p越多,则折扣越多。
标准如下:
p<100元 没有折扣
100元≤p<200元 5%折扣
200元≤p<500元 8%折扣
500元≤p<1000元 10%折扣
1000元≤p 15%折扣
【提示】:从题意可以看出,折扣的变化是有规律的。当购物金额达到“100元”的2倍、5倍、10倍时,折扣值就会发生变化。假如一个变量c代表100的倍数,则当c<1时,无折扣;当1≤c<2时,折扣d=5%;当2≤c<5时,折扣d=8%;当5≤c<10时,折扣d=10%;当10≤c时,折扣d=15%。
注:程序中与价格相关的数据类型为float
程序运行结果示例1:
Input payment: 90↙
price = 90.0
程序运行结果示例2:
Input payment: 100↙
price = 95.0
程序运行结果示例3:
Input payment: 300↙
price = 276.0
程序运行结果示例4:
Input payment: 1000↙
price = 850.0
程序运行结果示例5:
Input payment: 650.5↙
price = 585.5
输入提示:“Input payment:”
输入格式: “%f”
输出格式:“price = %.1f\n” (注:等号左右均有空格)

代码实现

#include <stdio.h>
#include <stdlib.h>

int main()
{
    float p;
    printf("Input payment:");
    scanf("%f",&p);
    if(p<100)
    {
        printf("price = %.1f\n",p);
    }
    else if(p<200)
    {
        p*=0.95;
        printf("price = %.1f\n",p);
    }
    else if(p<500)
    {
        p*=0.92;
        printf("price = %.1f\n",p);
    }
    else if(p<1000)
    {
        p*=0.90;
        printf("price = %.1f\n",p);
    }
    else
    {
        p*=0.85;
        printf("price = %.1f\n",p);
    }
    return 0;
}

练兵区——编程题

1. 谐均值计算


题目内容
两数值的谐均值可以这样计算:首先对两数值的倒数取平均值,最后再取倒数。编写一个带有两个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” (注意:等号的两边各有一个空格)

代码实现

#include <stdio.h>
#include <stdlib.h>
double Calculate(double x,double y);
int main()
{
    double a,b;
    printf("Input two doubles:\n");
    scanf("%lf%lf",&a,&b);
    printf("1/((1/x+1/y)/2) = %0.3f\n",Calculate(a,b));
    return 0;
}
double Calculate(double x,double y)
{
    return 1/((1/x+1/y)/2);
}

2. 输出指定行列数的字符


题目内容
编写一个函数,函数原型: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"

代码实现

#include <stdio.h>
#include <stdlib.h>
void Chline(char ch, int column, int row);
int main()
{
    char a;
    int b,c,i;
    printf("input a char:\n");
    scanf("%c",&a);
    printf("input column and row:\n");
    scanf("%d%d",&b,&c);
    for(i=0;i<c;i++)
    {
        Chline(a,b,c);
        printf("\n");
    }
    return 0;
}
void Chline(char ch, int column, int row)
{
    int d;
    for(d=0;d<column;d++)
    {
        printf("%c",ch);
    }
}

3. 魔术师猜数


题目内容
在一种室内互动游戏中,魔术师要每位观众心里想一个三位数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

代码实现

#include <stdio.h>
#include <stdlib.h>
int Magic(int m);
int main()
{
    int a;
    scanf("%d",&a);
    if(Magic(a)==0)
    {
        printf("The sum you calculated is wrong!\n");
    }
    else
    {
        printf("The number is %d\n",Magic(a));
    }
    return 0;
}
int Magic(int m)
{
    int a,b,c,d;
    for(d=100;d<=999;d++)
    {
        a = d/100,b = (d%100)/10,c = d%10;
    if((a+b+b+c+c)*100+(a+a+b+c+c)*10+a+a+b+b+c==m)
    {
        return d;
    }
    else
        continue;
    }
    return 0;
}

4. 计算礼炮声响次数


题目内容
在海军节开幕式上,有A、B、C三艘军舰要同时开始鸣放礼炮各21响。已知A舰每隔5秒放1次,B舰每隔6秒放1次,C舰每隔7秒放1次。假设各炮手对时间的掌握非常准确,请编程计算观众总共可以听到几次礼炮声。
**输入格式:**无
输出格式:“n=%d”

代码实现

#include <stdio.h>
#include <string.h>
int main()
{
    int s,n,i,t=21;
    for(s=0,i=1;i<=21;i++,t++)
    {
        s+=6;
        if(s%5==0 && s<=105)
        {
            t--;
        }
    }
    for(s=0,i=1;i<=21;i++,t++)
    {
        s+=7;
        if(s%5==0 && s%6==0 && s<=105)
        {
            t--;
        }
        else if((s%5==0 && s<=105)||(s%6==0 && s<=126))
        {
            t--;
        }
    }
    printf("n=%d",t);
    return 0;
}

5. 水手分椰子


题目内容
n(1<n<=5)个水手在岛上发现一堆椰子,先由第1个水手把椰子分为等量的n堆,还剩下1个给了猴子,自己藏起1堆。然后,第2个水手把剩下的n-1堆混合后重新分为等量的n堆,还剩下1个给了猴子,自己藏起1堆。以后第3、4个水手依次按此方法处理。最后,第n个水手把剩下的椰子分为等量的n堆后,同样剩下1个给了猴子。请用迭代法编程计算并输出原来这堆椰子至少有多少个,n的值要求从键盘输入。若输入的n值超出要求的范围,程序输出"Error!"。
**提示:**分成的等量的堆数应该与水手的数量一致.
程序运行结果示例1:
Input n(1<n<=5):
5↙
y=3121
程序运行结果示例2:
Input n(1<n<=5):
7↙
Error!
输入提示信息: “Input n(1<n<=5):\n”
输入格式: “%d”
输出格式:“y=%d\n”
输入错误提示信息:“Error!\n”

代码实现

#include <stdio.h>
int divide(int n, int m);
static int people;
int main()
{
    int i;
    int n;
    printf("Input n(1<n<=5):\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;
            }
        }
    }
    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. 递归法计算游戏人员的年龄


题目内容
有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);
提示:
计算年龄的递归公式为:
输入格式: “%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
(注意:在输出中,“_”代表空格,如果直接将上段示例粘贴到代码中,应将其替换为空格。)

代码实现

#include <stdio.h>
#include <stdlib.h>
unsigned int ComputeAge(unsigned int n);
int main()
{
    int a;
    scanf("%u",&a);
    printf("The person's age is %u",ComputeAge(a));
    return 0;
}
unsigned int ComputeAge(unsigned int n)
{
    int a=10;
    for( ;n>1;n--)
    {
        a+=2;
    }
    return a;
}

7. 递归法计算两个数的最大公约数


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

代码实现

#include <stdio.h>
#include <stdlib.h>
int God(int a, int b);
int main()
{
    int a, b;
    printf("Input a,b:");
    scanf("%d,%d",&a,&b);
    if(a<=0 || b<=0)
    {
        printf("Input error!\n");
    }
    else
    {
        printf("%d\n",God(a,b));
    }
    return 0;
}
int God(int a, int b)
{
    if(a==b)
    {
        return a;
    }
    else if(a>b)
    {
        return God(a-b,b);
    }
    else
    {
        return God(a,b-a);
    }
}

8. 寻找中位数v1.0


题目内容
编写一个函数返回三个整数中的中间数。函数原型为: 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

代码实现

#include <stdio.h>
#include <stdlib.h>
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)
{
    if(a>b && a<c)
    {
        return a;
    }
    else if(b>a && b<c)
    {
        return b;
    }
    else
    {
        return c;
    }
}

9. 还原算术表达式


题目内容
编写程序求以下算式中XYZ的值,其中两数XYZ与YZZ相加的和n(99<n<1000)的值要求从键盘输入。
程序运行结果示例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”

代码实现

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int x,y,z,d,n;
    printf("Input n(n<1000):\n");
    scanf("%d",&n);
    for(x=1;x<=9;x++)
    {
        for(y=1;y<=9;y++)
        {
            for(z=1;z<=9;z++)
            {
                d=x*100+y*100+y*10+z*10+z*2;
                if(d==n)
                {
                    printf("X=%d,Y=%d,Z=%d\n",x,y,z);
                    goto END;
                }
            }
        }
    }
    printf("Invalid\n");
    END: ;
    return 0;
}

http://www.niftyadmin.cn/n/1237042.html

相关文章

教你零基础制作3D旋转相册(送给那个她~)

3D立体相册&#xff1f;   是的&#xff0c;相信大家或多或少的会在一些地方看到某些程序员用代码给自己女朋友写3D立体相册&#xff0c;那么你会不会也想自己手动敲出那些炫酷的代码呢&#xff1f;   那你是找对地方了。废话不多说&#xff0c;今天为大家分享利用html实现…

哈工大C语言程序设计精髓第八周

由于这些代码也是我初学时写的代码&#xff0c;故其中的规范程度及简洁程度并不很好&#xff08;此处我后来写的有可以参考一下->C语言代码规范&#xff09;&#xff0c;但是能很好的接近出初学者的水平&#xff0c;也更有参考价值&#xff01;排版不易&#xff0c;喜欢就点…

哈工大C语言程序设计精髓第九周

由于这些代码也是我初学时写的代码&#xff0c;故其中的规范程度及简洁程度并不很好&#xff08;此处我后来写的有可以参考一下->C语言代码规范&#xff09;&#xff0c;但是能很好的接近出初学者的水平&#xff0c;也更有参考价值&#xff01;排版不易&#xff0c;喜欢就点…

教你制作属于自己的C语言版贪吃蛇!

贪吃蛇&#xff1f;   没错&#xff0c;就是贪吃蛇&#xff0c;这个你不会不知道吧。那你肯定会疑问了&#xff0c;还能用代码写贪吃蛇&#xff1f;当然啦&#xff0c;今天我就教大家写一个属于自己的贪吃蛇&#xff01;   你所需要准备的是&#xff1a;一定的链表知识&…

哈工大C语言程序设计精髓第十周

由于这些代码也是我初学时写的代码&#xff0c;故其中的规范程度及简洁程度并不很好&#xff08;此处我后来写的有可以参考一下->C语言代码规范&#xff09;&#xff0c;但是能很好的接近出初学者的水平&#xff0c;也更有参考价值&#xff01;排版不易&#xff0c;喜欢就点…

教你零基础制作3D盒子相册(送给那个她~)

3D立体相册&#xff1f;   是的&#xff0c;相信大家或多或少的会在一些地方看到某些程序员用代码给自己女朋友写3D立体相册&#xff0c;那么你会不会也想自己手动敲出那些炫酷的代码呢&#xff1f;   那你是找对地方了。废话不多说&#xff0c;今天为大家分享利用html实现…

你真的了解String与StringBuffer的区别吗

String与StringBuffer的区别   首先&#xff0c;这两个类都是和字符串有关的。从它们最直接的区别来看&#xff0c;就是对它们创建的时候不一样。String这个类可以用等号直接来赋值&#xff0c;而StringBuffer不行&#xff0c;它只能用调用new构造方法才行&#xff0c;当然&a…

几种方法教你JAVA判断字符串是否为数字

在进行JAVA习题的时候&#xff0c;经常会遇到提取字符串中的数字的问题&#xff0c;怎么解决呢&#xff1f;这里提供几种方法&#xff1a;   几种方法由自己写的方法向JAVA自带的函数转向&#xff0c;代码的执行速度越来越快&#xff0c;执行效率越来越高。 其中第一个方法为…