实验四

实验四

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

屏幕截图 2025-11-11 112852

 

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



}

屏幕截图 2025-11-11 225246

 

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

屏幕截图 2025-11-16 170941

 

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;















}

屏幕截图 2025-11-16 173534

 

 

posted @ 2025-11-16 17:47  邹秉祥  阅读(3)  评论(0)    收藏  举报