实验4

实验1:

源码:

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

截图:

问题1;

是。一样的

问题2:

是。一样的。4个字节。int所占内存

实验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 int main(){
 7     int x[N];
 8     int n,i;
 9     double ans;
10     while(printf("Enter n:"),scanf("%d",&n)!=EOF){
11         input(x,n);
12         ans=compute(x,n);
13         printf("ans=%.2f\n\n",ans);
14     }
15     system("pause");
16     return 0;
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 compute(int x[],int n){
24     int i,high,low;
25     double ans;
26     high=low=x[0];
27     ans=0;
28     for(i=0;i<n;i++){
29         ans+=x[i];
30         if(x[i]>high)
31             high=x[i];
32         else if(x[i]<low)
33             low=x[i];
34     }
35     ans=(ans-high-low)/(n-2);
36     return ans;
37 }

截图:

问题:

给数组赋n个值。计算去掉最大值和最小值的平均值

实验3:

源码:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define N 100
 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     system("pause");
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 }

截图:

问题1:

列标

问题2:

output的功能是输出n × n的数组。init是给n x n的数组赋值

实验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     int x[N];
 8     int n;
 9     double ans;
10 
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     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 median(int x[],int n){
27     int i,j,t;
28     for(i=0;i<n-1;i++)
29         for(j=0;j<n-i-1;j++)
30             if(x[j]>x[j+1]){
31                 t=x[j];
32                 x[j]=x[j+1];
33                 x[j+1]=t;
34             }
35     if(n%2)
36         return x[n/2];
37     else
38         return (x[n/2-1]+x[n/2])/2.0;
39 }

截图:

实验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 int main(){
 9     int x[N][N];
10     int n;
11 
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     printf("变换后矩阵:\n");
21     output(x,n);
22 
23     system("pause");
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 void output(int x[][N],int n){
36     int i,j;
37 
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 a[N],i,j;
47     for(i=0;i<n;i++){
48         a[i]=x[i][n-1];
49         for(j=n-2;j>=0;j--)
50             x[i][j+1]=x[i][j];
51         x[i][0]=a[i];
52     }
53 }

截图:

实验6:

源码:

 1 #include<stdio.h>
 2 #include<stdlib.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         dec_to_n(x,2);
12         dec_to_n(x,8);
13         dec_to_n(x,16);
14         
15         printf("\n");
16     }
17     system("pause");
18     return 0;
19 }
20 
21 void dec_to_n(int x,int n){
22     int a[N],i,j=0;
23     for(i=x;i!=0;i/=n){
24         a[j]=x%n;
25         x/=n;
26         j++;
27     }
28     for(i=j-1;i>=0;i--){
29         if(a[i]%n>9)    
30             printf("%c",a[i]-10+'A');
31         else
32             printf("%c",a[i]+'0');
33     }
34     printf("\n");
35 }

截图:

实验7:

源码:

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #define N 100
 5 
 6 void input(int x[][N],int n);
 7 void output(int x[][N],int n);
 8 int is_magic(int x[][N],int n);
 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     system("pause");
27     return 0;
28 }
29 
30 void input(int x[][N],int n){
31     int i,j;
32     for(i=0;i<n;i++)
33         for(j=0;j<n;j++)
34             scanf("%d",&x[i][j]);
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 
48 int is_magic(int x[][N],int n){
49     int sum1=0,sum2=0,sum3=0,sum4=0,i,j;
50     for(j=0;j<n;j++){
51         sum3+=x[j][j];
52         sum4+=x[n-1-j][j];
53     }
54     for(i=0;i<n;i++){
55         for(j=0;j<n;j++){
56             sum1+=x[i][j];
57             sum2+=x[j][i];
58         }
59         if(sum1!=sum2||sum1!=sum3||sum1!=sum4)
60             return 0;
61         sum1=0;
62         sum2=0;
63     }
64     return 1;
65 }

截图:

 

posted @ 2024-11-09 16:19  liuseki  阅读(8)  评论(0编辑  收藏  举报