实验四

实验一

 1 #include <stdio.h>
 2 #define N 4
 3 #define M 2
 4 
 5 void test1() {
 6     int x[N] = {1, 9, 8, 4};
 7     int i;
 8 
 9     
10     printf("sizeof(x) = %d\n", sizeof(x));
11 
12     
13     for (i = 0; i < N; ++i)
14         printf("%p: %d\n", &x[i], x[i]);
15 
16     
17     printf("x = %p\n", x);
18 }
19 
20 void test2() {
21     int x[M][N] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
22     int i, j;
23 
24     
25     printf("sizeof(x) = %d\n", sizeof(x));
26 
27     
28     for (i = 0; i < M; ++i)
29         for (j = 0; j < N; ++j)
30             printf("%p: %d\n", &x[i][j], x[i][j]);
31     printf("\n");
32 
33     
34     printf("x = %p\n", x);
35     printf("x[0] = %p\n", x[0]);
36     printf("x[1] = %p\n", x[1]);
37     printf("\n");
38 }
39 
40 int main() {
41     printf("测试1:int型一维数组\n");
42     test1();
43 
44     printf("\n测试2:int型二维数组\n");
45     test2();
46 
47     return 0;
48 }
View Code

屏幕截图 2026-05-05 231321

 

问题一:连续;相同。

问题二:连续;相同;相差16;二维数组一行占用的内存。

实验二

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

屏幕截图 2026-05-05 231349

 

问题一:形参:int x[ ];实参:x。

问题二:给数组赋值;去掉最高及最低后取平均值。

实验三

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 
 5 void output(int x[][N], int n);
 6 void init(int x[][N], int n, int value);
 7 
 8 int main() {
 9     int x[N][N];
10     int n, value;
11 
12     while(printf("Enter n and value: "), scanf("%d%d", &n, &value) != EOF) {
13         init(x, n, value);    
14         output(x, n);         
15         printf("\n");
16     }
17 
18     return 0;
19 }
20 
21 void output(int x[][N], int n) {
22     int i, j;
23 
24     for(i = 0; i < n; ++i) {
25         for(j = 0; j < n; ++j)
26             printf("%d ", x[i][j]);
27         printf("\n");
28     }
29 }
30 
31 
32 void init(int x[][N], int n, int value) {
33     int i, j;
34 
35     for(i = 0; i < n; ++i)
36         for(j = 0; j < n; ++j)
37             x[i][j] = value;
38 }
View Code

屏幕截图 2026-05-05 231412

 

问题一:形参:int x[ ][N];实参:x。

问题二:不能省略,会报错。

问题三:输出n*n维矩阵;将矩阵的值赋为value。

实验四

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

屏幕截图 2026-05-05 231053

 

实验五

 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 
 8 void rotate_to_right(int x[][N], int n);
 9 
10 int main() {
11     int x[N][N];
12     int n;
13 
14     printf("Enter n: ");
15     scanf("%d", &n);
16     input(x, n);
17 
18     printf("原始矩阵:\n");
19     output(x, n);
20 
21     // 函数rotate_to_right调用
22     rotate_to_right(x, n);
23 
24     printf("变换后矩阵:\n");
25     output(x, n);
26 
27     return 0;
28 }
29 
30 
31 
32 void input(int x[][N], int n) {
33     int i, j;
34     for (i = 0; i < n; ++i) {
35         for (j = 0; j < n; ++j)
36             scanf("%d", &x[i][j]);
37     }
38 }
39 
40 
41 
42 void output(int x[][N], int n) {
43     int i, j;
44     for (i = 0; i < n; ++i) {
45         for (j = 0; j < n; ++j)
46             printf("%4d", x[i][j]);
47         printf("\n");
48     }
49 }
50 
51 
52 void rotate_to_right(int x[][N], int n) {
53     int i, j, temp;
54    
55     for (i = 0; i < n; i++) {
56         temp = x[i][n - 1];
57    
58         for (j = n - 1; j > 0; j--) {
59             x[i][j] = x[i][j - 1];
60         }
61        
62         x[i][0] = temp;
63     }
64 }
View Code

屏幕截图 2026-05-05 230828

 

实验六

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

屏幕截图 2026-05-05 230539

 

实验七

 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 
13 
14     while(printf("输入n:"), scanf("%d", &n) != EOF) {
15         printf("输入方阵:\n");
16         input(x, n);
17 
18         printf("输出方阵:\n");
19         output(x, n);
20 
21         if(is_magic(x, n))
22             printf("是魔方矩阵\n\n");
23         else
24             printf("不是魔方矩阵\n\n");
25     }
26 
27     return 0;
28 }
29 
30 
31 void input(int x[][N], int n) {
32     int i, j;
33     for (i = 0; i < n; ++i) {
34         for (j = 0; j < n; ++j)
35             scanf("%d", &x[i][j]);
36     }
37 }
38 
39 
40 void output(int x[][N], int n) {
41     int i, j;
42     for (i = 0; i < n; ++i) {
43         for (j = 0; j < n; ++j)
44             printf("%4d", x[i][j]);
45         printf("\n");
46     }
47 }
48 
49 
50 int is_magic(int x[][N], int n) {
51     int i, j;
52 
53     int magic_sum = n * (n * n + 1) / 2;
54     int row_sum, col_sum;
55     int diag1 = 0, diag2 = 0;
56 
57 
58     for (i = 0; i < n; i++) {
59         row_sum = 0;
60         for (j = 0; j < n; j++)
61             row_sum += x[i][j];
62         if (row_sum != magic_sum)
63             return 0;
64     }
65 
66  
67     for (j = 0; j < n; j++) {
68         col_sum = 0;
69         for (i = 0; i < n; i++)
70             col_sum += x[i][j];
71         if (col_sum != magic_sum)
72             return 0;
73     }
74 
75 
76     for (i = 0; i < n; i++)
77         diag1 += x[i][i];
78     if (diag1 != magic_sum)
79         return 0;
80 
81   
82     for (i = 0; i < n; i++)
83         diag2 += x[i][n - 1 - i];
84     if (diag2 != magic_sum)
85         return 0;
86 
87 
88     return 1;
89 }
View Code

屏幕截图 2026-05-05 230413

 

posted @ 2026-05-05 23:14  阿狸波澜  阅读(6)  评论(0)    收藏  举报