实验四
任务一

问题一:一堆数组x在内存中是连续存放的;两个相同
问题二:是按行连续存放; 相同,相差16字节,差值表示一行数组元素占用的内存字节数
任务二

问题一:形参为int x[],实参为数组名
问题而:input函数用于输入数组元素;
compute函数用于计算去掉一个最大值和最小值后的数组平均值
任务三

问题一:形参是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; }

任务五
#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]; } }

任务六
#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"); }

任务七
#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; }


浙公网安备 33010602011771号