必须要掌握的算法这些算法是要求大家必须掌握的,请大家抓紧时间练习,确保都能编程实现,这可是必考内容哦!1.顺序结构(1)%和/运算结合的简单问题求解(2)简单数学公式求解,如求圆面积,周长,三角形面积等(3)鸡兔同笼(4)随机数输出(5)整数分离(个位、十位、百位等分离)、小数分离2.选择结构(1)分段函数(2)奇数、偶数判断(3)闰年判断(输出某年某月天数)(4)逻辑问题(5)成绩、周几、纳税等多分支结构(switch、if-elseif嵌套)(6)随机数判断大小(7)鸡兔同笼3.循环结构(1)for、while和do-while循环使用及相互嵌套(2)阶乘、最大公约数和最小公倍数(溢出时怎么解决)(3)图形输出(需要自行寻找规律)(4)斐波那契序列(5)迭代问题求解(6)不定方程问题求解,如百钱买百鸡等(7)特殊的数:素数、完数、水仙花数(阿姆斯特朗数)、亲密数、对偶数、回文数、完全平方数、自守数、e、级数等4.函数(1)函数的定义、调用、返回值(2)递归函数,如汉诺塔、斐波那契序列,以及自行取出递归公式的问题(3)static变量、全局变量和局部变量的使用(4)能够提炼出自己常用的函数5.数组(1)一维数组求最大(或小)值及所在位置,求和,平均值(2)一维数组排序(冒泡法,选择法,插入法)(3)一维数组元素顺序查找、折半查找(4)矩阵(二维数组)求主(或副)对角线之和、周边元素之和,下(或上)半三角乘(或除)某个值,转置,矩阵相加、相乘,二维数组按列(或行)优先顺序存储到一维数组、矩阵最大(或小)数所在位置(5)斐波那契序列(6)杨辉三角(一维数组实现,二维数组实现)(7)整数的分离和重新组数(个位、十位和百位等循环分离,以及按一定的条件从高位到低位或从低位到高位重新组数)6.指针(1)指针变量作为函数参数传递(2)数组作为函数参数传递(3)内存动态分配(4)掌握快速排序的原理,会用qsort快速排序函数7.字符串(1)常见字符串处理函数的具体实现:strlen、strcpy、strcmp、strcat、strncpy、strncmp、strncat、strrev、strstr(2)字符串求子串,查找子串位置、次数(3)删除指定字符(或后续字符、重复字符)(4)在指定位置插入字符串(5)单词分割,排序(6)回文字符串,整型与字符串相互转换(7)精度(大数加减、阶乘)8.结构体(1)结构体求最高(或低)值,求平均值(2)结构体排序(3)结构体作为函数参数的使用(结构体变量作参数,结构体指针变量作参数)(4)链表的创建、删除、插入、查找、输出9.文件(1)fscanf/fprintf,fgets/fputs(2)fread/fwrite(3)与文件读取、存储相关的实际问题求解o【研究创新型】8.1谁能出线o背景:o电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。o输入:按顺序给出一个小组10个人的最后得分(int)。o输出:能够出线的学生序号(0~9)。o#includestdio.hovoidmain()o{ointa[10],i,max=0;ofor(i=0;i10;i++)o{scanf(%d,&a[i]);oif(maxa[i])omax=a[i];}ofor(i=0;i10;i++)oif(a[i]==max)oprintf(%d\n,i);o}o【设计型】8.2统计素数的个数o求出2到m之间(含m,m=1000)所有素数并放在数组a中。o输入:正整数mo输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制)o如:o输入:10o输出:2357o4#includestdio.hintmain(void){inta,n,m,i,k=0,q=0;scanf(%d,&m);for(n=2;n=m;n++){for(i=1,q=0;i=n;i++){a=n%i;if(a==0)q++;}if(q==2){k++;printf(%4d,n);}}printf(\n);printf(%d\n,k);}【设计型】8.3数组逆序输出问题描述从键盘上输入一个数组(10个元素),将原数组逆序重新排列后输出。要求输出每个元素时以一个空格隔开。提示:用第一个与最后一个交换。#includestdio.hintmain(void){inta[10],i;for(i=0;i10;i++)scanf(%d,&a[i]);for(i=0;i10;i++)printf(%d,a[9-i]);printf(\n);}【设计型】8.4在屏幕上显示杨辉三角形杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,而贾宪三角的发现就是十分精彩的一页。杨辉三角有如下性质:1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。2、第n行的数字个数为n个。3、每个数字等于上一行的左右两个数字之和。编写程序,输入正数n,将所有数据存储到二维数组中,并在屏幕上显示对应的杨辉三角形(注意数据之间的空格)。例如:n=5图形如下:11112113311464115101051#includestdio.hintmain(){inti,j,n;inta[10][10];scanf(%d,&n);n=n+1;for(i=0;in;i++){a[i][0]=1;a[i][i]=1;}for(i=2;in;i++){for(j=1;ji;j++){a[i][j]=a[i-1][j-1]+a[i-1][j];}}for(i=0;in;i++){for(j=0;j=i;j++){printf(%3d,a[i][j]);}printf(\n);}return0;}【设计型】8.5求最大值问题描述要求从键盘输入10个整型数据,找出其中的最大值并显示出来。输入范例3054-71027327671015002输出范例32767提示先假定第一个元素时最大值,然后和其他的元素一个一个的进行比较,直到找到最大值。#includestdio.hintmain(void){inta[10],i,m=0;for(i=0;i10;i++)scanf(%d,&a[i]);for(i=0;i10;i++){if(ma[i])m=a[i];}printf(%d\n,m);}【设计型】8.6二维数组问题描述:程序定义了4×4的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素中的值乘以n。例如:数组中的值为假设n为10,则输出结果如下:(输出的数按照4位宽度来输出,即%4d)#includestdio.hintmain(void){inta[4][4],i,j,n;for(i=0;i4;i++){for(j=0;j4;j++)scanf(%d,&a[i][j]);}scanf(%d,&n);for(i=0;i4;i++){for(j=0;j=i;j++)a[i][j]=a[i][j]*n;}for(i=0;i4;i++){for(j=0;j4;j++)if(j==3)printf(%4d\n,a[i][j]);elseprintf(%4d,a[i][j]);}}【设计型】8.11存储并输出一个矩阵编程,输入n,存储并输出如下例(n=5)所示的图形。1234511234111231111211111#includestdio.hvoidmain(){inta[10][10],i,j,n;scanf(%d,&n);for(i=0;in;i++){for(j=0;ji+1;j++)printf(1);a[i][i+1]=2;for(j=i+1;jn;j++)printf(%d,2+j-i-1);printf(\n);}}【设计型】8.7给数组中的元素按顺序编号对数组a[10]中的十个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组a中元素的顺序,且相同的整数要具有相同的编号。例如数组是:A=(5,3,4,7,3,5,6,8,9,10)则输出为:(4,1,3,7,1,4,6,8,9,10)#includestdio.hintmain(){inta[10],b[10],i,j,n=1;for(i=0;i10;i++){scanf(%d,&a[i]);}for(i=0;i10;i++){for(j=0;j10;j++){if(a[i]a[j]){n++;}}b[i]=n;n=1;}for(i=0;i10;i++){printf(%3d,b[i]);}printf(\n);return0;}【设计型】8.8求各位数字组成的最大数任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入1593,则输出为9531。输入:自然数n输出:各位数字组成的最大数#includestdio.hintmain(){inta[20],num,i,j,k,b,t;scanf(%d,&num);for(i=0;;i++){k=num%10;num=num/10;a[i]=k;if(num==0)break;}for(b=0;bi;b++){for(j=0;ji-b;j++){if(a[j]a[j+1]){t=a[j+1];a[j+1]=a[j];a[j]=t;}}}for(j=i;j=0;j--)printf(%d,a[j]);printf(\n);return0;}【设计型】8.9冒泡法排序冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。编写程序,对输入的十个数按照从小到大排序#includestdio.hvoidmain(){inti,j,n;inta[10];for(i=0;i10;i++)scanf(%d,&a[i]);for(i=0;i10;i++)for(j=9;ji;j--)if(a[j-1]a[j]){n=a[j-1];a[j-1]=a[j];a[j]=n;}for(i=0;i10;i++)printf(%d,a[i]);printf(\n);}【设计型】8.10插入法排序如果一个数组中保存的元素是有序的(由小到大),向这个数组中插入一个数,使得插入后的数组元素依然保持有序。定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。#includestdio.hvoidmain(){inta[11];intm,n,j,i;for(i=0;i10;i++)scanf(%d,&a[i]);scanf(%d,&m);a[10]=m;for(i=0;i11;i++)for(j=10;ji;j--)if(a[j-1]a[j]){n=a[j-1];a[j-1]=a[j];a[j]=n;}printf(%d,a[0]);for(i=1;i11;i++)printf(%d,a[i]);pr