实验4

实验任务1

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

4.1

 

实验任务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 
 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 void input(int x[], int n) {
22     int i;
23 
24     for(i = 0; i < n; ++i)
25         scanf("%d", &x[i]);
26 }
27 
28 double compute(int x[], int n) {
29     int i, high, low;
30     double ans;
31 
32     high = low = x[0];
33     ans = 0;
34 
35     for(i = 0; i < n; ++i) {
36         ans += x[i];
37 
38         if(x[i] > high)
39             high = x[i];
40         else if(x[i] < low)
41             low = x[i];
42     }
43 
44     ans = (ans - high - low)/(n-2);
45 
46     return ans;
47 }

4.2

 

实验任务3

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

4.3

 

实验任务4

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

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

4.5

 

实验任务6

 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 
13         printf("\n");
14     }
15 
16     return 0;
17 }
18 
19 void dec_to_n(int x, int n){
20     char ans[100];
21     char map[] = "0123456789ABCDEF";
22     int r, i, cnt;
23     cnt = 0;
24 
25     do{
26         r = x  % n;
27         ans[cnt++] = map[r];
28         x = x/n;
29     }while(x != 0);
30 
31     for(i = cnt - 1; i >= 0; --i)
32         printf("%c", ans[i]);
33     printf("\n");
34 
35 }

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

4.7

 

posted @ 2026-05-05 23:18  JRui-  阅读(4)  评论(0)    收藏  举报