实验四

内容一:
屏幕截图 2025-11-16 134739

1:相同

2:按行连续存放;相同;相差16,含义为x【0】所占的内存

 

内容二:

屏幕截图 2025-11-16 135258

1:int x[] ; x

2:规定从键盘输入的个数n;计算n个数据中去除最大值和最小值的平均值

 

内容三:
屏幕截图 2025-11-16 135644

1:int x[][n] ; x

2:不可以

3:生成一个n*n的数组,所有元素的值均为value;打印这个数组

 

内容四:

#include <stdio.h>
#define N 100

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

 
double median(int x[],int n){
    int i,j,t,mid;
    double result;
    for (i=0; i< n - 1; i++) {           
        for (j=0;j<n-1-i;j++) {   
            if (x[j] > x[j+1]) {  
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
        }
    }
    
    if (n%2==0){
        mid=n/2-1;
        result=(double)(x[mid+1]+x[mid])/2;
        return result;
    }
    else{
        mid=n/2;
        result=x[mid];
        return result;
    }
}

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

屏幕截图 2025-11-16 140406

 

内容五:

#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;
}


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


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

屏幕截图 2025-11-16 140631

 

内容六:

#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);
        dec_to_n(x, 8);
        dec_to_n(x, 16);
        printf("\n");
    }

    return 0;
}

void dec_to_n(int x,int n){
    int i,j;
    char digits[]="0123456789ABCDEF";
    int remainder[N];
    for (i=0;i<N;i++){
        remainder[i]=x%n;
        x=x/n;
        if (x==0)
            break; 
    }
    
    for (j=i;j>=0;j--)
        printf("%c",digits[remainder[j]]);
    printf("\n"); 
}

屏幕截图 2025-11-16 143113

 

内容七:

#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("%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;
}


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


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

int is_magic(int x[][N],int n){
    int i,j,std,sum3,sum4;
    int sum1[N]={0},sum2[N]={0};
    std=(n*n+1)*n/2;
    sum3=0,sum4=0;
        
    for (i=0;i<n;i++){
        for (j=0;j<n;j++)
            sum1[i]+=x[i][j];//计算同一行元素之和 
    }
    for (j=0;j<n;j++){
        for (i=0;i<n;i++)
            sum2[j]+=x[i][j];//计算同一列元素之和 
    }
    for (i=0;i<n;i++){
        sum3+=x[i][i];//计算主对角线之和 
    }
    for (i=0;i<n;i++)
        sum4+=x[i][n-1-i];//计算副对角线之和 
    
    if(sum3!=std||sum4!=std)
        return 0;
    
    for(i=0;i<n;i++){
        if (sum1[i]==std)
            continue;
        else 
            return 0;
    }
    for(i=0;i<n;i++){
        if (sum2[i]==std)
            continue;
        else 
            return 0;
    }
    for(i=0;i<n;i++){
        if (sum3==std)
            continue;
        else 
            return 0;
    }
    for(i=0;i<n;i++){
        if (sum4==std)
            continue;
        else 
            return 0;
    }
    return 1;
}

屏幕截图 2025-11-16 143445

 

内容八:

#include <stdio.h>
#include <string.h>
#define N 100000 

int is_Pandigital(char s[]);

int main(){
    char sq[20],cu[20],combined[25];
    long long n,square,cube;
    for (n=1;n<N;n++){
        square=n*n;
        cube=n*n*n;
        sprintf(sq,"%lld",square);
        sprintf(cu,"%lld",cube);
        strcpy(combined,sq);
        strcat(combined,cu);
        
        if (is_Pandigital(combined)) {
            printf("目标数字为: %lld\n", n);
            printf("平方: %lld\n", square);
            printf("立方: %lld\n", cube);
            printf("拼接为: %s\n", combined);
            return 0;
        }
    }
    printf("未找到符合条件的数字\n");
    return 0;
}

int is_Pandigital(char s[]){
    if (strlen(s)!= 10) 
        return 0;
    int i; 
    int count[10]={0};
    for (i=0;i<10;i++){
        if (s[i]<'0'||s[i]>'9') 
            return 0;
        count[s[i]-'0']++;
    }
    for (i=0;i<10;i++){
        if (count[i] != 1)
            return 0;
    }
    return 1;
}

屏幕截图 2025-11-16 143545

 

posted @ 2025-11-16 14:36  luhan777  阅读(8)  评论(1)    收藏  举报