c基础 小练 2023年3月18日,星期六

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

程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。

运行结果

代码

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

int main(int argc, const char *argv[])
{
    int b = 0;
    int s = 0;
    int g = 0;   //初始化
    int i = 0;    //i用做计数不需要清零放在循环之外
    for(b=1;b<=4;b++){
        for(s=1;s<=4;s++){
            for(g=1;g<=4;g++){   //  遍历所有可能
                if(b!=s&&s!=g&&b!=g){ //去除不符合题意的值
                    int num = 0;         //num每次都要重新赋值,所以要清零
                    num=g+s*10+b*100;   //将符合题意的数赋值给num并输出
                    printf("%d ",num);
                    i++;        //计数
                }
            }
        }
    }
    printf("\n");
    printf("有%d个可能\n",i);
    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<stdio.h>
#include<string.h>
#include<stdlib.h>

int main(int argc, const char *argv[])
{
    int l = 0;
    printf("输入利润:");
    scanf("%d",&l);
    int j1=l*0.1;
    int j2=(l-100000)*0.075+j1;
    int j3=(l-200000)*0.05+j2;
    int j4=(l-400000)*0.03+j3;
    int j5=(l-600000)*0.015+j4;
    int j6=(l-1000000)*0.01+j5;   //将奖金分为6个档次
    int sj=0;
    if(l<=100000){
        sj=j1;
        printf("应发奖金%d\n",sj);
    }else if(l>100000&&l<=200000){
        sj=j2;
        printf("应发奖金%d\n",sj);
    }else if(l>200000&&l<=400000){
        sj=j3;
        printf("应发奖金%d\n",sj);
    }else if(l>400000&&l<600000){
        sj=j4;
        printf("应发奖金%d\n",sj);
    }else if(l>600000&&l<=1000000){
        sj=j5;
        printf("应发奖金%d\n",sj);
    }else{
        sj=j6;
        printf("应发奖金%d\n",sj);     //按不同利润分配奖金
    }

    return 0;
}

3. 题目:输入三个整数x,y,z,请把这三个数由小到大输出。

程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。

运行结果

代码

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

int main(int argc, const char *argv[])
{
    int x = 0;
    int y = 0;
    int z = 0;
    printf("输入三个数:");
    scanf("%d%d%d",&x,&y,&z);
    if(x>y){     //前两个数判断,小的放在x
        int temp = 0;
        temp=x;
        x=y;
        y=temp;
    }
    if(x>z){    //前后两数比较,确定x放最小值
        int temp = 0;
        temp=x;
        x=z;
        z=temp;
    }
    if(y>z){    //后两数比较,小的放在y
        int temp = 0;
        temp=z;
        z=y;
        y=temp;
    }
    printf("从小到大%d,%d,%d\n",x,y,z);

    return 0;
}

4. 题目:用*号输出字母C的图案。

程序分析:可先用*'号在纸上写出字母C,再分行输出。

运行结果

代码

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

int main(int argc, const char *argv[])
{
    printf("****\n");
    printf("*\n");
    printf("*\n");
    printf("*\n");
    printf("****\n");
    return 0;
}

5. 题目:输出特殊图案,请在c环境中运行,看一看,

程序分析:字符共有256个。不同字符,图形不一样。

运行结果

代码

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

int main(int argc, const char *argv[])
{
    char a = 176;
    char b = 219;
    printf("%c%c%c%c%c\n",b,a,a,a,b);
    printf("%c%c%c%c%c\n",a,b,a,b,a);
    printf("%c%c%c%c%c\n",a,a,b,a,a);
    printf("%c%c%c%c%c\n",a,b,a,b,a);
    printf("%c%c%c%c%c\n",b,a,a,a,b);
    return 0;
}

6. 题目:输出9*9口诀。

程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

代码

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

int main(int argc, const char *argv[])
{
    int s[10][10]={0};
    int i = 0;
    int j = 0;
    s[0][0]=0;     //定义0*0=0
    for(i=1;i<10;i++){   //遍历行
        s[i][0]=s[i-1][0]+1;   //输出第一列
        for(j=1;j<10;j++){     //遍历列
            s[0][j]=s[0][j-1]+1;  //输出第一行
            s[i][j]=s[i][0]*s[0][j];   //给二维数组赋值
         }
    }
    i=0;
    j=0;
    for(i=0;i<10;i++){         //遍历二维数组并打印
        for(j=0;j<10;j++){
            printf("%-4d",s[i][j]);  //以左对齐宽度为4的方式输出 
        }
    printf("\n");
    }
    return 0;
}

7. 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....

运行结果

代码

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

int main(int argc, const char *argv[])
{
    int s[32]={1,1,2,3};
    int i = 4;
    for(i=4;i<32;i++){  //因为从第四天才开始增加
        int sum = 0;//sum清零   //s[i-1]-s[i-2]是每个月会下兔子的对数
        sum=((s[i-1]-s[i-2])+(s[i-2]-s[i-3]))*2+(s[i-1]-s[i-2]);
        s[i]=sum;    //s[i-2]-s[i-3]是处于第二个月还不能生兔子的兔子对数
    }                //s[i-1]-s[i-2]是新出生的兔子对数和能出生的兔子对数一样
    for(i=0;i<32;i++){
        printf("%d  ",s[i]);
    }
    printf("\n");
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值