2021.10.12 C语言练习

题目内容:

企业发放的奖金根据利润提成。利润低于或等于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 int n,bonus;
     scanf("%ld",&n);
     //printf("%ld\n",n);
         if(n>=0&&n<=100000)
         {
            bonus = 0.1*n;
              printf("bonus=%ld\n",bonus);
         }
         else if(n>100000&&n<=200000)
         {
             bonus = 10000 + (n-100000)*0.075;
              printf("bonus=%ld\n",bonus);
         }
         else if(n>200000&&n<=400000)
         {
             bonus = 10000 + 100000*0.075 + (n-200000)*0.05;
              printf("bonus=%ld\n",bonus);
         }
          else if(n>400000&&n<=600000)
          {
              bonus = 10000 + 100000*0.75 + 200000*0.05 + (n-400000)*0.03;
              printf("bonus=%ld\n",bonus);
          }
          else if(n>600000&&n<=1000000)
          {
              bonus = 10000 + 100000*0.75 + 200000*0.05 + 200000*0.03 + (n-600000)*0.015;
              printf("bonus=%ld\n",bonus);
          }
          else if(n>1000000)
          {
              bonus = 10000 + 100000*0.75 + 200000*0.05 + 200000*0.03 + (n-1000000)*0.01;
              printf("bonus=%ld\n",bonus);
          }
          else
          {
              printf("Error!");
          }


    return 0;
 }
修改下面这个程序使其快速计算1+2+3……+n的值,n从键盘输入。并按照下面给出的运行示例检查程序。

#include  <stdio.h>
  int main()
  {
    int i, j, sum = 0, n;
    scanf("%d",&n);
    for (i=1,j=n; i<=j; i++,j--)
    {
        sum = sum + i + j;

    }
    if(n%2==1)
    {
        sum = sum -(n+1)/2;
    }
    printf("sum = %d", sum);
    return 0;
  }

修改下面这个用do-while语句实现的程序,改用while语句实现,并对比其优缺点。

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

#include  <stdio.h>
  int main()
  {
      int sum = 0, m;
      printf("Input m:\n");
      scanf("%d", &m);
      while (m != 0){

          sum = sum + m;
          printf("sum = %d\n", sum);
          printf("Input m:\n");
          scanf("%d", &m);
      }
      return 0;
  }

我国古代的《张丘建算经》中有这样一道著名的百鸡问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”其意为:公鸡每只5元,母鸡每只3元,小鸡3只1元。用100元买100只鸡,问公鸡、母鸡和小鸡各能买多少只?目前程序运行结果有误,请问为什么会比正确答案多出三个解?不仅要找出错误和修正错误,还要求利用以前学过的知识分析错误的原因。

#include <stdio.h>
  int main()
  {
      int x, y, z;
      for (x=0; x<=20; x++)
      {
          for (y=0; y<=33; y++)
          {
              z = 100 - x - y;
              if (5*x + 3*y + (float)z/3 == 100)//重点在于z/3是整型变量,会自动舍弃小数点后的数字。
              {
                  printf("x=%d, y=%d, z=%d\n", x, y, z);
              }
          }
      }
      return 0;
  }
 

从键盘任意输入一个正整数,编程判断它是否是素数,若是素数,输出“Yes!”,否则输出“No!”。已知负数、0和1都不是素数。请找出下面程序的错误并改正之,同时按照给出的运行示例检查修改后的程序。

#include <stdio.h>
#include <math.h>
   int main()
   {
     int n, i;
     printf("Input n:\n");
     scanf("%d", &n);
     for (i=2; i<sqrt(n); i++)
     {
       if (n % i == 0)
       {
         printf("No!\n");
       }
       else
       {
         printf("Yes!\n");
       }
    }

    return 0;
  }

从键盘任意输入一个正整数,编程判断它是否是素数,若是素数,输出“Yes!”,否则输出“No!”。已知负数、0和1都不是素数。请找出下面程序的错误并改正之,同时按照给出的运行示例检查修改后的程序

#include <stdio.h>
#include <math.h>
   int main()
   {
     int n, i,find = 0;
     printf("Input n:\n");
     scanf("%d", &n);

         for (i=2; i<abs(n); i++)
     {
           if (n % i == 0)
           {
             find = 1;

           }
    }

     if (find==1&&abs(n)>1)
        printf("NO!\n");
     else
        printf("Yes!\n");

    return 0;
  }
从键盘任意输入两个符号各异的整数,直到输入的两个整数满足要求为止,然后打印这两个数。请通过测试找出下面这个程序存在的问题(不止一个问题哦),并改正。同时用下面给出的运行结果示例检查修改后的程序。

#include <stdio.h>
  int main()
  {
    int x1, x2,ret;
    do{
      printf("Input x1, x2:");
      ret =scanf("%d,%d", &x1, &x2);
      while(ret!=2)
      {
          while(getchar()!='\n');
          printf("Input x1, x2:");
          ret = scanf("%d,%d", &x1, &x2);
      }
    }while (x1 * x2 >= 0);
    printf("x1=%d,x2=%d\n", x1, x2);
    return 0;
  }

题目内容:

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

#include <stdio.h>
  int main()
  {
    int m, n,x,ret;
    printf("Input days:\n");
    ret = scanf("%d",&n);
    while (ret!=1||n<=0)
    {
        while(getchar()!='\n');
        printf("Input days:\n");
        ret = scanf("%d",&n);
    }//去除负数及不合理项

    x=1;
    for(m=1;m<n;m++)
        {
            x=2*(x+1);
        }
    printf("x=%d\n",x);
    return 0;
  }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值