题目描述
程序定义了NxN的二维数组,并在主函数中自动赋值。请编写函数fun,函数的功能是:使数组右上三角元素中的值乘以m 。
#include #include #include #define N 5 int fun ( int a[][N], int m ) /不得改动此注释文字及位置,begein/ { } /不得改动此注释文字及位置,end/ NONO( ) { FILE *rf, *wf ; int i, j, n, a[5][5] ; rf = fopen(“bc02.in”, “r”) ; wf = fopen(“bc02.out”, “w”) ; for(i = 0 ; i < 5 ; i++) for(j = 0 ; j < 5 ; j++) fscanf(rf, “%d “, &a[i][j]) ; fscanf(rf, “%d”, &n) ; fun(a, n) ; for ( i = 0; i < 5; i++ ) { for ( j = 0; j < 5; j++ ) fprintf(wf, “%4d”, a[i][j] ); fprintf(wf, “\n”); } fclose(rf) ; fclose(wf) ; } main ( ) { int a[N][N], m, i, j; printf(”***** The array *****\n”); for ( i =0; i { for ( j =0; j { a[i][j] = rand()%20; printf( “%4d”, a[i][j] ); } printf(“\n”); } do m = rand()%10 ; while ( m>=3 ); printf(“m = %4d\n”,m); fun ( a ,m ); printf (“THE RESULT\n”); for ( i =0; i { for ( j =0; j printf(“\n”); } NONO ( ); }
题解
参考下面的代码,该函数将循环遍历数组的右上三角形并对其中的每个元素乘以m,这样就能够得到实现要求。
#include #include #include #define N 5 int fun(int a[][N], int m) { int i, j; for (i = 0; i < N; i++) { for (j = i + 1; j < N; j++) { a[i][j] *= m; } } return 0; } int main() { int a[N][N], m, i, j; printf("***** The array *****\n"); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { a[i][j] = rand() % 20; printf("%4d", a[i][j]); } printf("\n"); } do m = rand() % 10; while (m >= 3); printf("m = %4d\n", m); fun(a, m); printf("THE RESULT\n"); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { printf("%4d", a[i][j]); } printf("\n"); } return 0; }
这个程序的功能是创建一个NxN的二维整数数组,将其填充随机值,在主函数中调用函数fun来将数组的右上三角元素乘以给定的m,然后打印结果数组。在函数fun中,我们使用了一个双重循环,其中i循环表示行数,j循环表示列数。我们只遍历右上三角形,例如当i为0时,j的初始值应该为1,以避免重复计算。在循环中,我们只针对右上三角元素,也就是i小于j的元素进行处理,乘以给定的m。
最后,我们使用两个for循环在主函数中打印原始的和修改后的两个数组。我们在每行中打印数组元素,这样可以使输出更容易阅读。