- 1
- 0
- 约7.47千字
- 约 42页
- 2019-11-05 发布于湖北
- 举报
二维数组排序(降序) main ( ) { int s,t,l,no[30],j,k,p[30];float a[30][6]; for(j=0;j30;j++) p[j]=j; /*序号赋初值*/ for(j=0;j30;j++) { scanf(“ %d”,no[j]); for(s=0,k=0;k5;k++) /*第J个人的总分*/ { scanf(“ %d”,a[j][k]);s+=a[j][k];} a[j][5]=(float)s/5; /*第J个人的平均分*/ } 根据平均成绩排序 for(j=0;j29;j++) /* 变形的选择排序 */ { l=j; /*每轮只交换一次*/ for(k=j+1;k30;k++) if(a[p[l]][5]a[p[k]][5]) l=k; t=p[j];p[j]=p[l];p[l]=t;} } for(k=0;k30;k++) for(j=0;j6;j++) {printf(“%4d,%4.1f”,no[p[k]],a[p[k]][j]); printf(“\n”); } 字符串排序(10个串,每个串小于10个字符) #include “string.h” main( ) { char a[100], *str[10], *sp; int i,k; char *temp; sp=a; /*难点*/ for(i=0; i10; i++) { printf(“Input a string(9 character):”); gets(sp); str[i]=sp; sp+=10; } 降序排列 for(k=0;k9;k++) for(i=k+1; i10; i++) if(strcmp(str[i],str[k])0 ) {temp=str[i];str[i]=str[k];str[k]=temp;} /*尽量少用strcpy*/ for(i=0; i10; i++) puts(str[i]); } 二分查找(假设a升序) 方法1: left=0;right=n-1;p=0; while(rightleft) {mid=(right+left)/2; if(a[mid]= =m){p=1;break;} /*找到*/ if(a[mid]m) left=mid; else right=mid;} if(p)“找到”; else “没找到”; 二分查找(假设a升序) 方法2-----递归算法 int find(int left,int right,int m) { int mid; mid=(right+left)/2; if(a[mid]= =m) return 1; /*找到*/ if(left=right) return 0; /*没找到*/ if(a[mid]m) find(mid,right,m); lse find(left,mid,m);} 求鞍点(行上最大列上最小) for(p=1,i=0;in;i++) { min=a[i][0]; for(j=0;jm;j++) if(a[i][j]min) {min=a[i][j]; k=j;} for(j=0;jn;j++) if(a[i][k]min) {p=0;break;} } 注意:(1)n?n矩阵主要边线的方程; (2)矩阵的输入和输出; 矩阵乘法 for(i=0;in;i++) for(j=0;jn;j++) {c[i][j]=0; for(k=0;kn;k++) c[i][j]+=a[i][k]*b[k][j];} 扩展:(1)矩阵转置:b[i][j]=a[j][i] (2)矩阵加法: c[i][j]=a[i][j]+b[i][j] 长整数加(乘) for(d=0;i=n;i=0;i--) for(j=m;j=0;j--) {c[k]=a[i]+b[j]+d; if(c[k]10){d=c[k]/10;c[k]=c[k]%10;} k++; } 梯形法求积分 方法1:函数名不是形参 h=(b-a)/n; for(s=(f(a)+f(b))/2;i=1;
原创力文档

文档评论(0)