实验4

  1. 任务1

源代码

#include<stdio.h>
#define N 4
#define M 2
void test1(){
 int x[N]={1,9,8,4};
 int i;
 printf("sizeof(x)=%d\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("测试2:int型二维数组\n");
 test2();
 
 return 0;
}

 

 

运行结果

 回答问题

问题1:是连续存放的,是一样的

问题2:是,是,相差4,这个差值是下x[0]所占字节

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

 

运行结果

 回答问题

观察:形参是下x[],实参是x

问题:读取n个数放到x中,去掉一个最高值和一个最低值再求平均数

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

 

运行结果

 回答问题

观察:形参x[][N],实参x

问题1:二维不能省略

问题2:输出二维数组,用value为二维数组赋值

任务4

源代码

 

#include <stdio.h>
#define N 100
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;
 }
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 i,j,t;
double ans;
    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)
        ans=(x[n/2-1]+x[n/2])*1.0/2.0;
    else
        ans=x[n/2];
    return ans;        
 }

 

运行结果

 

 

任务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("Enter 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,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;
    }
        
}

 

运行结果

 

 

任务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);
        dec_to_n(x,8);
        dec_to_n(x,16);
        
        printf("\n");
    }
    return 0;
}
void dec_to_n(int x,int n){
    int i=0,m[N],k=0;
    while(x!=0){
        m[i]=x%n;
        x/=n;
        ++i;
        ++k;
    }
    for(i=k-1;i>=0;i--){
        if(m[i]<10)
            printf("%d",m[i]);
        else if(m[i]>=10)
            printf("%c",'A'+m[i]-10);
        }
    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);
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,a[N]={0},t=0;
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            a[t]+=x[i][j];
        }
        t++;
    }
    for(j=0;j<n;j++){
        for(i=0;i<n;i++){
            a[t]+=x[i][j];
        }
        t++;
    }
    for(i=0;i<n;i++){
        a[t]+=x[i][i];
    }
    t++;
    for(i=0;i<n;i++){
        a[t]+=x[i][n-1-i];
    }
    for(i=0;i<t;i++){
        if(a[i]!=a[i+1])
            return 0;
    }
    return 1;
}

 

运行结果

 

 

任务8

源代码

 

#include<stdio.h> 
int number(int n);
int main(){
    int n,i,j;
    for(n=1;n<100;n++){
        if(number(n))
            printf("%d",n);    
    }
    return 0;
}
int number(int n){
    int a[10],i;
    int n2=n*n,n3=n*n*n;
    for(i=0;i<10;i++)
        a[i]=0;
    for(;n2!=0;n2/=10){
        if(a[n2%10]==1){
            return 0;
        }
        a[n2%10]=1;
    }
    for(;n3!=0;n3/=10){
        if(a[n3%10]==1){
            return 0;
        }
        a[n3%10]=1;
    }
    for(i=0;i<10;i++){
        if(a[i]==0)
        return 0;
    }    
    return 1;
}

 

运行结果

 

 

posted @ 2024-11-07 12:41  syqsyq  阅读(4)  评论(0编辑  收藏  举报