实验4




很明显不行,所以无法省略。
问题3:
output是输出数组里的所有元素;init是将整数value赋值给数组中的所有元素。
实验任务4:
#include <stdio.h>
#define N 100
// 函数声明
// 待补足
// xxx
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){
for(int t = 0;t<n;++t){
scanf("%d",&x[t]);
}
}
double median(int x[],int n){
int change;
for(int k = 0;k<n*(n-1)/2;++k){ //可能的所有情况
for(int i = 0;i<n;++i){
if(x[i]>x[i+1]){ //冒泡大小排序
change = x[i];
x[i] = x[i+1];
x[i+1] = change;
}
}
}
if(n%2!=0){
return x[n/2+1];
}
else
return (x[n/2+1]+x[n/2])/2.0;
}
// 函数定义
// 待补足
// xxx

实验任务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);
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;
}
// 函数定义
// 功能: 输入一个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,每一列向右移, 最右边一列绕回左边
void rotate_to_right(int x[][N],int n){
int i,j;
int t[N];
for (i = 0; i < n; i++) {
t[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] = t[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进制,打印输出
void dec_to_n(int x, int n) {
char digits[] = "0123456789ABCDEF";
char result[N]; // 存储转换结果
int index = 0;
int is_negative = 0;
int temp;
if (x == 0) {
printf("0\n");
return;
}
// 处理负数情况
if (x < 0) {
is_negative = 1;
temp = -x;
} else {
temp = x;
}
while (temp > 0) {
result[index++] = digits[temp % n];
temp = temp / n;
}
// 如果是负数,输出负号
if (is_negative) {
printf("-");
}
// 逆序输出
for (int i = index-1; i >= 0; i--) {
printf("%c", result[i]);
}
printf("\n");
} 
实验任务7:
#include <stdio.h>
#define N 100
// 函数声明
void input(int x[][N], int n);
void output(int x[][N], int n);
// 待补足函数is_magic声明
int is_magic(int[][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;
}
// 函数定义
// 功能: 输入一个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定义
int is_magic(int x[][N], int n) {
int used[N*N+1] = {0}; // 标记数组,检查1到n^2是否都出现且不重复
int sum, temp_sum;
int i, j;
// 检查是否包含1到n^2的所有数字且不重复
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
int num = x[i][j];
if (num < 1 || num > n*n || used[num]) {
return 0; // 数字不在1到n^2范围内或重复出现
}
used[num] = 1;
}
}
// 计算第一行的和作为基准值
sum = 0;
for (j = 0; j < n; j++) {
sum += x[0][j];
}
// 检查每行的和
for (i = 1; i < n; i++) {
temp_sum = 0;
for (j = 0; j < n; j++) {
temp_sum += x[i][j];
}
if (temp_sum != sum) return 0;
}
// 检查每列的和
for (j = 0; j < n; j++) {
temp_sum = 0;
for (i = 0; i < n; i++) {
temp_sum += x[i][j];
}
if (temp_sum != sum) return 0;
}
// 检查主对角线
temp_sum = 0;
for (i = 0; i < n; i++) {
temp_sum += x[i][i];
}
if (temp_sum != sum) return 0;
// 检查副对角线
temp_sum = 0;
for (i = 0; i < n; i++) {
temp_sum += x[i][n-1-i];
}
if (temp_sum != sum) return 0;
return 1;
}


浙公网安备 33010602011771号