当前位置: 首页 > article >正文

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

文章目录

  • 总结
    • 未完~~,持续更新中,可收藏...
    • 有错误,请指出;有疑问,请留言...
    • 嗯,别忘了顺手帮我点个赞~~
    • 多为中高级例题,小白请先研懂谭老师的书~~
  • 前言
    • 例题1、求sn=a+aa+aaa+...的值,其中a是一个数字。例如:2+22+222+2222+22222(此时n=5),a和n由键盘输入。
    • 例题2、打印出所有的“水仙花数“。所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如:153是一水仙花数,因为153=1^3^+5^3^+3^3^
    • 例题3、一个数如果恰好等于它的因子之和,这个数就称为“完数”。 例如6=1+2+3。编程找出1000以内的所有完数。
    • 例题4、求解3X3矩阵对角线元素之和
    • 例题5、中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
    • 例题6、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个,到第10天早上想再吃时,就只剩一个桃子了。求第一天共摘下多少个桃子
    • 例题7、一个球从100M高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米?第10次反弹有多高?
    • 例题8、求出所有的4位数,符合abcd=(ab+cd)的平方
    • 例题9、从键盘上输入一个正整数,将其以二进制形式输出
    • 例题10、歌德巴赫猜想。每个不小于6的偶数都可以表示为两个奇素数之和;例如:5=2+3 , 8=3+5 ,验证100以内的自然数
    • 例题11、写一函数,打印出输入的两个数中最大值,输出过程在main函数内实现
    • 例题12、矩阵反置,例如将左面的矩阵变换成右面的矩阵模样
    • 例题13、输入分数,按分数输出成绩等级 A B C D E
    • 例题14、求前100个质数(不是100以内质数)
    • 例题15、求前100以内的质数,用数组完成。求解思想:数学上规定,如果一个数不能被小于它的所有质数整除开的话,则这个数也一定是质数
    • 例题16、二维数组实现杨辉三角
    • 例题17、写一函数,实现两字符串的连接
    • 例题18、定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天?注意闰年问题
    • 例题19、编写一个函数,打印学生成绩,该数组中有3个学生的数据记录,每个记录包括num,name,score[3],用主函数输入这些记录,输入学号,将该学号的学生记录输出
    • 例题20、输入3个数,按由大到小的顺序输出
    • 例题21、求 2/1+3/2+5/3+8/5+... 的前20项的和
    • 例题22、用指针方式实现strlen函数的功能
    • 例题23、输入两个数,求其最大公约和最小公倍数
    • 例题24、给一个不超过5位的正整数,要求:
    • 例题25、一维数组实现杨辉三角
    • 例题26、有 1、2、3、4 四个数字,组成互不相同且无重复数字的三位数都是多少?总数是多少个?
    • 例题27、打印99乘法口诀表
    • 例题28、有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假设兔子都不死,问每个月的兔子总数为多少?(输出前40个月)
    • 例题29、在屏幕上显示一个等腰三角形
    • 例题30、将一个正整数分解质因数,例如100=2*2*5*5
    • 例题31、在屏幕上显示一个菱形
    • 例题32、求1!+2!+3!+...+N!的和(自己编写计算N!阶乘的函数)
    • 例题33、求1!+2!+3!+...+N!的和(递归函数实现)
    • 例题34、反向输出字符串(递归方式),例如:输入abcde,输出edcba
    • 例题35、反向输出字符串(指针方式),例如:输入abcde,输出edcba
    • 例题36、判断一个数是否是回文数,例如12321就是回文数
    • 例题37、输入三组数字,按照从小到大的顺序排列输出
    • 例题38、有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,最后留下来的是原来第几号人员?
    • 例题39、输入一个正整数,将其反方向逆序输出
    • 例题40、海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
    • 例题41、八进制转换为十进制
    • 例题42、打印金字塔
    • 例题43、打印倒金字塔
    • 例题44、输出楼梯图形
    • 例题45、一个偶数总能表示为两个素数之和
    • 例题46、根据公式π/4=1-1/3+1/5-1/7+1/9-1/11+......,计算π的近似值,当最后一项的绝对值小于0.000001为止
    • 例题47、从键盘输入一个正整数n,计算1+1/(1+2)+1/(1+2+3)+...+1/(1+2+3+...+n) 的值
    • 例题48、打印沙漏图案


总结

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

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

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

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

前言

收纳整理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的值,初始化为0int 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

#include <stdio.h>void main() {int a[3][3] = {1, 2, 3,4, 5, 6,7, 8, 9};int i, j, x; //x为第三方变量,起到交换值的作用for (i = 0; i < 3; i++) {for (j = 0; j < 3; j++) {if (j >= i) //为什么要j>=i呢?仔细看图,例如 2的位置是a[0][1],4的位置是a[1][0]{x = a[i][j];a[i][j] = a[j][i];a[j][i] = x;}printf("%d ", a[i][j]);}printf("\n");}
}

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

例题13、输入分数,按分数输出成绩等级 A B C D E

90分以上为A
80-89分为B
70-79分为C
60-69分为D
60分以下为E

#include <stdio.h>void main() {int a;printf("请输入分数:");scanf("%d", &a);if (a >= 90 && a <= 100) {printf("您的成绩是A\n");} else if (a >= 80 && a <= 89) {printf("您的成绩是B\n");} else if (a >= 70 && a <= 79) {printf("您的成绩是C\n");} else if (a >= 60 && a <= 69) {printf("您的成绩是D\n");} else if (a >= 0 && a < 60) {printf("您的成绩是E\n");} else {printf("您的输入有问题,请仔细检查\n");}
}

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

例题14、求前100个质数(不是100以内质数)

#include <stdio.h>void main() {int i;int x = 2;  //自然数int sum = 0;  //质数的数量while (sum < 100) {for (i = 2; i < x; i++)  // 如果这个数能被2到X-1整除开的话,这个数就不是质数{if (x % i == 0)   //如果能除开,就没有继续算下去的必要了{break;   //所以就可以跳出来了}}if (x == i)    //什么时候x才能和i相等呢? 只有上面x%i==0不成立的情况下才会发生{sum++;   //每次得到一个质数,就把计数器加上一个printf("%d\t", x);if (sum % 10 == 0)  //每10个质数分一行,便于观察{printf("\n");}}x++;   //别忘了这里,自然数是要自然增长的}
}

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

例题15、求前100以内的质数,用数组完成。求解思想:数学上规定,如果一个数不能被小于它的所有质数整除开的话,则这个数也一定是质数

#include <stdio.h>void main() {int a[100] = {2};   //存放已知质数的数组int i;int j;int p = 1; //数组中目前有多少个质数printf("百以内的质数有:\n");for (i = 3; i < 101; i++) {for (j = 0; j < p; j++)if (i % a[j] == 0)break;if (j == p) {printf("%d ", a[p - 1]);a[p++] = i;}}
}

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

例题16、二维数组实现杨辉三角

#include <stdio.h>void main() {int i, j;int a[10][10] = {1};  //在这里,最多显示到第10行for (i = 0; i < 10; i++) {a[i][0] = 1;for (j = 0; j <= i; j++) {printf("%5d ", a[i][j]);if (i != 9)a[i + 1][j + 1] = a[i][j] + a[i][j + 1];}}
}

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

例题17、写一函数,实现两字符串的连接

#include <stdio.h>
#include <string.h>void cat(char a[], char b[]) {int i, j, k;i = strlen(a);j = strlen(b);for (k = 0; k < j; k++) {a[i++] = b[k];}a[i] = '\0';puts(a);
}void main() {char a[100];char b[100];printf("输入第一个字符串:");gets(a);printf("输入第二个字符串:");gets(b);printf("字符串连接后:");cat(a, b);
}

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

例题18、定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天?注意闰年问题

要求:写一个函数days,实现其功能。由主函数将年、月、日传递给days函数。计算后将日子数
传回主函数输出

#include <stdio.h>struct d {int year;int month;int day;int sum;
};int days() {struct d a;int i;a.sum = 0;int day_of_month[12] = {31, 28, 31,30, 31, 30,31, 31, 30,31, 30, 31};printf("输入年月日,形式为XXXX-XX-XX\n");scanf("%d-%d-%d", &a.year, &a.month, &a.day);if (a.year % 4 == 0 && a.year % 100 != 0 || a.year % 400 == 0)day_of_month[1] = 29;for (i = 0; i < a.month - 1; i++) {a.sum += day_of_month[i];}a.sum += a.day;printf("%d年%d月%d日", a.year, a.month, a.day);return a.sum;
}void main() {printf("是这一年的第%d天\n", days());
}

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

例题19、编写一个函数,打印学生成绩,该数组中有3个学生的数据记录,每个记录包括num,name,score[3],用主函数输入这些记录,输入学号,将该学号的学生记录输出

#include <stdio.h>struct student {int num;char name[10];  //放学生的姓名int score[3];  //可用来存放三门科目的成绩
} stu[3];void main() {int i, j, x;for (i = 0; i < 3; i++) {printf("\n");printf("输入学生的学号:");scanf("%d", &stu[i].num);printf("输入学生的姓名:");scanf("%s", stu[i].name);printf("输入学生数、理、化成绩:");for (j = 0; j < 3; j++) {scanf("%d", &stu[i].score[j]);}}printf("输入学生学号,以输出其三门课程成绩:");scanf("%d", &x);printf("学号  姓名  数学  物理  化学\n");for (i = 0; i < 3; i++) {if (stu[i].num == x) {printf("%d  %s  %d  %d  %d\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2]);break;}}
}

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

例题20、输入3个数,按由大到小的顺序输出

#include <stdio.h>void main() {int a, b, c;printf("请输入三个数:");scanf("%d%d%d", &a, &b, &c);//第一种方法:推理法if (a >= b) {if (b >= c)printf("%d,%d,%d\nn", a, b, c);else {if (a >= c)printf("%d,%d,%d\n", a, c, b);elseprintf("%d,%d,%d\n", c, a, b);}} else  //隐含着表示了a<b的情况{if (b <= c)printf("%d,%d,%d\n", c, b, a);else {if (a >= c)printf("%d,%d,%d\n", b, a, c);elseprintf("%d,%d,%d\n", b, c, a);}}/*  第二种方法:列举法if (a >= b && b >= c) {printf("%d,%d,%d\n", a, b, c);} else if (a >= c && c >= b) {printf("%d,%d,%d\n", a, c, b);} else if (b >= a && a >= c) {printf("%d,%d,%d\n", b, a, c);} else if (b >= c && c >= a) {printf("%d,%d,%d\n", b, c, a);} else if (c >= a && a >= b) {printf("%d,%d,%d\n", c, a, b);} else if (c >= b && b >= a) {printf("%d,%d,%d\n", c, b, a);}*/
}

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

例题21、求 2/1+3/2+5/3+8/5+… 的前20项的和

#include <stdio.h>void main() {int i;double a = 1;double b = 2;double sum = 0;double t;for (i = 0; i < 20; i++) {sum += b / a;t = a + b;a = b;b = t;}printf("2/1+3/2+5/3+8/5+...  的前20项的和为:%f\n", sum);
}

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

例题22、用指针方式实现strlen函数的功能

#include <stdio.h>int mystrlen(char *p);void main() {char ch[10];printf("输入字符串的内容:");gets(ch);printf("字符串的有效长度是:%d\n", mystrlen(ch));
}int mystrlen(char *p) {int len = 0;while (*(p + len) != '\0') {len++;}return len;
}

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

例题23、输入两个数,求其最大公约和最小公倍数

#include <stdio.h>void main() {int m, n, x, y;printf("输入两个正整数:");scanf("%d%d", &m, &n);if (m < n)        //在m中存放m、n中最大者{x = m;m = n;n = x;}printf("%d和%d的", m, n);y = m * n;    //将m、n的值作个备份while (x != 0)  //辗转相除法{x = m % n;m = n;n = x;}printf("最大公约数是%d\n最小公倍数是%d\n", m, y / m);
}

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

例题24、给一个不超过5位的正整数,要求:

  1. 求出它是几位数
  2. 按逆序输出各位数字,例如输入12345,则输出54321
#include <stdio.h>void main() {int x;int a, b, c, d, e;int y;printf("请输入一个不超过5位的正整数:");scanf("%d", &x);a = x / 10000;b = x % 10000 / 1000;c = x % 1000 / 100;d = x % 100 / 10;e = x % 10;if (a > 0)printf("这是一个5位数\n");else if (b > 0)printf("这是一个4位数\n");else if (c > 0)printf("这是一个3位数\n");else if (d > 0)printf("这是一个2位数\n");elseprintf("这是一个个位数\n");y = e * 10000 + d * 1000 + c * 100 + b * 10 + a;while (y % 10 == 0)y = y / 10;printf("逆序输出为:%d\n", y);
}

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

例题25、一维数组实现杨辉三角

#include <stdio.h>void main() {int i, j, x; //x,y是二个计数器,X是欲显示的行数printf("输入杨辉三角行数:");scanf("%d", &x);int a[20] = {1};int b[20] = {1};for (i = 0; i < x; i++) {for (j = 0; j <= i; j++) {printf("%4d ", a[j]); //A数组是真正显示的数组b[j + 1] = a[j] + a[j + 1]; //B数组是通过A数组计算出来的,其实也就是要显示的下一行的内容a[j] = b[j]; //将数组B的内容重新拷回到数组A中,因为我们要显示的是A,而不是B}a[j] = 1; //数组末尾封1结束printf("\n"); //换行}
}

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

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

#include <stdio.h>void main() {int i, j, k; // 个、十、百位int sum = 0;for (i = 1; i < 5; i++) {for (j = 1; j < 5; j++) {for (k = 1; k < 5; k++) {if (i == j || j == k || i == k) { //去掉所有数字重复的continue;}printf("%d\t", i * 100 + j * 10 + k);sum++;}}}printf("\n不重复的三位数共计:%d个\n", sum);
}

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

例题27、打印99乘法口诀表

#include <stdio.h>void main() {int i, j;int result = 0;for (i = 1; i < 10; i++) {for (j = 1; j <= i; j++) {result = i * j;printf("%d*%d=%d\t", j, i, result);}printf("\n");}
}

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

例题28、有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假设兔子都不死,问每个月的兔子总数为多少?(输出前40个月)

解题思路:每个月是上两个月之和(从第三个月开始),兔子的规律为1,1,2,3,5,8,13,21…,此即著名的“斐波那契数列”,也被称为“黄金分割数列”

#include <stdio.h>void main() {int i, f1, f2;  //f1,f2为斐波那契数列前两项i = f1 = f2 = 1;for (; i <= 20; i++) { //每次打印f1,f2两项,所以循环次数40/2=20printf("%10d%10d", f1, f2);if (i % 4 == 0) //每打印8项,换行printf("\n");f1 += f2;f2 += f1;}
}

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

例题29、在屏幕上显示一个等腰三角形

#include <stdio.h>void main() {int i, j;int x;printf("输入等腰三角形行数:");scanf("%d", &x);for (i = 1; i <= x; i++) {for (j = i; j < x; j++) {printf(" "); //输出空格占位}for (j = 1; j < 2 * i; j++) {printf("*");}printf("\n");}
}

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

例题30、将一个正整数分解质因数,例如100=225*5

#include <stdio.h>void main() {int i;int x;printf("请输入一个正整数:");scanf("%d", &x);printf("%d = ", x);//方法一:for (i = 2; i <= x; i++) { //除数,从质数2开始while (x % i == 0) {   //能够被质数整除printf(" %d ", i);x = x / i;if (x != 1) {printf("*");}}}//方法二:
//    for (i = 2; i < x; i++) { //除数,从质数2开始
//        if (x % i == 0) {     //能够被质数整除
//            x = x / i;
//            printf("%d * ", i);//输出该质数
//            i = 1;       //重置除数:重新从质数2开始
//        }
//    }
//    if (x != 1) {
//        printf("%d", x); //输出最后的质数
//    }
}

在这里插入图片描述

例题31、在屏幕上显示一个菱形

#include <stdio.h>void main() {int i, j;int x;printf("输入菱形行数(3以上的奇数):");scanf("%d", &x);//显示菱形上面的大三角形for (i = 1; i <= (x + 1) / 2; i++) {for (j = i; j < (x + 1) / 2; j++) {printf(" "); //输出空格占位}for (j = 1; j < 2 * i; j++) {printf("*");}printf("\n");}//显示菱形下的小三角形for (i = 1; i <= (x - 1) / 2; i++) {for (j = 1; j <= i; j++) {printf(" ");}for (j = i; j < x - i; j++) {printf("*");}printf("\n");}
}

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

例题32、求1!+2!+3!+…+N!的和(自己编写计算N!阶乘的函数)

#include <stdio.h>double factorial(int num) {double result = 1;for (int i = 2; i <= num; i++) {result *= i;}return result;
}void main() {int x;double sum = 0;printf("请输入阶乘的值:");scanf("%d", &x);for (int i = 1; i <= x; i++) {sum += factorial(i);}printf("阶乘的和为:%.f", sum);
}

在这里插入图片描述

例题33、求1!+2!+3!+…+N!的和(递归函数实现)

#include <stdio.h>//递归计算阶乘的函数
double factorial(int num) {double result;if (num == 0) {result = 1;} else {result = num * factorial(num - 1);}return result;
}void main() {int x;double fac;//N!的阶乘值double sum = 0;//阶乘的和printf("请输入1-N阶乘的值:");scanf("%d", &x);for (int i = 1; i <= x; i++) {fac = factorial(i);printf("%d!=%.f\n", i, fac);sum += fac;}printf("阶乘的和为:%.f", sum);
}

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

例题34、反向输出字符串(递归方式),例如:输入abcde,输出edcba

#include <stdio.h>void reverse(int num) {char cur_char;if (num == 1) {cur_char = getchar();printf("逆序输出为:");putchar(cur_char);} else {cur_char = getchar();reverse(num - 1);putchar(cur_char);}
}int main() {int i = 5;printf("请输入5个字符:");reverse(i);
}

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

例题35、反向输出字符串(指针方式),例如:输入abcde,输出edcba

#include <stdio.h>void reverse(char *p) {int len = 0;while (*p != '\0') {  //取得字符串长度p++;len++;}while (len > 0) {  //反向打印到终端printf("%c", *--p);len--;}
}int main() {char s[255];printf("请输入一个字符串:");gets(s);reverse(s);
}

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

例题36、判断一个数是否是回文数,例如12321就是回文数

#include <stdio.h>int main() {int x;int ge, shi, qian, wan;printf("请输入一个5位数:");scanf("%d", &x);ge = x % 10;              //个shi = x % 100 / 10;       //十qian = x % 10000 / 1000;  //千wan = x / 10000;          //万if (ge == wan && shi == qian) {printf("%d是回文数\n", x);} else {printf("%d不是回文数\n", x);}
}

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

例题37、输入三组数字,按照从小到大的顺序排列输出

#include<stdio.h>int main() {int num[3];printf("请输入3组数字:");for (int i = 0; i < 3; i++)scanf("%d", &num[i]);for (int i = 0; i < 2; i++) {  //每次选出最小值依次放在数组前面for (int j = i + 1; j < 3; j++) {if (num[j] < num[i]) {int tmp = num[j]; //通过中间变量,将min和max交换位置num[j] = num[i];num[i] = tmp;}}}for (int i = 0; i < 3; i++)printf("%d ", num[i]);
}

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

例题38、有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,最后留下来的是原来第几号人员?

#include <stdio.h>
#define MAX_CALLER 3void main() {int j = 0;int p_total;//人数int p_caller = 0;//每3人循环计数:1,2,3int p_exit = 0;  //退出游戏的人数int people[255] = {0};//参与游戏人员名单printf("请输入参与游戏人数:");scanf("%d", &p_total);for (int i = 0; i < p_total; i++) {people[i] = i + 1;//给参与游戏人员按顺序进行编号}while (p_exit < p_total - 1) {//轮数:因为每次退出一人,则N-1轮淘汰即可完成p_caller++;//报数:1,2,3if (people[j] == 0) {//如果当前位置已经退出p_caller--;//报数回退一个}if (people[j] != 0 && p_caller == MAX_CALLER) {//如果数到3还未退出者people[j] = 0;//标记为退出状态p_caller = 0; //重新报数p_exit++;}if (j == p_total - 1)j = 0; //如果数到队尾,重新回到队伍排头elsej++; //队列依次向后轮转}for (int k = 0; k < p_total; k++) {if (people[k] != 0)printf("第%d位游戏者,胜出\n", people[k]);}
}

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

例题39、输入一个正整数,将其反方向逆序输出

#include <stdio.h>void main() {int x;int ge; //个位int result = 0;printf("请输入一个正整数:");scanf("%d", &x);while (x > 0) {//解题原理ge = x % 10;//每次分解取得个位的数字result = result * 10 + ge;//个十百千万顺序向左移动,即放大10倍x = (x - ge) / 10;//砍掉个位}printf("逆序输出为:%d", result);
}

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

例题40、海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

#include<stdio.h>void main() {int i;int j = 1;//倍数int x;//第5个猴子扔掉一个并取走一份后,剩余4份的总数量while (1 == 1) {//干就完了x = 4 * j++;//海滩上剩余桃子总数,必须是4的倍数(用4的倍数进行穷举)for (i = 1; i <= 5; i++) {x = x * 5 / 4 + 1;//第一次循环为第5个猴子动手前海滩上的桃子总数,以后依次为第4猴,第三猴...if (x % 4 == 0) {//海滩上剩余桃子总数依然必须是4的倍数(能够分成4份)continue;} else {break;}}if (i == 5) {//5个猴子都完成了各自操作break;}}printf("海滩上原来最少有%d个桃子\n", x);
}

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

例题41、八进制转换为十进制

#include<stdio.h>void main() {int x;printf("请输入一个8进制整数:");scanf("%o", &x);printf("转换成十进制后的整数为%d\n", x);
}

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

例题42、打印金字塔

#include <stdio.h>void main() {int i, j;for (i = 0; i < 5; i++) {for (j = 4; j > i; j--) {//输出空格printf("  ");}for (j = 0; j < 2 * i + 1; j++) {//输出星号printf("* ");}printf("\n");}
}

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

例题43、打印倒金字塔

#include <stdio.h>void main() {int i, j;for (i = 5; i > 0; i--) {for (j = 5; j > i; j--) {//输出空格printf("  ");}for (j = 2 * i; j > 1; j--) {//输出星号printf("* ");}printf("\n");}
}

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

例题44、输出楼梯图形

#include <stdio.h>void main() {for (int i = 0; i < 5; i++) {for (int j = 0; j <= 5 * i; j++) {//楼梯长度,可随意调整printf("%c%c", 0xa8, 0x80);//终端不支持显示这两个字符的字体,白色方块,不用纠结}printf("\n");}
}

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

例题45、一个偶数总能表示为两个素数之和

注意:1和0既非素数也非合数

#include <stdio.h>int isPrime(int n) {//判断n是否为质数if (n < 2) {return 0;}for (int i = 2; i < n; i++) {if (n % i == 0) {return 0;}}return 1;
}void main() {int x;printf("请输入一个大于2的偶数:");scanf("%d", &x);for (int i = 1; i < x; i++) {if (isPrime(i) && isPrime(x - i)) {//如果拆分出来的2个数都是质数printf("%d = %d + %d", x, i, x - i);//打印输出break;//果断走人}}
}

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

例题46、根据公式π/4=1-1/3+1/5-1/7+1/9-1/11+…,计算π的近似值,当最后一项的绝对值小于0.000001为止

#include <stdio.h>
#include <math.h>int main() {int fm = 1;//分母double sign = 1;//正负号double fzs = 1;//分子式double sum = 0;while (fabs(fzs) >= 0.000001) {sum += fzs;sign *= -1; //变换正负号fm += 2;     //分母3、5、7、9...增长fzs = sign / fm;//分子式}printf("π的近似值为%.5lf\n", sum * 4);
}

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

例题47、从键盘输入一个正整数n,计算1+1/(1+2)+1/(1+2+3)+…+1/(1+2+3+…+n) 的值

#include <stdio.h>void main() {int x;int fm = 0;//分母double sum = 0;printf("请输入一个正整数:");scanf("%d", &x);for (int i = 1; i <= x; i++) {fm += i;//分母变化sum = sum + 1.0 / fm;if (i != x) {printf("1/%d + ", fm);} else {printf("1/%d = ", fm);}}printf("%lf", sum);
}

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

例题48、打印沙漏图案

解题思路:沙漏本身是轴对称图形,以沙漏最左上角为起点,利用行列与对称轴的距离差判定打印星号和空格

#include <stdio.h>
#include <math.h>void main() {int x, y;printf("请输入沙漏行数(奇数):");scanf("%d", &x);y = (x + 1) / 2;//对称轴位置点for (int i = 1; i <= x; i++)//行{for (int j = 1; j <= x; j++)//列{if (abs(i - y) >= abs(j - y))//行与列距离对称轴的距离差printf("*");elseprintf(" ");}printf("\n");}
}

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

http://www.lryc.cn/news/2420892.html

相关文章:

  • web自动化测试_web自动化测试工具和框架有哪些?
  • 基于深度学习的车牌识别项目的APP部分之图像预处理(一):C语言读取bmp图像信息
  • 知音微服务平台网上订烟_96368手机订烟统一订单下载|96368统一订单平台(湖南烟草统一订单)下载v1.3.6 安卓版_ 2265安卓网...
  • VC++使用DC画出点,线,矩形,椭圆
  • python-flask计算机毕业设计装修公司管理系统(程序+开题+论文)
  • C# DevExpress ChartControl用法总结
  • RichEdit那点儿事(一)
  • DAY1-声速、声压与声强
  • 记录点有意义的事情---csdn数据库被黑(原创)
  • patch 补丁文件制作
  • 修改固态硬盘的物理序列号_买固态怕踩坑?收下这些软件,轻松鉴别好坏
  • 传奇翎风引擎单机架设教程
  • QQ强制视频聊天
  • Moto官方GMS谷歌服务套件For XT800+下载和使用教程
  • 经典SQL语句大全
  • 提升电脑开机速度
  • 推荐开源项目:YUIDoc——JavaScript文档生成引擎
  • socks5原理
  • 课程设计-基于Springboot+Vue的在线考试系统的设计与实现(源码+LW+包运行)
  • Linux入门实验3
  • JAVA转.NET——day03、下
  • Stanford Parser句法分析器
  • svn安装及使用
  • Linux查看当前时间
  • 《隐秘的角落》结局你真的看懂了吗?(细思极恐)
  • 计算机主板一直滴滴响,主板报警声大全_主板一直滴滴滴短响含义详解
  • 花指令
  • kube operator部署kubernetes集群
  • Animation动画——ObjectAnimator基本使用
  • [C++学习日记]-11-抽象、封装、继承和多态