C基础100题

这篇博客整理了100道C语言基础编程题目,涵盖数学计算、字符串处理、递归、链表操作、文件操作等多个方面,旨在帮助初学者巩固基础知识和提高编程能力。
摘要由CSDN通过智能技术生成

C基础100题

早期写的代码,现在整理出来,权当笔记

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

int main()
{
   
    int a[4] = {
   1, 2, 3, 4}, i = 0, j = 0;

    for(int x = 0; x < 4; x++)
    {
   
        
        for(int y = 0; y < 4; y++)
        {
   
            for(int z = 0; z < 4; z++)
            {
   
                if((a[x] != a[y]) && (a[x] != a[z]) && (a[y] != a[z]))
                {
   
                    i = a[x] * 100 + a[y] * 10 + a[z];
                    printf("%d\n", i);
                    j++;
                }
            }
        }
    }
    printf("总共有:%d个", j);
    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>

int main()
{
   
  float i = 0.0; //i为当月利润
  float j = 0.0; //j为应发奖金总数

  printf("请输入当月利润\n");
  scanf("%f", &i);

  if (i <= 10)
    j = i * 0.1;

  else if ((i > 10) && (i < 20))
    j = (i - 10) * 0.075 + 10 * 0.1;

  else if ((i > 20) && (i < 40))
    j = (i - 20) * 0.05 + 10 * 0.075 + 10 * 0.1;
  
  else if ((i > 40) && (i < 60))
    j = (i - 40) * 0.03 + 20 * 0.05 + 10 * 0.075 + 10 * 0.1;

  else if ((i > 60) && (i < 100))
    j = (i - 60) * 0.015 + 20 * 0.03 + 20 * 0.05 + 10 * 0.075 + 10 * 0.1;

  else if (i > 100)
    j = (i - 100) * 0.01 + 40 * 0.015 + 20 * 0.03 + 20 * 0.05 + 10 * 0.075 + 10 * 0.1;

  printf("当月应发奖金总数为:%1.3f万元", j);

  return 0;
}
3. 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
#include <stdio.h>

int main()
{
   
    int x = 0, y = 0;
    for (int i = 0; i < 10000; i++)
    {
   
        for (int m = 0; m < 10000; m++)
        {
   
            for (int j = 0; j < 10000; j++)
            {
   
                x = j + 100;
                y = j + 268;

                if ((x == i * i) && (y == m * m))
                    printf("%d\n", j);
            }
        }
    }
    return 0;
}
4.输入某年某月某日,判断这一天是这一年的第几天?
//输入某年某月某日,判断这一天是这一年的第几天?
//先判断是不是闰年,再判断输入的月份是否大于二月;
//公历闰年的简单计算方法(符合以下条件之一的年份即为闰年)
//1.能被4整除而不能被100整除
//2.能被400整除
#include <stdio.h>

int jugement(int year) //判断输入的年份是不是闰年
{
   
    int i = 0;
    if (((0 == year % 4) && (0 != year % 100)) || (0 == year % 400))
    {
   
        i = 1; //i置1作为标记
    }
    else
        i = 0;
    return i;
}

int main()
{
   
    int j = 0;
    int x = 0;
    printf("请输入年月日\n");
    int year = 0, month = 0, day = 0; //定义为全局变量,以便在不同函数中使用
    scanf("%d\n%d\n%d", &year, &month, &day);
    j = jugement(year);
    if (1 == j)
    {
   
        switch (month)
        {
   
        case 1:
            x = day;
            break;
        case 2:
            x = day + 31;
            break;
        case 3:
            x = day + 31 + 29;
            break;
        case 4:
            x = day + 31 + 29 + 31;
            break;
        case 5:
            x = day + 30 + 31 + 29 + 31;
            break;
        case 6:
            x = day + 31 + 30 + 31 + 29 + 31;
            break;
        case 7:
            x = day + 30 + 31 + 30 + 31 + 29 + 31;
            break;
        case 8:
            x = day + 31 + 30 + 31 + 30 + 31 + 29 + 31;
            break;
        case 9:
            x = day + 31 + 31 + 30 + 31 + 30 + 31 + 29 + 31;
            break;
        case 10:
            x = day + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 29 + 31;
            break;
        case 11:
            x = day + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 29 + 31;
            break;
        case 12:
            x = day + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 29 + 31;
            break;
        default:
            break;
        }
    }
    else
    {
   
        switch (month)
        {
   
        case 1:
            x = day;
            break;
        case 2:
            x = day + 31;
            break;
        case 3:
            x = day + 31 + 28;
            break;
        case 4:
            x = day + 31 + 28 + 31;
            break;
        case 5:
            x = day + 30 + 31 + 28 + 31;
            break;
        case 6:
            x = day + 31 + 30 + 31 + 28 + 31;
            break;
        case 7:
            x = day + 30 + 31 + 30 + 31 + 28 + 31;
            break;
        case 8:
            x = day + 31 + 30 + 31 + 30 + 31 + 28 + 31;
            break;
        case 9:
            x = day + 31 + 31 + 30 + 31 + 30 + 31 + 28 + 31;
            break;
        case 10:
            x = day + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 28 + 31;
            break;
        case 11:
            x = day + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 28 + 31;
            break;
        case 12:
            x = day + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 28 + 31;
            break;
        default:
            break;
        }
    }

    printf("这一天是今年的第%d天", x);
    
    return 0;
}
5.输入三个整数x,y,z,请把这三个数由小到大输出
//输入三个整数x,y,z,请把这三个数由小到大输出
#include <stdio.h>

int maxnumber(int x, int y, int z)
{
   
    int i = 0;
    if ((x > y) && (x > z))
        i = x;
    else if (((y > z) && (y > x)))
        i = y;
    else if (((z > y) && (x < z)))
        i = z;
    return i;
}

int minnumber(int x, int y, int z)
{
   
    int i = 0;
    if ((x < y) && (x < z))
        i = x;
    else if (((y < z) && (y < x)))
        i = y;
    else if (((z < y) && (z < x)))
        i = z;
    return i;
}

int miduemnumber(int x, int y, int z)
{
   
    int i = 0;
    if ((y < x) && (x < z))
        i = x;
    else if (((y < z) && (y > x)))
        i = y;
    else if (((z < y) && (z > x)))
        i = z;
    return i;
}

int main()
{
   
    int x = 0, y = 0, z = 0;
    int min = 0, miduem = 0, max = 0;
    printf("请输入三个整数:\n");
    scanf("%d\n%d\n%d", &x, &y, &z);
    max = maxnumber(x, y, z);
    miduem = miduemnumber(x, y, z);
    min = minnumber(x, y, z);
    printf("这三个整数从小到大分别是:\n");
    printf("%d\n%d\n%d", min, miduem, max);
    return 0;
}
6.用*号输出字母C的图案
//用*号输出字母C的图案
#include <stdio.h>

void main()
{
   
    printf("              *\n");
    printf("            *\n");
    printf("          *\n");
    printf("        *\n");
    printf("      *\n");
    printf("    *\n");
    printf("    *\n");
    printf("    *\n");
    printf("      *\n");
    printf("        *\n");
    printf("          *\n");
    printf("            *\n");
    printf("              *\n");
}
7.如图,输出如下特殊图案
#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口诀
#include <stdio.h>

void main()
{
   
    int i, j, x = 0;
    
    for (i = 1; i < 10; i++)
    {
   
        for (j = 1; j <= i; j++)
        {
   
            x = i * j;
            printf("%d*%d=%2d ", i, j, x);
            
            if (i == j)
                printf("\n"); //换行
        }
    }
}
9.如图,要求输出国际象棋棋盘
#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", '\xA1', '\xF6'); //打印出白格子
            else
                printf(" ");
        }
        printf("\n");
    }
    return 0;
}
10.打印楼梯,同时在楼梯上方打印两个笑脸
#include <stdio.h>

int main()
{
   
    int i, j;

    /*
    作用是打印出ASCII码为1的字符。查询ASCII码表中,十进制的1对应的ASCII意思是soh,
    即start of head,标题开头的意思。该符号为通信专用字符,如果只是用作显示,
    系统会使用一个特定的图形来显示,这就是我们看到的笑脸
    */

    printf("\1\1\n");

    for (i = 1; i < 11; i++)
    {
   
        for (j = 1; j <= i; j++)
        {
   
            printf("%c%c", 77, 77);
        }
        printf("\n");
    }
    
    return 0;
}
11.古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)
#include <stdio.h>

int main()
{
   
    int month;
    
    //用来存放每个月的兔子数量
    int a[40] = {
   0};

    //前两个月的兔子数量
    a[0] = a[1] = 1;

    //第一个月的兔子数量
    printf("第1个月的兔子总数为:%d\n", a[0]); 
    printf("第1个月的兔子总数为:%d\n", a[1]);

    for (month = 2; month < 40; month++)
    {
   
        a[month] = a[month - 1] + a[month - 2];

        printf("第%d个月的兔子总数为:%d\n", month + 1, a[month]); //打印第第3-40个月的兔子数量
    }
    
    return 0;
}
12.判断101到200之间的素数
#include <stdio.h>
#include <math.h>

void main()
{
   
    int i, j;

    for (j = 101; j < 201; j++)
    {
   
        for (i = 2; i < j; i++)
        {
   
            if (0 == j % i)
                break; //只要有小于j的数i能整除j,j就不是素数
                
            else
            {
   
                if (i == j - 1)
                    printf("%d  ", j); //如果计算到i等于j-1都没有数能正常j,那j就是素数
            }
        }
    }
}
13.打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方
#include <stdio.h>

int tiqu(int n)
{
   
    int x = 0, y = 0, z = 0; //分别存放百位、十位、个位
    int i = 0;
    
    z = n % 10;                 //得到个位数
    x = n / 100;                //得到百位数
    y = (n - z - x * 100) / 10; //得到十位数
    i = x * x * x + y * y * y + z * z * z;
    
    return i;
}

void main()
{
   
    int j, sum = 0; //j用来计数,sum用来接收tiqu()的返回值

    for (j = 100; j < 1000; j++)
    {
   
        sum = tiqu(j);
        
        if (sum == j)
            printf("%d  ", j);
    }
}
14.将一个正整数分解质因数。例如:输入90,打印出90=233*5
#include <stdio.h>

void main()
{
   
    int a, n;

    scanf("%d", &n);
    printf("%d=", n);

    for (a = 2; a <= n; a++)
    {
   
        if (n % a == 0)
        {
   
            n = n / a;
            printf("%d*", a);
            a = 1;
        }
    }
}
15.利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示
#include <stdio.h>

void main()
{
   
    float score_number;   //成绩
    
    printf("请输入成绩:");
    scanf("%f", &score_number);

    score_number >= 90 ? printf("A") : score_number >=60 ? printf("B") : printf("C");
}
16.输入两个正整数m和n,求其最大公约数和最小公倍数
#include <stdio.h>

int gongbeishu(int m, int n)
{
   
    int i, j = 0;

    for (i = 2; i <= n, i <= m; i++) //for循环求得最大公倍数
    {
   
        if ((0 == m % i) && (0 == n % i))
            j = i;
    }

    j = (m * n) / j; //两个数的乘积除以最大公倍数便得到最小公约数

    return j;
}

int gongyueshu(int m, int n)
{
   
    int i, j = 0;

    for (i = 2; i <= n, i <= m; i++)
    {
   
        if ((0 == m % i) && (0 == n % i))
            j = i;
    }

    return j;
}

int main()
{
   
    int m, n;

    printf("请输入两个数\n")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值