欢迎来到天天文库
浏览记录
ID:47847588
大小:138.00 KB
页数:18页
时间:2019-11-26
《常考编程指导》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、全国计算机二级C常考算法编程指导1.变量交换voidswap(int*x,int*y){inttemp;temp=*x;*x=*y;*y=temp;}2.累加用C语言实现l+2+3+4+5+...+n的累加。【方法1】while循环实现intadd(intn){inti,sum;sum=0;i=l;while(i<=n){sum=sum+i;i=i+1;}returnsum;}main(){ints,n;printf(nlnputn:H);scanf(”%d”,n);s=add(n);/*函数调用*/printf(',l+2+...+%d=%d,,,n,
2、s);}【方法2】for•循环实现(main函数同上)intadd(intn){inti,sum=0;for(i=l;i<=n;i++)sum=sum+i;returnsum;}do-while循环也可以实现累加,请读者自己完成。3.累乘用C语言求n的阶乘:n!=(n>l)intproduct(intn){inti,p=l;fbr(i=2;i<=n;i-H-)p=p*i;returnp;}如果n的值比较大,函数返回值和存放乘积的变量p应定义为long或者double型。4.排序(1)冒泡排序(主函数main参考教材181-182页)voidBubbleSort(in
3、ta[],intn){inti,j,tmp;fdr(i=O;ia[j+l])/*从小到大,升序*/{tmp=a[j];a[j]=a[j+l];a[j+l]=tmp;}/*交换a[j]与a[j+l],大数后移*/}}(1)选择排序voidSelectSort(inta[],intn){inti,j,min,tmp;fbr(i=O;i4、n])min=j;/*找最小的数,将最小数的下标记录下来*/if(i!=min){tmp=a[i];a[i]=a[min];a[min]=tmp;}/*将最小的数与第一个数进行交换*/}}(2)插入排序voidInscrtSort(inta[],intn){inti,j,tmp;fdr(i=l;i=0&&a[j]>tmp;j—)a[j+l]=a[j];/*大于tmp的数向后移位*/a[j+l]=tmp;/*tmp归位*/}}1.归并(合并)将两个有序数组A、B合并成另一个有序的数组C(升5、序或降序)。升序合并步骤如下:%1先在A、B数组中各取笫一个元素进行比较,将小的元素放入C中。%1取小的元索所在数组的F—个元索与另一个数组中上次比较后较人的元索进行比较。%1重复上述比綾过程,肓到某个数组被先排完。%1将另一个数组剩余元索抄入C中,合并排序完成。voidmcrgc(inta[],intm,intb[n],intn,intc[]){intia=0,ib=0,ic=0;while(ia6、ile(ia7、turn(-1);}如果对一个升序数组进行线性法杏找,循环结束条件改为“i8、9、a[i]>kcy)o(1)折半法查找(二分法查找)#defineN10intfind(inta[N],intkey){intm,p,q;p=0;q=N-l;/*p为第1个元素的下标,q为最后一个元素的下标*/whilc(p<=q){m=(p+q)/2;/*m为中间元素的卜•标*/if(a[m]==key){return(m);break;}elseif{keyq)return(-1
4、n])min=j;/*找最小的数,将最小数的下标记录下来*/if(i!=min){tmp=a[i];a[i]=a[min];a[min]=tmp;}/*将最小的数与第一个数进行交换*/}}(2)插入排序voidInscrtSort(inta[],intn){inti,j,tmp;fdr(i=l;i=0&&a[j]>tmp;j—)a[j+l]=a[j];/*大于tmp的数向后移位*/a[j+l]=tmp;/*tmp归位*/}}1.归并(合并)将两个有序数组A、B合并成另一个有序的数组C(升
5、序或降序)。升序合并步骤如下:%1先在A、B数组中各取笫一个元素进行比较,将小的元素放入C中。%1取小的元索所在数组的F—个元索与另一个数组中上次比较后较人的元索进行比较。%1重复上述比綾过程,肓到某个数组被先排完。%1将另一个数组剩余元索抄入C中,合并排序完成。voidmcrgc(inta[],intm,intb[n],intn,intc[]){intia=0,ib=0,ic=0;while(ia6、ile(ia7、turn(-1);}如果对一个升序数组进行线性法杏找,循环结束条件改为“i8、9、a[i]>kcy)o(1)折半法查找(二分法查找)#defineN10intfind(inta[N],intkey){intm,p,q;p=0;q=N-l;/*p为第1个元素的下标,q为最后一个元素的下标*/whilc(p<=q){m=(p+q)/2;/*m为中间元素的卜•标*/if(a[m]==key){return(m);break;}elseif{keyq)return(-1
6、ile(ia7、turn(-1);}如果对一个升序数组进行线性法杏找,循环结束条件改为“i8、9、a[i]>kcy)o(1)折半法查找(二分法查找)#defineN10intfind(inta[N],intkey){intm,p,q;p=0;q=N-l;/*p为第1个元素的下标,q为最后一个元素的下标*/whilc(p<=q){m=(p+q)/2;/*m为中间元素的卜•标*/if(a[m]==key){return(m);break;}elseif{keyq)return(-1
7、turn(-1);}如果对一个升序数组进行线性法杏找,循环结束条件改为“i8、9、a[i]>kcy)o(1)折半法查找(二分法查找)#defineN10intfind(inta[N],intkey){intm,p,q;p=0;q=N-l;/*p为第1个元素的下标,q为最后一个元素的下标*/whilc(p<=q){m=(p+q)/2;/*m为中间元素的卜•标*/if(a[m]==key){return(m);break;}elseif{keyq)return(-1
8、
9、a[i]>kcy)o(1)折半法查找(二分法查找)#defineN10intfind(inta[N],intkey){intm,p,q;p=0;q=N-l;/*p为第1个元素的下标,q为最后一个元素的下标*/whilc(p<=q){m=(p+q)/2;/*m为中间元素的卜•标*/if(a[m]==key){return(m);break;}elseif{keyq)return(-1
此文档下载收益归作者所有