C语言程序作业6(数组)(平均成绩))(矩阵运算)(矩阵的转置(即行列互换))(逆序)
1. (程序题)
假如score数组中的成绩如下:80、90、60、70、50,请编写函数 int fun(int score[], int m, int below[]),其功能是:计算 score 中 m 个人的平均成绩 aver, 将低于aver的成绩放在 below 中, 通过函数名返回人数。在主函数中调用fun,并输出低于aver的成绩。
**无输入提示信息和输入数据
**输出格式要求:"低于平均分的成绩如下:\n"
"%d\n"

1 #include<stdio.h> 2 3 4 5 int fun(int score[], int m, int* below) 6 7 { 8 9 int i; 10 11 int sum = 0; 12 13 int aver; 14 15 for (i = 0; i < m; i++) 16 17 { 18 19 sum += score[i]; 20 21 } 22 23 aver = sum / m; 24 25 for (i = 0; i < m; i++) 26 27 { 28 29 if (score[i] < aver) 30 31 { 32 33 below[i] = score[i]; 34 35 } 36 37 else 38 39 { 40 41 below[i] = { 0 }; 42 43 } 44 45 } 46 47 return aver; 48 49 } 50 51 52 53 int main() 54 55 { 56 57 int score[5] = { 80,90,60,70,50 }; 58 59 int m = 5; 60 61 int below[5]; 62 63 fun(score, m, below); 64 65 printf("低于平均分的成绩如下:\n"); 66 67 for (int i = 0; i < m; i++) 68 69 { 70 71 if (below[i] != 0) 72 73 { 74 75 printf("%d\n", below[i]); 76 77 } 78 79 } 80 81 return 0; 82 83 } 84 85 86 87 正确答案: 88 程序语言 C/C++ 89 #include <stdio.h> 90 91 #include <stdlib.h> 92 93 #define N 5 94 95 int fun(int score[], int m, int below[]) 96 97 { 98 99 double sum = 0.0, aver; 100 101 int i, n = 0; 102 103 for(i=0; i<m; i++) 104 105 { 106 107 sum += score[i]; 108 109 } 110 111 aver=sum/m; 112 113 for(i=0; i<m; i++) 114 115 { 116 117 if(score[i] < aver) 118 119 { 120 121 n++; 122 123 below[n-1] = score[i]; 124 125 } 126 127 } 128 129 return n; //返回低于平均分的人数 130 131 } 132 133 int main(void) 134 135 { 136 137 int i, n, below[N]; 138 139 int score[N]={80,90,60,70,50}; 140 141 n=fun(score, N, below); 142 143 printf("低于平均分的成绩如下:\n"); 144 145 for (i=0; i<n; i++) 146 147 printf("%d\n", below[i]); 148 149 //system("pause"); 150 151 return 0; 152 153 } 154 155 156 157 158 用例1: 159 输入 160 输出 161 低于平均分的成绩如下: 60 50
2. (程序题)
编写函数fun,函数的功能是: 计算N*N矩阵的主对角线元素和副对角线元素之和, 例如,若N=3,有下列矩阵:

函数的返回值为30。
**无输入提示信息和输入数据
**输出格式要求:"sum=%d\n"
运行结果:


我的答案: #include <stdio.h> #define N 3 int fun(int n, int matrix[][N]) { int sum = 0; for (int i = 0; i < n; i++) { sum += matrix[i][i]; sum += matrix[i][n - i - 1]; } return sum; } int main() { int n = 3; int matrix[][N] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; int sum = fun(n, matrix); printf("sum=%d\n", sum); return 0; } 正确答案: 程序语言 C/C++ #include <stdio.h> #include <stdlib.h> #define N 3 int fun(int t[][N], int n) { int i, sum=0; for(i=0; i<n; i++) sum+=t[i][i]; for(i=0; i<n; i++) sum+= t[i][n-1-i] ; return sum; } int main(void) { int a[N][N] = {1,2,3,4,5,6,7,8,9}, sum; /*int i,j,n; printf("Input n(n<10):"); scanf("%d", &n);*/ //为数组赋值 /*for ( i=0; i<n; i++ ) for ( j=0; j<n; j++ ) scanf("%d",&a[i][j]);*/ //计算数组主对角线元素和副对角线元素之和 sum = fun(a, N); printf("sum=%d\n", sum); //system("pause"); return 0; } 用例1: 输入 输出 sum=30
编写程序, 实现矩阵(3行3列)的转置(即行列互换)。例如,输入下面的矩阵:
100 200 300
400 500 600
700 800 900
则运行结果如下:

**无输入提示信息和输入数据
**输出格式要求:"%5d"
【提示】:矩阵是按行存储在二维数组 array[3][3] 中的,要实现矩阵的转置,实际上就是将矩阵主对角线两侧的元素(即数组元素 array[i][j] 与 array[j][i])互换,矩阵主对角线上的元素(i与j相等时)不动;
具体可以用两层循环实现,第一层循环用 i 控制矩阵的行,第二层循环用 j 控制矩阵的列,循环体为两变量的值用一个中间量实现互换;

我的答案: #include <stdio.h> void transpose(int matrix[3][3]) { int temp; for (int i = 0; i < 3; i++) { for (int j = i; j < 3; j++) { temp = matrix[i][j]; matrix[i][j] = matrix[j][i]; matrix[j][i] = temp; } } } int main() { int matrix[3][3] = { {100, 200, 300}, {400, 500, 600}, {700, 800, 900} }; transpose(matrix); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf("%5d", matrix[i][j]); } printf("\n"); } return 0; } 正确答案: 程序语言 C/C++ #include <stdio.h> #include <stdlib.h> #define N 3 void fun(int array[N][N]) { int i,j,t; for(i=0;i<N;i++){ for(j=0;j<i;j++){ t=array[i][j]; array[i][j]=array[j][i]; array[j][i]=t; } } } int main(void) { int a[N][N] = {{100,200,300},{400,500,600},{700,800,900}}; int i, j; fun(a); for ( i=0; i<N; i++ ) { for ( j=0; j<N; j++ ) { printf("%5d",a[i][j]); } printf("\n"); } //system("pause"); return 0; } 用例1: 输入 输出 100 400 700 200 500 800 300 600 900
4.编写函数fun,函数的功能是:将一个数组中的数据逆序重新存放。在主函数中定义一个长度为5的整型一维数组,从键盘输入数据为数组元素赋值,调用fun函数将数组中的数据逆序存放,输出修改后的数组元素。
**输入提示信息:"Input five numbers:\n"
**输出格式要求:"%d "
运行结果如:


1 我的答案: 2 #include<stdio.h> 3 4 void fun(int a[],int m) 5 6 { 7 8 int i; 9 10 int tem; 11 12 for (i = 0; i < m/2;i++) 13 14 { 15 16 tem= a[i]; 17 18 a[i] = a[m - i - 1]; 19 20 a[m - i - 1] = tem; 21 22 } 23 24 } 25 26 int main() 27 28 { 29 30 int m = 5,i; 31 32 int a[5]; 33 34 printf("Input five numbers:\n"); 35 36 for (i = 0; i < 5; i++) 37 38 { 39 40 scanf("%d",& a[i]); 41 42 } 43 44 fun(a, m); 45 46 for (i = 0; i < 5; i++) 47 48 { 49 50 printf("%d ", a[i]); 51 52 } 53 54 return 0; 55 56 } 57 58 正确答案: 59 程序语言 C/C++ 60 #include <stdio.h> 61 62 #include <stdlib.h> 63 64 #define N 5 65 66 67 68 void fun(int a[],int n) 69 70 { 71 72 int i,j,t; 73 74 for(i=0,j=n-1;i<j;i++,j--) 75 76 { 77 78 t=a[i]; 79 80 a[i] =a[j]; 81 82 a[j]=t; 83 84 } 85 86 } 87 88 89 90 int main(void) 91 92 { 93 94 int a[N],i; 95 96 printf("Input five numbers:\n"); 97 98 for(i=0;i<N;i++) 99 100 { 101 102 scanf("%d",&a[i]); 103 104 } 105 106 fun(a,N); 107 108 for(i=0;i<N;i++) 109 110 { 111 112 printf("%d ",a[i]); 113 114 } 115 116 printf("\n"); 117 118 //system("pause"); 119 120 return 0; 121 122 } 123 124 125 用例1: 126 输入 127 1 2 3 4 5 128 129 输出 130 Input five numbers: 5 4 3 2 1

浙公网安备 33010602011771号