实验四

实验1
#include <stdio.h> #define N 4 #define M 2 void test1() { int x[N] = {1, 9, 8, 4}; int i; printf("sizeof(x) = %d\n", sizeof(x)); for (i = 0; i < N; ++i) printf("%p: %d\n", &x[i], x[i]); printf("x = %p\n", x); } void test2() { int x[M][N] = {{1, 9, 8, 4}, {2, 0, 4, 9}}; int i, j; printf("sizeof(x) = %d\n", sizeof(x)); for (i = 0; i < M; ++i) for (j = 0; j < N; ++j) printf("%p: %d\n", &x[i][j], x[i][j]); printf("\n"); printf("x = %p\n", x); printf("x[0] = %p\n", x[0]); printf("x[1] = %p\n", x[1]); printf("\n"); } int main() { printf("测试1: int型一维数组\n"); test1(); printf("\n测试2: int型二维数组\n"); test2(); return 0; }
1

是 相同

是 相同 32 每行4个int型整数所占字节数

 

实验2

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

2

形参:int【】 实参:x

input:输入数据

compute:去掉最大值和最小值取平均值

 

实验3

 1 #include <stdio.h>
 2 #define N 100
 3 void output(int x[][N], int n);
 4 void init(int x[][N], int n, int value);
 5 int main() {
 6     int x[N][N];
 7     int n, value;
 8     while(printf("Enter n and value: "), scanf("%d%d", &n, &value) != EOF) {
 9         init(x, n, value); 
10         output(x, n);     
11         printf("\n");
12     }
13     return 0;
14 }
15 void output(int x[][N], int n) {
16     int i, j;
17     for(i = 0; i < n; ++i) {
18         for(j = 0; j < n; ++j)
19             printf("%d ", x[i][j]);
20         printf("\n");
21     }
22 }
23 void init(int x[][N], int n, int value) {
24     int i, j;
25     for(i = 0; i < n; ++i)
26         for(j = 0; j < n; ++j)
27             x[i][j] = value;
28 }

3.1

3.2

形参:int【】【】 实参:x

不能

output:输出n行n列元素

init:将value值赋给每个元素

 

实验4

 1 #include <stdio.h>
 2 #define N 100
 3 void input(int x[], int n);
 4 double median(int x[], int n);
 5 void sort(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 
18     return 0;
19 }
20 
21 void input(int x[], int n) {
22     int i;
23     for(i = 0; i < n; i++) {
24         scanf("%d", &x[i]);
25     }
26 }
27 
28 void sort(int x[], int n) {
29     int i,j;
30     for(i = 0; i < n-1; i++) {
31         for(j = 0; j < n-i-1; j++) {
32             if(x[j] > x[j+1]) {
33                 int temp = x[j];
34                 x[j] = x[j+1];
35                 x[j+1] = temp;
36             }
37         }
38     }
39 }
40 
41 double median(int x[], int n) {
42         sort(x, n);
43      if(n % 2 == 1) {
44         return (double)x[n/2];
45     } else {
46             return (double)(x[n/2-1] + x[n/2]) / 2.0;
47     }
48 }

屏幕截图 2025-11-13 150035

 

 实验5

 1 #include <stdio.h>
 2 #define N 10  
 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("%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     printf("输入矩阵元素:\n");
30     for (i = 0; i < n; ++i) {
31         for (j = 0; j < n; ++j) {
32             scanf("%d", &x[i][j]);  
33         }
34     }
35 }
36 
37 void output(int x[][N], int n) {
38     int i, j;
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     int i, j;
49     int temp[N];  
50 
51     for (i = 0; i < n; i++) {
52         temp[i] = x[i][n-1];
53     }
54 
55     for (j = n-1; j > 0; j--) {
56         for (i = 0; i < n; i++) {
57             x[i][j] = x[i][j-1];
58         }
59     }
60 
61     for (i = 0; i < n; i++) {
62         x[i][0] = temp[i];
63     }
64 }

屏幕截图 2025-11-13 151330

 

 

实验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         printf("\n");
14     }
15     return 0;
16 }
17 
18 void dec_to_n(int x, int n) {
19     char digits[] = "0123456789ABCDEF";
20     char result[N]; 
21     int index = 0;
22     int temp = x;
23 
24     if (x == 0) {
25         printf("0\n");
26         return;
27     }
28 
29     if (x < 0) {
30         temp = -x;
31     }
32 
33     while (temp > 0) {
34         int remainder = temp % n;
35         result[index++] = digits[remainder];
36         temp = temp / n; 
37     }
38 
39     if (x < 0) {
40         printf("-");
41     }
42 int i;
43     for (i = index - 1; i >= 0; i--) {
44         printf("%c", result[i]);
45     }
46     printf("\n");
47 }

屏幕截图 2025-11-13 152009

 

实验7

 

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

屏幕截图 2025-11-13 154250

 

posted @ 2025-11-16 10:30  cchheenn  阅读(12)  评论(1)    收藏  举报