实验4

实验1

源代码

 1 #include <stdio.h>
 2 #define N 4
 3 #define M 2
 4 void test1() {
 5 int x[N] = {1, 9, 8, 4};
 6 int i;
 7 // 输出数组x占用的内存字节数
 8 printf("sizeof(x) = %d\n", sizeof(x));
 9 // 输出每个元素的地址、 值
10 for (i = 0; i < N; ++i)
11 printf("%p: %d\n", &x[i], x[i]);
12 // 输出数组名x对应的值
13 printf("x = %p\n", x);
14 } 
15 void test2() {
16 int x[M][N] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
17 int i, j;
18 // 输出二维数组x占用的内存字节数
19 printf("sizeof(x) = %d\n", sizeof(x));
20 // 输出每个元素的地址、 值
21 for (i = 0; i < M; ++i)
22 for (j = 0; j < N; ++j)
23 printf("%p: %d\n", &x[i][j], x[i][j]);
24 printf("\n");
25 // 输出二维数组名x, 以及, x[0], x[1]的值
26 printf("x = %p\n", x);
27 printf("x[0] = %p\n", x[0]);
28 printf("x[1] = %p\n", x[1]);
29 printf("\n");
30 } 
31 int main() {
32 printf("测试1: int型一维数组\n");
33 test1();
34 printf("\n测试2: int型二维数组\n");
35 test2();
36 return 0;
37 }
View Code

实验结果

问题回答:1.是连续存放;值相同2.是按行连续存放;值相同;相差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 int main() {
 7 int x[N];
 8 int n, i;
 9 double ans;
10 while(printf("Enter n: "), scanf("%d", &n) != EOF) {
11 input(x, n); // 函数调用
12 ans = compute(x, n); // 函数调用
13 printf("ans = %.2f\n\n", ans);
14 } 
15 return 0;
16 } 
17 // 函数定义
18 void input(int x[], int n) {
19 int i;
20 for(i = 0; i < n; ++i)
21 scanf("%d", &x[i]);
22 } 
23 // 函数定义
24 double compute(int x[], int n) {
25 int i, high, low;
26 double ans;
27 high = low = x[0];
28 ans = 0;
29 for(i = 0; i < n; ++i) {
30 ans += x[i];
31 if(x[i] > high)
32 high = x[i];
33 else if(x[i] < low)
34 low = x[i];
35 } 
36 ans = (ans - high - low)/(n-2);
37 return ans;
38 }
View Code

实验结果捕获

问题回答:1.形参:int x[]实参;input(x,n)2.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 int main() {
 7 int x[N][N];
 8 int n, value;
 9 while(printf("Enter n and value: "), scanf("%d%d", &n, &value) != EOF) {
10 init(x, n, value); // 函数调用
11 output(x, n); // 函数调用
12 printf("\n");
13 } 
14 return 0;
15 } 
16  // 函数定义
17 void output(int x[][N], int n) {
18 int i, j;
19 for(i = 0; i < n; ++i) {
20 for(j = 0; j < n; ++j)
21 printf("%d ", x[i][j]);
22 printf("\n");
23 }
24 } 
25 // 函数定义
26 void init(int x[][N], int n, int value) {
27 int i, j;
28 for(i = 0; i < n; ++i)
29 for(j = 0; j < n; ++j)
30 x[i][j] = value;
31 }
View Code

实验结果捕获2

 

问题回答:1.形参:int x[][N],实参:output(x,n)2.不能省略3.output(以n行n列的形式输出输入的数字)init(把n行n列的每个元素设置成value)

实验4

源代码

 1 #include <stdio.h>
 2 #define N 100
 3 // 函数声明
 4 double median(int numble[],int n);
 5 void input(int numble[],int n);
 6 // 待补足
 7 // xxx
 8 int main() {
 9 int x[N];
10 int n;
11 double ans;
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 numble[],int n){
21 printf("请输入%d个整数:\n",n);
22 for(int i=0;i<n;i++){
23 scanf("%d",&numble[i]);
24 }
25 }
26 double median(int numble[],int n){
27 for(int i=0;i<n;i++){
28 for(int j=0;j<n-i-1;j++){
29 if (numble[j]>numble[j+1]){
30 int big=numble[j];
31 numble[j]=numble[j+1];
32 numble[j+1]=big;
33 }
34 }
35 }
36 if(n%2!=0){
37 return(double)numble[n/2];
38 }else{
39 return(double)(numble[n/2-1]+numble[n/2])/2;
40 }
41 }
42 // 待补足
43 // xxx
View Code

实验结果

捕获3

实验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 // 函数rotate_to_right声明
 8 // 待补足
 9 // ×××
10 int main() {
11     int x[N][N];
12     int n;
13     printf("Enter n: ");
14     scanf("%d", &n);
15     input(x, n);
16     printf("原始矩阵:\n");
17     output(x, n);
18     rotate_to_right(x,n);
19 // 函数rotate_to_right调用
20 // 待补足
21     printf("变换后矩阵:\n");
22     output(x, n);
23     return 0;
24 }
25 // 函数定义
26 // 功能: 输入一个n*n的矩阵x
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 // 功能: 输出一个n*n的矩阵x
35 void output(int x[][N], int n) {
36     int i, j;
37     for (i = 0; i < n; ++i) {
38         for (j = 0; j < n; ++j)
39             printf("%4d", x[i][j]);
40         printf("\n");
41     }
42 }
43 // 函数rotate_to_right定义
44 void rotate_to_right(int x[][N],int n){
45     int temp[N];
46     for(int i=0;i<n;i++){
47         temp[i]=x[i][n-1]; 
48     }
49     for(int j=n-1;j>0;j--){
50         for (int i=0;i<n;i++){
51             x[i][j]=x[i][j-1];
52         }
53     }
54     for(int i=0;i<n;i++){
55         x[i][0]=temp[i];
56     }
57 }
58 // 功能: 把一个n*n的矩阵x,每一列向右移, 最右边一列绕回左边
59 // 待补足
60 // xxx
View Code

实验结果IMG_20251116_153351

 

实验6

 1 #include <stdio.h>
 2 #define N 100
 3 void dec_to_n(int x, int n); // 函数声明
 4 int main() {
 5     int x;
 6     while(printf("输入十进制整数: "), scanf("%d", &x) != EOF) {
 7         dec_to_n(x, 2); // 函数调用: 把x转换成二进制输出
 8         dec_to_n(x, 8); // 函数调用: 把x转换成八进制输出
 9         dec_to_n(x, 16); // 函数调用: 把x转换成十六进制输出
10         printf("\n");
11     }
12     return 0;
13 }
14 // 函数定义
15 void dec_to_n(int x,int n){
16     int remainder;
17     char result[N];
18     int i=0;
19     if(x==0){
20         printf("0");
21         return;
22     }
23     if(x<0){
24         printf("-");
25         x=-x;
26     }
27     while(x!=0){
28         remainder=x%n;
29         if(remainder>=10){
30             result[i]=remainder-10+'A';
31         }else{
32             result[i]=remainder+'0';
33         }
34         i++;
35         x=x/n;
36     }
37     for(int j=i-1;j>=0;j--){
38         printf("%c",result[j]);
39     }
40 }
41 // 功能: 把十进制数x转换成n进制,打印输出
42 // 补足函数实现
View Code

 

源代码

实验结果IMG_20251116_150235

 

实验7

源代码

 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 // 待补足函数is_magic声明
 8 // xxx
 9 int main() {
10     int x[N][N];
11     int n;
12     while(printf("输入n: "), scanf("%d", &n) != EOF) {
13         printf("输入方阵:\n"); 
14         input(x, n); 
15         printf("输出方阵:\n"); 
16         output(x, n); 
17         if(is_magic(x, n))
18             printf("是魔方矩阵\n\n");
19             else
20             printf("不是魔方矩阵\n\n");
21     }
22     return 0;
23 }
24 // 函数定义
25 // 功能: 输入一个n*n的矩阵x
26 void input(int x[][N], int n) {
27     int i, j;
28     for (i = 0; i < n; ++i) {
29         for (j = 0; j < n; ++j)
30             scanf("%d", &x[i][j]);
31     }
32 }
33 // 功能: 输出一个n*n的矩阵x
34 void output(int x[][N], int n) {
35     int i, j;
36     for (i = 0; i < n; ++i) {
37         for (j = 0; j < n; ++j)
38         printf("%4d", x[i][j]);
39         printf("\n");
40     }
41 }
42 int is_magic(int x[][N],int n){
43     int sum=0;
44     for(int j=0;j<n;j++){
45         sum += x[0][j];
46     }
47     for(int i=1;i<n;i++){
48         int row_sum=0;
49         for(int j=0;j<n;j++){
50             row_sum+=x[i][j];
51         }
52         if(row_sum!=sum){
53             return 0;
54         }
55     }
56         for(int j=0;j<n;j++){
57             int col_sum=0;
58             for(int i=0;i<n;i++){
59                 col_sum+=x[i][j];
60             }
61             if(col_sum!=sum){
62                 return 0;
63             }
64         }
65         int diag1_sum=0;
66         for(int i=0;i<n;i++){
67             diag1_sum+=x[i][i];
68         }
69         if(diag1_sum!=sum){
70             return 0;
71         }
72         int diag2_sum=0;
73         for(int i=0;i<n;i++){
74             diag2_sum+=x[i][i];
75         }
76         if(diag2_sum!=sum){
77             return 0;
78         }
79         int used[N*n+1]={0};
80         for(int i=0;i<n;i++){
81             for(int j=0;j<n;j++){
82                 int num=x[i][j];
83                 if(num<1||num>n*n||used[num]){
84                     return 0;
85                 }
86                 used[num]=1;
87         }
88     }
89     return 1;
90 }
91 // 功能: 判断一个n阶方阵是否为魔方矩阵,如果是,返回1,否则,返回0
92 // 待补足函数is_magic定义
93 // xxx
View Code

 

实验结果IMG_20251116_153351

 

posted @ 2025-11-16 15:38  错过不算爱  阅读(5)  评论(1)    收藏  举报