C语言常见算法.pptx





《C语言常见算法.pptx》由会员分享,可在线阅读,更多相关《C语言常见算法.pptx(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、(2)随机数随机数 函数函数random(int num)用于产生用于产生0,num)区区间的一个整数。间的一个整数。其包含在其包含在“stdlib.h”头文件中头文件中 为了使每一次运行都产生一组新的随机数,为了使每一次运行都产生一组新的随机数,可以使用可以使用randomize()函数函数是每次均产生不同的是每次均产生不同的随机数。其包含在头文件随机数。其包含在头文件“time.h”中中(3)最大值与最小值最大值与最小值 我们需要我们需要将最大值(或最小值)保存在一将最大值(或最小值)保存在一个变量中个变量中(假设设变量名为(假设设变量名为max和和min),变量的变量的初值初值我们一般设
2、为我们一般设为数列中的第一个值数列中的第一个值。第1页/共41页例例2:产生:产生20个个50到到200之间的随机整数,并求之间的随机整数,并求出其中的素数、最大值和最小值。出其中的素数、最大值和最小值。#include stdlib.h#include time.hmain()int a20,b20,max,min,k,i,j=0;randomize();for(i=0;i20;i+)ai=random(151)+50;产生20个50,200区间内的随机数第2页/共41页 for(i=0;i20;i+)for(k=2;kai;k+)if(ai%k=0)break;if(k=ai)bj=ai;
3、j+;for(i=0;ij;i+)printf(%4d,bi);printf(n);从a数组中找出其中的素数放在b数组中输出b数组中的各个元素 max=a0;min=a0;for(i=1;imax)max=ai;if(aimin)min=ai;printf(max=%4d,min=%4dn,max,min);求出a数组中的最大值与最小值第3页/共41页二、求累加和的算法1 循环条件 次数控制(加多少项n,20,100)用误差控制(直到某一项小于或大于一个数)使用终止标记2 循环体求和求每一项:从前一项求出后一项、单独求每一项为下一项作准备3 循环初值:设为0、设为第一项 注意双重循环设初值的位
4、置第4页/共41页4-16 有一分数序列 的前20项之和main()main()int i;int i;float float f1=1,f2=1,f3,s=0;f1=1,f2=1,f3,s=0;for(for(i=1;i=20;i+i=1;i=1e-5)x0=x;f=(2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x=x0-f/f1;printf(%10.8f n,x);第8页/共41页四、数字分离四、数字分离 有些题中经常有些题中经常要求将一个数中的每一位要求将一个数中的每一位数字或者其中的某些位数字输出,数字或者其中的某些位数字输出,就需要使就需要使用到数字分离
5、技术。用到数字分离技术。如在如在求解同构数等问题求解同构数等问题时都需要使用到时都需要使用到数字分离技术数字分离技术第9页/共41页例:给出一个不多于例:给出一个不多于4位的正整数,要求:求出位的正整数,要求:求出它是几位数,并且按逆序打印出各位数字它是几位数,并且按逆序打印出各位数字 main()int i,j,k=0;scanf(%d,&i);while(i!=0)printf(%4d,i%10);i=i/10;k+;printf(nk=%dn,k);第10页/共41页四、以特殊字符做为终止标志四、以特殊字符做为终止标志例:统计从键盘输入字符的个数,以例:统计从键盘输入字符的个数,以#结束
6、。结束。#include stdio.hmain()char c;int i;c=getchar();for(i=0;c!=#;i+)c=getchar();printf(the number is:%d,i);第11页/共41页五、排序问题五、排序问题常用的排序方法有四种:常用的排序方法有四种:顺序交换法、选择法、冒泡法、插入法顺序交换法、选择法、冒泡法、插入法a.顺序排序法顺序排序法(n=10)指导思想指导思想:先设定先设定a0中存放最小值,中存放最小值,然后用然后用a0分别与其后的每一个数分别与其后的每一个数aj(j=1.9)进行比)进行比较,在比较过程中较,在比较过程中如果发现有比如果
7、发现有比a0小的数,小的数,就就将将a0与与aj互换,互换,一遍扫描之后,一遍扫描之后,a0就是就是10个数中最小的数,重复此算法,只是每次比较个数中最小的数,重复此算法,只是每次比较时,进行比较的数的范围向后移一个位置。时,进行比较的数的范围向后移一个位置。反反复执行复执行(n-1)次次上述操作上述操作第12页/共41页例例1:将数组:将数组a中的中的10个数按照由大到小的个数按照由大到小的顺序排好顺序排好(使用顺序交换法使用顺序交换法)#define N 10main()int aN,i,j,k,t;for(i=0;iN;i+)scanf(%d,&ai);for(i=0;iN-1;i+)f
8、or(j=i+1;jN;j+)if(ajai)t=aj;aj=ai;ai=t;for(i=0;iN;i+)printf(%5d,ai);第13页/共41页b.选择排序法选择排序法 指导思想:指导思想:不急于交换,不急于交换,先找出先找出a0到到a9中的最小数所在的位置中的最小数所在的位置k,一遍扫描完之后,一遍扫描完之后,在把在把a0与与ak进行交换,重复次算法进行交换,重复次算法9次。次。例例2:将数组:将数组a中的中的10个数按照由大到小的个数按照由大到小的顺序排好顺序排好(使用选择法使用选择法)第14页/共41页#define N 10main()int aN,i,j,k,t;for(i
9、=0;iN;i+)scanf(%d,&ai);for(i=0;iN-1;i+)k=i;for(j=i+1;jN;j+)if(ajak)k=j;t=ai;ai=ak;ak=t;for(i=0;iN;i+)printf(%5d,ai);第15页/共41页c.冒泡法冒泡法指导思想:指导思想:是是将相邻的两个数进行比较将相邻的两个数进行比较,若前,若前一个数比后一个数大,在交换两元素的内容,一个数比后一个数大,在交换两元素的内容,否则不交换。从而把最大的数放在最后位置。否则不交换。从而把最大的数放在最后位置。第16页/共41页#define N 10main()int aN,i,j,k,t;for(i
10、=0;iN;i+)scanf(%d,&ai);for(i=0;iN-1;i+)for(j=0;jN-i-1;j+)if(aj+1aj)t=aj;aj=aj+1;aj+1=t;for(i=0;iN;i+)printf(%5d,ai);第17页/共41页例:有例:有N个数已按由小到大的顺序排好,个数已按由小到大的顺序排好,要求输入一个数,把它插入到原有序列要求输入一个数,把它插入到原有序列中,而且仍然保持有序。中,而且仍然保持有序。输入数据时,使其数据排列仍然有序输入数据时,使其数据排列仍然有序解题思想:解题思想:先找到待插入的位置,然后将从先找到待插入的位置,然后将从该位置起到数组的最后位置的所
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 常见 算法

限制150内