实验四

任务一

问题一:是连续存放的,x和&x【0】的值完全相同,数组名x就代表数组第一个元素的地址,&x【0】表示的就是第一个元素的地址

问题二:是连续的,三个值完全相等,都表示二维数组的第一个地址。x【0】和x【1】相差16字节,这个差值代表二维数组一行有4个int元素

 

任务二

问题一:形参:void input(int x[] ,int n);实参:input(x,n)

问题二:input作用是输入n个整数到数组;compute的功能是去掉最高分和最低分,让后求平均分。

任务三

问题一:形参:void output(int x[][N],int n);实参output(x,n)

问题二:第二维大小不能省略,改成x[][]会报错

问题三:output:输出方阵;inti:把矩阵所有元素设为指定值

 

任务四

代码

 1 #define _CRT_SECURE_NO_WARNINGS 1
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #define N 100
 5 
 6 void input(int x[], int n);
 7 double median(int x[], int n);
 8 
 9 int main() {
10     int x[N];
11     int n;
12     double ans;
13     while (printf("Enter n: "), scanf_s("%d", &n) != EOF) {
14         input(x, n);
15         ans = median(x, n);
16         printf("ans = %g\n\n", ans);
17     }
18     return 0;
19 }
20 
21 void input(int x[], int n) {
22     int i;
23     for (i = 0; i < n; i++)
24         scanf_s("%d", &x[i]);
25 }
26 
27 double median(int x[], int n) {
28     int i, j, t;
29     // 排序
30     for (i = 0; i < n - 1; i++)
31         for (j = 0; j < n - i - 1; j++)
32             if (x[j] > x[j + 1]) {
33                 t = x[j]; x[j] = x[j + 1]; x[j + 1] = t;
34             }
35     if (n % 2 == 1)
36         return x[n / 2];
37     else
38         return (x[n / 2 - 1] + x[n / 2]) / 2.0;
39 }
View Code

 

截图屏幕截图 2026-05-05 174319

任务五

代码

 1 #define _CRT_SECURE_NO_WARNINGS 1
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #define N 100
 5 
 6 void input(int x[][N], int n);
 7 void output(int x[][N], int n);
 8 void rotate_to_right(int x[][N], int n);
 9 
10 int main() {
11     int x[N][N];
12     int n;
13     printf("Enter n: ");
14     scanf_s("%d", &n);
15     input(x, n);
16     printf("原始矩阵:\n");
17     output(x, n);
18     rotate_to_right(x, n);
19     printf("变换后矩阵:\n");
20     output(x, n);
21     system("pause");
22     return 0;
23 }
24 
25 void input(int x[][N], int n) {
26     int i, j;
27     for (i = 0; i < n; i++)
28         for (j = 0; j < n; j++)
29             scanf_s("%d", &x[i][j]);
30 }
31 
32 void output(int x[][N], int n) {
33     int i, j;
34     for (i = 0; i < n; i++) {
35         for (j = 0; j < n; j++)
36             printf("%4d", x[i][j]);
37         printf("\n");
38     }
39 }
40 
41 void rotate_to_right(int x[][N], int n) {
42     int i, temp[N];
43     // 保存最后一列
44     for (i = 0; i < n; i++)
45         temp[i] = x[i][n - 1];
46     // 列右移
47     for (i = 0; i < n; i++)
48         for (int j = n - 1; j > 0; j--)
49             x[i][j] = x[i][j - 1];
50     // 最后一列放到第一列
51     for (i = 0; i < n; i++)
52         x[i][0] = temp[i];
53 }
View Code

截图任务五

任务六

代码

 1 #define _CRT_SECURE_NO_WARNINGS 1
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #define N 100
 5 
 6 void dec_to_n(int x, int n);
 7 
 8 int main() {
 9     int x;
10     while (printf("输入十进制整数: "), scanf("%d", &x) != EOF) {
11         dec_to_n(x, 2);
12         dec_to_n(x, 8);
13         dec_to_n(x, 16);
14         printf("\n");
15     }
16     return 0;
17 }
18 
19 void dec_to_n(int x, int n) {
20     int a[N], cnt = 0, i;
21     int num = x;
22     if (num == 0) {
23         printf("0\n");
24         return;
25     }
26     while (num > 0) {
27         a[cnt++] = num % n;
28         num /= n;
29     }
30     for (i = cnt - 1; i >= 0; i--) {
31         if (a[i] >= 10)
32             printf("%c", 'A' + a[i] - 10);
33         else
34             printf("%d", a[i]);
35     }
36     printf("\n");
37 }
View Code

截图任务六

任务七

代码

 1 #define _CRT_SECURE_NO_WARNINGS 1
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #define N 100
 5 
 6 void input(int x[][N], int n);
 7 void output(int x[][N], int n);
 8 int is_magic(int x[][N], int n);
 9 
10 int main() {
11     int x[N][N];
12     int n;
13     while (printf("输入n: "), scanf("%d", &n) != EOF) {
14         printf("输入方阵:\n");
15         input(x, n);
16         printf("输出方阵:\n");
17         output(x, n);
18         if (is_magic(x, n))
19             printf("是魔方矩阵\n\n");
20         else
21             printf("不是魔方矩阵\n\n");
22     }
23     return 0;
24 }
25 
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 void output(int x[][N], int n) {
34     int i, j;
35     for (i = 0; i < n; i++) {
36         for (j = 0; j < n; j++)
37             printf("%4d", x[i][j]);
38         printf("\n");
39     }
40 }
41 
42 int is_magic(int x[][N], int n) {
43     int sum = n * (n * n + 1) / 2;
44     int i, j, s;
45     //
46     for (i = 0; i < n; i++) {
47         s = 0;
48         for (j = 0; j < n; j++) s += x[i][j];
49         if (s != sum) return 0;
50     }
51     //
52     for (j = 0; j < n; j++) {
53         s = 0;
54         for (i = 0; i < n; i++) s += x[i][j];
55         if (s != sum) return 0;
56     }
57     // 对角线
58     s = 0;
59     for (i = 0; i < n; i++) s += x[i][i];
60     if (s != sum) return 0;
61     s = 0;
62     for (i = 0; i < n; i++) s += x[i][n - 1 - i];
63     if (s != sum) return 0;
64     return 1;
65 }
View Code

截图任务七

算法思路:先计算出幻和,再分别计算每行每列,以及两条对角线之和并于幻和比较,如果出现不对等就返回0,使结果输出不是魔方矩阵。

posted @ 2026-05-05 18:16  幼稚园·小廿  阅读(9)  评论(0)    收藏  举报