实验四
实验四
任务1.
1.不连续,相同
2.不连续,相同,相差16,数组中第一个数和第二个数相差16
任务2.
形参为int x[i]和int n,实参为n和x
input作用为依次输入数组x[i],compute作用为去除一个最大和最小值剩下数的平均值
任务3.
形参为int x[][N]和int n,实参为x和n
不能
output功能为输出数组,init功能为在n行n列的矩阵里面输入并且每一个值都为value
任务4.
#include <stdio.h> #define N 100 void input(int x[],int n); double median(int x[],int n); // 函数声明 // 待补足 // xxx 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; } // 函数定义 // 待补足 // xxx 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 = 0, j, k, g; for(j = 0;j < n-1;j++) { for(k = 0;k < n-j-1;k++) { if(x[k]>x[k+1]){ g = x[k]; x[k] = x[k+1]; x[k+1] = g; } }} if(n%2 != 0) return x[n/2]; else return (x[n/2-1]+x[n/2])/2.0; }

任务5.
#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("输入n: ");
scanf("%d", &n);
input(x, n);
printf("原始矩阵:\n");
output(x, n);
// 函数rotate_to_right调用
// 待补足
rotate_to_right(x, n);
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("%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");
}
}
// 函数rotate_to_right定义
// 功能: 把一个n*n的矩阵x,每一列向右移, 最右边一列绕回左边
// 待补足
// xxx
void rotate_to_right(int x[][N],int n){
int i, j, g[n];
for(i = 0;i < n;++i)
g[i] = x[i][n-1];
for(j = n-1;j > 0;--j)
for(i = 0;i<n;i++)
x[i][j] = x[i][j-1];
for(i=0;i<n;i++)
x[i][0] = g[i];
}

6.
#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); // 函数调用: 把x转换成二进制输出 dec_to_n(x, 8); // 函数调用: 把x转换成八进制输出 dec_to_n(x, 16); // 函数调用: 把x转换成十六进制输出 printf("\n"); } return 0; } // 函数定义 // 功能: 把十进制数x转换成n进制,打印输出 // 补足函数实现 // xxx void dec_to_n(int x, int n){ int value[N]; int t = 0; int ans; while(x > 0){ value[t]=x % n; t++; x /= n; } while(t > 0) { ans = value[--t]; if(ans >=10) {printf("%c",'A' + (ans - 10)); } else { printf("%d",ans); } } printf("\n"); }

7.
#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); // 待补足函数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){ //hang int c = 0, r = 0, p = 0, q = 0; int i,j; int total=n*(n*n+1)/2; for(i = 0;i<n;i++) {for(j = 0;j<n;j++) {c += x[i][j]; } if(c == total){ return 1; } } //lie for(j = 0;j<n;j++) {for(i = 0;i<n;i++) {r += x[i][j]; } if(r == total){ return 1; } } //副对角 for(i = 0;i<n;i++) { p += x[i][n - 1 -i]; } if(p==total){ return 1; } //主对角 for(i = 0;i<n;i++) { q += x[i][i]; } if(q==total){ return 1; } return 1; }

浙公网安备 33010602011771号