实验4

Task1.c

 

问题1:是,是

问题2:是,是,相差为4,x[0]所占字节

 

Task2.c

 形参形式:int fuc(int x[]),实参形式:fuc(x)

input作用:输入数组,确定数组元素。compute功能:去掉最大值,去掉最小值,取平均数

 

Task3.c

 观察:形参书写形式:int x[][N]。实参书写形式:x

问题1:二维

问题2:output:确定二维数组数组的行数和二维数组的值。init:将二维数组初始化为一个n阶0矩阵。

 

Task4.c

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 // 函数声明
 5 void input(int x[],int n);
 6 double median(int x[],int n);
 7 // 待补足
 8 // xxx
 9 
10 int main() {
11     int x[N];
12     int n;
13     double ans;
14 
15     while(printf("Enter n: "), scanf("%d", &n) != EOF) {
16         input(x, n);
17         ans = median(x, n);
18         printf("ans = %g\n\n", ans);
19     }
20 
21     return 0;
22 }
23 
24 // 函数定义
25 // 待补足
26 // xxx
27 void input(int x[],int n)
28 {
29     for (int i = 0; i < n; i++)
30     {
31         scanf("%d",&x[i]);
32     }
33 }
34 
35 double median(int x[],int n)
36 {
37     int i, j;
38     for (i = 0; i < n - 1; i++) {
39         for (j = 0; j < n - i - 1; j++) {
40             if (x[j] > x[j + 1]) {
41                 int temp = x[j];
42                 x[j] = x[j + 1];
43                 x[j + 1] = temp;
44             }
45         }
46     }
47     if (n%2==0)
48     {
49         int a,b;
50         double c;
51         a=n/2;
52         b=(n/2)+1;
53         c=(x[a-1]+x[b-1])/2.0;
54         return c;
55     }
56     else
57     {
58         int d;
59         d=(n+1)/2;
60         return x[d-1];
61     }
62 }

 

task5.c

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

 

 

 

Task6.c

 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);  // 函数调用: 把x转换成二进制输出
11         dec_to_n(x, 8);  // 函数调用: 把x转换成八进制输出
12         dec_to_n(x, 16); // 函数调用: 把x转换成十六进制输出
13 
14         printf("\n");
15     }
16 
17     return 0;
18 }
19 
20 // 函数定义
21 // 功能: 把十进制数x转换成n进制,打印输出
22 // 补足函数实现
23 // xxx
24 
25 void dec_to_n(int x, int n)
26 {
27     int yu[20],t=0;
28     while (x!=0)
29     {
30         yu[t]=x%n;
31         x/=n;
32         t++;
33     }
34     int i;
35     for ( i = t-1; i >= 0; i--)
36     {
37         if(yu[i]>=10&&n==16)
38         {
39         printf("%c",yu[i]-10+'A');
40     }
41     else
42     {
43         printf("%d",yu[i]);
44     }
45     }
46     printf("\n");
47     
48 }

 

 

 

 Task7.c

  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 ans=0,sum=0;
 61     //hang
 62     for (int i = 0; i < n; i++)
 63     {
 64         sum+=x[0][i];
 65     }
 66     for (int i = 0; i < n; i++)
 67     {
 68         ans=0;
 69         for (int j = 0; j < n; j++)
 70         {
 71             ans+=x[i][j];
 72         }
 73         if (sum!=ans)
 74         {
 75             return 0;
 76         } 
 77     }
 78     //lie
 79     for (int i = 0; i < n; i++)
 80     {
 81         ans=0;
 82         for (int j = 0; j < n; j++)
 83         {
 84             ans+=x[j][i];
 85         }
 86         if (sum!=ans)
 87         {
 88             return 0;
 89         } 
 90     }
 91     //fuduijiaoxian
 92     ans=0;
 93     for (int i = 0; i < n; i++)
 94     {
 95         ans+=x[i][n-1-i];
 96     }
 97     if (ans!=sum)
 98         {
 99             return 0;
100         }
101     //zhuduijiaoxian
102     ans=0;
103     for (int i = 0; i < n; i++)
104     {
105         ans+=x[i][i];
106     }
107     if (ans!=sum)
108         {
109             return 0;
110         }
111     
112     return 1;
113         
114 }

 

posted @ 2024-11-04 14:58  JackSusan'  阅读(21)  评论(0编辑  收藏  举报