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

第5周编程题在线测试

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

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

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

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

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

#include
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
#include
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
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
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
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
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
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
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
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
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
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
#include
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);
}

你可能感兴趣的:(C语言程序设计精髓(MOOC第5周 )题)