C语言程序设计精髓(MOOC第5周 )题

第5周编程题在线测试

1. 马克思手稿中的趣味数学题

题目内容:
有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,请编程计算男人、女人和小孩各有几人?

输出提示信息: “Man Women Children\n”(注意:每个单词之间有3个空格)

输出格式: “%3d%8d%8d\n” (注意:输出数据按照男人的数量递增的顺序给出)

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

#include<stdio.h>
int main()
{
  int x,y;
  printf("Man   Women   Children\n");
  for(x = 0;x <= 50/3;x++)
    for(y = 0;y <= 25;y++)
      if(3*x + 2*y + (30-x-y) == 50)
        printf("%3d%8d%8d\n",x,y,30-x-y);
  return 0;
}

2. 猜神童年龄

题目内容:
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是一个4位数。我年龄的4次方是一个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你编程算出他当时到底有多年轻。

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

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

#include<stdio.h>
#include<stdlib.h>
void divide(long n,int a[],int low,int high)//从低位到高位分离
{
    for(;low <= high;low++){
        a[low] = n%10;
        n = n/10;
    }
}

int judge(int a[],int n)//判断数组各元素,不同返回1,否则返回0
{
    int i;
    int b[n] ;
    for(i = 0;i < n;i++)
        b[i] = 0;
    for(i = 0;i < 10;i++){
        b[a[i]]++;
    }
    for(i = 0;i < 10;i++)
    {
        if(b[i]!=1)return 0;
    }
    return 1;
}
int main()
{
    long x,y;
    int a[10],n;
    int i = 0;
    for(n = 10;n <= 21;n++)
    {
        x = n*n*n;
        y = x*n;
        divide(x,a,0,3);
        divide(y,a,4,9);
        if(judge(a,10))printf("age=%d\n",n);
    }
    return 0;
}

3.闰年相关的问题v3.0——计算有多少闰年

题目内容:
从键盘输入你的出生年和今年的年份,编程判断并输出从你的出生年到今年之间中有多少个闰年。

输入提示信息: “Input your birth year:”

输入提示信息: “Input this year:”

输入格式: “%d”

输出格式:

闰年年份: “%d\n”

闰年总数:“count=%d\n”

#include<stdio.h>
int isleap(int n)
{
   if((n%4 == 0 && n%100 != 0)||(n%400 == 0)) return 1;
   else return 0;
}
int main()
{
    int begin,end,count = 0;
    printf("Input your birth year:");
    scanf("%d",&begin);
    printf("Input this year:");
    scanf("%d",&end);
    for(;begin <= end;begin++){
        if(isleap(begin)){
            printf("%d\n",begin);
        count++;
        }
    }
    printf("count=%d\n",count);
    return 0;
}

4.闰年相关的问题v4.0——计算心跳数

题目内容:
假设人的心率为每分钟跳75下,编程从键盘输入你的出生年和今年的年份,然后以年为单位计算并输出从你出生开始到目前为止的生命中已有的心跳总数(要求考虑闰年)。

#include<stdio.h>
int isleap(int n)//判断闰年
{
   if((n%4 == 0 && n%100 != 0)||(n%400 == 0)) return 1;
   else return 0;
}
int main()
{
    int day1 = 365,day2 = 366;
    int begin,end,number;
    long unsigned int count = 0;
    printf("Input your birth year:");
    scanf("%d",&begin);
    printf("Input this year:");
    scanf("%d",&end);
    for(;begin < end;begin++){
        number = isleap(begin)?day2:day1;
        count += number*24*60*75;
    }
    printf("The heart beats in your life: %lu",count);
    return 0;
}

第5周 练兵区编程题

1.判断一个整型数据有几位v2.0

题目内容:
从键盘输入一个整型数据(int型),编写程序判断该整数共有几位,并输出包含各个数字的个数。例如,从键盘输入整数16644,该整数共有5位,其中有1个1,2个6,2个4。

#include<stdio.h>
int main()
{
    int n,m,count = 0,i;
    int a[10]={0};
    printf("Please enter the number:\n");
    scanf("%d",&n);
    m = n>0?n:-n;
    while(m!=0)
    {
        a[m%10]++;
        m = m/10;
        count++;
    }
    printf("%d: %d bits\n",n,count);
    for(i = 0;i <10;i++)
    {
        if(a[i]!=0)printf("%d: %d\n",i,a[i]);
    }
    return 0;
}

2.奖金计算

题目内容:
企业发放的奖金根据利润提成。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时,高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数?

#include<stdio.h>
int main()
{
    long n,bonus;
    scanf("%ld",&n);
    if(n<=100000){
            bonus = n*0.1;
            printf("bonus=%ld\n",bonus);}
    else if(n<=200000)
    {
        bonus = (n-100000)*0.075+10000;
        printf("bonus=%ld\n",bonus);
    }
    else if(n<=400000)
    {
        bonus = 10000+7500+(n-200000)*0.05;
        printf("bonus=%ld\n",bonus);
    }
    else if(n<=600000)
    {
        bonus = 27500+(n-400000)*0.03;
        printf("bonus=%ld\n",bonus);
    }
    else if(n<=1000000)
    {
        bonus = 33500+(n-600000)*0.015;
        printf("bonus=%ld\n",bonus);
    }
    else
    {
        bonus = 10000+7500+22000+0.1*(n-100);
        printf("bonus=%ld\n",bonus);
    }
    return 0;
}

8.猴子吃桃程序_扩展1

题目内容:
猴子第一天摘了若干个桃子,吃了一半,不过瘾,又多吃了1个。第二天早上将剩余的桃子又吃掉一半,并且又多吃了1个。此后每天都是吃掉前一天剩下的一半零一个。到第n天再想吃时,发现只剩下1个桃子,问第一天它摘了多少桃子?为了加强交互性,由用户输入不同的天数n进行递推,即假设第n天的桃子数为1。

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

9.猴子吃桃程序_扩展2

题目内容:
猴子第一天摘了若干个桃子,吃了一半,不过瘾,又多吃了1个。第二天早上将剩余的桃子又吃掉一半,并且又多吃了1个。此后每天都是吃掉前一天剩下的一半零一个。到第n天再想吃时,发现只剩下1个桃子,问第一天它摘了多少桃子?为了加强交互性,由用户输入不同的天数n进行递推,即假设第n天的桃子数为1。同时还要增加对用户输入数据的合法性验证(如:不允许输入的天数是0和负数)

#include<stdio.h>
int main()
{
    int n,sum = 1;
    do
    {
        fflush(stdin);
        printf("Input days:\n");
    }while(scanf("%d",&n)!=1||n <= 0);
    while(n!=1)
    {
        sum = (sum + 1)*2;
        n--;
    }
    printf("x=%d\n",sum);
    return 0;
}

10.6位密码输入检测

题目内容:
从键盘输入6位仅由数字0~9组成的密码。用户每输入一个密码并按回车键后,程序给出判断:如果是数字,则原样输出该数字,并提示用户目前已经输入了几位密码,同时继续输入下一位密码;否则,程序提示"error",并让用户继续输入下一位密码。直到用户输入的密码全部是数字为止。

#include<stdio.h>
int main()
{
    char a;
    int cnt = 0;
    printf("Input your password:\n");
    do{
        fflush(stdin);
        scanf("%c",&a);
        if(a>='0'&&a<='9'){
            cnt++;
            printf("%c, you have enter %d-bits number\n",a,cnt);
        }
        else{
            printf("error\n");
        }
    }while(cnt != 6);
    return 0;
}

11.判断一个整型数据有几位v1.0

题目内容:
从键盘输入一个整型数据(int型),编写程序判断该整数共有几位。例如,从键盘输入整数16644,该整数共有5位。

#include<stdio.h>
int main()
{
    int n,m;
    int cnt = 0;
    printf("Please enter the number:\n");
    scanf("%d",&n);
    m = n>0?n:-n;
    while(m!=0)
    {
       m = m/10;
       cnt++;
    }
    printf("%d: %d bits\n",n,cnt);
    return 0;
}

12.检测输入数据中奇数和偶数的个数

题目内容:
从键盘输入一系列正整数,输入-1表示输入结束(-1本身不是输入的数据)。编写程序判断输入数据中奇数和偶数的个数。如果用户输入的第一个数据就是-1,则程序输出"over!"。否则。用户每输入一个数据,输出该数据是奇数还是偶数,直到用户输入-1为止,分别统计用户输入数据中奇数和偶数的个数。

#include<stdio.h>
int main()
{
    int num,oddnum = 0,evennum = 0;
    printf("Please enter the number:\n");
    do{
        scanf("%d",&num);
        if(num == -1)break;
        if(num%2 == 0){
                printf("%d:even\n",num);
                evennum++;
        }
        else {
                printf("%d:odd\n",num);
                oddnum++;
        }
    }while(num != -1);
    printf("The total number of odd is %d\n",oddnum);
    printf("The total number of even is %d\n",evennum);
    return 0;
}

13.计算球的反弹高度

题目内容:
一个球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下并反弹…,求它在第5次和第10次落地时,分别共经过了多少米?第5次和第10次反弹分别是多高?要求计算结果保留到小数点后3位。用户从键盘输入想要计算的第n次(n<=15)。程序中所有浮点数的数据类型均为float。

#include<stdio.h>
#include<math.h>
int main()
{
    int n,i= 1;
    float sum = 0,h = 0;
    printf("Input:\n");
    scanf("%d",&n);
    printf("%d times:\n",n);
    while(i <= n)
    {
        if(i == 1)
            sum += 100;
        else
            sum += 2*100*pow(0.5,i-1);
        i++;
    }
    printf("%.3f\n",sum);
    h = 100 * pow(0.5,n);
    printf("%.3f\n",h);
}
  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《C语言程序设计精髓MOOC》第三主要内容是关于指针和数组的学习。 首先是指针的介绍和使用。指针是C语言中一个非常重要的概念,它可以用来间接访问内存中的数据,通过指针可以实现对变量地址的操作。在学习过程中,我们了解了指针的定义和声明,以及指针与数组之间的关系。指针在程序设计中的应用非常广泛,特别是在动态内存分配和函数调用等方面,有着重要的作用。 其次是数组的使用。数组是一种由相同类型的元素组成的集合,它在C语言中非常常用。在第三的学习中,我们了解了数组的定义、初始化和遍历等基本操作,还学习了一些在数组中常用的算法和技巧。通过多维数组和指针数组的学习,我们可以更灵活地处理多个数据。 除了指针和数组,第三还涉及到了C语言中的结构体(struct)和文件的输入输出操作等内容。结构体是一种可以封装多个不同类型的数据的自定义数据类型,它在实际的程序设计中经常被用于组织和管理数据。文件的输入输出操作涉及了C语言中如何读写文件以及相关的文件处理函数等知识点。 通过学习《C语言程序设计精髓MOOC》第三的内容,我们对指针和数组有了更深入的认识,并且掌握了它们的基本用法和应用技巧。这对于进一步学习和理解C语言程序设计以及其他高级编程语言都非常有帮助。此外,通过作业和练习的完成,我们可以检验和巩固所学的知识,提高我们自己的编程能力。希望通过这门课程的学习,能够让我们对C语言有更全面和深入的了解,为以后的学习和工作打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值