二级C期末考试重点算法讲述.doc

二级C语言算法(201206) 1.变量交换 void swap1(int *x, int *y) { int temp; temp=*x; *x=*y; *y=temp; } void swap2(int *x, int *y) { int *temp; *temp=*x; *x=*y; *y=*temp; } void swap3(int x, int y) { int temp; temp=x; x=y; y=temp; } 2.累加用C语言实现1+2+3+4+5++n的累加。 【方法1】while循环实现 int add(int n) { int i,sum; sum=0; i=1; while(i=n) { sum=sum+i; i=i+1; return sum; } main() { int s,n; printf(\nInput n:\n); scanf(%d,n); s=add(n); /*函数调用*/ printf(1+2+...+%d=%d\n,n,s); } 【方法2】for循环实现int add(int n) { int i,sum=0; for(i=1;i=n;i++) sum=sum+i; return sum; } do-while循环也可以实现累加请读者自己完成。 累乘用C语言求n的阶乘:n! = 1(2(3(4((n (n≥1) int product (int n) { int i,p=1; for(i=2;i=n;i++) p=p*i; return p; } 如果n的值比较大,函数返回值和存放乘积的变量p应定义为。 排序(1)冒泡排序 void BubbleSort(int a[],int n) { int i,j, tmp; for(i=0;in-1;i++) /*排序趟次*/ { for(j=0; jn-1-i; j++) /*从前往后比*/ if(a[j]a[j+1]) /*从小到大升序*/ { tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp;}/*交换a[j]与a[j+1]大数后移*/ } } (2)选择排序 void SelectSort(int a[],int n) { int i,j,min,tmp; for(i=0; in-1; i++) { min=i; /*假设第一个数最小,记录其下标*/ for(j=i+1; jn; j++) if(a[j]a[min]) min=j;/*找最小的,将最小数的下标记录下来*/ if(i!=min) { tmp=a[i]; a[i]=a[min]; a[min]=tmp; } /*将最小的数与第一个数进行交换*/ } } (3)插入排序 void InsertSort(int a[],int n) { int i,j,tmp; for(i=1; in; i++) { tmp=a[i]; /* 空出a[i]单元 */ for(j=i-1; j=0 a[j]tmp; j--) a[j+1]=a[j]; /* 大于tmp的数向后移位 */ a[j+1]=tmp; /* tmp归位 */ } } 归并合并将两个有序数组A、B合并成另一个有序的数组C(升序或降序)。步骤如下: 先在A、B数组中各取第一个元素进行比较,将小的元素放入C中。 取小的元素所在数组的下一个元素与另一个数组中上次比较后较大的元素比较。 重复上述比较过程,直到某个数组被先排完。 将另一个数组剩余元素抄入C中,合并排序完成。 void merge(int a[],int b[n],int n,int c[]) { int ia=0,ib=0,ic=0; while(iam ibn) { if (a[ia]b[ib]) /*小的元素放入C中*/{ c[ic]=a[ia];ia++; } else { c[ic]=b[ib];ib++; } ic++; } while(iam) { c[ic

文档评论(0)

1亿VIP精品文档

相关文档