实验4

Test1

 

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

 

1

问题1:是,相同;

问题2: 是,相同,表示数组存储一个值所占内存大小;

Test2

 

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

 

2

问题1:int ,int;

问题2:根据输入n值,将输入的值存储到数组中;算出这组数去掉最大和最小值后的平均值赋值给ans并输出;

Test3

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

3

问题1:int,int;

问题2:不能;

问题3:根据输入的值输出相应的方阵,将scanf输入的值存储到相应的数组位置; 

Test4

 

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

 

4

Test5

 

 1 #include<stdio.h>
 2 #define N 100
 3 void input(int x[][N], int n);
 4 void output(int x[][N],int n);
 5 void rotate_to_right(int x[][N],int n);
 6 int main(){
 7     int x[N][N];
 8     int n;
 9     printf("Enter n :");
10     scanf("%d",&n);
11     input(x,n);
12     printf("原始矩阵:\n");
13     output(x,n);
14     rotate_to_right(x,n);
15     printf("变化后矩阵:\n");
16     output(x,n);
17     system("pause");
18     return 0;
19 }
20 void input(int x[][N], int n){
21     int i,j;
22     for(i=0;i<n;++i){
23         for(j=0;j<n;++j)
24            scanf("%d",&x[i][j]);
25         
26     }
27 }
28 void output(int x[][N],int n){
29     int i,j;
30     for(i=0;i<n;++i){
31         for(j=0;j<n;++j)
32            printf("%4d",x[i][j]);
33 
34         printf("\n");
35         
36     }
37 }
38 void rotate_to_right(int x[][N],int n){
39     int i,j,t;
40     for(i=0;i<n;++i){
41         t=x[i][n-1];
42         for(j=n-1;j>0;--j){
43         
44            x[i][j]=x[i][j-1];
45         }
46         x[i][0]=t;
47     }
48 }

 

5

Test6

 

 1 #include<stdio.h>
 2 #define N 100
 3 void dec_to_n(int x,int n);
 4 int main(){
 5     int x;
 6     while(printf("输入十进制整数:"),scanf("%d",&x)!=EOF){
 7          dec_to_n(x,2);
 8          dec_to_n(x,8);
 9          dec_to_n(x,16);
10          printf("\n");
11     }
12     system("pause");
13     return 0;
14 }
15 void dec_to_n(int x,int n){
16     int a[N]={0};
17     int i=0,j;
18     do{a[i]=(x%n);
19     x/=n;
20         ++i;
21     }while(x!=0);
22     for(j=i-1;j>=0;--j){
23         if(a[j]>=10){
24         printf("%c",'A'+(a[j]-10));
25         }else
26             printf("%d",a[j]);
27       }printf("\n");
28 }

 

6

Test7

 

 1 #include<stdio.h>
 2 #define N 100
 3 void input(int x[][N],int n);
 4 void output(int x[][N],int n);
 5 int is_magic(int x[][N],int n);
 6 int main(){
 7     int x[N][N];
 8     int n;
 9     while(printf("输入n:"),scanf("%d",&n)!=EOF){
10          printf("输入方阵:\n");
11          input(x,n);
12          printf("输出方阵:\n");
13          output(x,n);
14          if(is_magic(x,n))
15              printf("是魔方矩阵\n\n");
16          else
17              printf("不是魔方矩阵\n\n");
18     
19     }
20     system("pause");
21     return 0;
22 }
23 void input(int x[][N],int n){
24     int i,j;
25     for(i=0;i<n;++i){
26         for(j=0;j<n;++j)
27             scanf("%d",&x[i][j]);
28     }
29 }
30 void output(int x[][N],int n){
31     int i,j;
32     for(i=0;i<n;++i){
33         for(j=0;j<n;++j)
34            printf("%4d",x[i][j]);
35         printf("\n");
36         }
37 }
38 int is_magic(int x[][N],int n){
39     int i,j;
40     int m=0,l=0,h=0,b=0,a=0;
41     for(i=0;i<n;++i){
42         m+=x[i][0];
43     }
44     for(i=0;i<n;++i){
45         l=0;
46         for(j=0;j<n;++j){
47             l+=x[i][j];
48         }
49         if(l!=m){return 0;}
50         
51     }
52     for(j=0;j<n;++j){
53         a=0;
54         for(i=0;i<n;++i){
55             a+=x[i][j];
56         }
57         if(a!=m){return 0;}
58         
59     }
60     for(i=0;i<n;++i){
61         h+=x[i][i];
62         b+=x[i][n-1-i];
63         }if(h!=m||b!=m){return 0;}
64     return 1;
65 }

 

7.3

7.1

7.2

7.4

实验总结

1.嵌套循环中需注意重置变量,同时关注其所在位置。

2.重视理论知识点(简答题不是很会组织语言,答案也有不确定)。

【可以提点一下任务8吗?没做出来(╥╯^╰╥)】

 

posted @ 2025-11-14 16:05  wsh12345  阅读(0)  评论(0)    收藏  举报