实验四

task1

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     // 输出数组x占用的内存字节数
10     printf("sizeof(x) = %d\n", sizeof(x));
11 
12     // 输出每个元素的地址、值 
13     for (i = 0; i < N; ++i)
14         printf("%p: %d\n", &x[i], x[i]);
15 
16     // 输出数组名x对应的值 
17     printf("x = %p\n", x); 
18 }
19 
20 void test2() {
21     int x[M][N] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
22     int i, j;
23 
24     // 输出二维数组x占用的内存字节数
25     printf("sizeof(x) = %d\n", sizeof(x));
26 
27     // 输出每个元素的地址、值 
28     for (i = 0; i < M; ++i)
29         for (j = 0; j < N; ++j)
30             printf("%p: %d\n", &x[i][j], x[i][j]);
31     printf("\n");
32 
33     // 输出二维数组名x, 以及,x[0], x[1]的值
34     printf("x = %p\n", x);
35     printf("x[0] = %p\n", x[0]);
36     printf("x[1] = %p\n", x[1]);
37     printf("\n");
38 }
39 
40 int main() {
41     printf("测试1: int型一维数组\n");
42     test1();
43 
44     printf("\n测试2: int型二维数组\n");
45     test2();
46 
47     return 0;
48 }

Q1:是连续存放的;值是一样的

Q2:是;是;4,为一个字节的长度

task2

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

Q:从键盘中赋值到数组x[ ]中;得到x[ ]去除最大值的最小值的平均值

task3

 1 #include <stdio.h>
 2 #define N 100
 3 
 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 
18     return 0;
19 }
20 
21 // 函数定义
22 void output(int x[][N], int n) {
23     int i, j;
24 
25     for(i = 0; i < n; ++i) {
26         for(j = 0; j < n; ++j)
27             printf("%d ", x[i][j]);
28         printf("\n");
29     }
30 }
31 
32 // 函数定义
33 void init(int x[][N], int n, int value) {
34     int i, j;
35 
36     for(i = 0; i < n; ++i)
37         for(j = 0; j < n; ++j)
38             x[i][j] = value;
39 }

Q1:二维

Q2:输出x[ ]方阵;按照输入值赋值x[ ]

task4

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

task5

 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 void rotate_to_right(int x[][N],int n);
 7 
 8 int main() {
 9     int x[N][N];
10     int n;
11 
12     printf("输入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     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 
36 void output(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             printf("%4d", x[i][j]);
42 
43         printf("\n");
44     }
45 }
46 
47 void rotate_to_right(int x[][N],int n)
48 {
49     char t[N][N];
50     int i,j;
51     for(i=0;i<n;i++)
52     {
53         t[N][N]=x[i][n-1];
54         for(j=n;j>0;j--)
55         {
56             x[i][j]=x[i][j-1];
57         }
58         x[i][0]=t[N][N];
59     }
60 }

task6

 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 {
22     int i=0,m[N],t=0,a;
23     while(x!=0)
24     {
25         m[i]=x%n;
26         x=x/n;
27         i++;
28         t++;
29     }
30     for(i=t-1;i>=0;i--)
31     {
32         if(m[i]<10)
33             printf("%d",m[i]);
34         else if(m[i]>=10)
35             printf("%c",'A'+m[i]-10);
36     }
37     printf("\n"); 
38 }

task7

 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 
 8 
 9 int main() {
10     int x[N][N];
11     int n;
12 
13     while(printf("输入n: "), scanf("%d", &n) != EOF) {
14         printf("输入方阵:\n");  
15         input(x, n); 
16 
17         printf("输出方阵:\n");  
18         output(x, n);   
19 
20         if(is_magic(x, n))
21             printf("是魔方矩阵\n\n");
22         else
23             printf("不是魔方矩阵\n\n");
24     }
25 
26     return 0;
27 }
28 
29 void input(int x[][N], int n) {
30     int i, j;
31     
32     for (i = 0; i < n; ++i) {
33         for (j = 0; j < n; ++j)
34             scanf("%d", &x[i][j]);
35     }
36 }
37 
38 void output(int x[][N], int n) {
39     int i, j;
40 
41     for (i = 0; i < n; ++i) {
42         for (j = 0; j < n; ++j)
43             printf("%4d", x[i][j]);
44 
45         printf("\n");
46     }
47 }
48 
49 int is_magic(int x[][N],int n)
50 {
51     int t[N]={0},j,i,k=0;
52     for(i=0;i<n;i++)
53     {
54         for(j=0;j<n;j++)
55         {
56             t[k]+=x[i][j];
57         }
58         k++;
59     }
60     for(j=0;j<n;j++)
61     {
62         for(i=0;i<n;i++)
63         {
64             t[k]+=x[i][j];
65         }
66         k++;
67     }
68     for(i=0;i<n;i++)
69     {
70         t[k]+=x[i][i];
71     }
72     k++;
73     for(i=0;i<n;i++)
74     {
75         t[k]+=x[i][n-1-i];
76     }
77     for(i=0;i<k;i++)
78     {
79         if(t[i]!=t[i+1])
80         {
81             return 0;
82         }
83     }
84     return 1;
85 
86 }

 

posted @ 2024-11-08 11:51  yueTO  阅读(4)  评论(0编辑  收藏  举报