实验四

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)第二维不能省略

image

   (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 }
4

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 }
5

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 }
6

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 }
7

 

posted @ 2025-11-16 15:40  .hh  阅读(3)  评论(0)    收藏  举报