实验四

任务一

1:是。相同。

2:是。相同。差16,含义是第一行的总字节数。

 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=%d.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         
41     }
42     ans=(ans-high-low)/(n-2);
43     
44     return ans;
45 }

屏幕截图 2025-11-10 170558

任务二

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

屏幕截图 2025-11-10 170927

1:形参是数组名加【】,实参是数组名。

2:输入 给数组赋值。计算所有数据去掉最大值和最小值后的平均数。

任务三


#include <stdio.h>
#define N 100


// 函数声明
void output(int x[][N], int n);
void init(int x[][N], int n, int value);


int main() {
int x[N][N];
int n, value;


while(printf("Enter n and value: "), scanf("%d%d", &n, &value) != EOF) {
init(x, n, value); // 函数调用
output(x, n); // 函数调用
printf("\n");
}


return 0;
}


// 函数定义
void output(int x[][N], int n) {
int i, j;


for(i = 0; i < n; ++i) {
for(j = 0; j < n; ++j)
printf("%d ", x[i][j]);
printf("\n");
}
}


// 函数定义
void init(int x[][N], int n, int value) {
int i, j;


for(i = 0; i < n; ++i)
for(j = 0; j < n; ++j)
x[i][j] = value;
}


屏幕截图 2025-11-10 172425

1:形式参数要名称加【】,其中第一个括号里的内容可以省略。实际参数可以只写名称。

2:不能。

3:根据输入的n输出一个n阶矩阵。通过两个循环把矩阵中的每一个值赋成value。

任务四

 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 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[N], int n) {  
22     int i;  
23     for (i = 0; i < n; i++) {
24         scanf("%d", &x[i]);
25     }
26 }
27 
28 double median(int x[N], int n) {  
29     int i, j;  
30     for (i = 0; i < n - 1; i++) {
31         for (j = 0; j < n - 1 - i; j++) {
32             if (x[j] > x[j + 1]) {
33                 int t = x[j];
34                 x[j] = x[j + 1];
35                 x[j + 1] = t;
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     }
44 }

屏幕截图 2025-11-13 112948

任务五

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

屏幕截图 2025-11-13 122118

任务六

 

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

屏幕截图 2025-11-13 194239

任务7

 

#include <stdio.h>
#define N 100

// 函数声明
void input(int x[][N], int n);
void output(int x[][N], int n);
// 待补足函数is_magic声明
// xxx

int main() {
    int x[N][N];
    int n;

    while(printf("输入n: "), scanf("%d", &n) != EOF) {
        printf("输入方阵:\n");  
        input(x, n); 

        printf("输出方阵:\n");  
        output(x, n);   

        if(is_magic(x, n))
            printf("是魔方矩阵\n\n");
        else
            printf("不是魔方矩阵\n\n");
    }

    return 0;
}

// 函数定义
// 功能: 输入一个n*n的矩阵x
void input(int x[][N], int n) {
    int i, j;
    
    for (i = 0; i < n; ++i) {
        for (j = 0; j < n; ++j)
            scanf("%d", &x[i][j]);
    }
}

// 功能: 输出一个n*n的矩阵x
void output(int x[][N], int n) {
    int i, j;

    for (i = 0; i < n; ++i) {
        for (j = 0; j < n; ++j)
            printf("%4d", x[i][j]);

        printf("\n");
    }
}


// 功能: 判断一个n阶方阵是否为魔方矩阵,如果是,返回1,否则,返回0
// 待补足函数is_magic定义
// xxx

int is_magic(int x[][N], int n) {
    int t = 0;
    int i,j;
    for (j = 0; j < n; j++) {
        t += x[0][j];
    }

    for (i = 0; i < n; i++) {
        int sum1 = 0;
        for (j = 0; j < n; j++) {
            sum1 += x[i][j];
        }
        if (sum1 != t) {
            return 0;
        }
    }

    for (j = 0; j < n; j++) {  
        int sum2 = 0;
        for (i = 0; i < n; i++) {  
            sum2 += x[i][j];
        }
        if (sum2 != t) {  
            return 0;
        }
    }

    int sum3 = 0;
    for (i = 0; i < n; i++) {
        sum3 += x[i][i];
    }
    if (sum3 != t) {
        return 0;
    }

    int sum4 = 0;
    for (i = 0; i < n; i++) {
        sum4 += x[i][n - 1 - i];
    }
    if (sum4 != t) {  
        return 0;
    }


    return 1;
}

屏幕截图 2025-11-13 210115

 

posted @ 2025-11-13 21:02  郭语涵  阅读(1)  评论(0)    收藏  举报