C语言经典算法
庄孝义
要么不做,要做就做最好的。
展开
-
C语言经典算法100例-002-数轴的使用
题目如下:企业发放的奖金根据利润提成。利润(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万元的原创 2014-02-24 23:05:50 · 1486 阅读 · 0 评论 -
C语言经典算法100例-036-求100之内的素数
依旧是按照判定素数的思想:一个能被[2,sqrt(n+1)]之间整除的整数n不是素数。程序如下:#include #include #include int main(){ int prime; int i,j,t; for(i=1;i<100;i++) { prime=1; t=sqrt(i+1)原创 2014-03-23 20:29:14 · 807 阅读 · 0 评论 -
C语言经典算法100例-068-练习使用指针3
直接看代码和注释吧。。。//利用指针实现数组的滚动 本例实现数组像右滚动几位#include #include int main(){ int arr[20]; int i,n,offset; //输入数组大小和数组内容 printf("Total numbers?\n"); scanf("%d",&n); printf("Input原创 2014-05-04 22:54:00 · 1432 阅读 · 0 评论 -
C语言经典算法100例-067-练习使用指针2
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。xi原创 2014-05-04 22:51:36 · 1121 阅读 · 1 评论 -
C语言经典算法100例-066-练习使用指针
题目::输入3 个数a,b,c,按大小顺序输出yuan原创 2014-05-04 22:48:30 · 999 阅读 · 0 评论 -
C语言经典算法100例-041-静态局部变量的使用
当在一个函数中声明一个变量前加static时,该变量便是静态局部变量,特点是1.生存期为整个程序,不会随着函数的退出而消失。2.作用域仍未函数内部,在其他地方无法使用该静态局部变量。下面是一个小例子进行演示:#include #include void varfunc();void main(){ int i; for(i=0;i<3;i++)原创 2014-03-24 21:40:45 · 716 阅读 · 0 评论 -
C语言经典算法100例-026-递归求阶乘
我们利用这道题来了解一下递归,复习一下递归的几个点。1.递归公式2.递归出口比较简单,直接看程序和注释即可:#include #include //用递归求阶乘long int fn(int); //先声明函数原型int main(){ int n; printf("Please input an integer!\n"); scanf("%d原创 2014-03-04 11:47:56 · 975 阅读 · 0 评论 -
C语言经典算法100例-029-求一个整数的位数且逆序打印
这道题也很简单:利用模运算和除运算依次求出个、十、百。。。。位的值并打印,然后位数累加即可。直接看程序:#include #include int main(){ int i; int digits(int); printf("Please input an integer!\n"); scanf("%d",&i); printf("It c原创 2014-03-05 14:29:27 · 835 阅读 · 0 评论 -
C语言经典算法100例-028-五个人问岁数
题目很简单,直接看原文:有5 个人坐在一起,问第五个人多少岁?他说比第4 个人大2 岁。问第4 个人岁数,他说比第3 个人大2 岁。问第三个人,又说比第2 人大两岁。问第2 个人,说比第一个人大两岁。最后问第一个人,他说是10 岁。请问第五个人多大?1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10 岁),再往回推原创 2014-03-05 13:56:40 · 1269 阅读 · 0 评论 -
C语言经典算法100例-037-给10个数排序
使用简单选择排序法给10个数排序,思路如下:将最小的元素找出并放到序列的最前面,在剩下的元素中继续找出最小的元素放在第二个位置上,以此类推,每次选出一个元素,即可确定其再有序序列中的最终位置。#include #include //简单选择排序法int main(){ int a[10]; int i,j,tmp,minNum,n=10; pr原创 2014-03-23 21:50:47 · 1931 阅读 · 0 评论 -
C语言经典算法100例-031-判断星期几
题目如下:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。比较简单,直接看程序吧。#include #include #include int main(){ char letter; while((letter=getch())!='y') { switch(letter)原创 2014-03-23 19:31:21 · 942 阅读 · 0 评论 -
C语言经典算法100例-072-创建一个链表
现在我们用C语言实现一个链表,原创 2014-05-08 10:13:51 · 1130 阅读 · 4 评论 -
C语言经典算法100例-结束语
今天看了以下后年的题,bi原创 2014-05-09 11:44:46 · 1236 阅读 · 0 评论 -
C语言经典算法100例-071-练习使用结构体
我们这里创建一个学生结构体,包括他的id,姓名,原创 2014-05-07 12:01:21 · 1045 阅读 · 0 评论 -
C语言经典算法100例-070-计算字符串的长度
经典之一,比较简单,C语言中字符串是原创 2014-05-07 10:50:10 · 632 阅读 · 0 评论 -
C语言经典算法100例-069-简单约瑟夫环问题
这里我们实现一个简单的约瑟夫环问题,描述如下:有N个人站成一圈,从原创 2014-05-07 09:24:37 · 3348 阅读 · 1 评论 -
C语言经典算法100例-039-排序队列中插入新元素
思想很简单:找到新元素的插入位置,将之后的元素右移,插入新元素即可。例子是以一个长为11的数组为例:#include #include int main(){ int a[11]={1,2,4,7,9,13,18,24,32,45}; int i,num,pos=0; scanf("%d",&num); if(num>=a[9])原创 2014-03-24 20:38:19 · 686 阅读 · 0 评论 -
C语言经典算法100例-012-求素数
题目如下:判断101-200之间有多少个素数,并输出所有素数。1.分析:关键的问题在于如何判断一个数是否为素数,一个比较好的办法是,如果一个数n能被2到sqr(n+1)之间的任何一个数整除的话,那么他就不是素数。根据该条件写出源程序。2.源程序#include #include #include //判断101到200之间有多少素数,并将他们全部输出int main原创 2014-03-02 21:27:01 · 1264 阅读 · 0 评论 -
C语言经典算法100例-032~35
这几个程序是关于图形方面的掩饰,并没有什么技术点,而且Tc下的图形已经落伍了,所以在这里省略掉。原创 2014-03-23 19:44:31 · 1123 阅读 · 0 评论 -
C语言经典算法100例-024-求数列的前20 项和,2/1,3/2,5/3,8/5...
我们来看题:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20 项之和。1。分析:问题的关键在于找出每一项与前一项的关系,分析得到,每一项的分子为前一项分子与分母的和,而分母为前一项的分子,所以利用循环,每次改变分子分母的值然后求和就可以了,而这里分子分母的改变都利用了一项的分子,所以需要一个临时变量保存上一项的分子。2.源程序:来看程序,原创 2014-03-04 11:13:19 · 2548 阅读 · 0 评论 -
C语言经典算法100例-027-用递归逆序输出字符
先来看题:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。1.分析,跟上一题相似,打印第5的字符前先递归打印第4个字符,直到第1个字符,然后从第1个字符依次打到第5个。2.源代码:#include #include #include void print(int);int main(){ printf("Input chars:\n"原创 2014-03-04 21:38:01 · 1436 阅读 · 0 评论 -
C语言经典算法100例-016-求最大公约数和最小公倍数
题目如下:输入两个正整数m 和n,求其最大公约数和最小公倍数。1.分析:利用辗转相除法计算最大公约数,再求最小公倍数。下面是辗转相除法的理论:辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。例如,252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5);因为252 / 105 = 2余42,所以105原创 2014-03-03 10:32:29 · 1155 阅读 · 0 评论 -
C语言经典算法100例-015-条件运算符的使用
题目很简单,主要是练习条件运算法的简易写法,熟悉此方法可以让程序更加简洁易读。利用条件运算符的嵌套来完成此题:学习成绩>=90 分的同学用A 表示,60-89 分之间的用B 表示,60 分以下的用C 表示。1.分析,条件运算法简易写法为 (a>b)?a:b表示:若a>b,则表达式值为a,否则为b.2.源代码:#include #include int main(){原创 2014-03-03 08:41:48 · 1398 阅读 · 0 评论 -
C语言经典算法100例-011-兔子问题
问题如下:古典问题:有一对兔子,从出生后第3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.分析:问题的关键是建立数学模型,而每三个月生一对兔子可以转化为斐波那契问题。2.源代码:#include #include //兔子问题int main(){ long f1,f2; int i原创 2014-02-28 17:18:52 · 7000 阅读 · 1 评论 -
C语言经典算法100例-009-输出国际象棋棋盘
题目如下:输出国际象棋棋盘:8*8黑白格相间。1.分析:双重循环,按条件选择输出黑或者白。但这个条件怎么确定呢,可以看到,奇数列中所有奇数行为白色,偶数列中所有偶数行为白色,然而我们在程序中并不会根据每行的奇偶再去判断列的奇偶,而巧妙的将条件转化为:当行数与列数的和为偶数时,输出白色。2.程序如下:#include #include int main(){ int原创 2014-02-26 23:03:01 · 4299 阅读 · 1 评论 -
C语言经典算法100例-008-输出乘法口诀
这个没什么说的,很简单。源代码:#include #include int main(){ int i,j; for(i=1;i<10;i++) { for(j=1;j<=i;j++) { printf("%d*%d=%-3d",j,i,i*j); } printf("\原创 2014-02-26 16:56:04 · 887 阅读 · 0 评论 -
C语言经典算法100例-005-三个数,从小到大输出
题目如下:输入三个整数x,y,z,请把这三个数由小到大输出。1.分析:我原本的思路是将这三个数放入数组,然后用排序法排序,然而这里只有三个数没那么麻烦,思想同冒泡排序一样,每次循环选一个最大的或最小的出来即可。总得来说,非常简单,别想复杂了,各位见笑了。2.源代码:#include #include //我原本的思想是把这三个数放在一个数组中进行排序,然后输出,其实根本没有原创 2014-02-26 15:32:22 · 1490 阅读 · 0 评论 -
C语言经典算法100例-004-年月日判断是年份的第几天
题目如下:输入某年某月某日,判断这一天是这一年的第几天?1.分析问题:基本算法为之前月份的天数和加当前天,例如3月8日,需要用1,2月份的总天数加8。 但要考虑特殊情况,如果是闰年,那么2月不再是28天,而是29天,此时如果月份大于2,那么之前月份的天数和则应加1才对。2.源代码:#include #include int main(){ int year,mon原创 2014-02-26 11:14:20 · 2184 阅读 · 0 评论 -
C语言经典算法100例-003-加100是完全平方数
题目如下:一个整数,它加上100 后是一个完全平方数,再加上168 又是一个完全平方数,请问该数是多少?1.分析:在10万之内,找出满足条件的数字。满足完全平方数的条件:一个数,他的根的平方是他本身,则他就是完全平方数,沿着这个思路编码即可。2.代码:#include #include #include int main(){ long int i,x,y;原创 2014-02-26 10:02:07 · 1247 阅读 · 0 评论 -
C语言经典算法100例-017-统计输入的字符数
题目如下:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。1.分析:字符和整型可以隐式互转,字符即整数。输出结束的标示符为‘\n’。2.来看源程序:#include #include int main(){ int letters=0,spaces=0,numbers=0,others=0; char c; printf("原创 2014-03-03 11:42:15 · 1284 阅读 · 0 评论 -
C语言经典算法100例-014-分解质因数
题目如下:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 1.分析:思路是这样的,从1到N先找出最小的质因数,如果等于本身,那么说明只有一个质因数,如果不是,那么将该质因数打印出来,并将N/该质因数作为新的N值进行运算。2.源代码:#include #include //将一个正整数分解质因数int main(){ int i,n;原创 2014-03-02 22:54:38 · 10219 阅读 · 2 评论 -
C语言经典算法100例-025-求1+2!+3!+...+20!的和
题目如标题所说,大家一定觉得很简单,确实,求阶乘谁不会啊,完事做个求和不就成了么,我也是这么想的,于是想都不想开始编代码:#include #include //求1到20的阶乘的和int main(){ int i,j; long int sum,n; sum=0; for(i=1;i<=20;i++) { n=1;原创 2014-03-04 11:34:35 · 4109 阅读 · 0 评论 -
C语言经典算法100例-023-打印菱形
来看题目:打印如下的菱形。1.分析,常见的打印问题都是通过i,j来控制打印的位置进行打印,这道题也不例外。将菱形分为上下两部分,第一部分为1到4行,第二部分为5到7行,第一部分通过分析我们得到这样的规律,若i在区间[0,4)内循环,那么打印空格的位置在[0,3-i),而打印*的位置是[3-i,i+4),同理得到第二部分的规律吧,i在区间[0,3)内循环时,空格位置为[0,i+1),而*位置在区原创 2014-03-04 10:11:28 · 1232 阅读 · 0 评论 -
C语言经典算法100例-022-乒乓球比赛名单问题
我们来看题:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 1.分析,如果没有任何规矩可言,那么a可以跟x,y,z中的任何一个比,而b,c同样是,但是规矩是有的,那就是a,b,c不能和相同的对手比赛。所以,方法就是,三层循环,然后用条件语句层层筛选,打原创 2014-03-03 21:41:11 · 5727 阅读 · 1 评论 -
C语言经典算法100例-020-小球自由下落问题
我们来看题:一球从100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10 次落地时,共经过多少米?第10 次反弹多高?1。分析,假设s代表路程,h代表弹起的高度,那么我们先做出数学模型:s1=100;h1=s1/2;先看s2和s3的值如何求s2=s1+2*h1;s3=s2+2*h2; 其中h2=h1/2,所以有s10=s9+2*h9。按照这个思路原创 2014-03-03 17:36:24 · 2435 阅读 · 0 评论 -
C语言经典算法100例-019-求完数
我们来看题:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000 以内的所有完数。1.分析:这里的因子指除了他本身所有可以被它整除的整数,包括1在内。这样的话程序就比较简单了。2.来看代码:#include #include //求1000内的完数int main(){ int sum; int i,j; f原创 2014-03-03 16:40:54 · 1277 阅读 · 0 评论 -
C语言经典算法100例-018-求s=a+aa+aaa+aaaa+aa...a 的值
题目如下:求s=a+aa+aaa+aaaa+aa...a 的值,其中a 是一个数字。例如2+22+222+2222+22222(此时共有5 个数相加),用户可以输入a和项数n。这道题还是有点小难度的,关键在于计算每项的和。其实可以这样算,先看位数,循环i,然后依次累加a*10的i幂,但介于c语言没有现成的幂函数,所以必须要用别的方法,具体思路是利用这样一个规律:a1=a;a2=原创 2014-03-03 15:58:46 · 9515 阅读 · 0 评论 -
C语言经典算法100例-013-求水仙花数
题目如下:打印出所有的水仙花数。所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 1.分析,判断水仙花数关键在于把该数的各个位求出来,然后算出立方和与自己比较。2.程序如下:注意求各个位立方和的技巧。#include #include //找出所有的水仙花数int m原创 2014-03-02 21:50:23 · 3302 阅读 · 1 评论 -
C语言经典算法100例-021-猴子吃桃问题
有前面几道题的基础,这道题还是比较简单的,我们来看问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。1.分析,我们先来看看这个问题的数学模型:设n为第一天摘的桃子数。那么根据已知条件有:s1=n/2-1;s2原创 2014-03-03 20:25:11 · 1416 阅读 · 3 评论 -
C语言经典算法100例-073-链表逆序插入节点
思路如下:先建立一个尾节点,然后从每次插入时新建一个新节点,然后把yuanjiedian原创 2014-05-08 14:42:07 · 854 阅读 · 0 评论