C语言经典习题(1~5)

题目1:

有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

#include
int main(){
    int i,j,k; //设定百、十、个上的数字 
    int s; //最后得到的三位数 
    int cnt=0; // 计数器,确定三位数的个数
    
    printf("能够组成的三位数有:\n");
    for(i=1;i<5;i++){
        for(j=1;j<5;j++){
            for(k=1;k<5;k++){
                if(i!=k && i!=j && j!=k){
                    cnt++;
                    s = i*100+j*10+k;
                    printf("%d\n",s);
                }
            }
        }
    } 
    printf("三位数的数量为:%d\n",cnt);
    return 0;
} 
题目2:

企业发放的奖金根据利润提成。
利润(I)低于或等于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(){
    double i;
    printf("请输入你的利润:") ;
    scanf("%lf",&i); //输入利润 I
    
    double bonus_s;
    
    //定义分段的奖金 
    double bonus1,bonus2,bonus3,bonus4,bonus5;
    //计算出固定的奖金额
    bonus1 = 100000 * 0.1;                   //利润10万~20万 
    bonus2 = bonus1 + 100000*0.075;          //利润20万~40万 
    bonus3 = bonus2 + 200000*0.05;        //利润40万~60万 
    bonus4 = bonus3 + 200000*0.03;           //利润60~100万
    bonus5 = bonus4 + 400000*0.015;      //利润超过100万
    
    //计算非固定部分
    if(i <= 100000){
        bonus_s = i * 0.1;
    } 
    else if(i <= 200000){
        bonus_s = bonus1 + (i-100000)*0.075;
    }
    else if(i <= 400000){
        bonus_s = bonus2 + (i-200000)*0.05;
    }
    else if(i <= 600000){
        bonus_s = bonus3 + (i-400000)*0.03;
    }
    else if(i <= 1000000){
        bonus_s = bonus4 + (i-600000)*0.015;
    }
    else {
        bonus_s = bonus5 + (i-1000000)*0.01;
    }
    
    //输出结果
    printf("\n应得奖金: %lf\n",bonus_s); 
    
    return 0;
}
题目3:

一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

/*
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
*/

/* 题目分析: 设该数为 x , 两个平方数分别为 n ,m .
     则 x + 100 = n^2; x + 100 + 168 = m^2;
        n^2 - m^2 = 168
        (n + m)(n - m) = 168;
    设  n + m = i; n - m = j;
    则有: i * j =168 ,可推出 i 和 j 必有一个是偶数
    且: n = (i-j)/2 ; m = (i+j)/2
    因为 n 和 m 为整数,所以 i 和 j 均是偶数或均是奇数
    可推出 i和 j 都是偶数
    显然 ,i > j; j>2
    综上 i 和 j 的定义域分别为
    1 < i < 168/2 -1
    2 < j < i
*/ 
#include
int main(){
    int n, m; 
    int i, j;  
    int x ; 
    
    printf("这个数可以是:\n"); 
    
    for(i=1; i < 168/2+1; i++){
        if(168 % i == 0){
            j = 168 / i;
        if ( i > j && (i + j) % 2 == 0 && (i - j) % 2 == 0){    
            m = (i+j)/2;
            n = (i-j)/2;
            x = n*n - 100;
            printf("%d\t",x);
            }
        }
    } 
    return 0 ;
}
题目4:

输入某年某月某日,判断这一天是这一年的第几天?

/*输入某年某月某日,判断这一天是这一年的第几天?*/
/* 由于闰年的存在,需判断今年是否是闰年,然后将月份数之前的天数再加上本月的日期即可*/

#include
int main(){
    int y,m,d;  
    printf("请输入年份: 格式参考(2020,2,20)\n");
    scanf("%d,%d,%d",&y,&m,&d);
    if(m>12||d>31){
        printf("输入信息错误,请重新输入");
        scanf("%d,%d,%d",&y,&m,&d);
    }
    
    //首先判断这一年是否是闰年
    /*判断某年是否是闰年。 
    公历纪年法中,能被4整除的大多是闰年,
    但能被100整除而不能被400整除的年份不是闰年,
    如1900年是平年,2000年是闰年。*/ 
     
     int leap_y; //闰年标识符  
     if(y%4 == 0 && (y%100!=0)||(y%400==0)) {
        leap_y = 1;
     }
     else{
        leap_y = 0;
     }
     
     /*一月、三月、五月、七月、八月、十月、十二月为31天
    二月非闰年为28天,在闰年为29天
    四月、六月、九月、十一月为30天*/
    
    //根据月份计算天数
    int i;
    int sum = 0;
    for(i=1; i<=m-1; i++){
        switch(i){
            case 1:  sum = sum+ 31;break;
            case 2:  sum = sum+ 28; break; 
            case 3:  sum = sum+ 31; break;
            case 4:  sum = sum+ 30; break;
            case 5:  sum = sum+ 31; break;
            case 6:  sum = sum+ 30; break;
            case 7:  sum = sum+ 31; break;
            case 8:  sum = sum+ 31; break;
            case 9:  sum = sum+ 30; break;
            case 10: sum = sum+ 31; break;
            case 11: sum = sum+ 30; break;
            case 12: sum = sum+ 31; break;
        }
    } 
    
    //根据闰年和月份判断是都需要在总天数上加一
    if(leap_y == 1 && m >2){
        sum = sum + d + 1;
    } 
    else{
        sum = sum +d;
    }
    
    //输出结果
    printf("这是%d年的第%d天\n",y,sum);
    
    return 0;
} 
题目5

输入三个整数x,y,z,请把这三个数由小到大输出

/*输入三个整数x,y,z,请把这三个数由小到大输出*/

#include
int main(){
    
    int x,y,z,t;
    printf("\n请输入三个数字:\n");
    scanf("%d,%d,%d",&x,&y,&z); 
    
    int d; //设定中间值,用于交换 

    if(x>y){
        d = y;
        y = x;
        x = d;
    }
//  printf("%d,%d,%d",x,y,z);

    if(x>z){
        //交换x,z 的值 
        d = z;
        z = x;
        x = d;
    }

    if(y>z){
        //交换y,z 的值 
        d = z;
        z = y;
        y = d;
    }
    
    printf("\n三个数由小到大排列:%d,%d,%d",x,y,z);
    
    return 0;    
} 

你可能感兴趣的:(C语言经典习题(1~5))