//编写一个函数:tt指向一个M行N列的二维数组,求出二维数组每列中最小的元素,并依次放入pp所指的一维数组中。二维数组中的数在主函数中赋予。
//重难点:求出的是每一列的最小值,这里要注意,学会简化代码,省去一些多余定义的变量。
1 #include <stdio.h> 2 #define M 3 3 #define N 4 4 void fun ( int tt[M][N], int pp[N] ) 5 { 6 //简化代码 7 int i, j;//不定义变量n,使用i即可。不定义min直接赋值给pp即可。 8 for (i = 0; i < N; i++)//注意这里i代表的列信息。 9 { 10 pp[i] = tt[0][i]; 11 for (j = 0; j < M; j++) if (tt[j][i] < pp[i]) pp[i] = tt[j][i];//for和if语句都只有一句,可以省略大括号。 12 } 13 /* int i, j, min,n=0; 14 for (i = 0; i < N; i++) 15 { 16 min = tt[0][i]; 17 for (j = 0; j < M; j++) 18 { 19 if (tt[j][i] < min) 20 min = tt[j][i]; 21 } 22 pp[n++] = min; 23 }*/ 24 } 25 main( ) 26 { 27 void NONO( ); 28 int t [ M ][ N ]={{22,45, 56,30}, 29 {19,33, 45,38}, 30 {20,22, 66,40}}; 31 int p [ N ], i, j, k; 32 printf ( "The original data is : " ); 33 for( i=0; i<M; i++ ){ 34 for( j=0; j<N; j++ ) 35 printf ( "%6d", t[i][j] ); 36 printf(" "); 37 } 38 fun ( t, p ); 39 printf( " The result is: " ); 40 for ( k = 0; k < N; k++ ) printf ( " %4d ", p[ k ] ); 41 printf(" "); 42 NONO( ); 43 } 44 void NONO( ) 45 {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数, 46 输出数据,关闭文件。 */ 47 int i, j, k, m, t[M][N], p[N] ; 48 FILE *rf, *wf ; 49 rf = fopen("in.dat","r") ; 50 wf = fopen("out.dat","w") ; 51 for(m = 0 ; m < 10 ; m++) { 52 for( i=0; i<M; i++ ){ 53 for( j=0; j<N; j++ ) 54 fscanf (rf, "%6d", &t[i][j] ); 55 } 56 fun ( t, p ) ; 57 for ( k = 0; k < N; k++ ) fprintf (wf, " %4d ", p[ k ] ) ; 58 fprintf(wf, " ") ; 59 } 60 fclose(rf) ; 61 fclose(wf) ; 62 }