
C语言经典100例
syzdev
这个作者很懒,什么都没留下…
展开
-
C语言经典例100-将学生成绩写入文件
目录1 题目2 分析3 实现1 题目有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,把原有的数据和计算出的平均分数存放在磁盘文件"stud"中。2 分析学生成绩保存在结构体中,读入学生的成绩计算出平均分,写入文件即可。3 实现#include <stdio.h>#include <stdlib.h>t...原创 2020-02-23 14:12:09 · 12328 阅读 · 11 评论 -
C语言经典例99-文件内容合并和排序
目录1 题目2 分析3 实现1 题目有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。2 分析先把文件A和文件B的内容都读出来,然后使用字符串连接函数strcat连接成一个字符串,然后用冒泡排序的思想,将字符串中的字母进行排序,最后写入文件C中3 实现#include <stdio.h>#include <s...原创 2020-02-23 14:07:03 · 1399 阅读 · 5 评论 -
C语言经典例98-将字符转为大写字母并写入文件
目录1 题目2 分析3 实现1 题目从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。 输入的字符串以!结束。2 分析写入文件请参考上一篇文章 C语言经典例97-输入字符写入文件,对于字符串小写字母转换为大写字母有两种方法:根据ASCII码来转换,观察ASCII码中大小字母和小写字母的规律可以发现,将小写字母-32则可以转换为相应的大写字母。...原创 2020-02-23 13:50:08 · 1912 阅读 · 0 评论 -
C语言经典例97-输入字符写入文件
目录1 题目2 分析3 实现1 题目从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。2 分析关于文件操作,请看我的这篇文章 C语言-文件操作总结 。3 实现#include <stdio.h>#include <stdlib.h>int main(){ FILE* fp = NULL; char filename[25];...原创 2020-02-23 13:36:05 · 1282 阅读 · 1 评论 -
C语言经典例96-计算字符串中子串出现的次数
目录1 题目2 分析3 实现4 运行结果1 题目计算字符串中子串出现的次数2 分析串的模式匹配在数据结构中有KMP算法,但这个算法实现起来繁琐,难度很大,所以对于一般来说,使用暴力法求解,设有字符串str和子串sub,第一轮循环从str的第一个字符开始,设置一个位置标号j,再与子串sub逐个比较,若比较相同的话,则位置标号向后移,比较下一个字符,出现第一个不相同字符则该轮比较结束,比较结束...原创 2020-02-23 13:24:21 · 22128 阅读 · 4 评论 -
C语言经典例86-两个字符串连接
目录1 题目2 分析3 实现4 运行结果1 题目两个字符串连接,有字符串str1和str2,假设str1足够大,要求将str2连接到str1后面2 分析我们知道string.h中有字符串连接函数strcat和strncat两个字符串连接函数,这里由自己来实现字符串连接函数,首先要明确字符串结尾的标志是\0,那么首先要找到str1的\0处,再将str2中字符逐个复制到str1中直至遇到str...原创 2020-02-21 16:00:54 · 2857 阅读 · 4 评论 -
C语言经典例85-判断一个素数能被几个9整除
目录1 题目2 分析3 实现4 运行结果1 题目判断一个素数能被几个9整除。2 分析用暴力法逐个累加尝试即可。3 实现#include <stdio.h>#include <stdlib.h>int main(){ int p, i; int sum = 9; printf("请输入一个素数:"); scanf("%d",...原创 2020-02-20 16:21:55 · 2228 阅读 · 0 评论 -
C语言经典例84-一个偶数总能表示为两个素数之和
目录1 题目2 分析3 实现4 运行结果1 题目一个偶数总能表示为两个素数之和。2 分析暴力法,循环判断 i和 n-i 两个数是否都为素数。3 实现#include <stdio.h>#include <stdlib.h>#include <math.h>int isPrime(int n) { if(n < 2) { ...原创 2020-02-20 16:10:15 · 7385 阅读 · 4 评论 -
C语言经典例83-求0—7所能组成的奇数个数
目录1 题目2 分析3 实现4 运行结果1 题目求 0—70—70—7 所能组成的奇数个数2 分析该问题是一个排列组合问题,假设这个数为 sumsumsum,sum=a1a2a3a4a5a6a7a8sum=a_1a_2a_3a_4a_5a_6a_7a_8sum=a1a2a3a4a5a6a7a8,表示这个数的某位的数值,当一个数的最后一位为奇数时,那么这个数一定为奇数,不管前...原创 2020-02-20 15:46:47 · 4477 阅读 · 5 评论 -
C语言经典例82-八进制转换为十进制
目录1 题目2 分析3 实现4 运行结果1 题目八进制转换为十进制2 分析将一个八进制数,逐一分解出对应的权值,再乘以权重,累加起来就可以转换为十进制了,采用具体的方法就是除余法,例如八进制数12,取余分解出最低位2,再乘以相应的权重,由于是最低位,所以权重为 80=18^0 = 180=1 ,再用12/10,进行下一轮循环,取余分解出最低位1,再乘以相应的权重,权重为 81=88^1 =...原创 2020-02-20 13:04:00 · 13915 阅读 · 1 评论 -
C语言经典例80-猴子分桃
目录1 题目2 分析3 实现4 运行结果1 题目海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?2 分析设原来至少有 xxx 个桃子:第一只猴子拿走一份后,剩余...原创 2020-02-19 13:00:20 · 12223 阅读 · 11 评论 -
C语言经典例79-字符串排序
目录1 题目2 分析3 实现4 运行结果1 题目字符串排序,输出三个字符串(长度小于20),并将其按照ASCII码顺序排序。2 分析首先限制三个字符串的输入,本例利用fgets函数,该函数的原型为:char *fgets(char *str, int n, FILE *stream)str : 这是指向一个字符数组的指针,该数组存储了要读取的字符串。n : 这是要读取的最大字符数...原创 2020-02-19 12:34:54 · 2402 阅读 · 1 评论 -
C语言经典例76-根据n的奇偶性累加
目录1 题目2 分析3 实现4 运行结果1 题目编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用指针函数)。2 分析首先判断n的奇偶性,通过if控制语句对2取余来判断,再根据n的奇偶性调用不同的计算方法,这里把两个计算方法写成两个函数,不难发现累加的规律为当n为偶数时,所有累加项都是以1为分子,分母是从2开始的偶...原创 2020-02-19 12:07:16 · 1803 阅读 · 0 评论 -
C语言经典例75-反转整数
目录1 题目2 分析3 实现4 运行结果1 题目输入一个整数n,并将其反转后输出。2 分析反转一个整数可以想象成逆置字符串,只不过在这里是以数的形式,如1234,反转后4321,这里可以采用除余分解数的方法,也就是当n不为0时,将其取余,取出最低位的数字然后再乘10加上这个余数,然后再将n除以10,这样循环结束后,整数n就完成了逆置。3 实现#include <stdio.h&g...原创 2020-02-18 13:15:18 · 4624 阅读 · 0 评论 -
C语言经典例74-连接两个链表
目录1 题目2 分析3 实现4 运行结果1 题目连接两个链表,如有链表A和链表B,将链表B按原顺序接在链表A后面,链表结构为:typedef int ElementType;typedef struct node { ElementType data; struct node *Next;} *List;2 分析本题在逻辑上很简单,不难想出只要得到链表A的最后一个节...原创 2020-02-18 13:02:35 · 3994 阅读 · 1 评论 -
C语言经典例73-反向输出一个链表
目录1 题目2 分析2.1 方法1-原地逆置2.2 方法2-递归3 实现3.1 实现1-原地逆置3.2 实现2-递归4 运行结果1 题目反向输出一个链表,链表结构为:typedef int ElementType;typedef struct node { ElementType data; struct node *Next;} *List;2 分析2.1 方法...原创 2020-02-18 12:47:04 · 4980 阅读 · 2 评论 -
C语言经典例71-编写函数输出结构体数据
目录1 题目2 分析3 实现4 运行结果1 题目编写input()和output()函数输入,输出5个学生的数据记录。2 分析定义结构体,声明结构体数组,再编写函数传入结构体数组指针到函数,再函数中输入或输出结构体数据即可。3 实现#include <stdio.h>#include <stdlib.h>typedef struct { char ...原创 2020-02-18 12:18:41 · 6059 阅读 · 1 评论 -
C语言经典例70-编写求字符串长度函数
目录1 题目2 分析2.1 方法1-常规方法2.2 方法2-递归方法3 实现3.1 实现1-常规方法3.2 实现2-递归方法1 题目写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。2 分析我们知道在string.h中有库函数strlen函数,他的使用方法如下:char str[] = "hello";printf("str字符串的长度为:%d", strlen...原创 2020-02-17 14:03:00 · 5849 阅读 · 0 评论 -
C语言经典例69-有n个人围成一圈报数问题
目录1 题目2 分析3 实现4 运行结果1 题目有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。2 分析假设全部人都退圈,则最后一个退圈的人就是题目中留下的那一位,详细思路请见实现中的注释。3 实现#include <stdio.h>int main(){ int a[100]; // 保存...原创 2020-02-17 13:53:59 · 21409 阅读 · 13 评论 -
C语言经典例68-数组元素循环偏移
目录1 题目2 分析3 实现4 运行结果1 题目有 n个整数,使其前面各数顺序向后移 m 个位置,最后m个数变成最前面的 m 个数。2 分析假设n的值为10即数组arr大小为10,单独观察一次偏移的过程,可以发现就是事先把最后一个值arr[9]用临时变量t暂存起来,然后将整个数组向后移位一次,此时再将暂存的arr[9]赋值给arr[0],这样就完成了一次偏移,那么一共要偏移m次,就将循环执...原创 2020-02-17 13:26:15 · 928 阅读 · 1 评论 -
C语言经典例67-数组最大值与最小值与数组元素交换
目录1 题目2 分析3 实现4 运行结果1 题目输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。2 分析本题的关键是找出数组的最大值与最小值的位置,找出位置后与数组相应的位置交换即可3 实现#include <stdio.h>#define N 10 // 假定数组大小为10int main(){ int arr[N] = {4, 3,...原创 2020-02-17 12:49:11 · 12806 阅读 · 3 评论 -
C语言经典例66-输入3个数a,b,c,按大小顺序输出
目录1 题目2 分析3 实现4 运行结果1 题目输入3个数a,b,c,按大小顺序输出。2 分析三个数的排序,只需要比较三次即可a与b比较,若a > b则交换a和b的值a与c比较,若a > c则交换a和c的值b与c比较,若b > c则交换b和c的值三轮比较后,再输出a、b、c就是顺序排列的3 实现#include <stdio.h>int m...原创 2020-02-17 12:39:07 · 4451 阅读 · 0 评论 -
C语言经典例61-杨辉三角
目录1 题目2 分析2.1 方法1-二项式定理2.2 方法2-按规律3 实现3.1 实现1-二项式定理3.2 实现2-按规律4 运行结果1 题目打印出杨辉三角形(要求打印出10行)2 分析杨辉三角结构如下所示:11 11 2 11 3 3 11 4 6 4 12.1 方法1-二项式定理第一眼看到杨辉三角很容易可以想...原创 2020-02-16 12:12:48 · 835 阅读 · 0 评论 -
C语言经典例40-逆置数组
目录1 题目2 分析3 实现4 运行结果1 题目将一个数组逆序输出。2 分析逆置一个数组采用的方法就是两两交换,第一个与最后一个交换,第二个与倒数第二个交换,依次类推,需要注意的是交换的次数为数组长度的一般,因为在交换一半的时候后一半也被交换了,如果交换的次数为数组的长度,那么数组又被还原了。3 实现#include <stdio.h>void invertArr(in...原创 2020-02-12 12:15:53 · 1625 阅读 · 0 评论 -
C语言经典例39-在有序数组中插入一个数
目录1 题目2 分析3 实现4 运行结果1 题目有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。2 分析对于一个有序的数组,要插入一个数,并保持依然有序,方法是从后往前比较,若插入的数小于比较的数,那么比较的数往后移,直至遇到插入的数大于比较的数为止,此时将该数插到此位置。3 实现#include <stdio.h>void insert(int ...原创 2020-02-11 13:08:10 · 10460 阅读 · 3 评论 -
C语言经典例35-字符串反转
目录1 题目2 分析3 实现4 运行结果1 题目字符串反转,如将字符串 “Wuhan will be better” 反转为 “Wuhan will be better”。2 分析在C语言中,将其作为字符数组,用数组的思维操作字符串,本题就非常简单了,只用一个for循环,将字符串中对称的位置互换即可,如第一个位置与最后一个位置互换,第二个位置与倒数第二个位置互换,本算法最容易出错的地方就是...原创 2020-02-09 14:49:49 · 1648 阅读 · 0 评论 -
C语言经典例32-删除字符串中指定的字符
目录1 题目2 分析3 实现4 运行结果1 题目删除一个字符串中的指定字母,如:字符串 “aca”,删除其中的 a 字母。2 分析本题是要处理字符串,在C语言中,我们把他转换为字符数组,则本质是要处理数组,在数组中删除某一元素的最简单方法是设定一个标记位point初始为0,它代表着当前保存的非删除字符的位置,而循环变量i则是要遍历整个字符数组,在循环时,若遇到删除字符,则i向前进(递增),...原创 2020-02-09 13:49:31 · 37491 阅读 · 3 评论 -
C语言经典例30-判断回文数
目录1 题目2 分析3 实现4 运行结果1 题目一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。2 分析本题的思路是把这个数分解重新组成一个数,分解的方法是将该数逆置,再与原来的数比较是否相等,若相等就是回文数,逆置的方法是设保存逆置的数为rev 初始为0,每一次将它乘10,即rev * 10,然后把要判断的数t,取余10与rev相加,即rev += ...原创 2020-02-09 12:12:59 · 1220 阅读 · 0 评论 -
C语言经典例28-利用递归算年龄
目录1 题目2 分析3 实现4 运行结果1 题目有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?2 分析本题读起来像是小学数学问题,但是要用递归的思想来解决它,就要从递归的三大要素分析:该递归程序的目的:计算第五个人的年龄递归...原创 2020-02-08 13:23:52 · 2137 阅读 · 0 评论 -
C语言经典例27-利用递归逆序输出字符串
目录1 题目2 分析3 实现4 运行结果1 题目利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。2 分析从递归程序设计三大要素角度来分析:该递归程序的目的:逆序输出字符串递归的结束条件:遇到结束符号,回车换行或\0递归的递推公式:本题无明显递推公式,但递归的逻辑为当递归返回的时候输出读入的字符即可3 实现#include <stdio.h>voi...原创 2020-02-08 13:07:43 · 7553 阅读 · 8 评论 -
C语言经典例26-利用递归方法求阶乘
目录1 题目2 分析3 实现4 运行结果1 题目利用递归方法求5!5!5!。2 分析我们知道0和1的阶乘都是1,用递归计算阶乘时,要递减的方式递归,到0或1的时候返回递归。该递归程序从递归三大要素的角度来看:整个递归程序的目的:计算阶乘递归的出口条件:当遇到0或1的时候返回递归递归的递推公式:f(n)=n∗f(n−1)f(n) = n * f(n-1)f(n)=n∗f(n−1)...原创 2020-02-08 12:58:04 · 1891 阅读 · 0 评论 -
C语言经典例25-阶乘累加求和
目录1 题目2 分析3 实现4 运行结果1 题目求1!+2!+3!+…+20!的和。2 分析本题的本质就是求阶乘,观察规律可以发现,1!1!1! 和 2!2!2! 只差乘2,2!2!2! 和 3!3!3! 只差乘3,所以每个相加项都和前一项有规律的倍数关系,所以就可以利用循环语句来完成, 如第一次循环的时候加1即1!1!1!,第二次循环就乘2即2!2!2!,从1循环到20即可。当然求阶乘还...原创 2020-02-08 12:51:54 · 12236 阅读 · 2 评论 -
C语言经典例24-分数累加和
目录1 题目2 分析3 实现4 运行结果1 题目有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。2 分析本题实质是要看出序列的规律,显而易见,规律就是处第一个数以外,后一个数的分子为前一个数的分子分母之和,后一个数的分母是上一个数的分子3 实现#include <stdio.h>int main() { int t...原创 2020-02-07 14:45:07 · 6735 阅读 · 0 评论 -
C语言经典例23-输出菱形图案
目录1 题目2 分析3 实现4 运行结果1 题目打印出如下图案(菱形)。 * *** ************ ***** *** *2 分析观察图案,共7行,其中前4行规律相同,后3行规律相同,那么在程序中,要分为两个部分来做,第一行发现三个空格一个星号,第二行两个空格三个星号,第三行一个空格四个星号,从中可以推算出空格个数、星号个数和行号的关系,由此才能利用...原创 2020-02-07 13:02:50 · 12626 阅读 · 2 评论 -
C语言经典例22-乒乓球比赛名单问题
目录1 题目2 分析3 实现4 运行结果1 题目两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。2 分析本题看似是一个脑经急转弯问题,可以推理出答案,但是若是要用程序实现,则要换成程序的思路,那么最简单的方法就是三个人对三个人,用三层for循环,通过限制...原创 2020-02-07 12:50:06 · 3795 阅读 · 0 评论 -
C语言经典例21-猴子吃桃问题
目录1 题目2 分析3 实现4 运行结果1 题目猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。2 分析本题若要假设第一天有多少个桃子,再利用上述规律,来验证第一天的假设是否正确,这种思路是很难完成的,那么最好...原创 2020-02-06 22:23:57 · 8863 阅读 · 1 评论 -
C语言经典例20-小球反弹高度问题
目录1 题目2 分析3 实现4 运行结果1 题目一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?2 分析本题要求的数有两个,共经过多少米则要求出每次弹跳的高度,注意字眼共经过多少米,必须要算上往返举例,由于第一次下落只算单程,所以第一次单独计算,后续弹跳都是下落反弹两个过程,所以算两次,故循环从2开始,一直算到第10次...原创 2020-02-06 22:14:24 · 17533 阅读 · 5 评论 -
C语言经典例19-完数
目录1 题目2 分析3 实现4 运行结果1 题目一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。因子:假如整数n除以m,结果是无余数的整数,那么我们称m就是n的因子2 分析本题想要验证某个数,必须计算它的因子,计算因子的方法见 C语言经典例14-将一个正整数分解质因数 ,计算出因子后,在求和判断即可3 实现#include...原创 2020-02-06 12:55:00 · 615 阅读 · 1 评论 -
C语言经典例18-求累加和
目录1 题目2 分析3 实现4 运行结果1 题目求 s=a+aa+aaa+aaaa+aa...as=a+aa+aaa+aaaa+aa...as=a+aa+aaa+aaaa+aa...a 的值,其中a是一个数字。例如2+22+222+2222+222222+22+222+2222+222222+22+222+2222+22222 (此时共有5个数相加),几个数相加有键盘控制。2 分析本题的题...原创 2020-02-06 12:30:49 · 4113 阅读 · 0 评论 -
C语言经典例17-统计字符个数
目录1 题目2 分析3 实现4 运行结果1 题目输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。2 分析题目中未知字符串的长度,所以不使用预先设置字符数组的方式,使用逐个读取字符然后判断统计的方法,我们知道英文字母分大写字母和小写字母,在ASCII码中,大写字母在小写字母之前,且是正序排列的,那么判断该字符是否是英文字符的方法就为(c >= 'a' &&am...原创 2020-02-05 18:33:09 · 23993 阅读 · 11 评论