实验4作业

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

  

image

 问题1

是,相同

问题2

是,相同,相差16,含义为数组x的第一行有4个数组元素,共占用16个字节

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

 问题1

分别为 int x[ ] 和 x

问题2

input功能为将输入的数据存入数组中,compute的功能是计算除去最大值和最小值后的数据的平均值

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

改为x[ ][ ]后:image

 

 问题1

书写形式分别为int x[ ][N] 和 x

问题2

不能省略,会(如图)

问题3

output的功能是将生成的数组以矩阵的形式输出,init的功能是将输入的第二个数字存入行数和列数都是第一个数字的数组中

任务4

#include<stdio.h>
#define N 100
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)
{
	int i,j;
	for(i=0;i<n;++i)
		scanf("%d",&x[i]);
	for(j=0;j<n-1;++j)
	{
	
    	for(i=0;i<n-1-j;++i)
    	{
	    	int t;
	    	if(x[i]<x[i+1])
	    	{
		        t=x[i];
		        x[i]=x[i+1];
	 	        x[i+1]=t;
	    	}
    	}
    }
	
}

double median(int x[],int n)
{
	double med;
	if(n%2==0)
	    med=(double)(x[n/2]+x[(n-2)/2])/2;
	else
	    med=x[(n-1)/2];
	return med;
}

  

image

 任务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("%d ",x[i][j]);
		    
		printf("\n");
	}
	
}

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

 

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

void dec_to_n(int x,int n)
{
	int a[N];
	int i=0,j,m=0;
	while(x!=0)
	{
	    a[i]=x%n;
		i++;
		m++;
		x=x/n;
		
	}

	
	for(j=m-1;j>=0;--j)
	{
		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;
			default:printf("%d",a[j]);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);
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("%d ",x[i][j]);
		    
		printf("\n");
	}
	
}

int is_magic(int x[][N],int n)
{
	int i,j,m,ans1,ans2,ans3,ans4;
	int a[2*n+2];
	ans1=ans2=ans3=ans4=0;
	for(i=0;i<n;++i)
	{
		int m=0;
		for(j=0;j<n;++j)
		{
			ans1+=x[i][j];
			ans2+=x[j][i];
		}
		ans3+=x[i][i];
		ans4+=x[i][n-1-i];
		a[m++]=ans1;
		a[m++]=ans2;
	}
	a[m++]=ans3;
	a[m]=ans4;
	
	
	for(i=0;i<m-1;++i)
	{
		if(a[i]-a[i+1]!=0)
		    return 0;
	}
	
    int k=1,t=0,p;
    while(k<=n)
    {
	
		for(i=0;i<n;++i)
		{
		    for(j=0;j<n;++j)
		    {
	            p=t;
			    if(k*k==x[i][j])
			    {
				    t++;
				    break;
				}
		    	
			}
			if(p+1==t)
			    break;
			    
		   
     	}
     	k++;
    }
    if(t==n)
        return 1;
   	else 
        return 0;
		        
	
}

 运行结果不对

image

 

posted @ 2025-11-11 01:20  鸋y  阅读(9)  评论(0)    收藏  举报