《C语言复习PPT IE06-常用算法程序.pptx》由会员分享,可在线阅读,更多相关《C语言复习PPT IE06-常用算法程序.pptx(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课件封面实验教学标题输入、输出和选择结构程序输入、输出和选择结构程序6 常用算法程序常用算法程序常用算法程序常用算法程序【18】编写程序求两个整数的最大公约数和最小公倍数。#include void main()int m,n,t;printf(输入两个数(用空格或者回车间隔)输入两个数(用空格或者回车间隔)n);scanf(%d%d,&m,&n);/设设t为为m,n的最小数的最小数if(mn)t=n;else t=m;while(t0)if(m%t=0&n%t=0)break;/每次检查每次检查m和和n能否整除能否整除t 如果是则找到最大公约数如果是则找到最大公约数t-;printf(%d和
2、和%d的最大公约数为的最大公约数为%dn,m,n,t);/设设t为为m,n的最大数的最大数if(mn)t=m;else t=n;while(1)if(t%m=0&t%n=0)break;/每次检查每次检查t能否整除能否整除m和和n 如果是则找到最小公倍数如果是则找到最小公倍数t+;printf(%d和和%d的最小公倍数为的最小公倍数为%dn,m,n,t);6 常用算法程序常用算法程序常用算法程序常用算法程序【19】编写一个函数IsP(int n),函数的功能是检查n是否为素数,如果是函数返回“真”,否则返回“假”。在主函数中调用该函数,打印1001000之间的全部素数。#include int
3、 IsP(int n)/函数的功能是检查函数的功能是检查n是否为素数是否为素数int i;/分析:从分析:从2到到n-1逐一检查能否整除逐一检查能否整除n,只要有一个整,只要有一个整除则肯定不是素数,所有均不能整除则肯定是素数除则肯定不是素数,所有均不能整除则肯定是素数for(i=2;in;i+)if(n%i=0)return 0;/只要有一个整除则不是素数只要有一个整除则不是素数return 1;void main()int i;/打印打印1001000之间的全部素数之间的全部素数for(i=100;i1000;i+)if(IsP(i)printf(%dn,i);6 常用算法程序常用算法程序
4、常用算法程序常用算法程序【20】用筛选法求100之内的素数。#include void cal_prime(int A,int n)/使用筛选法计算素数使用筛选法计算素数int i,j;for(i=2;i=n;i+)for(j=2;i*j=n;j+)/如果该数尚未筛选过如果该数尚未筛选过,则标记该数选中则标记该数选中 if(Ai*j=1)Ai*j=0;else /如果已经筛选过如果已经筛选过,则跳出改次筛选则跳出改次筛选,进入下次筛选进入下次筛选 continue;void main()int A100+1;/下标需要从下标需要从2到到100,因此数组长度为,因此数组长度为100+1int i
5、;/将全部数组元素设为将全部数组元素设为1表示未被筛出表示未被筛出for(i=2;i=100;i+)Ai=1;cal_prime(A,100);for(i=2;i=100;i+)if(Ai=1)/未被筛出的元素必定是素数未被筛出的元素必定是素数 printf(%dn,i);6 常用算法程序常用算法程序常用算法程序常用算法程序【21】用二分查找法在已排序好的数组中查找输入的数。如果找到了输出该数的下标,否则输出“未找到”。(数组为:1,2,13,24,25,44,57,63,66,78,90,100)。#include#include void main()int a10=1,3,5,7,9,1
6、1,13,15,17,19;int h;/查找区域开始位置查找区域开始位置int t;/查找区域结束位置查找区域结束位置int m;/查找区域中间位置查找区域中间位置int sign=0;/为为0表示未找到,为表示找到表示未找到,为表示找到int f;/要查找的数据要查找的数据printf(请输入要查找的数据:请输入要查找的数据:);scanf(%d,&f);h=0,t=9;/一开始将整个数组设为查找区域一开始将整个数组设为查找区域if(!(fa9)/如果要查找的数据比开始元素小或者比结束元素大,则肯定不在如果要查找的数据比开始元素小或者比结束元素大,则肯定不在查找区域中查找区域中while(
7、!sign&ham)/否则如果要找的数据比中间位置的数据大否则如果要找的数据比中间位置的数据大 h=m+1;/则下一次的查找区域在右半部分则下一次的查找区域在右半部分elset=m-1;/否则下一次的查找区域在左半部分否则下一次的查找区域在左半部分if(sign=0)printf(在数组中在数组中%d没有找到没有找到n,f);6 常用算法程序常用算法程序常用算法程序常用算法程序【22】编写一个函数sort(int A,int n),函数的功能是用冒泡法对数组进行由大到小的排序,其中n为数组A的元素个数。在主函数中输入10个数据,调用函数排序,然后输出排序好的10个数据。(输入数据:6,8,9,
8、1,2,5,4,7,3,18)#include void sort(int A,int n)int i,j;int t;/改进后的冒泡法排序改进后的冒泡法排序for(i=0;in-1;i+)for(j=i+1;jn;j+)if(AiAj)/为由小到大,为由小到大,Ai表示前面的数表示前面的数,Aj表示后面的数表示后面的数t=Ai,Ai=Aj,Aj=t;void main()int A10;int i;printf(连续输入连续输入10个数据(用空格或者个数据(用空格或者TAB或者回车间隔)或者回车间隔)n);for(i=0;i10;i+)scanf(%d,&Ai);sort(A,10);/输出
9、排序后的数组输出排序后的数组for(i=0;i10;i+)printf(%d,Ai);6 常用算法程序常用算法程序常用算法程序常用算法程序【23】编写一个函数sort(int A,int n),函数的功能是用选择法对数组进行由小到大的排序,其中n为数组A的元素个数。在主函数中输入10个数据,调用函数排序,然后输出排序好的10个数据。(输入数据:6,8,9,1,2,5,4,7,3,18)#include void sort(int A,int n)int i,j,k;int t;/改进后的选择法排序改进后的选择法排序for(i=0;in-1;i+)k=i;for(j=i+1;jAj)k=j;/为由小到大,为由小到大,Ak表示前面的数表示前面的数,Aj表示后面的数表示后面的数if(k!=i)t=Ai,Ai=Ak,Ak=t;void main()int A10;int i;printf(连续输入连续输入10个数据(用空格或者个数据(用空格或者TAB或者回车间隔)或者回车间隔)n);for(i=0;i10;i+)scanf(%d,&Ai);sort(A,10);/输出排序后的数组输出排序后的数组for(i=0;i10;i+)printf(%d,Ai);
限制150内