C语言程序模块总结
- 格式:doc
- 大小:39.50 KB
- 文档页数:6
将十进制的数转化为其他进制的数: #include #define ary 20 int main(void) { int k=0,base, x[ary],t,num,j; scanf("%d%d",&base,&num); t=num; if(base<10){ do{ x[k++]=t%base;t=t/base;} while(t!=0);} else do{ if(t%base<10){ x[k++]=t%base;t=t/base;} else{ x[k++]='A'+t%base-10;t=t/base;}} while(t!=0); for(j=k-1;j>=0;j--){ if(x[j]>=65) printf("%c",x[j]); else printf("%d",x[j]);}
} 冒泡法排序,第一次将最大的数沉到底部,第二趟将次大的数沉到倒数第二个;即每一次都从头开始向下比: #include #define ary 10 int main(void) { int i,j,t,x[ary]={9,8,7,4,5,6,3,1,2,16},k; for(i=0;ifor(j=0;jif(x[j]>x[j+1]){ t=x[j];x[j]=x[j+1];x[j+1]=t;} for(k=0;kprintf("%5d",x[k]); } 交换法排序,第一次将第一个元素一次与后面比较,将较小的放到第一个;第二次将第二个元素与下面的比较,是第二个为第二小。所以一次与下一个元素比较: #include #define ary 10 int main(void) { int i,j,k,t,x[ary]={16,9,8,6,34,2,1,4,5,7}; for(i=0;ifor(j=i+1;jif(x[i]>x[j]){ t=x[i];x[i]=x[j];x[j]=t;} for(k=0;kprintf("%5d",x[k]); } 选择法排序,即从第一个元素开始寻找最小元素的下标,小虎哥比较过程中改变最小下表的记录值,第二次再从第二个开始找: #include #define ary 10 int main(void) { int i,j,point,t,k,x[ary]={19,12,13,5,6,8,7,34,23,21}; for(i=0;ipoint=i; for(j=i+1;jif(x[point]>x[j]) point=j; if(point!=i){ t=x[i];x[i]=x[point];x[point]=t;} } for(k=0;kprintf("%5d",x[k]); } 插入法排序,先将前两个排序,就是讲第二个元素插到第一个元素的适当位置,如果比他小,那么原来的元素要后退,比他大,后面一个元素即是所插入的元素: #include #define ary 10 int main(void) { int i,j,t,k,x[ary]={1,4,56,76,41,23,21,13,15,18}; for(i=1;it=x[i]; for(j=i-1;t=0;j--) x[j+1]=x[j]; x[j+1]=t; } for(k=0;kprintf("%5d",x[k]); } 线性查找法,依次查找,并用一个初值判断能否找到: #include #define ary 10 int main(void) { int num,i,x[ary]={1,2,3,34,35,5,6,57,67,68},point=-1; scanf("%d",&num); for(i=0;iif(x[i]==num){ point=i; break;} if(point!=-1) printf("found! %d",point); else printf("no found"); } 折半查找法,已经排好序的: #include #define ary 10 int main(void) { int num,low=0,high=ary-1,mid,point=-1,x[ary]={12,13,14,16,23,25,26,34,35,36}; scanf("%d",&num); while(low<=high){ mid=(low+high)/2; if(x[mid]==num){ point=mid;break;} if(x[mid]>num) high=mid-1; else low=mid+1; } if(point!=-1) printf("found %d",point); else printf("no"); } 两路归并法: #include int main(void) { int a[4]={12,14,16,18},b[6]={23,25,27,34,36,41},s[20],i=0,j=0,k=0; while(i<4&&j<6){ if(a[i]>b[j]) s[k++]=b[j++]; else if(a[i]==b[j]) i++; else s[k++]=a[i++]; } while(i<4) s[k++]=a[i++]; while(j<6) s[k++]=b[j++]; for(i=0;iprintf("%5d",s[i]); } 找出二维数组中最大的元素:(降维处理) #include int max_value(int *b,int n) { int k,max=*b; for(k=0;kif(b[k]>max) max=b[k]; return max; }
int main(void) { int a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}},max; max=max_value(*a,12); printf("the max is%d",max); } 利用行指针变量:他的大小必须确定 #include int max_value(int (*a)[4]); int main(void) { int a[3][4]={{1,3,5,6},{2,3,4,6},{7,89,9,90}},max; max=max_value(a); printf("%d",max); } int max_value(int (*a)[4]) { int i,j,max=a[0][0]; for(i=0;i<3;i++) for(j=0;j<4;j++) if(a[i][j]>max) max=a[i][j]; return max; } 统计单词个数: #include #include int main(void) { int num=0,space=1;char ch; while((ch=getchar())!='\n'){ if(isspace(ch)) space=1; else{ if(space){ num++; space=0;} } } printf("%d",num); } 删除字符串中的字符,另用一个变量j,将字符的下标直接跳过: #include #include int main(void) { char array[80],ch; int i,j; gets(array); ch=getchar(); for(i=j=0;i<=strlen(array);i++) if(array[i]!=ch) array[j++]=array[i]; puts(array); } 字符变数字:-0'; 数字变字符:+'0' 判断是否为回文字符串 #include #include int huiwen(char a[]); int main(void) { int i,j;char a[80]; gets(a);