实验四

Task 1

 1 #include<stdio.h>
 2 
 3 #define N 4
 4 
 5 #define M 2
 6 
 7  
 8 
 9 void test1(){
10 
11     int x[N]={1,9,8,4};
12 
13     int i;
14 
15  
16 
17     printf("sizeof(x)=%d\n",sizeof(x));
18 
19  
20 
21     for(i=0;i<N;++i)
22 
23         printf("%p:%d\n",&x[i],x[i]);
24 
25     printf("x=%p\n",x);
26 
27 }
28 
29  
30 
31 void test2(){
32 
33     int x[M][N]={{1,9,8,4},{2,0,4,9}};
34 
35     int i,j;
36 
37     printf("sizeof(x)=%d\n",sizeof(x));
38 
39     for (i = 0; i < M; ++i)
40 
41         for (j = 0; j < N; ++j)
42 
43             printf("%p: %d\n", &x[i][j], x[i][j]);
44 
45     printf("\n");
46 
47     printf("x = %p\n", x);
48 
49     printf("x[0] = %p\n", x[0]);
50 
51     printf("x[1] = %p\n", x[1]);
52 
53     printf("\n");
54 
55 }
56 
57 int main() {
58 
59     printf("测a试º?1: int型¨ª一°?维?数ºy组Á¨¦\n");
60 
61     test1();
62 
63     printf("\n测a试º?2: int型¨ª二t维?数ºy组Á¨¦\n");
64 
65     test2();
66 
67     return 0;
68 
69 }
View Code

1

A1:是连续存放;相同。

A2:是;相同;差的是数组中储存一行数据做需要的大小。

 

Task 2

 1 #include<stdio.h>
 2 
 3 #include<stdlib.h>
 4 
 5 #define N 100
 6 
 7 void input(int x[],int n);
 8 
 9 double compute(int x[],int n);
10 
11  
12 
13 int main() {
14 
15     int x[N];
16 
17     int n,i;
18 
19     double ans;
20 
21     while(printf("Enter n:"),scanf("%d",&n))
22 
23     {
24 
25         input(x,n);
26 
27         ans=compute(x,n);
28 
29         printf("ans=%.2f\n\n",ans);
30 
31     }
32 
33     system("pause");
34 
35     return 0;
36 
37 }
38 
39  
40 
41 void input(int x[],int n){
42 
43     int i;
44 
45     for(i=0;i<n;++i)
46 
47         scanf("%d",&x[i]);
48 
49 }
50 
51  
52 
53 double compute(int x[],int n)
54 
55 {
56 
57     int i,high,low;
58 
59     double ans;
60 
61  
62 
63     high=low=x[0];
64 
65     ans=0;
66 
67  
68 
69     for(i=0;i<n;++i)
70 
71     {
72 
73         ans+=x[i];
74 
75         if(x[i]>high)
76 
77             high=x[i];
78 
79         else if(x[i]<low)
80 
81             low=x[i];
82 
83     }
84 
85  
86 
87     ans=(ans-high-low)/(n-2);
88 
89     return ans;
90 
91 }
View Code

 

2

A1:形参输入时需输入数组名称且加括号,如x[ ];实参只需要输入数组名称,如input(x,n)。

A2:input是将数据储存在数组中,compute是去掉最大值与最小值后计算这组数据的平均值。

 

Task 3

 1 #include<stdio.h>
 2 
 3  
 4 
 5 #define N 100
 6 
 7  
 8 
 9 void output(int x[][N],int n);
10 
11 void init(int x[][N],int n,int value);
12 
13  
14 
15 int main(){
16 
17     int x[N][N];
18 
19     int n,value;
20 
21     while(printf("Enter n ans value:"),scanf("%d%d",&n,&value)!=EOF){
22 
23         init(x,n,value);
24 
25         output(x,n);
26 
27         printf("\n");
28 
29     }
30 
31     return 0;
32 
33 }
34 
35  
36 
37 void output(int x[][N],int n){
38 
39     int i,j;
40 
41  
42 
43     for(i=0;i<n;i++){
44 
45         for(j=0;j<n;++j)
46 
47             printf("%d",x[i][j]);
48 
49         printf("\n");
50 
51     }
52 
53 }
54 
55 void init(int x[][N],int n,int value){
56 
57     int i,j;
58 
59     for(i=0;i<n;++i)
60 
61         for(j=0;j<n;j++)
62 
63             x[i][j]=value;
64 
65 }
View Code

3

A1 形参是x[ ][N],实参是 output(x,n)。

A2:不能不写 

A3:output是打印二维数组;inint是生成一个全是数字value的n阶方阵。

 

Task 4

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

4

 

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

5

 

Task 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 // xxx
 9 
10 int main() {
11     int x[N][N];
12     int n;
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 // 功能: 输入一个n*n的矩阵x
32 void input(int x[][N], int n) {
33     int i, j;
34 
35     for (i = 0; i < n; ++i) {
36         for (j = 0; j < n; ++j)
37             scanf("%d", &x[i][j]);
38     }
39 }
40 
41 // 功能: 输出一个n*n的矩阵x
42 void output(int x[][N], int n) {
43     int i, j;
44 
45     for (i = 0; i < n; ++i) {
46         for (j = 0; j < n; ++j)
47             printf("%4d", x[i][j]);
48 
49         printf("\n");
50     }
51 }
52 
53 int is_magic(int x[][N], int n)
54 {
55     int num[N * N] = { 0 };
56     int sum_H[N] = { 0 }, sum_L[N] = { 0 }, sum_D[N] = { 0 };//统计和
57     for (int i = 0; i < n; i++)
58     {
59         for (int j = 0; j < n; j++)
60         {
61             num[x[i][j]]++;
62         }
63     }
64     //求和
65     for (int i = 0; i < n; i++)
66     {
67         for (int j = 0; j < n; j++)
68         {
69             sum_H[i] += x[i][j];
70             sum_L[j] += x[i][j];
71         }
72     }
73     for (int i = 0; i < n; i++)
74     {
75         sum_D[0] += x[i][i];
76         sum_D[1] += x[i][n - 1 - i];
77     }
78     int sum = sum_H[0];
79     for (int i = 0; i < n; i++)
80     {
81         if (sum_H[i] != sum || sum_L[i] != sum)
82             return 0;
83     }
84     if (sum_D[0] !=sum|| sum_D[1]!=sum)
85         return 0;
86     for (int i = 1; i <= n * n; i++)
87     {
88         if (num[i] != 1)
89             return 0;
90     }
91     return 1;
92 }
View Code

62

61

 

Task 8

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int main()
 4 {
 5     long long res2, res3;
 6     int i = 0;
 7     int ans = 0;
 8     while(ans!=1)
 9     {
10         int num[10] = { 0 };
11         i++;
12         res2 = i * i;
13         res3 = i * i * i;
14         while (res2 != 0)
15         {
16             num[res2 % 10]++;
17             res2 /= 10;
18         }
19         while (res3 != 0)
20         {
21             num[res3 % 10]++;
22             res3 /= 10;
23         }
24         ans = 1;
25         for (int j = 0; j < 10; j++)
26         {
27             if (num[j] != 1)
28                 ans = 0;
29         }
30     } 
31         printf("%d", i);
32 }
View Code

8

 

 

 

 

 

posted @ 2025-11-13 19:32  Novven  阅读(0)  评论(0)    收藏  举报