实验四

任务1
#include<stdio.h>
#define N 4
#define M 2

void test1(){
    int x[N]={1,9,8,4};
    int i;

    printf("sizeof(x)=%\n",sizeof(x));
    for (i=0;i<N;++i)
        printf("%p:%d\n",&x[i],x[i]);

    printf("x=%p\n",x);

}
void test2(){
    int x[M][N]={{1,9,8,4},{2,0,4,9}};
    int i,j;
    printf("sizeof(x)=%d\n",sizeof(x));

    for(i=0;i<M;++i)
        for(j=0;j<N;++j)
            printf("%p:%d\n",&x[i][j],x[i][j]);
    printf("\n");

    printf("x=%p\n",x);
    printf("x[0]=%p\n",x[0]);
    printf("x[1]=%p\n",x[1]);
    printf("\n");
}

int main(){
    printf("测试1:int型一维数组\n");
    test1();
    printf("\n测试2:int型二维数组\n");
    test2();

    return 0;
}

image

 任务2

#include<stdio.h>
#define N 100

void input(int x[],int n);
double compute(int x[],int n);

int main(){
    int x[N];
    int n,i;
    double ans;
    while(printf("Enter n:"),scanf("%d",&n)!=EOF){
        input(x,n);
        ans=compute(x,n);
        printf("ans=%.2f\n\n",ans);

    }

    return 0;
}

void input(int x[],int n){
    int i;

    for(i=0;i<n;++i)
        scanf("%d",&x[i]);
}

double compute(int x[],int n){
    int i,high,low;
    double ans;

    high=low=x[0];
    ans=0;

    for(i=0;i<n;++i){
        ans+=x[i];

        if(x[i]>high)
           high=x[i];

        else if(x[i]<low)
           low=x[i];
    }
    ans=(ans-high-low)/(n-2);

    return ans;


}

image

 任务3

#include<stdio.h>
#define N 100

void output(int x[][N],int n);
void init(int x[][N],int n,int value) ;

int main(){
    int x[N][N];
    int n,value;

    while(printf("Enter n and value:"),scanf("%d%d",&n,&value)!=EOF){
        init(x,n,value);
        output(x,n);
        printf("\n");

    }

    return 0;

}


void output(int x[][N],int n){
    int i,j;

    for(i=0;i<n;++i){

        for(j=0;j<n;++j)
           printf("%d",x[i][j]);
        printf("\n");
        }
}


void init(int x[][N],int n,int value){
    int i,j;

    for(i=0;i<n;++i)
        for(j=0;j<n;++j)
            x[i][j]=value;
}

image

 任务4

#include <stdio.h>
#define N 100

// 函数声明
// 待补足
// xxx

void input(int x[N],int n);
double median(int x[N],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;
}

// 函数定义
// 待补足
// xxx

void input(int x[N],int n){
    int i;
    for(i=0;i<n;i++)
        scanf("%d",&x[i]);

}

double median(int x[N],int n){
    int j,k,t;
    for(j=0;j<n-1;j++){

        for(k=0;k<n-j-1;k++){

            if(x[k]>x[k+1]){

               t=x[k];
               x[k]=x[k+1];
               x[k+1]=t;

           }
    }
    }

    int i;
    if(n%2!=0){
        i=n/2;
        return x[i];
    }
    else{
        i=n/2-1;
        return (x[i]+x[i+1])/2.0;
    }

}

image

 任务5

#include <stdio.h>
#define N 100

// 函数声明
void input(int x[][N], int n);
void output(int x[][N], int n);
// 函数rotate_to_right声明
// 待补足
// ×××
void  rotate_to_right(int x[N][N],int t);

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

void  rotate_to_right(int x[N][N],int n){
    int i,j,t;
    for(i=0;i<n;i++){
        t=x[i][n-1];

        for(j=0;j<n-1;j++){
            x[i][n-j-1]=x[i][n-j-2];
        }
        x[i][0]=t;
    }

}

// 函数rotate_to_right定义
// 功能: 把一个n*n的矩阵x,每一列向右移, 最右边一列绕回左边
// 待补足
// xxx

image

 任务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 a[20]={0};
    int i=0;
    int j;


       while(x>0){
        a[i]=x%n;
        x=x/n;
        i++;
    }

    for(j=i-1;j>=0;j--){
        if(a[j]<10){
        printf("%d",a[j]);
    }
        else{
            switch(a[j]){
                case 10:printf("A");break;
                case 11:printf("B");break;
                case 12:printf("C");break;
                case 13:printf("D");break;
                case 14:printf("E");break;
                case 15:printf("F");break;

            }

    }
}
    printf("\n");

}

image

 任务7

#include <stdio.h>
#define N 100

// 函数声明
void input(int x[][N], int n);
void output(int x[][N], int n);
// 待补足函数is_magic声明
// xxx
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;
}

// 函数定义
// 功能: 输入一个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){
    int i,j,l,p,m,q,k,w,e,r,t,y,z,ans=0,bns=0;
    int a[100]={0},b[100]={0};
    for(l=0;l<n;l++){
        for(p=0;p<n;p++){

        for(k=0;k<n;k++){
            for(m=0;m<n;m++){
                if(l==k&&p==m){
                m++;
                if(x[l][p]==x[k][m])
                   return 0;
        }
    }
    }
}
}
//
    for(i=0;i<n;i++){
        a[i]=0;
        for(j=0;j<n;j++){
            a[i]+=x[i][j];
        }
    }
    for(q=0;q<n-1;q++){
        if(a[q]!=a[q+1])
           return 0;
    }
//
    for(w=0;w<n;w++){
        b[w]=0;
        for(e=0;e<n;e++){
            b[w]+=x[e][w];
        }
    }
    for(r=0;r<n-1;r++){
        if(b[r]!=b[r+1])
           return 0;}
//对角线
       y=0;z=n-1;
    for(t=0;t<n;t++){

        ans+=x[t][y];
        bns+=+x[t][z];
        y++;z--;
    }
    if(a[0]==b[0]&&b[0]==ans&&ans==bns)
       return 1;

    return 0;

}

image

image

 

posted @ 2026-06-28 20:34  \W/  阅读(3)  评论(0)    收藏  举报