实验四

任务一

屏幕截图 2026-04-30 182532

问题一:一堆数组x在内存中是连续存放的;两个相同

问题二:是按行连续存放; 相同,相差16字节,差值表示一行数组元素占用的内存字节数

任务二

屏幕截图 2026-04-30 183800

问题一:形参为int x[],实参为数组名

问题而:input函数用于输入数组元素;

compute函数用于计算去掉一个最大值和最小值后的数组平均值

任务三

屏幕截图 2026-04-30 185122

问题一:形参是int x[][N];实参:数组名

问题二:不能忽略,会导致编译器报错

问题三:output功能是按行打印二维数组元素;init功能是将二维数组元素初始指定值

任务四

#include <stdio.h>
#define N 100
void input(int x[], int n);
double median(int x[], int n);

int main() {
       int x[N];
       int n;
     double ans;
     while (printf("Enter n: "), scanf("%d", &n) != EOF) {
         input(x, n);
         ans = median(x, n);
         printf("ans = %g\n\n", ans);
    
    }
         return 0;
    
}
void input(int x[], int n)
 {
         int i;
         for (i = 0; i < n; ++i)
             {scanf("%d", &x[i]);
         }
    }
double median(int x[], int n)
{int i, j, temp;
for (i = 0; i < n - 1; ++i)
{for (j = 0; j < n - 1 - i; ++j)
     {if (x[j] > x[j + 1])
     {temp = x[j];
 x[j] = x[j + 1];
 x[j + 1] = temp;
 }
 }
 }

  if (n % 2 == 1)
 {return x[n / 2]; }
  else {
         return(x[n / 2 - 1] + x[n / 2]) / 2.0;
    
        
}

屏幕截图 2026-05-05 204937

任务五

#include <stdio.h>
#define N 100

void input(int x[][N], int n);
void output(int x[][N], int n);
void rotate_to_right(int x[][N], int n);

int main() {
    int x[N][N];
    int n;
    
         printf("输入n: ");
         scanf("%d", &n);
         input(x, n);
    
             printf("原始矩阵:\n");
       output(x, n);
     rotate_to_right(x, n);
         printf("变换后矩阵:\n");
         output(x, n);
    
             return 0;
    
}

 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]);
    
    }

}
 
 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");
        
    }
    
}
void rotate_to_right(int x[][N], int n)
 {
         int i, j;
         int temp;
         int last_col[N];
         for (i = 0; i < n; ++i)
             {last_col[i] = x[i][n - 1];
             }
         for (j = n - 2; j >= 0; --j)
             {for (i = 0; i < n; ++i)
             {x[i][j + 1] = x[i][j];
         }
         }
         for (i = 0; i < n; ++i)
             {x[i][0] = last_col[i];
       }
     }

屏幕截图 2026-05-05 205501

任务六

#include <stdio.h>
#define N 100

void dec_to_n(int x, int n);

int main() {
        int x;
        while (printf("输入十进制整数: "), scanf("%d", &x) != EOF) {
                 dec_to_n(x, 2);
                 dec_to_n(x, 8);
                 dec_to_n(x, 16);
                 printf("\n");
        
    }
       return 0;
    
}

 void dec_to_n(int x, int n) {
         int res[N];
         int i = 0, j;
         int temp = x;
    
             if (temp == 0) {
             printf("0\n");
                 return;
        
    }
    
             while (temp != 0) {
                 res[i] = temp % n;
                 temp = temp / n;
                 i++;
        
    }
    
             for (j = i - 1; j >= 0; j--) {
                 if (res[j] < 10) {
                         printf("%d", res[j]);
            
        }
        else {
                         printf("%c", res[j] - 10 + 'A');
            
        }
        
    }
       printf("\n");
    
}

屏幕截图 2026-05-05 205829

任务七

#include <stdio.h>
#define N 100
 void input(int x[][N], int n);
 void output(int x[][N], int n);
 int is_magic(int x[][N], int n);

 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;
    
}

 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]);
            
        }
        
    }
    
}
 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");
        
    }
    
}

 int is_magic(int x[][N], int n) {
     int i, j;
     int sum, target;

     target = n * (n * n + 1) / 2;

     for (i = 0; i < n; ++i) {
         sum = 0;
         for (j = 0; j < n; ++j) {
             sum += x[i][j];

         }
         if (sum != target)
             return 0;

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

         }
         if (sum != target)
             return 0;

     }

     sum = 0;
     for (i = 0; i < n; ++i) {
         sum += x[i][i];

     }
     if (sum != target)
         return 0;

     sum = 0;
     for (i = 0; i < n; ++i) {
         sum += x[i][n - 1 - i];

     }
     if (sum != target)
         return 0;

     return 1;

 }

屏幕截图 2026-05-05 210700

屏幕截图 2026-05-05 210912

 

posted @ 2026-05-05 21:11  ahuuu  阅读(5)  评论(0)    收藏  举报