实验四
1.(1)是连续存放 , x和&x[0]的值相同
(2)二维数组在内存中是按行连续存放的 ,x、x[0]和&x[0][0]的值相同
2.(1)形参int x[] , int n 实参x, n
(2)标准输入读取 n个整数,并依次存储到一维数组 x[ ]中 计算数组 x中 n个元素的平均值,但去除一个最高分和一个最低分
3.(1)形参为int x[][N],int n 实参x,n
(2)第二维不能省略

(3)output输出一个n行n列,各数字为value的矩阵
init 使每个x[i][j]的数赋值为value
4.
1 #include <stdio.h> 2 #define N 100 3 void input(int x[], int n); 4 double median(int x[], int n); 5 int main() { 6 int x[N]; 7 int n; 8 double ans; 9 while (printf("Enter n: "), scanf("%d", &n) != EOF) { 10 input(x, n); // 函数调用 11 ans = median(x, n); // 函数调用 12 printf("ans = %g\n\n", ans); 13 } 14 return 0; 15 } 16 void input(int x[], int n) { 17 int i; 18 for (i = 0; i < n; i++) { 19 scanf("%d", &x[i]); 20 } 21 } 22 23 double median(int x[], int n) { 24 int i, j, temp; 25 double result; 26 27 for (i = 0; i < n - 1; i++) { 28 for (j = 0; j < n - 1 - i; j++) { 29 if (x[j] > x[j + 1]) { 30 temp = x[j]; 31 x[j] = x[j + 1]; 32 x[j + 1] = temp; 33 } 34 } 35 } 36 37 if (n % 2 == 1) { 38 result = x[n / 2]; 39 } 40 else { 41 result = (x[n / 2 - 1] + x[n / 2]) / 2.0; 42 } 43 44 return result; 45 }
5.
1 #include <stdio.h> 2 #define N 100 3 4 void input(int x[][N], int n); 5 void output(int x[][N], int n); 6 void rotate_to_right(int x[][N], int n); 7 8 int main() { 9 int x[N][N]; 10 int n; 11 printf("Enter n: "); 12 scanf("%d", &n); 13 input(x, n); 14 printf("原始矩阵:\n"); 15 output(x, n); 16 rotate_to_right(x, n); 17 printf("变换后矩阵:\n"); 18 output(x, n); 19 return 0; 20 } 21 void rotate_to_right(int x[][N], int n) { 22 int temp[N]; 23 int i, j; 24 25 for (i = 0; i < n; i++) { 26 temp[i] = x[i][n - 1]; 27 } 28 29 for (j = n - 2; j >= 0; j--) { 30 for (i = 0; i < n; i++) { 31 x[i][j + 1] = x[i][j]; 32 } 33 } 34 35 for (i = 0; i < n; i++) { 36 x[i][0] = temp[i]; 37 } 38 } 39 40 void input(int x[][N], int n) { 41 int i, j; 42 for (i = 0; i < n; ++i) { 43 for (j = 0; j < n; ++j) 44 scanf("%d", &x[i][j]); 45 } 46 } 47 48 void output(int x[][N], int n) { 49 int i, j; 50 for (i = 0; i < n; ++i) { 51 for (j = 0; j < n; ++j) 52 printf("%4d", x[i][j]); 53 printf("\n"); 54 } 55 }
6.
1 #include <stdio.h> 2 #define N 100 3 4 void dec_to_n(int x, int n); 5 6 int main() { 7 int x; 8 9 while (printf("输入十进制整数:"), scanf("%d", &x) != EOF) { 10 dec_to_n(x, 2); 11 dec_to_n(x, 8); 12 dec_to_n(x, 16); 13 printf("\n"); 14 } 15 return 0; 16 } 17 18 void dec_to_n(int x, int n) { 19 char digits[] = "0123456789ABCDEF"; 20 char result[N]; 21 int index = 0; 22 int is_negative = 0; 23 int temp = x; 24 25 if (x < 0) { 26 is_negative = 1; 27 x = -x; 28 } 29 30 if (x == 0) { 31 result[index++] = '0'; 32 } 33 else { 34 while (x > 0) { 35 result[index++] = digits[x % n]; 36 x = x / n; 37 } 38 } 39 40 printf("%d的%d进制为: ", temp, n); 41 if (is_negative) { 42 printf("-"); 43 } 44 45 for (int i = index - 1; i >= 0; i--) { 46 printf("%c", result[i]); 47 } 48 printf("\n"); 49 }
7.
1 #include <stdio.h> 2 #define N 100 3 4 // 函数声明 5 void input(int x[][N], int n); 6 void output(int x[][N], int n); 7 int is_magic(int x[][N], int n); 8 9 int main() { 10 int x[N][N]; 11 int n; 12 while (printf("输入n: "), scanf("%d", &n) != EOF) { 13 printf("输入方阵:\n"); 14 input(x, n); 15 printf("输出方阵:\n"); 16 output(x, n); 17 if (is_magic(x, n)) 18 printf("是魔方矩阵\n\n"); 19 else 20 printf("不是魔方矩阵\n\n"); 21 } 22 return 0; 23 } 24 // 函数定义 25 // 功能: 输入一个n*n的矩阵x 26 void input(int x[][N], int n) { 27 int i, j; 28 for (i = 0; i < n; ++i) { 29 for (j = 0; j < n; ++j) 30 scanf("%d", &x[i][j]); 31 } 32 } 33 // 功能: 输出一个n*n的矩阵x 34 void output(int x[][N], int n) { 35 int i, j; 36 for (i = 0; i < n; ++i) { 37 for (j = 0; j < n; ++j) 38 printf("%4d", x[i][j]); 39 printf("\n"); 40 } 41 } 42 int is_magic(int x[][N], int n) { 43 int i, j; 44 int sum, target_sum; 45 int used[N * N + 1] = { 0 }; 46 47 for (i = 0; i < n; i++) { 48 for (j = 0; j < n; j++) { 49 if (x[i][j] < 1 || x[i][j] > n * n) { 50 return 0; 51 } 52 if (used[x[i][j]]) { 53 return 0; 54 } 55 used[x[i][j]] = 1; 56 } 57 } 58 59 target_sum = n * (n * n + 1) / 2; 60 61 for (i = 0; i < n; i++) { 62 sum = 0; 63 for (j = 0; j < n; j++) { 64 sum += x[i][j]; 65 } 66 if (sum != target_sum) { 67 return 0; 68 } 69 } 70 71 for (j = 0; j < n; j++) { 72 sum = 0; 73 for (i = 0; i < n; i++) { 74 sum += x[i][j]; 75 } 76 if (sum != target_sum) { 77 return 0; 78 } 79 } 80 81 sum = 0; 82 for (i = 0; i < n; i++) { 83 sum += x[i][i]; 84 } 85 if (sum != target_sum) { 86 return 0; 87 } 88 89 sum = 0; 90 for (i = 0; i < n; i++) { 91 sum += x[i][n - 1 - i]; 92 } 93 if (sum != target_sum) { 94 return 0; 95 } 96 97 return 1; 98 }
浙公网安备 33010602011771号