C语言常用算法总结12.docx
- 文档编号:23439062
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:17
- 大小:21.66KB
C语言常用算法总结12.docx
《C语言常用算法总结12.docx》由会员分享,可在线阅读,更多相关《C语言常用算法总结12.docx(17页珍藏版)》请在冰豆网上搜索。
C语言常用算法总结12
C语言常用算法归纳
编程题考查学生对一种C语言常用算法的设计能力,以下对二级C语言考试中常用算法进行分类解析。
1.计数、求和、求阶乘等算法。
这类问题使用循环实现,需注意根据问题确定循环变量的初值、终值及结束条件,以及用于表示计数、和、阶乘的变量的初值。
程序段一:
用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。
本题使用数组来处理,用数组a[100]存放产生的100个随机整数,数组x[11]存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数。
即个位是1的个数存放在x[1]中,个位是2的个数存放在x[2]中……个位是0的个数存放在x[10]中。
#include
voidmain()
{inta[101],x[11],i,p;
for(i=0;i<11;i++)
x[i]=0;
for(i=1;i<=100;i++)
{a[i]=rand()%100;
printf("%4d",a[i]);
if(i%10==0)printf("\n");
}
for(i=1;i<=100;i++)
{p=a[i]%10;
if(p==0)p=10;
x[p]=x[p]+1;
}
for(i=l;i<=10;i++)
{p=i;
if(i==10)p=0;
printf("%d,%d\n",p,x[i]);
}
printf("\n");
}
2.求两个整数的最大公约数、最小公倍数算法。
求最大公约数的算法思想:
(1)对于已知两数m,n,使得m>n;
(2)除以n得余数r;
(3)若r=0,则n为求得的最大公约数,算法结束,否则执行(4);
(4)m←n,n←r,再重复执行
(2)。
求最小公倍数的算法思想:
最小公倍数=两个整数之积/最大公约数。
例如,求m=14,n=6的最大公约数。
#include
voidmain()
{intnm,r,n,m,t;
printf("pleaseinputtwonumbers:
\n”);
scanf("%d,%d",&m,&n);
nm=n*m;
if(m {t=n;n=m;m=t;} r=m%n; while(r! =0) {m=n;n=r;r=m%n;} printf("最大公约数: %d\n",n); printf("最小公倍数: %d\n",nm/n); } 3.判断素数算法。 只能被1或本身整除的数称为素数,其基本思想是: 把m作为被除数,将2~m-1作为除数,如果都除不尽,m就是素数,否则就不是。 #include voidmain() {intm,i; printf("PleaseInputanumber: \n"); scanf("%d",&m); for(i=2;i if(m%i==0)break; if(i>=m) printf("该数是素数"); else printf("该数不是素数"); } 将其写成一个函数,若为素数返回1,不是则返回0。 intprime(m) {inti; for(i=2;i if(m%i==0)return0; return1; } 4.排序算法。 程序段一: 选择法排序(升序) 基本思想: (1)对有n个数的序列(存放在数组a[n]中),从中选出最小的数,与第1个数交 换位置; (2)除第1个数外,其余n-1个数中选最小的数,与第2个数交换位置; (3)依次类推,选择了n-1次后,这个数列已按升序排列。 #include voidmain() {inti,j,imin,s,a[10]; printf("\nInput10numbers: \n"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<9;i++) {imin=i; for(j=i+1;j<10;j++) if(a[imin]>a[j])imin=j; if(i! =imin) {s=a[i];a[i]=a[imin];a[imin]=s;} printf("%d\n",a[i]); } } 程序段二: 冒泡法排序(升序) 基本思想: 将相邻两个数比较,小的调到前头。 (1)有n个数(存放在数组a[n]中),第一趟将每相邻两个数比较,小的调到前头, 经n-1次两两相邻比较后,最大的数己“沉底”,放在最后一个位置,小数上升“浮起”; (2)第二趟对余下的n-1个数(最大的数己“沉底”)按上法比较,经n-2次两两相 邻比较后得次大的数; (3)依次类推,n个数共进行n-1趟比较,在第j趟中要进行n-j次两两比较。 #include voidmain() {inta[10]; inti,j,t; printf("Input10numbers\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(j=0;j<9;j++) for(i=0;i<9-j;i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf("thesortednumbers\n"); for(i=0;i<10;i++) printf("%d\n",a[i]); } 程序段三: 合并法排序(将两个有序数组A,B合并成另一个有序的数组C,升序)。 基本思想: (1)先在A,B数组中各取第一个元素进行比较,将小的元素放入C数组; (2)取小的元素所在数组的下一个元素与另一数组中上次比较后较大的元素比较,重复上述比较过程,直到某个数组被先排完; (3)将另一个数组剩余元素插入C数组,合并排序完成。 #include voidmain() {inta[10],b[10],c[20],i,ia,ib,ic; printf("Pleaseinputthefirstarray: \n"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) scanf("%d",&b[i]); printf("\n"); ia=0;ib=0;ic=0; while(ia<10&&ib<10) {if(a[ia] {c[ic]=a[ia];ia++;} else {c[ic]=b[ib];ib++;} ic++; } while(ia<=9) {c[is]=a[is]: ia++;ic++; } while(ib<=9) {c[ic]=b[ib]; ib++;ic++; } for(i=0;i<20;i++) printf("%d\n",c[i]); } 程序段四: 插入法排序(把一个数插到有序数列中,插入后数列仍然有序)。 基本思想: n个有序数(从小到大)存放在数组a[1]~a[n]中,要插入的数为x。 首先确定x插在数组中的位置p。 #defineN10 voidinsert(inta[],intx) {intp,i; p=0; while(x>a[p]&&p p++; for(i=N;i>p;i--) a[i]=a[i-1]; a[p]=x; } voidmain() {inta[N+1]={1,3,4,7,8,11,13,18,56,78},x,i; for(i=0;i printf("\nInputx: "); scanf("%d",&x); insert(a,x); for(i=0;i<=N;i++)printf("%d,",a[i]); printf("\n"); } } 5.查找算法。 程序段一: 顺序查找。 基本思想: 一列数放在数组a[1]-a恤]中,待查找的数放在x中,把x与a数组中的元素从头到尾一一进行比较查找。 用变量p表示a数组元素下标,p初值为1,使x与a[p]比较,如果x不等于a[p],则使p=p+1,不断重复这个过程;一旦x等于a[p]则退出循环。 另外,如果P大于数组长度,循环也应该停止。 voidmain() {inta[10],p,x,i; printf("Pleaseinputthearray\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("Pleaseinputthenumberyouwantfind: \n"); scanf("%d",&x); printf("\n"); p=0; while(x! =a[p]&&p<10) p++; if(p>=10) printf("thenumberisnotfound! \n"); else printf("thenumberisfoundtheno%d! \n",p); } 程序段二: 折半查找法(只能对有序数列进行查找)。 基本思想: 设n个有序数(从小到大)存放在数组a[1]-a[n]中,要查找的数为x.用变量bot,top,mid分别表示查找数据范围的底部(数组下界)、顶部(数组上界)和中间,mid=(top+bot)/2。 折半查找的算法如下: (1)x=a[mid],则已找到退出循环,否则进行下面的判断;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 常用 算法 总结 12