实验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     printf("sizeof(x)=%d\n", sizeof(x));
 8     for (int i = 0; i < N; i++)
 9         printf("%p:%d\n", &x[i], x[i]);
10     printf("x=%p\n", x);
11 }
12 void test2() {
13     int x[M][N] = { {1,9,8,4},{2,0,4,9} };
14     int i, j;
15     printf("sizeof(x)=%d\n", sizeof(x));
16     for (i = 0; i < M; i++)
17         for (j = 0; j < N; j++)
18             printf("%p:%d\n", &x[i][j], x[i][j]);
19     printf("\n");
20     printf("x=%p\n", x);
21     printf("x[0]=%p\n", x[0]);
22     printf("x[1]=%p\n", x[1]);
23     printf("\n");
24 }
25 int main() {
26     printf("测试1:int型一维数组\n");
27     test1();
28     printf("测试2:int型二维数组\n");
29     test2();
30     return 0;
31 }
1

图片:屏幕截图 2025-11-10 125729

问题1:是 相同

问题2:是,相同,相差16,第一行所占的字节;

实验任务2:

源代码:

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

图片:屏幕截图 2025-11-10 131121

问题1:形参x[]和n   实参x和n

问题2:输入n个数;计算将这n个数去掉最大值与最小值的平均数;

实验任务3:

源代码:

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

图片:屏幕截图 2025-11-10 132507

 问题1:形参:x[][N]和n 实参:x和n;

 问题2:不能

问题3:output打印数组 init使数组中每个数都为value

 

 

实验任务4

源代码

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

图片屏幕截图 2025-11-10 220243

实验任务5

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

图片屏幕截图 2025-11-10 220606

实验任务6

源代码

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

图片:屏幕截图 2025-11-10 224004

 

实验任务7:

源代码

 1 #include<stdio.h> 
 2 #define N 100
 3 int m[N];
 4 char h[N];
 5 void input(int x[][N], int n) {
 6     for (int i = 0; i < n; i++) {
 7         for (int j = 0; j < n; j++)
 8             scanf_s("%d", &x[i][j]);
 9     }
10 }
11 void output(int x[][N], int n) {
12     for (int i = 0; i < n; i++) {
13         for (int j = 0; j < n; j++)
14             printf("%4d", x[i][j]);
15         printf("\n");
16     }
17     }
18 int magic(int x[][N], int n) {
19     int M = n * (n * n + 1) / 2;
20     int t= 0;
21     for (int i = 0; i < n; i++)
22         t += x[i][i];
23     if (t != M)
24         return 0;
25     t = 0;
26     for (int i = 0; i < n; i++)
27         t += x[n - 1 - i][i];
28     if (t != M)
29         return 0;
30     t = 0;
31     for (int i = 0; i < n; i++) {
32         for (int j = 0; j < n; j++) {
33             t += x[i][j];
34             if (j == n - 1) {
35                 if (t != M)
36                     return 0;
37                 t = 0;
38 
39             }
40         }
41     }
42     t = 0;
43     for (int i = 0; i < n; i++) {
44         for (int j = 0; j < n; j++) {
45             t += x[j][i];
46             if (j == n - 1) {
47                 if (t != M)
48                     return 0;
49                 t = 0;
50 
51             }
52         }
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)
57                 return 0;
58     }
59     return 1;
60 }
61 int main() {
62     int x[N][N];
63     int n;
64     while (printf("输入n\n"), scanf_s("%d", &n) != EOF) {
65         printf("输入方阵\n");
66         input(x, n);
67         printf("输出方阵\n");
68         output(x, n);
69         if (magic(x, n))
70             printf("是魔方方阵\n");
71         else
72             printf("不是魔方方阵\n");
73         
74     }
75 
76     return 0;
77 }
View Code
图片屏幕截图 2025-11-11 222426屏幕截图 2025-11-11 222511屏幕截图 2025-11-11 222543

 

实验任务8

源代码:

 1 #include<stdio.h> 
 2 #define N 10
 3 int x[N];
 4 int c[N];
 5 int is(int x[],int c[]) {
 6     int m = 0;
 7     for (int i = 0; i < 10; i++) {
 8         for (int j =0; j < 10; j++) {
 9             if (i != j) {
10                 if (x[i] == c[j])
11                     return 0;
12                 else m++;
13             }
14             if (m == 72)
15                 return 1;
16             
17             
18         }
19     }
20 }
21 int main() {
22     
23 
24     int n;
25     int m, t, k = 0;
26     n = 46;
27     while (n != 99) {
28         if (k != 0)
29             break;
30         n++;
31         m = n * n;
32         for (int i = 0; i < 4; i++) {
33             x[i] = m % 10;
34             c[i] = x[i];
35             m = m / 10;
36         }
37         t = n * n * n;
38         for (int i = 4; i < 10; i++) {
39             x[i] = t % 10;
40             c[i] = x[i];
41             t = t / 10;
42         }
43 
44         
45         if (is(x, c) == 1) {
46 
47             printf("%d", n);
48             k++;
49         }
50         else continue;
51         
52     }
53     return 0;
View Code

图片屏幕截图 2025-11-12 102512

 

posted @ 2025-11-14 16:48  空元  阅读(0)  评论(0)    收藏  举报