中国大学(慕课)哈工大C语言程序设计精髓练兵区第五周

这篇博客涵盖了哈工大C语言课程的多个编程练习,包括判断整数位数、奖金计算、程序修改与改错、猴子吃桃问题的扩展、密码输入检测等,旨在提升学员的C语言编程能力和问题解决技巧。
摘要由CSDN通过智能技术生成

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

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

程序运行结果示例1:
Please enter the number:12226↙12226: 5 bits1: 12: 36: 1
程序运行结果示例2:
Please enter the number:-12243↙-12243: 5 bits1: 12: 23: 14: 1
输入格式: “%d”
输出格式:
输入提示信息:“Please enter the number:\n”
判断该整数共有几位:"%d: %d bits\n"
包含数字0的个数:“0: %d\n”
包含数字1的个数:“1: %d\n”
包含数字2的个数:“2: %d\n”
包含数字3的个数:“3: %d\n”
包含数字4的个数:“4: %d\n”
包含数字5的个数:“5: %d\n”
包含数字6的个数:“6: %d\n”
包含数字7的个数:“7: %d\n”
包含数字8的个数:“8: %d\n”
包含数字9的个数:“9: %d\n”
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。

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

int main()
{
   
    int i,number,x;
    int k = 0;
    int array[10] = {
   0};

    printf("Please enter the number:\n");
    scanf("%d",&number);
    x = fabs(number);  //这一步是给我们输入的数取绝对值
    while(x!=0)    //这里的while是计算number的位数
    {
   
        for(i=0;i<=9;i++)   //通过for循环来计算每位数字出现的次数
        {
   
            if(x%10==i){
   
                array[i]++;
            }
        }
        x/=10;  //把for计数完成的位数去掉
        k++;
    }
    printf("%d: %d bits\n",number,k);
    for(i=0;i<=9;i++)   //循环输出
    {
   
        if(array[i]!=0)
        {
   
            printf("包含数字%d的个数:",i);
            printf("%d: %d\n",i,array[i]);
        }
    }

    return 0;
}

此处要说明一点,最后因为图省事用了一个for循环来输出。这是不符合题目要求的 ,朋友们可自行更改为switch来输出答案。

ps:使用一个for循环也可以对数组进行初始化为 0 。而像上面一样将第一位赋值为 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,求应发放奖金总数?

程序运行结果示例1:
789↙
bonus=78
程序运行结果示例2:
789516↙
bonus=36342
输入格式: “%ld”
输出格式:“bonus=%ld\n”
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。

#include<stdio.h>
  int main()
  {
   
    long x;
    double bonus=0;
    scanf("%ld",&x);
    if(x>1000000){
   
        bonus=bonus+(x-1000000)*0.01;
    }
    if(x>600000){
   
        x=x>1000000?1000000:x;
        bonus=bonus+(x-600000)*0.015;
    }
    if(x>400000){
   
        x=x>600000?600000:x;
        bonus=bonus+(x-400000)*0.03;
    }
    if(x>200000){
   
        x=x>400000?400000:x;
        bonus=bonus+(x-200000)*0.05;
    }
    if(x>100000){
   
        x=x>200000?200000:x;
        bonus=bonus+(x-100000)*0.075;
    }
    if(x>0){
   
        x=x>100000?100000:x;
        bonus=bonus+x*0.1;

    }
    printf<
  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值