实验4

任务1

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

     

  • 运行结果截图

   1 屏幕截图 2026-05-05 181434

 

  • 回答问题

    问题1:连续;相同

    问题2:连续;相同;16;第一行有4个int类型的整数,一个整数占4个字节,一共相差16个

 

任务2

  • 源代码
     1 #define  _CRT_SECURE_NO_WARNINGS
     2 
     3 
     4 #include <stdio.h>
     5 #define N 100
     6 
     7 // 函数声明
     8 void input(int x[], int n);
     9 double compute(int x[], int n);
    10 
    11 int main() {
    12     int x[N];
    13     int n, i;
    14     double ans;
    15 
    16     while(printf("Enter n: "), scanf("%d", &n) != EOF) {
    17         input(x, n);            // 函数调用
    18         ans = compute(x, n);    // 函数调用
    19         printf("ans = %.2f\n\n", ans);
    20     }
    21 
    22     return 0;
    23 }
    24 
    25 // 函数定义
    26 void input(int x[], int n) {
    27     int i;
    28 
    29     for(i = 0; i < n; ++i)
    30         scanf("%d", &x[i]);
    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 }
    View Code

     

  • 运行结果截图

  2 屏幕截图 2026-05-05 184333

 

  • 回答问题

    问题1:形参:int x[ ], int n; 实参:下,n

    问题2:input:存入n个整数至数组x中;compute:计算去掉最大值和最小值后的平均值

任务3

  • 源代码
     1 #define  _CRT_SECURE_NO_WARNINGS
     2 #include <stdio.h>
     3 #define N 100
     4 
     5 // 函数声明
     6 void output(int x[][N], int n);
     7 void init(int x[][N], int n, int value);
     8 
     9 int main() {
    10     int x[N][N];
    11     int n, value;
    12 
    13     while (printf("Enter n and value: "), scanf("%d%d", &n, &value) != EOF) {
    14         init(x, n, value);  // 函数调用
    15         output(x, n);       // 函数调用
    16         printf("\n");
    17     }
    18 
    19     return 0;
    20 }
    21 
    22 // 函数定义
    23 void output(int x[][N], int n) {
    24     int i, j;
    25 
    26     for (i = 0; i < n; ++i) {
    27         for (j = 0; j < n; ++j)
    28             printf("%d ", x[i][j]);
    29         printf("\n");
    30     }
    31 }
    32 
    33 // 函数定义
    34 void init(int x[][N], int n, int value) {
    35     int i, j;
    36 
    37     for (i = 0; i < n; ++i)
    38         for (j = 0; j < n; ++j)
    39             x[i][j] = value;
    40 }
    View Code

     

  • 运行结果截图

  3 屏幕截图 2026-05-05 190602

 

  • 回答问题

    问题1:形参int x[ ][N], int n; 实参:x, n

    问题2:不能

    问题3:输出一个n*n的二维数组;把二维数组里的元素都替换成value值

 

任务4

  • 源代码
     1 #define  _CRT_SECURE_NO_WARNINGS
     2 #include <stdio.h>
     3 #define N 100
     4 
     5 // 函数声明
     6 // 待补足
     7 // xxx
     8 void input(int x[], int n);
     9 double median(int x[], int n);
    10 
    11 int main() {
    12     int x[N];
    13     int n;
    14     double ans;
    15 
    16     while (printf("Enter n: "), scanf("%d", &n) != EOF) {
    17         input(x, n);        // 函数调用
    18         ans = median(x, n); // 函数调用
    19         printf("ans = %g\n\n", ans);
    20     }
    21 
    22     return 0;
    23 }
    24 
    25 // 函数定义
    26 // 待补足
    27 // xxx
    28 
    29 void input(int x[], int n) {
    30     int i;
    31     for (i = 0; i < n; ++i)
    32         scanf("%d", &x[i]);
    33 }
    34 
    35 double median(int x[], int n) {
    36     int i, j, k;
    37     for (i = 0; i < n - 1; i++) {
    38         for (j = 0; j < n - 1; j++) {
    39             if (x[j] > x[j + 1]) {
    40                 k = x[j];
    41                 x[j] = x[j + 1];
    42                 x[j + 1] = k;
    43             }
    44         }
    45     }
    46     if (n % 2 == 1) {
    47         return x[n / 2];
    48     }
    49     else {
    50         return(x[n / 2 - 1] + x[n / 2]) / 2.0;
    51     }
    52 
    53 
    54 }
    View Code

     

  • 运行结果截图

  4 屏幕截图 2026-05-05 192412

 

 

任务5

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

     

  • 运行结果截图

  5 屏幕截图 2026-05-05 195025

 

 

任务6

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

     

  • 运行结果截图

  6 屏幕截图 2026-05-05 195802

 

 

任务7

  • 源代码
     1 #define  _CRT_SECURE_NO_WARNINGS
     2 
     3 #include <stdio.h>
     4 #define N 100
     5 
     6 // 函数声明
     7 void input(int x[][N], int n);
     8 void output(int x[][N], int n);
     9 // 待补足函数is_magic声明
    10 // xxx
    11 int is_magic(int x[][N], int n);
    12 
    13 int main() {
    14     int x[N][N];
    15     int n;
    16 
    17     while (printf("输入n: "), scanf("%d", &n) != EOF) {
    18         printf("输入方阵:\n");
    19         input(x, n);
    20 
    21         printf("输出方阵:\n");
    22         output(x, n);
    23 
    24         if (is_magic(x, n))
    25             printf("是魔方矩阵\n\n");
    26         else
    27             printf("不是魔方矩阵\n\n");
    28     }
    29 
    30     return 0;
    31 }
    32 
    33 // 函数定义
    34 // 功能: 输入一个n*n的矩阵x
    35 void input(int x[][N], int n) {
    36     int i, j;
    37 
    38     for (i = 0; i < n; ++i) {
    39         for (j = 0; j < n; ++j)
    40             scanf("%d", &x[i][j]);
    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 
    57 // 功能: 判断一个n阶方阵是否为魔方矩阵,如果是,返回1,否则,返回0
    58 // 待补足函数is_magic定义
    59 // xxx
    60 int is_magic(int x[][N], int n) {
    61     int i, j;
    62     int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0;
    63     int sum = n * (n * n + 1) / 2;
    64     for (i = 0; i < n; i++) {
    65         sum1 = 0;
    66         for (j = 0; j < n; j++) {
    67             sum1 += x[i][j];
    68         }
    69         if (sum1 != sum)
    70             return 0;
    71     }
    72     for (j = 0; j < n; j++) {
    73         sum2 = 0;
    74         for (i = 0; i < n; i++) {
    75             sum2 += x[i][j];
    76         }
    77         if (sum2 != sum)
    78             return 0;
    79     }
    80     for (i = 0; i < n; i++) {
    81         sum3 += x[i][i];
    82         sum4 += x[i][n - i - 1];
    83     }
    84     if (sum3 != sum || sum4 != sum) {
    85         return 0;
    86     }
    87     return 1;
    88 }
    View Code

     

  • 运行结果截图

  7 屏幕截图 2026-05-05 202243

 

posted @ 2026-05-05 20:27  Miracle_rui  阅读(5)  评论(0)    收藏  举报