C语言模板程序第1页共28页C语言模板程序1求两个数最大公约数方法一:辗转相除法思路:两个数,用较大的数除以较小的数,所得余数与较小的数记为新的两个数,再重复之前的过程,直到余数为0,这时较大的数就是最大公约数。完整程序#includestdio.hintmain(){intm,n,r;scanf(%d,%d,&m,&n);do{r=m%n;m=n;n=r;}while(n);printf(greatestcommondivisoris%d\n,m);return0;}封装函数intgcd(intm,intn){do{r=m%n;m=n;n=r;}while(n);returnm;}调用函数#includestdio.hintmain(){intm,n,r;intgcd(intm,intn);scanf(%d,%d,&m,&n);gcd(intm,intn);printf(greatestcommondivisoris%d\n,m);return0;}C语言模板程序第2页共28页方法二:更相减损法思路:两个数,用较大的数减去较小的数,所得差与较小的数记为新的两个数,再重复之前的过程,直到两个数相等,这时这两个数就是最大公约数。完整程序#includestdio.hintmain(){intm,n;scanf(%d,%d,&m,&n);while(m!=n){if(mn)m-=n;elsen-=m;}printf(greatestcommondivisoris%d\n,m);return0;}封装函数intgcd(intm,intn){while(m!=n){if(mn)m-=n;elsen-=m;}returnm;}调用函数#includestdio.hintmain(){intm,n,r;intgcd(intm,intn);scanf(%d,%d,&m,&n);printf(greatestcommondivisoris%d\n,gcd(m,n));return0;}2求两个数最小公倍数思路:两个数,从较大的数开始,依次找能同时整除这两个数的整数,这个整数就是这两个数的最小公倍数。完整程序C语言模板程序第3页共28页#includestdio.hintmain(){intm,n,i;scanf(%d,%d,&m,&n);for(i=(mn?m:n);;i++)if(i%m==0&&i%n==0){printf(leasecommonmultipleis%d,i);break;}return0;}封装函数intlcm(intm,intn){inti;for(i=(mn?m:n);;i++)if(i%m==0&&i%n==0)returni;}调用函数#includestdio.hintmain(){intm,n,i;intlcm(intm,intn);scanf(%d,%d,&m,&n);printf(leasecommonmultipleis%d,lcm(m,n));return0;}3判断素数思路:从2开始到所求整数的开方依次求余,如果有能整除所求整数的整数,则所求整数为合数,反之为素数。完整程序C语言模板程序第4页共28页#includestdio.h#includemath.hintmain(){intnum;inti,k,flag=1;scanf(%d,&num);k=sqrt(num);for(i=2;i=k;i++){if(num%i==0)printf(%disn'taprimenumber!,num);flag=0;}if(flag)printf(%disaprimenumber!,num);return0;}封装函数intsushu(intnum){inti,k;k=sqrt(num);for(i=2;i=k;i++){if(num%i==0)return0;}return1;}调用函数#includestdio.h#includemath.hintmain(){intnum;intsushu(intnum);scanf(%d,&num);if(sushu(num)==0)printf(%disn'taprimenumber!,num);elseprintf(%disaprimenumber!,num);return0;}4冒泡排序(升序)思路:N个数,每次比较相邻的两个数,如果前面的数大就相互交换,这样小的数就会像气泡一样往前冒。一趟排序完成后最后一个数最大。共进行N-1趟排序。完整程序C语言模板程序第5页共28页#includestdio.h#defineN10intmain(){intnum[N];inti,j;intt;for(i=0;iN;i++)scanf(%d,&num[i]);for(i=0;iN-1;i++)for(j=0;jN-1-i;j++)if(num[j]num[j+1]){t=num[j];num[j]=num[j+1];num[j+1]=t;}for(i=0;iN;i++)printf(%d,num[i]);return0;}封装函数voidmaopao(intnum[N]){inti,j;intt;for(i=0;iN-1;i++)for(j=0;jN-1-i;j++)if(num[j]num[j+1]){t=num[j];num[j]=num[j+1];num[j+1]=t;}}调用函数#includestdio.h#defineN10intmain(){intnum[N];inti,j;intt;voidmaopao(intnum[N]);for(i=0;iN;i++)scanf(%d,&num[i]);maopao(num);for(i=0;iN;i++)printf(%d,num[i]);return0;}5选择排序(升序)C语言模板程序第6页共28页思路:N个数,每次从剩下的数中选择最小的数(记住它的下标)与这组数中最前面的数交换,数的个数依次减少。一趟排序完成后最前面的数最小。共进行N-1趟排序。完整程序#includestdio.h#defineN10intmain(){intnum[N];inti,j,k;intt;for(i=0;iN;i++)scanf(%d,&num[i]);for(i=0;iN-1;i++){k=i;for(j=i+1;jN;j++)if(num[k]num[j])k=j;if(k!=i){t=num[k];num[k]=num[i];num[i]=t;}}for(i=0;iN;i++)printf(%d,num[i]);return0;}封装函数voidxuanze(intnum[N]){inti,j,k;intt;for(i=0;iN-1;i++){k=i;for(j=i+1;jN;j++)if(num[k]num[j])k=j;if(k!=i){t=num[k];num[k]=num[i];num[i]=t;}}}调用函数C语言模板程序第7页共28页#includestdio.h#defineN10intmain(){intnum[N];inti,j,k;intt;voidxuanze(intnum[N]);for(i=0;iN;i++)scanf(%d,&num[i]);xuanze(num);for(i=0;iN;i++)printf(%d,num[i]);return0;}6折半查找(升序)思路:N个按照从小到大排列好顺序的数,再从中寻找一个数,不是依次扫描每个数,而是先把这组数的中间元素拿出来与所找的数比较,如果中间数小于所找的数,则在这组数的后半段寻找;如果中间数大于所找的数,则在这组数的前半段寻找。找到了,输出这个数的下标,如果找不到,输出Notfound!。完整程序#includestdio.h#defineN10intmain(){inta[N],low=0,high=N-1,mid,i,key,flag=0;for(i=0;iN;i++)scanf(%d,&a[i]);scanf(%d,&key);while(low=high){mid=(low+high)/2;if(a[mid]==key){printf(Found!Theindexif%d,mid);flag=1;break;}elseif(a[mid]key)high=mid-1;elselow=mid+1;}if(!flag)printf(Notfound!);return0;C语言模板程序第8页共28页}封装函数intzheban(inta[N],key){intlow=0,high=N-1,mid;while(low=high){mid=(low+high)/2;if(a[mid]==key){printf(Found!Theindexif%d,mid);returnmid;}elseif(a[mid]key)high=mid-1;elselow=mid+1;}printf(Notfound!);return-1;}调用函数#includestdio.h#defineN10intmain(){inta[N],low=0,high=N-1,mid,i,key,flag=0;intzheban(inta[N],key);for(i=0;iN;i++)scanf(%d,&a[i]);scanf(%d,&key);zheban(a,key);return0;}7找最大数(1)两个数找最大思路:比较两个数,输出较大者。完整程序#includestdio.hintmain(){intx,y,z;scanf(%d,%d,&x,&y);z=xy?x:y;printf(%d,z);return0;C语言模板程序第9页共28页}封装函数intmax(intx,inty){intz;z=xy?x:y;returnz;}调用函数#includestdio.hintmain(){intx,y,z;intmax(intx,inty);scanf(%d,%d,&x,&y);printf(%d,max(x,y));return0;}(2)数组中找最大①一维数组思路:让一个变量等于数组中第一个元素,从第二数开始依次进行比较,碰到更大的数则更改变量的值,直到全部比较完毕。完整程序#includestdio.h#defineN10intmain(){intnum[N];inti,max;for(i=0;iN;i++)scanf(%d,&num[i]);max=num[0];for(i=1;iN;i++)if(maxnum[i])max=num[i];printf(%d,&max);return0;}封装函数C语言模板程序第10页共28页intmax(intnum[N]){intmax=num[0];inti;for(i=1;iN;i++)if(maxnum[i])max=num[i];returnmax;}调用函数#includestdio.h#defineN10intmain(){intnum[N];inti;intmax(intnum[N]);for(i=0;iN;i++)scanf(%d,&num[i]);printf(%d,max(num));return0;}②二维数组思路:让一个变量等于数组中第一个元素,从第一个数开始依次进行比较,碰到更大的数则更改变量的值,直到全部比较完毕。完整程序#includestdio.h#defineN10#defineM5intmain(){intnum[N][M];inti,j;intmax;for(i=0;iN;i++)for(j=0;jM;j++)scanf(%d,&num[i][j]);max=num[0][0];for(i=0;iN;i++)for(j