实验四
实验任务1
q1:是连续存放的,两者相同
q2:是连续存放的 相同 相差16 地址位置相差十六个字节
实验任务2
q1:形参x[ ] 实参x
q2:input将键入的n个数存入数组 compute是计算数组内除去最高最低值后的平均值
实验任务3
q1:形参x[ ][N] 实参x
q2:不可省略
q3:output将n*n数组挨个输出 init将value赋值给数组
实验任务4
#include<stdio.h> #define N 100 void input(int x[], int n); double medium(int x[], int n); int i; int main() { int x[N]; int n; double ans; while (printf("Enter n:"), scanf_s("%d", &n) != EOF) { input(x, n); ans = medium(x, n); printf("ans=%g\n\n", ans); } return 0; } void input(int x[], int n) { for (i = 0; i < n; ++i) scanf_s("%d", &x[i]); } double medium(int x[], int n) { double ans; int i, j; int t; for (i = 0; i < n - 1; ++i) for (j = 0; j < n - i - 1; j++) { if (x[j] > x[j + 1]) { t = x[j]; x[j] = x[j + 1]; x[j + 1] = t; } } if (n % 2 == 0) ans = (1.0 * x[n / 2] + 1.0 * x[n / 2 - 1]) / 2; else if (n % 2 != 0) ans = 1.0 * x[(n + 1) / 2 - 1]; return ans; }

#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); // 函数rotate_to_right声明 // 待补足 // ××× int main() { int x[N][N]; int n; printf("Enter n: "); scanf_s("%d", &n); input(x, n); printf("原始矩阵:\n"); output(x, n); rotate_to_right(x, n); // 函数rotate_to_right调用 // 待补足 printf("变换后矩阵:\n"); output(x, 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_s("%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"); } } void rotate_to_right(int x[][N], int n) { int i, j; int t; for (i = 0; i < n; ++i) { t = x[i][n - 1]; for (j = n - 1; j > 0; j--) { x[i][j] = x[i][j - 1]; } x[i][0] = t; printf("%d", x[i][j]); printf("\n"); } }

#include <stdio.h> #define N 100 void dec_to_n(int x, int n); // 函数声明 int main() { int x; while (printf("输入十进制整数: "), scanf_s("%d", &x) != EOF) { dec_to_n(x, 2); // 函数调用: 把x转换成二进制输出 dec_to_n(x, 8); // 函数调用: 把x转换成八进制输出 dec_to_n(x, 16); // 函数调用: 把x转换成十六进制输出 printf("\n"); } return 0; } void dec_to_n(int x, int n) { int i = 0, j, k = 0, h, m = 0, t, b; int a[N], y[N], z[N]; if (n == 2) { if (x == 0) { printf("0"); } while (x > 0) { a[i] = x % 2; x = x / 2; i++; } for (j = i - 1; j >= 0; j--) printf("%d", a[j]); }printf("\n"); if (n == 8) { if (x == 0) { printf("0"); } while (x > 0) { y[k] = x % 8; x = x / 8; k++; } for (h = k - 1; h >= 0; h--) printf("%d", y[h]); }printf("\n"); if (n == 16) { if (x == 0) { printf("0"); } while (x > 0) { z[m] = x % 16; x = x / 16; m++; } for (t = m - 1; t >= 0; t--) { b = z[t]; if (b == 10) { printf("A"); } else if (b == 11) { printf("B"); } else if (b == 12) { printf("C"); } else if (b == 13) { printf("D"); } else if (b == 14) { printf("E"); } else if (b == 15) { printf("F"); } else printf("%d", b); } } }

#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_s("%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_s("%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 int is_magic(int x[][N], int n) { int i, j; //判断n是否为奇数 if (n % 2 == 0) return 0; //判断元素值 int check[10000] = {}; for (i = 0; i < n; ++i) { for (j = 0; j < n; ++j) { int m = x[i][j]; if (m < 1 || m >(n * n)) return 0; if (check[m]) return 0; check[m] = 1; } } //以第一行为标准 int sum = 0; for (j = 0; j < n; ++j) sum += x[0][j]; //计算每一行之和 for (i = 1; i < n; i++) { int sum1 = 0; for (j = 0; j < n; j++) sum1 += x[i][j]; if (sum != sum1) return 0; } //计算每一列之和 for (j = 0; j < n; j++) { int sum2 = 0; for (i = 0; i < n; i++) sum2 += x[i][j]; if (sum != sum2) return 0; } //计算主对角线之和 int sum3 = 0; for (i = 0; i < n; i++) sum3 += x[i][i]; if (sum != sum3) return 0; //计算副对角线之和 int sum4 = 0; for (i = 0; i < n; i++) sum4 += x[i][n - 1 - i]; if (sum != sum4) return 0; //判断是否相等 return 1; }




浙公网安备 33010602011771号