实验4

试验任务1

 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 }

 

问题1

是连续存放的,和&x[0]对应的值是一样的

问题2

是连续存放的,是一样的

试验任务2

 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 {
 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 
16     return 0;
17 }
18 
19 void input(int x[],int n)
20 {
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 {
28     int i;
29     int high,low;
30     double ans;
31     
32     high=low=x[0];
33     ans=0;
34     for(i=0;i<n;i++)
35     {
36     ans+=x[i];
37     
38     if(x[i]>high)
39     high=x[i];
40     if(x[i]<low)
41     low=x[i];
42     }
43     ans=(ans-high-low)/(n-2);
44     
45     return ans;
46 }

问题

input用于数组的输入

compute首先计算数组所有元素的总和,找出最大最小值,接着计算

ans=(总和-最大-最小)/(n-2)

试验任务三
 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 
 6 int main() {
 7     int x[N][N];
 8     int n, value;
 9 
10     while(printf("Enter n and value: "), scanf("%d%d", &n, &value) != EOF) {
11         init(x, n, value); 
12         output(x, n);      
13         printf("\n");
14     }
15 
16     return 0;
17 }
18 
19 void output(int x[][N], int n) {
20     int i, j;
21 
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 
29 void init(int x[][N], int n, int value) {
30     int i, j;
31 
32     for(i = 0; i < n; ++i)
33     for(j = 0; j < n; ++j)
34     x[i][j] = value;
35 }

问题1

第二维不能省略

问题2

输出数组各元素的值,为数组各元素赋一个值

 

试验任务4

 

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

 

 

 实验任务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 // 函数rotate_to_right声明
10 // 待补足
11 // ×××
12 
13 int main() {
14     int x[N][N];
15     int n;
16 
17     printf("输入n: "); 
18     scanf("%d", &n);
19     input(x, n);
20 
21     printf("原始矩阵:\n");
22     output(x, n);
23 
24     // 函数rotate_to_right调用
25     // 待补足
26  rotate_to_right(x,n);   
27 
28     printf("变换后矩阵:\n");
29     output(x, n);
30 
31     return 0;
32 }
33 
34 // 函数定义
35 // 功能: 输入一个n*n的矩阵x
36 void input(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             scanf("%d", &x[i][j]);
42     }
43 }
44 
45 // 函数定义
46 // 功能: 输出一个n*n的矩阵x
47 void output(int x[][N], int n) {
48     int i, j;
49 
50     for (i = 0; i < n; ++i) {
51         for (j = 0; j < n; ++j)
52             printf("%4d", x[i][j]);
53 
54         printf("\n");
55     }
56 }
57 
58 // 函数rotate_to_right定义
59 // 功能: 把一个n*n的矩阵x,每一列向右移, 最右边被移出去的一列绕回左边
60 // 待补足
61 // xxx
62 void rotate_to_right(int x[][N],int n)
63 {
64     int i,j;
65     int t,s;
66     for(i=0;i<n;i++)
67     {
68         for(j=0;j<n;j++)
69         {
70             if(j==0)
71             {
72             t=x[i][j];
73             x[i][j]=x[i][n-1];
74             
75             }
76             else
77             {
78             s=x[i][j];
79             x[i][j]=t;
80             t=s;
81             }
82             
83         }
84     }
85     
86 }


实验任务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 

24 void dec_to_n(int x,int n)
25 {
26     int ans=0;
27     int ret;
28     int m=1;
29     
30     
31     
32     if(n>10)
33     {
34         char hex[100];
35         int i=0,j;
36         
37         while(x>0)
38         {
39             ret=x%n;
40             if(ret<10)
41             {
42                 hex[i++]=ret+'0';     
43             }
44             else
45             {
46                 hex[i++]=ret-10+'A';
47             }
48             x/=n;
49         }
50         
51         for(j=i-1;j>=0;j--)
52         {
53             printf("%c",hex[j]);
54         }
55     }
56       do
57         {
58           ret=x%n;
59           x=x/n;
60           ans+=ret*m;
61           m*=10;
62         }while(x!=0);
63    
64     printf("%d\n",ans);
65 }

 

实验任务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 // 待补足函数is_magic声明
  9 // xxx
 10 
 11 int main() {
 12     int x[N][N];
 13     int n;
 14 
 15     while(printf("输入n: "), scanf("%d", &n) != EOF) {
 16         printf("输入方阵:\n");  
 17         input(x, n); 
 18 
 19         printf("输出方阵:\n");  
 20         output(x, n);   
 21 
 22         if(is_magic(x, n))
 23             printf("是魔方矩阵\n\n");
 24         else
 25             printf("不是魔方矩阵\n\n");
 26     }
 27 
 28     return 0;
 29 }
 30 
 31 // 函数定义
 32 // 功能: 输入一个n*n的矩阵x
 33 void input(int x[][N], int n) {
 34     int i, j;
 35     
 36     for (i = 0; i < n; ++i) {
 37         for (j = 0; j < n; ++j)
 38             scanf("%d", &x[i][j]);
 39     }
 40 }
 41 
 42 // 功能: 输出一个n*n的矩阵x
 43 void output(int x[][N], int n) {
 44     int i, j;
 45 
 46     for (i = 0; i < n; ++i) {
 47         for (j = 0; j < n; ++j)
 48             printf("%4d", x[i][j]);
 49 
 50         printf("\n");
 51     }
 52 }
 53 
 54 
 55 // 功能: 判断一个n阶方阵是否为魔方矩阵,如果是,返回1,否则,返回0
 56 // 待补足函数is_magic定义
 57 // xxx
 58 int is_magic(int x[][N],int n)
 59 {
 60     int ret=1;
 61     int s=0,s1=0;
 62     int i,j;
 63     
 64     for(j=0;j<n;j++)
 65     {
 66         s+=x[0][j];
 67     }
 68     for(i=1;i<n;i++)
 69     {
 70         s1=0;
 71         for(j=0;j<n;j++)
 72         {
 73             s1+=x[i][j];
 74         }
 75         if(s1!=s)
 76         ret=0;
 77     }
 78     
 79     for(j=0;j<n;j++)
 80     {
 81         s1=0;
 82         for(i=0;i<n;i++)
 83         {
 84             s1+=x[i][j];
 85         }
 86         if(s1!=s)
 87         ret=0;
 88     }
 89     
 90     i=0;
 91     j=0;
 92     s1=0;
 93     for(i=0;i<n;i++)
 94         {
 95             
 96             s1+=x[i][j];
 97             j++;
 98         }
 99         if(s1!=s)
100         ret=0;
101     
102     
103     i=n-1;
104     j=n-1;
105     s1=0;
106     for(i=n-1;i>=0;i--)
107         {
108             
109             s1+=x[i][j];
110             j--;
111         }
112         if(s1!=s)
113         ret=0;
114     
115     
116     return ret;    
117     
118 }

 

 

 
posted @ 2024-11-07 11:19  王昊祺  阅读(7)  评论(0编辑  收藏  举报