实验4

实验任务1:

点击查看代码
#include <stdio.h>
#define N 4
#define M 4

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

捕获

Q1:是连续存放; sizeof()表示的是存放的长度,&x[i]表示的是 x[i]具体的地址;x[i]表示这个数组中i位置存放的具体数值;x表示这数组起始的地址;
Q2;是按行连续存放;相同;差了16;即差了4个存放空间(中间间隔3个数)

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

捕获1
Q1:形式参数写成(int x[]),实际参数直接写为(x);
Q2:input函数功能是将数值输入对应数组中;comput函数功能是找到最大最小值并求切尾平均值

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

捕获2
Q1:形式参数写为完整的数组表示,即行列都要(若行空着,则与列同),即x[][N],和需要的参数,int n;实际参数声明时要明确写出行列;函数内只需写组名即可;
Q2:不能不写,形式参数第一维可不写,但第二维一定要写;
Q3:output作用是将init赋值后的x数组打印到屏幕上;init功能是将value赋值到n*n的矩阵中;

试验任务4:

点击查看代码
#include <stdio.h>
#define N 100
float median(int x[N],int n); 
void input(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]);
}
float median (int x[N],int n)
{
	int count,j;
	int i;
	int a, b; 
	int y[N];
	double ans;
	for(count = 0;count < (n - 1); count++) 
	{
		for(i = 0; i < (n - 1);i++)
		{
			if(x[i] < x[i+1])
			{
				y[1] = x[i+1];
				x[i+1] = x[i];
				x[i] = y[1];
			}
		}
	}
	if(n % 2 == 0)
	{
        a = x[n/2];
        b = x[n/2 -1];
        ans = (a + b)/2.0;
		return ans;
	}
	else
	{
		ans = x[(n - 1)/2];
		return ans;
	}

}

屏幕截图 2025-11-16 192559

实验任务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 y[N][N];
	int i,j;
	
	for(i = 0;i < n; i++)
	    y[i][0] = x[i][n - 1];
	    
	for(i = 0;i < n;i++)
	{
		for(j = 0; j < n - 1;j++)
		    y[i][j + 1] = x[i][j];
	}  
    for(i = 0;i < n; i++)
        for(j = 0;j < n;j++)
            x[i][j] = y[i][j];  
}


屏幕截图 2025-11-16 204236

实验任务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 y[N];
	int i;
	int j; 
	
	if(x == 0)
		printf("0\n");
	else
	{
		if(n == 2 || n == 8)
	    {
		    for(i = 0;x != 0;i++)
	        {
		        y[i] = x%n;
		        x/= n;
            }
	        for(j = i - 1;j >= 0; j--)
	            printf("%d",y[j]);
	        printf("\n");
	    }
	    else
	    {
		    for(i = 0;x != 0;i++)
	        {
		        y[i] = x%n;
		        x/= n;
            }
            for(j = i-1;j>=0; j--)
            {
            	if(y[j] >= 10)
				{
					y[j] = y[j] - 10 + 'A';
					printf("%c",y[j]);
				} 
				else
				    printf("%d",y[j]);	
			}
	    }
    }
}   

屏幕截图 2025-11-17 133019

实验任务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;
	int a,b;
	int c,e;
	int y,y1; 
	int result1,result2;
	int d[N];
	int z[N];
	
	c = 0;
	result1 = 0;
	result2 = 0; 
		
	for(i = 0;i < n;i++)
	{
		for(j = 0;j < n; j++,c++)
		{
			y = x[i][j];
            z[c] = y;
		}
	}
	a = z[0];
	
	for(i = 1;i < c;i++)
	{
	    b = z[i];
	    if(a == b)
	        return 0;
	}	
	
	for(i = 0;i < n;i++)
	{
		for(j = 0;j < n; j++)
		{
			y = x[i][j];
			if(y > n*n  || y < 1)
				return 0;
	    }
	}
	
	for(i = 0;i < n;i++)
    {
    	y = 0;
	    for(j = 0;j < n; j++)
		{
		    y1 = x[i][j];
		    y += y1;
	    } 
		d[i] = y; 
    }
        e = d[0];
        
    for(a = 1;a < n;a++)
    {
        b = d[a];
	    if(e != b)
    	    return 0;     
    }  
		 
       	for(j = 0;j < n;j++)
        {
        	y = 0;
	        for(i = 0;i < n; i++)
		    {
		        y1 = x[i][j];
		        y += y1; 
		    }
		    if(y != e)
				return 0; 
        }   
        
        for(i = 0,j = 0;i < n;i++,j++)
		{
			y1 = x[i][j];
			result1 += y1;
		} 
		for(i = n - 1,j = 0;i >= 0;i--, j++)
		{
			y1 = x[i][j];
			result2 += y1;
		}
		if(result1 == e && result2 == e)
		    return 1;
		else
		    return 0;
}

屏幕截图 2025-11-17 154108

屏幕截图 2025-11-17 154115

posted @ 2025-11-17 15:42  hhqdream  阅读(4)  评论(1)    收藏  举报