c语言经典100例
智渝
生无路而勤为径
展开
-
C语言判断完全平方数
// 1+3+5+7+....+(2*n-1)=n^2bool isPerfectSqr(int x){ int t = 0; int i = 1; while (t < x) { t += i; i += 2; } return t == x;}bool isPerfectSqr(int x){ int t = 1; while (x > 0) { x -= t;原创 2021-09-03 13:08:45 · 1559 阅读 · 0 评论 -
<C语言经典100例>c11 水仙花数
/* 【程序13】 * 题目:打印出所有的三位“水仙花数”,并求出有多少个。所谓“水仙花数”是指一个n位数,其各位数字n次方和等于该数 本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 * 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 */#include #include int main(int argc,原创 2017-09-15 22:10:29 · 359 阅读 · 0 评论 -
<c语言经典100例>c13 条件运算符
/* 【程序13】 c13.c题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示, 60分以下的用C表示。 1.程序分析:条件运算符:(a>b)?a:b 若a>b,则结果为a, 反之为b。 */#include int main(int argc, char const *argv[]){ float scr; printf("原创 2017-09-16 14:55:11 · 659 阅读 · 0 评论 -
<c语言经典100例>c14 最大公倍数和最小公倍数
/* 【程序14】 c14.c* 题目:输入两个正整数,求其最大公约数和最小公倍数。 * 程序分析:利用辗转相除法:设两数为a、b(b<a),求它们最大公约数(a、b)的步骤如下:用a/b,得a/b=q......r1(0≤r)。若r1=0,则(a,b)=b;若r1≠0,则再用b/r1,得b/r1=q......r2 (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r1/r2原创 2017-09-16 17:31:56 · 583 阅读 · 1 评论 -
<c语言经典100例>c15 字符统计
/* 【程序15】 c15.c* 题目:输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。 * 程序分析:利用while语句,条件为输入的字符不为'\n'. */#include int main(int argc, char const *argv[]){ char c; int let=0, spc=0, dig=0, oth=0; printf("请原创 2017-09-16 18:17:43 · 369 阅读 · 0 评论 -
<c语言经典100例>c16 规律题
/* 【程序16】 c16.c题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时 共有5个数相加),几个数相加由键盘控制。 例如:输入2 3, 输出s=2+22+222=246* 程序分析:关键是计算出每一项的值。 */#include int main(int argc, char *argv[]){原创 2017-09-18 21:28:15 · 787 阅读 · 0 评论 -
<c语言经典100例>c17 完数
/* 【程序19】 c17.c* 题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3. 找出1000以内的所有完数。 * 程序分析:什么是数的因子?因子就是所有可以整除这个数的数,不包括这个数自身.*/#include int main(int argc, char *argv[]){ int n; // 找到能被n整除的数并按顺序存储到数组buf原创 2017-09-18 22:53:31 · 770 阅读 · 0 评论 -
<c语言经典100例>c18 反弹距离
/* 【程序18】 c18* 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第n次落地时,共经过多少米?落地后将反弹多高? * 程序分析:第n次反弹的高度为上一次的一半,算经过多少米时,不算将要反弹其的高度 */#include int main(int argc, char *argv[]){ double height = 100; do原创 2017-09-23 00:52:07 · 545 阅读 · 0 评论 -
<c语言经典100例>c19 猴子吃桃
/* 【程序19】 c19.c* 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。* 程序分析:采取逆向思维的方法,从后往前推断。 */ #include int main(int ar原创 2017-09-23 23:59:18 · 409 阅读 · 0 评论 -
<c语言经典100例>c20 比赛顺序
/* 【程序20】 c20.c* 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定 比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出 三队赛手的名单。 * 程序分析: 使用循环一个一个去匹配,每个人的对手都不相同,最后根据题目给出的条件判断输出 */#include int main(int a原创 2017-09-24 01:05:18 · 906 阅读 · 0 评论 -
<C语言经典100例>c9 兔子生长
/* 【程序9】 *题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? *程序分析:兔子总数规律:2,2,4,6,10,16.... 兔子对数的规律为数列1,1,2,3,5,8....,在数列前补0,就会发现某个月兔子的对数为前两个月之和,采用递归思路做 */#include int re原创 2017-09-15 20:59:18 · 385 阅读 · 0 评论 -
<C语言经典100例>c10 素数
/* 【程序12】 * 题目:判断101-200之间有多少个素数,并输出所有素数。 * 程序分析:判断素数的方法:用一个数分别去除2到这个数的前一个数,如果能被整除, 则表明此数不是素数,反之是素数。 */#include int main(int argc, char const *argv[]){ int i, j; int flag=0, sum=0; for (i原创 2017-09-15 21:41:53 · 376 阅读 · 0 评论 -
<c语言经典100例>c7 大、小写字母的转换
/* 【程序7】*题目:输入一个小写字母,输出对应的大写字母。*程序分析:将小写字母对应的ASCII码j减去32即得对应的大写字母。大写字母ascii:65-90小写字母ascii: 97-122*/#include int main(void){ char ch; printf("请输入一个小写字母:"); scanf("%c", &ch); if (ch>=97原创 2017-09-03 19:16:29 · 446 阅读 · 0 评论 -
<c语言经典100例>c12 分解质因数
/* 【程序12】 C12.C题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 * 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n, 重复执行第一步。 (3)如果n不原创 2017-09-16 14:39:22 · 715 阅读 · 0 评论 -
<C语言经典100例>c43 不使用中间变量交换值
/* 【程序43】 不使用中间变量交换两个值* 题目:不使用中间变量交换两个值 * 程序分析:使用两个值的和,或使用亦或操作(二进制运算) */#include void swap_1(int *a, int *b){ *a += *b; *b = *a - *b; *a -= *b;}void swap_2(int *a, int *b){ *a ^= *b;原创 2017-10-11 23:53:42 · 431 阅读 · 0 评论 -
<C语言经典100例>c42 去除字符串中的空格
/* 【程序42】 去除字符串中的空格 * 题目:去除字符串的空格,如:" abc de fg"。 * 程序分析:参照注释。 *//* 指针方式 */#include #define SIZE 50void del_space(const char *str, char *dst){ while (*str) // *str != '\0'; { if (*str原创 2017-10-11 23:52:30 · 586 阅读 · 0 评论 -
<c语言经典100例>c2 利润分层
/* 【程序2】 *题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 10原创 2017-09-03 13:07:43 · 862 阅读 · 0 评论 -
<c语言经典100例>c3 完全平方数
/*c3.c*//* 【程序3】 *题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? *程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 的结果满足条件,即是结果。 */#include #include int main(){ double num; for (num=0.0;原创 2017-09-03 14:28:48 · 642 阅读 · 0 评论 -
<c语言经典100例>c4 判断一年中的第几天
/* 【程序4】 *题目:输入某年某月某日,判断这一天是这一年的第几天? *1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 情况,闰年且输入月份大于3时需考虑多加一天。 */#include int main(void){ int year, month, day, days; printf("请输入年:"); scanf("%d原创 2017-09-03 15:10:29 · 748 阅读 · 0 评论 -
<c语言经典100例>c6 金字塔图案
/* 【程序6】 *题目:用*号输出金字塔图案。要求第n层有2n-1个*,总层数由输入控制。 *程序分析:第n层应该有n个空格,依次递减。第n层有2n-1个*,依次递减。这两个条件放在“行“里面计算”*/#include int main(void){ int n; printf("请输入层数:"); scanf("%d", &n); int i, j, k; for原创 2017-09-03 18:54:36 · 1079 阅读 · 0 评论 -
<c语言经典100例>c8 九九乘法表
/* 【程序8】 *题目:输出9*9口诀。 *程序分析:分行与列考虑,共9行9列,i控制行,j控制列。 */#include int main(void){ int i, j; for (i=9; i>=1; i--) //行控制 { for (j=1; j<=i; j++) //列控制 { printf("%d*%d=%d\t", j, i, i*j); }原创 2017-09-03 19:18:32 · 978 阅读 · 0 评论 -
<C语言经典100例>c21 菱形
/* 【程序21】 c21.c 题目:打印出如下图案(菱形), 多少行由输入控制 * *** ************ ***** *** *1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制行,第二层控制列。 */#include int main(int argc, char *argv[]原创 2017-09-27 23:55:27 · 354 阅读 · 0 评论 -
<c语言经典100例>c22 规律题
/* 【程序22】 c22.c * 题目:有一分数序列:1/2,2/3,3/5,5/8,8/13,13/21...求出这个数列的前20项之和。* 程序分析:请抓住分子与分母的变化规律,某个分数的分母等于前一个数的分子分母之和, 此数的分子等于前一个数的分母。 */#include int main(int argc, char *argv[]){ int a=2, b=1;原创 2017-10-01 00:32:17 · 649 阅读 · 0 评论 -
<C语言经典100例>c40 自守数
/* 【程序39】 自守数 * 题目:求出1000以内的自守数。 * 程序分析:自守数:如果某一个数的平方的末几位数(原数是几位就取几位)等于它本身,则称之为自守数。如:5^2=25, 6^2=36。解题方法:(数的平方)对(10的[数位次方])取余==原数 */#include int ten_to_n(int i) // 10的n次方, n为i的位数{ int j = 1;原创 2017-10-09 21:54:49 · 489 阅读 · 0 评论 -
<c语言经典100例>c1 数的组合
/* 【程序1】 *题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? *程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 */#include int main(int argc, char *argv[]){ int a, b, c, flag=0; for (a=1; a<5; a++原创 2017-09-03 13:07:08 · 601 阅读 · 0 评论 -
<C语言经典100例>c39 自守数
/* 【程序39】 自守数 * 题目:求出1000以内的自守数。 * 程序分析:自守数:如果某一个数的平方的末几位数(原数是几位就取几位)等于它本身,则称之为自守数。如:5^2=25, 6^2=36。解题方法:(数的平方)对(10的[数位次方])取余==原数 */#include int ten_to_n(int i) // 10的n次方, n为i的位数{ int j = 1;原创 2017-10-08 23:38:53 · 1197 阅读 · 0 评论 -
<C语言经典100例>c38 亲密数对
/* 【程序38】 亲密数对* 题目:求出3000以内的所有亲密数对。* 程序分析:亲密数:若a的所有正因子(包括1但不包括a)之和等于b,b所有的正因子(包括1但不包括b)之和等a,就称a和b为亲密数对。主要就是找出a的因子之和以及a的因子之和的因子之和。*/#include int main(int argc, char *argv[]){ int sum1, sum2; /原创 2017-10-08 01:23:22 · 3372 阅读 · 0 评论 -
<C语言经典100例>c37 百元买百鸡
/* 【程序37】 百元买百鸡 * 题目:我国古代数学家张丘建在他的算经中提出了一个著名的“百钱买百鸡”问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问翁、母、雏各几何? * 程序分析: 首先确定每种鸡的范围:公鸡(0-20),母鸡(0-33),鸡雏(0-100),再在范围内穷举。 */#include int main(int argc, char *argv[原创 2017-10-08 00:20:35 · 2063 阅读 · 0 评论 -
<C语言经典100例>c36 数组元素交换
/* 【程序36】 * 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换。 * 程序分析:先找出数组中最大最小的元素,再将最大元素与第一个元素交换,将最小元素与最后一个元素交换。 */#include #define SIZE 5int main(int argc, char *argv[]){ int arr[SIZE]; printf("Input原创 2017-10-07 23:39:38 · 586 阅读 · 0 评论 -
<c语言经典100例>c5 小到大排列
/* 【程序5】 *题目:输入三个整数x,y,z,请把这三个数由小到大输出。 *程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换, 然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 */#include int main(void){ int x, y, z; printf("Please input 3 i原创 2017-09-03 15:19:13 · 511 阅读 · 0 评论 -
<C语言经典100例>c35 auto关键字
/* 【程序35】 auto关键字* 题目:了解auto关键字的作用。* 程序分析: auto关键字定义的变量仅在语句块内部起作用,而且优先权更高。 */#include int main(int argc, char *argv[]){ int n = 10; int i = 0; while (i<1) { auto int n = 5; printf("%原创 2017-10-07 20:20:59 · 374 阅读 · 0 评论 -
<c语言经典100例>c32 大数相加
/* 【程序32】 大数相加* 题目:求出两个非常大的数的和,例如:123456789123456+123456789 * 程序分析:和非常大,int、long、long long 等数据类型都装不下这个数怎么办?采用数组方式求。 */#include #include //strlen() memset()#define SIZE 1000void add_oper(c原创 2017-10-05 01:00:29 · 393 阅读 · 0 评论 -
<C语言经典100例>c41 含共用体的结构体
/* 【程序41】 含共用体的结构体* 题目:如下表,当某人的职业为学生s时,录入/输出分数;当职业为教师t时,录入/输出课程。要求使用结构体数组,每个结构体存储一个人的数据。 Name Num Sex Profession Score/Course Zhang 001 f s 90.0 Li 101原创 2017-10-09 22:19:10 · 427 阅读 · 0 评论 -
<c语言经典100例>c27:反向打印字符
/* 【程序27】递归 反向打印字符* 题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。* 程序分析: 递归边界条件:n==1*/#include void recursion(int n){ char c; if (n == 1) { c = getchar(); putchar(c); } else { c = getchar();原创 2017-10-02 20:33:19 · 662 阅读 · 0 评论 -
<c语言经典100例>c23 1!+2!+3!+...
一、for循环版:/* 【程序23】 c23.c * 题目:求1+2!+3!+...+20!的和* 程序分析:此程序只是把累加变成了累乘。 */#include int main(int argc, char *argv[]){ double n = 1; double result = 0; // int的取值范围:-2147483648~2147483647 i原创 2017-10-01 00:44:29 · 757 阅读 · 0 评论 -
<c语言经典100例>c24 递归求n!
/* 【程序24】 * 题目:利用递归方法求n的阶乘“n!”。* 程序分析:递归公式:n = n*((n-1)!) , 边界条件:n == 1 */#include int recursion(int n){ if (n == 1) { return n; } return n*recursion(n-1);}int main(int argc, char *ar原创 2017-10-02 15:25:09 · 456 阅读 · 0 评论 -
<c语言经典100例>c25 递归输出1-100
/* 【程序25】* 题目:递归输出1-100* 程序分析:搞清楚递归算法怎样一层一层进去的?又是怎样一层一层出来的?边界条件:n>1 */#include int recursion(int n){ if (n>1) { recursion(n-1); } printf("%d ", n);}int main(int argc, char *argv[])原创 2017-10-02 15:52:36 · 1028 阅读 · 0 评论 -
<c语言经典100例>c34 杨辉三角形
/* 【程序34】杨辉三角形* 题目:打印杨辉三角形前10行 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 1原创 2017-10-05 04:23:17 · 610 阅读 · 0 评论 -
<c语言经典100例>c33 打印简单心形
/* 【程序33】* 题目:打印简单“心”形,转自:https://www.zhihu.com/question/20187195* 分析:算法来源于:http://mathworld.wolfram.com/HeartCurve.html * 更多复杂心形图案访问:http://blog.csdn.net/wu9797/article/details/77168963*/#inclu原创 2017-10-05 04:21:34 · 3015 阅读 · 1 评论 -
<c语言经典100例>c30:冒泡排序
/* 【程序29】 冒泡排序* 题目:输入5个数字,使用冒泡排序方法按从小到大排列。 * 程序分析: 冒泡排序算法的原理:(从后往前)1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3、针对所有的元素重复以上的步骤,除了最后一个。4、持续每次对越来越少的元素重复上面的步骤,原创 2017-10-02 22:28:48 · 511 阅读 · 0 评论