实验4

task1
 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 }
task1

捕获

问题1:连续存放;x,&x[o]相同,都表示x[0]的地址;

问题2:连续;相同;相差4*4=16个字节,为x[0][0]到x[0][4]这四个元素所占的字节

task2

 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 }
task2

捕获

形参:int x[]  实参:x

input:输入一组数据保存在数组中  compute:计算这组数除去最大最小值后的平均数

task3

 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 }
task3

捕获

形参:int x[][N]实参:x

不能省略

output:输出数组;init:控制行数列数和数组元素

task4

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 double median(int x[],int n);
 5 void input(int x[],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     return 0;
18 }
19 
20 void input(int x[],int n){
21     int i;
22     for(i=0;i<n;++i){
23         scanf("%d",&x[i]);
24     }
25 }
26 double median(int x[],int n){
27     int i,t,j;
28     double ans;
29     for(i=0;i<n-1;++i){
30         for(j=0;j<n-1-i;++j){
31             if(x[j]>x[j+1]){
32                 t=x[j];
33                 x[j]=x[j+1];
34                 x[j+1]=t;
35             }
36         } 
37     }
38     if(n%2==1){
39         ans=x[n/2];
40     }
41     else{
42         ans=(x[n/2]+x[n/2-1])/2.0;
43     }
44     return ans;
45 }
task4

屏幕截图 2025-11-13 230546

task5

 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 void input(int x[][N], int n) {
28     int i, j;
29     
30     for (i = 0; i < n; ++i) {
31         for (j = 0; j < n; ++j)
32             scanf("%d", &x[i][j]);
33     }
34 }
35 
36 void output(int x[][N], int n) {
37     int i, j;
38 
39     for (i = 0; i < n; ++i) {
40         for (j = 0; j < n; ++j)
41             printf("%4d", x[i][j]);
42 
43         printf("\n");
44     }
45 }
46 
47 void rotate_to_right(int x[][N],int n){
48     int i,j,p;
49     for(i=0;i<n;++i){
50         p=x[i][n-1];
51         for(j=n-1;j>0;--j){
52             x[i][j]=x[i][j-1];
53             } 
54         x[i][0]=p;
55         }
56 } 
task5

屏幕截图 2025-11-14 235413

task6

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

屏幕截图 2025-11-15 215452

task7

 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 
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 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 void output(int x[][N], int n) {
40     int i, j;
41 
42     for (i = 0; i < n; ++i) {
43         for (j = 0; j < n; ++j)
44             printf("%4d", x[i][j]);
45 
46         printf("\n");
47     }
48 }
49 
50 int is_magic(int x[][N],int n){
51     int i,j;
52     int o[N]={0};int p[N]={0};int r=0;int q=0;
53     
54     if(n%2==0)
55     return 0;
56     
57     int y[1000]={0};
58     for(i=0;i<n;++i){
59         for(j=0;j<n;++j){
60             int z=x[i][j];
61             if(z<1||z>n*n)
62             return 0;
63             if(y[z]==1)
64             return 0;
65             y[z]=1;
66         }
67     }
68     for(i=0;i<n;++i){
69         for(j=0;j<n;++j){ 
70             o[i]+=x[i][j];
71             p[j]+=x[i][j];
72             if(i==j){
73                 r+=x[i][j];
74             } 
75         }
76     }
77     for(i=0;i<n;++i){
78         q+=x[i][n-1-i];
79     }
80     int t=o[0];
81     for(i=1;i<n;++i){
82         if(o[i]!=o[0])
83         return 0;
84     }
85     for(j=0;j<n;++j){
86         if(p[j]!=o[0])
87         return 0;
88     }
89     if(r!=o[0]||q!=o[0])
90     return 0;
91     else
92     return 1;
93 } 
task7

屏幕截图 2025-11-15 235308

屏幕截图 2025-11-15 235350

 

posted @ 2025-11-16 00:07  ZL425  阅读(2)  评论(0)    收藏  举报