课件封面实验教学标题输入、输出和选择结构程序6常用算法程序常用算法程序【18.】编写程序求两个整数的最大公约数和最小公倍数。#includestdio.hvoidmain(){intm,n,t;printf(输入两个数(用空格或者回车间隔)\n);scanf(%d%d,&m,&n);//设t为m,n的最小数if(mn)t=n;elset=m;while(t0){if(m%t==0&&n%t==0)break;//每次检查m和n能否整除t如果是则找到最大公约数t--;}printf(%d和%d的最大公约数为%d\n,m,n,t);//设t为m,n的最大数if(mn)t=m;elset=n;while(1){if(t%m==0&&t%n==0)break;//每次检查t能否整除m和n如果是则找到最小公倍数t++;}printf(%d和%d的最小公倍数为%d\n,m,n,t);}6常用算法程序常用算法程序【19.】编写一个函数IsP(intn),函数的功能是检查n是否为素数,如果是函数返回“真”,否则返回“假”。在主函数中调用该函数,打印100~1000之间的全部素数。#includestdio.hintIsP(intn)//函数的功能是检查n是否为素数{inti;//分析:从2到n-1逐一检查能否整除n,只要有一个整除则肯定不是素数,所有均不能整除则肯定是素数for(i=2;in;i++)if(n%i==0)return0;//只要有一个整除则不是素数return1;}voidmain(){inti;//打印100~1000之间的全部素数for(i=100;i1000;i++)if(IsP(i))printf(%d\n,i);}6常用算法程序常用算法程序【20.】用筛选法求100之内的素数。#includestdio.hvoidcal_prime(intA[],intn)//使用筛选法计算素数{inti,j;for(i=2;i=n;i++)for(j=2;i*j=n;j++){//如果该数尚未筛选过,则标记该数选中if(A[i*j]==1)A[i*j]=0;else//如果已经筛选过,则跳出改次筛选,进入下次筛选continue;}}voidmain(){intA[100+1];//下标需要从2到100,因此数组长度为100+1inti;//将全部数组元素设为1表示未被筛出for(i=2;i=100;i++)A[i]=1;cal_prime(A,100);for(i=2;i=100;i++)if(A[i]==1)//未被筛出的元素必定是素数printf(%d\n,i);}6常用算法程序常用算法程序【21.】用二分查找法在已排序好的数组中查找输入的数。如果找到了输出该数的下标,否则输出“未找到”。(数组为:1,2,13,24,25,44,57,63,66,78,90,100)。#includestdio.h#includemath.hvoidmain(){inta[10]={1,3,5,7,9,11,13,15,17,19};inth;//查找区域开始位置intt;//查找区域结束位置intm;//查找区域中间位置intsign=0;//为0表示未找到,为表示找到intf;//要查找的数据printf(请输入要查找的数据:);scanf(%d,&f);h=0,t=9;//一开始将整个数组设为查找区域if(!(fa[0]||fa[9])){//如果要查找的数据比开始元素小或者比结束元素大,则肯定不在查找区域中while(!sign&&h=t){m=(h+t)/2;//计算当前查找区域的中间位置if(f==a[m])//如果要找的数据与中间位置的数据相等表示找到了{printf(%d找到了,它是:A[%d]\n,f,m);sign=1;}elseif(fa[m])//否则如果要找的数据比中间位置的数据大h=m+1;//则下一次的查找区域在右半部分elset=m-1;//否则下一次的查找区域在左半部分}}if(sign==0)printf(在数组中%d没有找到\n,f);}6常用算法程序常用算法程序【22.】编写一个函数sort(intA[],intn),函数的功能是用冒泡法对数组进行由大到小的排序,其中n为数组A的元素个数。在主函数中输入10个数据,调用函数排序,然后输出排序好的10个数据。(输入数据:6,8,9,1,2,5,4,7,3,18)#includestdio.hvoidsort(intA[],intn){inti,j;intt;//改进后的冒泡法排序for(i=0;in-1;i++)for(j=i+1;jn;j++)if(A[i]A[j])//为由大到小,为由小到大,A[i]表示前面的数,A[j]表示后面的数{t=A[i],A[i]=A[j],A[j]=t;}}voidmain(){intA[10];inti;printf(连续输入10个数据(用空格或者TAB或者回车间隔)\n);for(i=0;i10;i++)scanf(%d,&A[i]);sort(A,10);//输出排序后的数组for(i=0;i10;i++)printf(%d,A[i]);}6常用算法程序常用算法程序【23.】编写一个函数sort(intA[],intn),函数的功能是用选择法对数组进行由小到大的排序,其中n为数组A的元素个数。在主函数中输入10个数据,调用函数排序,然后输出排序好的10个数据。(输入数据:6,8,9,1,2,5,4,7,3,18)#includestdio.hvoidsort(intA[],intn){inti,j,k;intt;//改进后的选择法排序for(i=0;in-1;i++){k=i;for(j=i+1;jn;j++)if(A[k]A[j])k=j;//为由大到小,为由小到大,A[k]表示前面的数,A[j]表示后面的数if(k!=i){t=A[i],A[i]=A[k],A[k]=t;}}}voidmain(){intA[10];inti;printf(连续输入10个数据(用空格或者TAB或者回车间隔)\n);for(i=0;i10;i++)scanf(%d,&A[i]);sort(A,10);//输出排序后的数组for(i=0;i10;i++)printf(%d,A[i]);}