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

屏幕截图 2025-11-17 130523

1:连续;表示值相等

2:连续;相同;16;按行连续

任务2:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define N 100
 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     while(printf("Enter n:"),scanf("%d",&n)!=EOF){
12         input(x,n);
13         ans=compute(x,n);
14         printf("ans=%.2f\n\n",ans);
15     }
16     system("pause");
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 compute(int x[],int n){
27     int i,high,low;
28     double ans;
29 
30     high=low=x[0];
31     ans=0;
32 
33     for(i=0;i<n;++i){
34         ans+=x[i];
35 
36         if(x[i]>high)
37             high=x[i];
38         else if(x[i]<low)
39             low=x[i];
40     }
41     ans=(ans-high-low)/(n-2);
42 
43     return ans;
44 }

屏幕截图 2025-11-17 130813

任务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     return 0;
18 }
19 
20 void output(int x[][N],int n){
21     int i,j;
22     for(i=0;i<n;++i){
23         for(j=0;j<n;++j)
24             printf("%d",x[i][j]);
25         printf("\n");
26     }
27 }
28 void init(int x[][N],int n,int value){
29     int i,j;
30     for(i=0;i<n;++i)
31         for(j=0;j<n;++j)
32             x[i][j]=value;
33 }

屏幕截图 2025-11-17 130914

任务4:

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

屏幕截图 2025-11-17 131126

任务5

 1 #include<stdio.h>
 2 #include<stdlib.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     printf("Enter 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     system("pause");
25     return 0;
26 }
27 
28 void input(int x[][N],int n){
29     int i,j;
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     for(i=0;i<n;i++){
39         for(j=0;j<n;j++)
40             printf("%4d",x[i][j]);
41         printf("\n");
42     }
43 }
44 
45 void rotate_to_right(int x[][N],int n){
46     int k[N][N],i,j;
47     for(i=0;i<n;i++){
48         k[i][N]=x[i][n-1];
49         for(j=n-1;j>0;--j){
50             x[i][j]=x[i][j-1];
51         }
52         x[i][0]=k[i][N];
53     }
54 }

屏幕截图 2025-11-17 131231

任务6:

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

屏幕截图 2025-11-17 131516

任务7:

  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 int is_magic(int x[][N], int n);
  7 void b_sort(int x[], int n);
  8 int main() {
  9     int x[N][N];
 10     int n;
 11 
 12     while (printf("输入n: "), scanf("%d", &n) != EOF) {
 13         printf("输入方阵:\n");
 14         input(x, n);
 15 
 16         printf("输出方阵:\n");
 17         output(x, n);
 18 
 19         if (is_magic(x, n))
 20             printf("是魔方矩阵\n\n");
 21         else
 22             printf("不是魔方矩阵\n\n");
 23     }
 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 void output(int x[][N], int n) {
 38     int i, j;
 39 
 40     for (i = 0; i < n; ++i) {
 41         for (j = 0; j < n; ++j)
 42             printf("%4d", x[i][j]);
 43 
 44         printf("\n");
 45     }
 46 }
 47 void b_sort(int x[], int n)
 48 {
 49     int i; 
 50     for(i = 0; i < n; i++)
 51     {
 52         int j;
 53         for (j = 0; j < n-1; j++)
 54         {
 55             if (x[j + 1] < x[j])
 56             {
 57                 x[j + 1] ^= x[j];
 58                 x[j] ^= x[j + 1];
 59                 x[j + 1] ^= x[j];
 60             }
 61         }
 62     }
 63 }
 64 
 65 int is_magic(int x[][N], int n)
 66 {
 67     int is_nn=0, is_sum=1;
 68     int st_sum=0,sum=0;
 69     int y[N * N],cnt=0;
 70     int i;
 71     for (i = 0; i < n; i++)
 72     {
 73         int j;
 74         for (j = 0; j < n; j++)
 75         {
 76             y[cnt++] = x[i][j];
 77         }
 78     }
 79     b_sort(y, n * n);
 80     int i;
 81     for (i = 0; i < n * n; i++)
 82     {   
 83         is_nn = 0;
 84         if (y[i] != i + 1)
 85             break;
 86         else 
 87             is_nn = 1;
 88     }
 89     int i;
 90     for (i = 0; i < n; i++)
 91     {
 92         st_sum += x[0][i];
 93     }
 94     int i;
 95     for (i = 1; i < n; i++)
 96     {
 97         sum = 0;
 98         int j;
 99         for (j = 0; j < n; j++)
100         {
101             sum += x[i][j];
102         }
103         if (sum != st_sum)
104         {
105             is_sum = 0;
106             break;
107         }
108       
109     }
110     if (is_sum == 1)
111     {
112         int i;
113         for (i = 0, sum = 0; i < n; i++)
114         {
115             sum = 0;
116             int j;
117             for (j = 0; j < n; j++)
118             {
119                 sum += x[j][i];
120             }
121             if (sum != st_sum)
122             {
123                 is_sum = 0;
124                 break;
125             }
126         }
127     }
128     if (is_sum == 1)
129     {
130         sum = 0;
131         int i;
132         for (i = 0; i < n; i++)
133         {
134             sum += x[i][i];
135         }
136         if (sum != st_sum)
137             is_sum=0;
138     }
139     if (is_sum == 1)
140     {
141         sum = 0;
142         int i;
143         for (i = n-1; i >= 0; i--)
144         {
145             sum += x[i][i];
146         }
147         if (sum != st_sum)
148             is_sum=0;
149     }
150     if (is_nn && is_sum)
151         return 1;
152     else
153         return 0;
154 }

屏幕截图 2025-11-17 131634

 

posted @ 2025-11-17 13:16  nanxinyin  阅读(6)  评论(1)    收藏  举报