实验4 c语言数组应用编程

task1:

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

问题1:是连续存放的     x对应的是数组中第一个元素的地址,&x[0]是指第一个元素的值

问题2:是按行连续存放的   三者的值并不相同  x[0] x[1]相差一行元素所占的字节数   意义是方便我们找到对应元素的地址

 

task2:

 

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define N 100
 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 
14     while(printf("Enter n:"),scanf("%d",&n)!=EOF){
15         input(x,n);
16         ans=compute(x,n);
17         printf("ans=%.2f\n\n",ans);
18 
19 
20     }
21     system("pause");
22     return 0;
23 }
24 
25 
26 void input(int x[],int n){
27     int i;
28     for(i=0;i<n;++i)
29         scanf("%d",&x[i]);
30 
31 }
32 
33 
34 double compute(int x[],int n){
35     int i,high,low;
36     double ans;
37 
38     high=low=x[0];
39     ans=0;
40 
41     for(i=0;i<n;++i){
42         ans+=x[i];
43 
44         if(x[i]>high)
45             high=x[i];
46         else if(x[i]<low)
47             low=x[i];
48     }
49 
50     ans=(ans-high-low)/(n-2);
51 
52     return ans;
53 }

问题1 形参书写形式是数据类型+数组名  实参书写形式是数组名

问题2 input 功能是键盘输入数组元素  compute功能是计算数组中除去最大最小值后的剩余元素的均值

 

task3:

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

 

 

 

问题1:形参书写形式:数据类型+数组名  实参书写类型:数组名

问题2:第二维

问题3:output:打印输出n*n的数组  init:为数组的中的每个元素都附上相同的值

 

task4:

 1 #include<stdio.h>
 2 #define N 100
 3 
 4 void input(int x[N], int n);
 5 double median(int x[N], int n);
 6 
 7 
 8 int main(){
 9     int x[N];
10     int n;
11     double ans;
12 
13     while (printf("Enter n:"), scanf_s("%d", &n) != EOF) {
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[N], int n) {
23     int i;
24     for (i = 0;i < n;++i)
25         scanf_s("%d", &x[i]);
26 
27 }
28 
29 double median(int x[N], int n) {
30     int i, j;
31     int t;
32     double ans;
33     for(i=0;i<n-1;++i)
34         for(j=0;j<n-1-i;++j)
35             if (x[j] > x[j + 1]) {
36                 t = x[j + 1];
37                 x[j + 1] = x[j];
38                 x[j] = t;
39             }
40     if (n % 2 == 0)
41         ans = (x[n / 2 - 1]*1.0 + x[n / 2]*1.0) / 2;
42     else
43         ans = x[n / 2];
44 
45     return ans;
46 }

 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("Enter n:");
13     scanf_s("%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_s("%d", &x[i][j]);
33     }
34 
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("%d", x[i][j]);
43 
44         printf("\n");
45     }
46         
47 }
48 
49 void rotate_to_right(int x[][N], int n){
50     int i,j;
51     int t;
52     
53     for (i = 0;i < n;++i) {
54         t = x[i][n - 1];
55         for (j = n - 1;j >= 1;--j) {
56             x[i][j] = x[i][j - 1];
57 
58         }
59         x[i][0] = t;
60     }
61 
62 }

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_s("%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     return 0;
17 }
18 
19 void dec_to_n(int x, int n) {
20     char t[N];
21     int i = 0, j;
22     while (x != 0) {
23         if (x % n < 10)
24             t[i] = x % n + '0';
25         else
26             t[i] = x % n - 10 + 'A';
27 
28         x = x / n;
29         i += 1;
30     }
31     for (j = i - 1;j >= 0;--j)
32         printf("%c", t[j]);
33           
34     printf("\n");
35 }

 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 
 7 
 8 int main() {
 9     int x[N][N];
10     int n;
11 
12     while (printf("输入n:"), scanf_s("%d", &n) != EOF) {
13         printf("输入方阵:\n");
14         input(x, n);
15 
16         printf("输出方阵:\n");
17         output(x, n);
18 
19         if (is_magic(x, n))
20             printf("是魔方矩阵\n\n");
21         else
22             printf("不是魔方矩阵\n\n");
23 
24     }
25     return 0;
26 }
27 
28 void input(int x[][N], int n) {
29     int i, j;
30 
31     for (i = 0;i < n;++i) {
32         for (j = 0;j < n;++j)
33             scanf_s("%4d", &x[i][j]);
34 
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 
50 int is_magic(int x[][N], int n) {
51     int sum = 0,sum1 = 0, sum2 = 0, sum3 = 0;
52     int m,i,j;
53     for (m = 0;m < n;++m)
54         sum += x[0][m];
55     for (i = 0;i < n;++i)
56         for (j = 0;j < n;++j) {
57             sum1 += x[i][j];
58         }
59     if (sum1 != sum)
60         return 0;
61             
62     for (i = 0;i < n;++i)
63         for (j = 0;j < n;++j) {
64             sum2 += x[j][i];
65         }
66     if (sum2 != sum)
67         return 0;
68     
69     for (i = 0;i < n;++i) {
70         sum3 += x[i][i];
71     }
72     if (sum3 != sum)
73         return 0;
74 
75     return 1;
76 
77 }

 

posted @ 2024-11-10 16:57  sunishope  阅读(5)  评论(0编辑  收藏  举报