【C语言经典例题100解答】

该博客收纳整理了C语言各类经典例题,如求数列和、打印水仙花数、求解矩阵问题等,给出了实例代码和运行结果,开发及测试环境为Win11 + CLion(2024.1版)或Win7 + VC6.0,代码力求精简,供大家参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录


总结

未完~~,持续更新中,可收藏…

有错误,请指出;有疑问,请留言…

嗯,别忘了顺手帮我点个赞~~

多为中高级例题,小白请先研懂谭老师的书~~

前言

收纳整理C语言各类经典例题并给出实例代码和运行结果,力求代码最精简,供大家参考~~
开发及测试环境:Win11 + CLion(2024.1版)/ Win7 + VC6.0

例题1、求sn=a+aa+aaa+…的值,其中a是一个数字。例如:2+22+222+2222+22222(此时n=5),a和n由键盘输入。

#include <stdio.h>
 
void main() {
   
	int a; //数字
	int n; //长度
	int i;
	int sum = 0; //sn的值,初始化为0
	int temp;  //保存a或aa、aaa等的值
 
	printf("请输入一个1~9的数字:");
	scanf("%d",&a);
	printf("请输入长度:");
	scanf("%d",&n);
 
	temp = a;
	for(i = 0; i < n; i++) {
   
		sum += a;
		printf(" %d +",a);
		a = a*10 + temp;
	}
	printf("\b= %d\n",sum); // \b用来回退一格
}

运行结果:
在这里插入图片描述

例题2、打印出所有的“水仙花数“。所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如:153是一水仙花数,因为153=13+53+33

#include <stdio.h>

void main() {
   
    int i;
    int a, b, c;  //分别代表这个三位数的百位、十位、个位
    for (i = 100; i < 1000; i++) {
   
        a = i / 100;
        b = i % 100 / 10;
        c = i % 10;
        if (i == a * a * a + b * b * b + c * c * c) {
   
            printf("%d是水仙花数;\n", i);
        }
    }
}

运行结果:
在这里插入图片描述

例题3、一个数如果恰好等于它的因子之和,这个数就称为“完数”。 例如6=1+2+3。编程找出1000以内的所有完数。

#include <stdio.h>

void main() {
   
    int x;  //从2到1000的自然数
    int i;
    int sum = 0;
    for (x = 2; x < 1000; x++) {
   
        for (i = 1; i < x; i++) {
   
            if (x % i == 0)  //找出x的因子,是因子就累加
            {
   
                sum += i;
            }
        }
        if (x == sum)  //因数和与这个自然数x是否相等,是则输出
        {
   
            printf("%d\n", x);
        }
        sum = 0;   //将因数和复原到0,以便下次使用
    }
}

运行结果:
在这里插入图片描述

例题4、求解3X3矩阵对角线元素之和

#include<stdio.h>

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

    for (i = 0; i < 3; i++) {
   
        sum += a[i][i] + a[i][2 - i];
    }
    printf("对角线元素之和为%d\n", sum);
}

运行结果:
在这里插入图片描述

例题5、中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?

#include <stdio.h>

void main() {
   
//方法一
    int x, y, z; //公鸡、母鸡、鸡崽各花掉的钱数

    printf("方法一计算结果:\n");
    for (x = 0; x <= 100; x += 5) //买公鸡的钱要能被5整除
        for (y = 0; y <= 100; y += 3) //买母鸡的钱要能被3整除
            for (z = 0; z <= 33; z++) //花33块钱买鸡崽足够了
                if (x + y + z == 100 && x / 5 + y / 3 + 3 * z == 100)
                    printf("公鸡%d只,母鸡%d只,鸡雏%d只\n", x / 5, y / 3, 3 * z);

//方法二
    int a, b, c; //公鸡、母鸡、鸡崽数量

    printf("方法二计算结果:\n");
    for (a = 0; a <= 20; a++)
        for (b = 0; b <= 33; b++)
            for (c = 0; c <= 100; c += 3)
                if (a + b + c == 100 && a * 5 + b * 3 + c / 3 == 100)
                    printf("公鸡%d只,母鸡%d只,鸡雏%d只\n", a, b, c);
}

运行结果:
在这里插入图片描述

例题6、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个,到第10天早上想再吃时,就只剩一个桃子了。求第一天共摘下多少个桃子

#include <stdio.h>

void main() {
   
    int i;
    int s = 1;  //第10天的桃子数
    for (i = 0; i < 9; i++)  //每次循环,都是其前一天的桃子数
    {
   
        s = (s + 1) * 2;
    }
    printf("猴子第一天共摘下%d颗桃子\n", s);
}

运行结果:
在这里插入图片描述

例题7、一个球从100M高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米?第10次反弹有多高?

#include <stdio.h>

void main() {
   
    int i;
    double s = 100; //第一次落地时经过的总长
    double h = 100; //第一次落地前的高度
    for (i = 0; i < 14; i++) {
   
        s = s + h;
        h = h / 2;
    }
    printf("10次落地共经过%f米\n第10次反弹高度是%f米\n", s, h / 2);
}

运行结果:
在这里插入图片描述

例题8、求出所有的4位数,符合abcd=(ab+cd)的平方

#include <stdio.h>

void main() {
   
    int i;
    int a;

    printf("符合abcd=(ab+cd)的平方的数字有:\n");
    for (i = 1000; i < 10000; i++) {
   
        a = i / 100 + i % 100;  // i/100取得ab值,i%100取得cd值
        if (a * a == i)
            printf("%d\n", i);
    }
}

运行结果:
在这里插入图片描述

例题9、从键盘上输入一个正整数,将其以二进制形式输出

#include <stdio.h>

void main() {
   
    int x;    //接收输入的整数
    int k = 0;    //数组中定位
    int a[32];    //这里最多能显示32位以内的整数

    printf("请输入一个正整数: ");
    scanf("%d", &x);      //这里没有对错误输入进行判断
    printf("\n%d的二进制形式是:", x);

    while (x != 0)     //利用二进制的辗转相除法
    {
   
        a[k++] = x % 2;
        x /= 2;
    }
    while (k != 0)   //将存于数组中的二进制数倒序输出
    {
   
        k--;
        printf("%d", a[k]);
    }
}

运行结果:
在这里插入图片描述

例题10、歌德巴赫猜想。每个不小于6的偶数都可以表示为两个奇素数之和;例如:5=2+3 , 8=3+5 ,验证100以内的自然数

#include<stdio.h>

void main() {
   
    int a, b, i, j, m;
    int n = 0;

    for (m = 6; m <= 100; m++)   //m是大于等于6的自然数
    {
   
        for (a = 2; a <= m / 2; a++) {
   
            b = m - a;
            for (i = 2; i <= a; i++)     //求解第一个奇素数
                if (a % i == 0)     //如果能够整除,则其不是素数
                    break;
            for (j = 2; j <= b; j++)      //求解第二个奇素数
                if (b % j == 0)
                    break;
            if (i == a && j == b)  //当a、b都是素数的时候,并且前面已经确定了m=a+b
            {
   
                printf("%2d=%2d+%2d  ", m, a, b);
                if (++n % 6 == 0)   //每输出6次换行,删除此代码,系统自动换行
                    printf("\n");
                break;
            }
        }
    }
}

运行结果:
在这里插入图片描述

例题11、写一函数,打印出输入的两个数中最大值,输出过程在main函数内实现

#include <stdio.h>

int max(int a, int b) {
   
    if (a > b) {
   
        return a;
    } else {
   
        return b;
    }
}

void main() {
   
    int x, y;
    printf("请连续输入两个整数\n");
    scanf("%d %d", &x, &y);
    printf("答:%d和%d的最大值是:%d\n", x, y, max(x, y));
}

运行结果:
在这里插入图片描述

例题12、矩阵反置,例如将左面的矩阵变换成右面的矩阵模样

1 2 3-----------1 4 7
4 5 6-----------2 5 8
7 8 9-----------3 6 9

#
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值