首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言经典编程题100例 1~10

C语言经典编程题100例 1~10

作者头像
C you again
发布2022-08-22 14:49:48
1.8K0
发布2022-08-22 14:49:48
举报
文章被收录于专栏:IT技术圈IT技术圈

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

程序分析:

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

参考代码:

#include<stdio.h>

int main()
{
    int i,j,k;
    printf("\n");
    for(i=1; i<5; i++) // 以下为三重循环
    {
        for(j=1; j<5; j++)
        {
            for (k=1; k<5; k++) // 确保i、j、k三位互不相同
            {
                if (i!=k&&i!=j&&j!=k)
                {
                    printf("%d,%d,%d\n",i,j,k);
                }
            }
        }
    }
}

运行结果:

1,2,3 1,2,4 1,3,2 1,3,4 1,4,2 1,4,3 2,1,3 2,1,4 2,3,1 2,3,4 2,4,1 2,4,3 3,1,2 3,1,4 3,2,1 3,2,4 3,4,1 3,4,2 4,1,2 4,1,3 4,2,1 4,2,3 4,3,1 4,3,2

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,求应发放奖金总数?

程序分析:

请利用数轴来分界,定位。注意定义时需把奖金定义成双精度浮点(double)型。

参考代码:

#include<stdio.h>
int main()
{
    double i;
    double bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
    printf("你的净利润是:\n");
    scanf("%lf",&i);
    bonus1=100000*0.1;
    bonus2=bonus1+100000*0.075;
    bonus4=bonus2+200000*0.05;
    bonus6=bonus4+200000*0.03;
    bonus10=bonus6+400000*0.015;
    if(i<=100000)
    {
        bonus=i*0.1;
    }
    else if(i<=200000)
    {
        bonus=bonus1+(i-100000)*0.075;
    }
    else if(i<=400000)
    {
        bonus=bonus2+(i-200000)*0.05;
    }
    else if(i<=600000)
    {
        bonus=bonus4+(i-400000)*0.03;
    }
    else if(i<=1000000)
    {
        bonus=bonus6+(i-600000)*0.015;
    }
    else if(i>1000000)
    {
        bonus=bonus10+(i-1000000)*0.01;
    }
    printf("提成为:bonus=%lf",bonus);

    printf("\n");
}

运行结果:

你的净利润是: 120000 提成为:bonus=11500.000000

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

程序分析:

假设该数为 x。

具体实现如下:

参考代码:

#include <stdio.h>

int main (void)
{
    int  i, j, m, n, x;
    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 + 100 = %d * %d\n", x, n, n);
                printf ("%d + 268 = %d * %d\n", x, m, m);
            }
        }
    }
    return 0;
}

运行结果:

-99 + 100 = 1 * 1 -99 + 268 = 13 * 13 21 + 100 = 11 * 11 21 + 268 = 17 * 17 261 + 100 = 19 * 19 261 + 268 = 23 * 23 1581 + 100 = 41 * 41 1581 + 268 = 43 * 43

4、题目:输入某年某月某日,判断这一天是这一年的第几天?

程序分析:

以3月6日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。

参考代码:

#include <stdio.h>
int main()
{
    int day,month,year,sum,leap;
    printf("\n请输入年、月、日,格式为:年,月,日(2022,03,06)\n");
    scanf("%d,%d,%d",&year,&month,&day);  // 格式为:2022,03,06
    switch(month) // 先计算某月以前月份的总天数
    {
    case 1:
        sum=0;
        break;
    case 2:
        sum=31;
        break;
    case 3:
        sum=59;
        break;
    case 4:
        sum=90;
        break;
    case 5:
        sum=120;
        break;
    case 6:
        sum=151;
        break;
    case 7:
        sum=181;
        break;
    case 8:
        sum=212;
        break;
    case 9:
        sum=243;
        break;
    case 10:
        sum=273;
        break;
    case 11:
        sum=304;
        break;
    case 12:
        sum=334;
        break;
    default:
        printf("data error");
        break;
    }
    sum=sum+day; // 再加上某天的天数
    if(year%400==0||(year%4==0&&year%100!=0))  // 判断是不是闰年
    {
        leap=1;
    }
    else
    {
        leap=0;
    }
    if(leap==1&&month>2)   // *如果是闰年且月份大于2,总天数应该加一天
    {
        sum++;
    }
    printf("这是这一年的第 %d 天。",sum);
    printf("\n");
}

运行结果:

请输入年、月、日,格式为:年,月,日(2022,03,06) 2022,03,06 这是这一年的第 65 天。

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

程序分析:

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

参考代码:

#include <stdio.h>

int main()
{
    int x,y,z,t;
    printf("\n请输入三个数字:\n");
    scanf("%d%d%d",&x,&y,&z);
    if (x>y)   /*交换x,y的值*/
    {
        t=x;
        x=y;
        y=t;
    }
    if(x>z)   /*交换x,z的值*/
    {
        t=z;
        z=x;
        x=t;
    }
    if(y>z)   /*交换z,y的值*/
    {
        t=y;
        y=z;
        z=t;
    }
    printf("从小到大排序: %d %d %d\n",x,y,z);
}

运行结果:

请输入三个数字: 3 9 4 从小到大排序: 3 4 9

6、题目:用*号输出字母C的图案。

程序分析:

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

参考代码:

#include "stdio.h"
int main()
{
    printf("用 * 号输出字母 C!\n");
    printf(" ****\n");
    printf(" *\n");
    printf(" * \n");
    printf(" ****\n");
}

运行结果:

用 * 号输出字母 C! **** * * ****

7、题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!

程序分析:

字符共有256个。不同字符,图形不一样。

参考代码:

#include<stdio.h>
int main()
{
    char a=176,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;
}

运行结果:

8、题目:输出9*9口诀。

程序分析:

分行与列考虑,共 9 行 9 列,i 控制行,j 控制列。

参考代码:

#include<stdio.h>
int main()
{
    int i,j,result;
    printf("\n");
    for (i=1; i<10; i++)
    {
        for(j=1; j<=i; j++)
        {
            result=i*j;
            printf("%d*%d=%-3d",i,j,result); /*-3d表示左对齐,占3位*/
        }
        printf("\n"); /*每一行后换行*/
    }
}

运行结果:

1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

9、题目:要求输出国际象棋棋盘。

程序分析:

国际象棋棋盘由64个黑白相间的格子组成,分为8行*8列。用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。

参考代码:

#include<stdio.h>

int main()
{
    int i,j;
    for(i=0; i<8; i++)
    {
        for(j=0; j<8; j++)
            if((i+j)%2==0)
                printf("%c%c",219,219);
            else
                printf("  ");
        printf("\n");
    }
    return 0;
}

运行结果:

10、题目:打印楼梯,同时在楼梯上方打印两个笑脸。

程序分析:

用 ASCII 1 来输出笑脸;用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。

参考代码:

#include<stdio.h>

int main()
{
    int i,j;
    printf("\1\1\n"); /*输出两个笑脸*/
    for(i=1; i<11; i++)
    {
        for(j=1; j<=i; j++)
            printf("%c%c",219,219);
        printf("\n");
    }
    return 0;
}

运行结果:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档