实验4

实验任务1

 1 #include <stdio.h>
 2 #define N 4
 3 #define M 2
 4 void test1() {
 5     int x[N] = {1, 9, 8, 4}; 
 6     int i;
 7     // 输出数组x占用的内存字节数
 8     printf("sizeof(x) = %d\n", sizeof(x));
 9     // 输出每个元素的地址、值 
10     for (i = 0; i < N; ++i)
11     printf("%p: %d\n", &x[i], x[i]);
12     // 输出数组名x对应的值 
13  printf("x = %p\n", x); 
14 }
15 void test2() {
16     int x[M][N] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
17     int i, j;
18  // 输出二维数组x占用的内存字节数
19     printf("sizeof(x) = %d\n", sizeof(x));
20     // 输出每个元素的地址、值 
21     for (i = 0; i < M; ++i)
22         for (j = 0; j < N; ++j)
23         printf("%p: %d\n", &x[i][j], x[i][j]);
24     printf("\n");
25     // 输出二维数组名x, 以及,x[0], x[1]的值
26     printf("x = %p\n", x);
27     printf("x[0] = %p\n", x[0]);
28     printf("x[1] = %p\n", x[1]);
29     printf("\n");
30 }
31 int main() {
32     printf("测试1: int型一维数组\n");
33     test1();
34     printf("\n测试2: int型二维数组\n");
35     test2();
36     return 0;
37 }   

运行截图

屏幕截图 2025-11-15 215356

问题1

是   相同

问题2

是   相同   16    数组的值所占内存的大小

实验任务2

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

运行截图

屏幕截图 2025-11-15 215904

问题1

实参: 数组名 形参:input(int x[ ],int n)

问题2

输入n个整数存储到数组中

计算除最大最小值外数的平均值

实验任务3

 1 int main() {
 2     int x[N][N];
 3     int n, value;
 4     while (printf("Enter n and value: "), scanf_s("%d%d", &n, &value) != EOF) {
 5         init(x, n, value); 
 6         output(x, n); 
 7         printf("\n");
 8     }
 9     return 0;
10 }
11 
12 void output(int x[][N], int n) {
13     int i, j;
14     for (i = 0; i < n; ++i) {
15         for (j = 0; j < n; ++j)
16             printf("%d ", x[i][j]);
17         printf("\n");
18     }
19 }
20 
21 void init(int x[][N], int n, int value) {
22     int i, j;
23     for (i = 0; i < n; ++i)
24         for (j = 0; j < n; ++j)
25             x[i][j] = value;
26 }

运行截图

屏幕截图 2025-11-15 220401

问题1

形参:int x[ ][N]

实参:数组名

问题2

不能省略

问题3

输出n*n的元素

将数组中的元素赋为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 
 6 int main() {
 7     int x[N];
 8     int n;
 9     double ans;
10     while (printf("Enter n: "), scanf("%d", &n) != EOF) { 
11         input(x, n);
12         ans = median(x, n);
13         printf("ans = %g\n\n", ans);
14     }
15     return 0;
16 }
17 
18 void input(int x[], int n) {
19     for (int i = 0; i < n; i++) {
20         scanf("%d", &x[i]);
21     }
22 }
23 
24 double median(int x[], int n) {
25     for (int i = 0; i < n - 1; i++) {
26         for (int j = 0; j < n - 1 - i; j++) {
27             if (x[j] > x[j + 1]) {
28                 int temp = x[j];
29                 x[j] = x[j + 1];
30                 x[j + 1] = temp;
31             }
32         }
33     }
34     if (n % 2 == 1) {
35         return x[n / 2];  
36     } else {
37         return (x[n / 2 - 1] + x[n / 2]) / 2.0;  
38     }
39 }

运行截图

屏幕截图 2025-11-16 115710

实验任务5

 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 // 函数rotate_to_right声明
 8 // 待补足
 9 // ×××
10 void rotate_to_right(int x[][N], int n);
11 int main() {
12     int x[N][N];
13     int n;
14 
15     printf("输入n: ");
16     scanf("%d", &n);
17     input(x, n);
18 
19     printf("原始矩阵:\n");
20     output(x, n);
21 
22     // 函数rotate_to_right调用
23     // 待补足
24     rotate_to_right(x, n);
25     printf("变换后矩阵:\n");
26     output(x, n);
27 
28     return 0;
29 }
30 
31 // 函数定义
32 // 功能: 输入一个n*n的矩阵x
33 void input(int x[][N], int n) {
34     int i, j;
35 
36     for (i = 0; i < n; ++i) {
37         for (j = 0; j < n; ++j)
38             scanf("%d", &x[i][j]);
39     }
40 }
41 
42 // 函数定义
43 // 功能: 输出一个n*n的矩阵x
44 void output(int x[][N], int n) {
45     int i, j;
46 
47     for (i = 0; i < n; ++i) {
48         for (j = 0; j < n; ++j)
49             printf("%4d", x[i][j]);
50 
51         printf("\n");
52     }
53 }
54 
55 // 函数rotate_to_right定义
56 // 功能: 把一个n*n的矩阵x,每一列向右移, 最右边一列绕回左边
57 // 待补足
58 // xxx
59 void rotate_to_right(int x[][N], int n) {
60     int i, j, t;
61 
62     for (i = 0; i < n; ++i) {
63         t = x[i][n - 1];
64         for (j = n-1; j >0; --j) {
65             x[i][j]=x[i][j - 1];
66 
67 
68         }
69         x[i][0] = t;
70     }
71 }

运行截图

屏幕截图 2025-11-16 120825

实验任务6

 1 #include <stdio.h>
 2 #define N 100
 3 char value[]= {"0123456789ABCDEF"};
 4 void dec_to_n(int x, int n); // 函数声明
 5 int main() {
 6     int x;
 7 
 8     while(printf("输入十进制整数: "), scanf("%d", &x) != EOF) {
 9         dec_to_n(x, 2);  // 函数调用: 把x转换成二进制输出
10         dec_to_n(x, 8);  // 函数调用: 把x转换成八进制输出
11         dec_to_n(x, 16); // 函数调用: 把x转换成十六进制输出
12         printf("\n");
13     }
14 
15     return 0;
16 }
17 
18 // 函数定义 把十进制数x转换成n进制,打印输出
19 void dec_to_n(int x,int n) {
20     int f[N],i;
21     for (i = 0; x/n != 0; i++) {
22         f[i] = x%n;
23         x /= n;
24     }
25     f[i] = x%n;
26     for(i; i>=0; i--) {
27         printf("%c",value[f[i]]);
28     }
29     printf("\n");
30 }

运行截图

屏幕截图 2025-11-16 122002

实验任务7

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 // 函数声明
 5 #include <stdio.h>
 6 #define N 100
 7 
 8 // 函数声明
 9 void input(int x[][N], int n);
10 void output(int x[][N], int n);
11 int is_magic(int x[][N], int n); 
12 
13 int main() {
14     int x[N][N];
15     int n;
16 
17     while(printf("输入n: "), scanf("%d", &n) != EOF) {
18         printf("输入方阵:\n");
19         input(x, n);
20         printf("输出方阵:\n");
21         output(x, n);
22         
23         if(is_magic(x, n)) {
24             printf("是魔方矩阵\n");
25         } else {
26             printf("不是魔方矩阵\n");
27         }
28     }
29     
30     return 0;
31 }
32 
33 void input(int x[][N], int n) {
34     for(int i = 0; i < n; i++) {
35         for(int j = 0; j < n; j++) {
36             scanf("%d", &x[i][j]);
37         }
38     }
39 }
40 
41 void output(int x[][N], int n) {
42     for(int i = 0; i < n; i++) {
43         for(int j = 0; j < n; j++) {
44             printf("%d ", x[i][j]);
45         }
46         printf("\n");
47     }
48 }
49 
50 int is_magic(int x[][N], int n) {
51     int count[n*n+1];
52     for(int i = 0; i <= n*n; i++) count[i] = 0;
53     
54     for(int i = 0; i < n; i++) {
55         for(int j = 0; j < n; j++) {
56             if(x[i][j] < 1 || x[i][j] > n*n) return 0;
57             count[x[i][j]]++;
58             if(count[x[i][j]] > 1) return 0;  
59         }
60     }
61 
62     int sum = 0;
63     for(int j = 0; j < n; j++) {
64         sum += x[0][j];
65     }
66 
67     for(int i = 1; i < n; i++) {
68         int row_sum = 0;
69         for(int j = 0; j < n; j++) {
70             row_sum += x[i][j];
71         }
72         if(row_sum != sum) return 0;
73     }
74 
75     for(int j = 0; j < n; j++) {
76         int col_sum = 0;
77         for(int i = 0; i < n; i++) {
78             col_sum += x[i][j];
79         }
80         if(col_sum != sum) return 0;
81     }
82 
83     int diag1 = 0;
84     for(int i = 0; i < n; i++) {
85         diag1 += x[i][i];
86     }
87     if(diag1 != sum) return 0;
88 
89     int diag2 = 0;
90     for(int i = 0; i < n; i++) {
91         diag2 += x[i][n-1-i];
92     }
93     if(diag2 != sum) return 0;
94     
95     return 1;
96 }

运行截图

屏幕截图 2025-11-16 124511

屏幕截图 2025-11-16 124841

屏幕截图 2025-11-16 124811

 

posted @ 2025-11-16 12:50  沈春玲  阅读(4)  评论(0)    收藏  举报