实验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:是连续存放,值一样

问题2:是按行连续存放,字面上一样,x[0],x[1]相差16,原因为x[0]x[1]之间相差4个数,每个占4个字节,所以相差16。

 

实验任务2

源代码:

 

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

 

图片

问题

问题:input 为输入数组的值

Compute 为求数组中各数除去最大值最小值后的平均数

 

实验任务3

源代码:

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

图片

问题

问题1:第二维不能省略

问题2:output输出行数和列数,init输出每行每列的数。

 

实验任务4

源代码:

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

图片

 

实验任务5

源代码:

 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  printf("\n");
43     }
44 }
45 
46 void rotate_to_right(int x[][N], int n){
47     int i,j,r;
48     
49     for(i=0;i<n;i++){
50         r = x[i][n-1];
51         for(j=n-1;j>0;j--){
52             x[i][j]=x[i][j-1];
53         }
54         x[i][0]=r;
55     }
56 }

图片

 

实验任务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 
20 void dec_to_n(int x, int n){
21     int i=0,j;
22     char s[N];
23     char d[] = "0123456789ABCDEF";
24     
25     while(x != 0){
26         s[i++]= d[x % n];
27         x /= n;
28     }
29     for(j = i-1;j>=0;j--)
30     printf("%c",s[j]);
31     
32     printf(" ");
33 }

图片

 

实验任务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 
 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   printf("\n");
45     }
46 }
47 
48 int is_magic(int x[][N], int n){
49     int s,i,j;
50     int sum;
51     sum = n*(n*n+1)/2;
52     
53     for(i=0;i<n;++i){
54         s = 0;
55         for(j=0;j<n;j++){
56         s += x[i][j];
57         }
58         if (s != sum)
59             return 0;
60     }
61     for(j=0;j<n;++j){
62         s = 0;
63         for(i=0;i<n;i++){
64         s += x[i][j];
65         }
66         if (s != sum)
67             return 0;
68     }
69     s = 0;
70     for(i=0;i<n;++i){
71         s += x[i][n-1-i];
72     }
73     if (s != sum)
74             return 0;
75 
76     return 1;
77 }

图片

 

posted @ 2024-11-08 18:18  scjzl  阅读(5)  评论(0编辑  收藏  举报