實驗4 c語言陣列應用程式設計

施5114發表於2024-11-10

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 }

相關文章