实验4

任务1

源代码

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

运行截图

1

问题
1) 
一维数组在内存中连续存放;x和&x[0]的值相同
2)
二维数组在内存中不是按行连续存放的;x,x[0],x[0][0]的值相同;x[0]和x[1]相差32个字节
 
任务2
源代码
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define N 100
 4 
 5 void input(int x[],int n);
 6 double compute(int x[],int n);
 7 
 8 int main(){
 9       int x[N];
10       int n,i;
11       double ans;
12 
13       while(printf("Enter n:"),scanf("%d",&n)!=EOF){
14             input(x,n);
15             ans=compute(x,n);
16             printf("ans=%.2f\n\n",ans);
17       }
18 
19       system("pause");
20 
21       return 0;
22 }
23 
24 void input(int x[],int n){
25       int i;
26 
27       for(i=0;i<n;++i)
28             scanf("%d",&x[i]);
29 
30 }
31 
32 double compute(int x[],int n){
33       int i,high,low;
34       double ans;
35 
36       high=low=x[0];
37       ans=0;
38 
39             for(i=0;i<n;++i)
40             {
41                   ans+=x[i];
42 
43                   if(x[i]>high)
44                         high=x[i];
45                   else if(x[i]<low)
46                         low=x[i];
47             }
48 
49             ans=(ans-high-low)/(n-2);
50 
51             return ans;
52 }
2

运行截图

2

问题
1)
形参书写:x[]
实参书写:x[N]
2)
input:输入一组一维数组的值,一共有n个
compute:去掉一个最大的数,去掉一个最小的数,求输入数值的平均数
 
任务3
源代码
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define N 100
 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             system("pause");
19 
20             return 0;
21 }
22 
23 void output(int x[][N],int n){
24       int i,j;
25 
26       for(i=0;i<n;++i){
27             for(j=0;j<n;++j)
28                   printf("%d",x[i][j]);
29             printf("\n");
30       }
31 }
32 
33 
34 void init(int x[][N],int n,int value){
35             int i,j;
36 
37       for(i=0;i<n;++i)
38             for(j=0;j<n;++j)
39                   x[i][j]=value;
40 
41 }
3

运行结果

3

问题
1)
形参书写:x[][N];
实参书写:x[N][N];
2)
不能省略
3)
output:输入n行n列个value的数值
init:将二维数组中所有的数都赋值为value的数
 
实验4
源代码
 
 1 #define  _CRT_SECURE_NO_WARNINGS
 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 
10 int main() {
11     int x[N];
12     int n;
13     double ans;
14 
15     while (printf("Enter n :"), scanf("%d", &n) != EOF) {
16         input(x, n);
17         ans = median(x, n);
18         printf("ans=%g\n\n", ans);
19     }
20 
21     return 0;
22 }
23 
24 void input(int x[], int n) {
25     int i;
26 
27     for (i = 0; i < n; ++i)
28         scanf("%d", &x[i]);
29 
30 }
31 
32 double median(int x[], int n) {
33     int i;
34     int j;
35     int t;
36 
37     for (i = 0; i < n-1; ++i) {
38         for (j = 0; j < n - 1 - i; ++j) {
39             if (x[j] > x[j + 1]) {
40                 t = x[j];
41                 x[j] = x[j + 1];
42                 x[j + 1] = t;
43             }
44         }
45 
46     }
47 
48     if (n % 2 == 0) {
49         return (x[n / 2] + x[n / 2 - 1]) / 2.0;
50     }
51     else
52         return x[(n-1) / 2];
53 
54 
55 }
4

运行结果

4

任务5

源代码

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #define N 100
 4 
 5 void input(int x[][N], int n);
 6 void output(int x[][N], int n);
 7 void rotate_to_right(int x[][N], int n);
 8 
 9 int main() {
10     int x[N][N];
11     int n;
12 
13     printf("Enter n: ");
14     scanf("%d", &n);
15     input(x, n);
16 
17     printf("原始矩阵:\n");
18     output(x, n);
19 
20     rotate_to_right(x, n);
21 
22     printf("变换后矩阵:\n");
23     output(x, n);
24 
25     return 0;
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         printf("\n");
45     }
46 }
47 
48 void rotate_to_right(int x[][N], int n) {
49     int i, j;
50     int t[N];
51 
52     for (i = 0; i < n; ++i)
53         t[i] = x[i][n - 1];
54 
55     for (i = 0; i < n; ++i) {
56         for (j = n - 1; j > 0; --j) {
57             x[i][j] = x[i][j - 1];
58         }
59     }
60 
61     for (i = 0; i < n; ++i) {
62         x[i][0] = t[i];
63     }
64 }
5

运行结果

5

 

实验6

源代码

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #define N 100
 4 
 5 void dec_to_n(int x, int n);
 6 
 7 int main() {
 8     int x;
 9 
10     while (printf("输入十进制整数:"), scanf("%d", &x) != EOF) {
11 
12         dec_to_n(x, 2);
13         dec_to_n(x, 8);
14         dec_to_n(x, 16);
15 
16         printf("\n");
17     }
18 
19     return 0;
20 
21 }
22 
23 void dec_to_n(int x, int n) {
24     char t[N];
25     int cnt = 0;
26 
27     if (x == 0) {
28         printf("0");
29         printf("\n");
30     }
31 
32     if (n <= 10) {
33         while (x!=0) {
34             t[cnt] = '0' + x % n;
35             x = x / n;
36             printf("%c", t[cnt]);
37         }
38 
39         cnt++;
40 
41         printf("\n");
42 
43     }
44 
45     if (n > 10) {
46         while (x != 0) {
47             t[cnt] = 'A' + (x % n - 10);
48             x = x / n;
49             printf("%c", t[cnt]);
50         }
51 
52         cnt++;
53 
54         printf("\n");
55 
56     }
57 
58 }
6

运行结果

!!!

 

实验7

源代码

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #define N 100
 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)==1)
21             printf("是魔方矩阵\n\n");
22         else
23             printf("不是魔方矩阵\n\n");
24     }
25 
26     return 0; 
27 }
28 
29 void input(int x[][N], int n) {
30     int i, j;
31     for (i = 0; i < n; ++i) {
32         for (j = 0; j < n; ++j)
33             scanf("%d", &x[i][j]);
34     }
35 }
36 
37 void output(int x[][N], int n) {
38     int i, j;
39     for (i = 0; i < n; ++i) {
40         for (j = 0; j < n; ++j)
41             printf("%4d", x[i][j]); 
42         printf("\n");
43     }
44 }
45 
46 int is_magic(int x[][N], int n) {
47     int a = 0, b = 0, c = 0, d = 0;
48     int i, j;
49     int m = n * (n * n + 1) / 2;
50 
51     for (i = 0; i < n; ++i) {
52         for (j = 0; j < n; ++j) {
53             a += x[i][j];
54         }
55     }
56 
57     for (j = 0; j < n; ++j) {
58         for (i = 0; i < n; ++i) {
59             b += x[i][j];
60         }
61     }
62 
63     for (i = 0; i < n; ++i) {
64         c += x[i][i];
65         d += x[i][n-1-i];
66     }
67 
68     if (a == m && b == m && c == m && d == m)
69         return 1;
70     else
71         return 0;
72 }
7

运行结果

7

 

posted @ 2025-11-16 20:52  辣椒酱拌芥末  阅读(3)  评论(0)    收藏  举报