实验四

实验任务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("\n测试2:int型二维数组\n");
	test2();

	return 0;
}

运行截图:
image

Q1:是连续存放的。数组名x和&x[0]是一样的。
Q2:是按行连续存放的。数组名x、x[0]、&x[0][0]在字面上值是一样的。x[0]和x[1]相差的值是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

Q1:函数input的功能是为一维数组的n个元素依次赋值。函数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

Q1:第二维的大小不能省略
Q2:函数output的作用是把二维数组中的元素按行输出。init的作用是把二维数组中的每一个元素赋值为指定值value。

实验任务4

实验代码:

#include<stdio.h>
#define N 100

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

void input(int x[],int n){
	int i,j,s;
	for(i=0;i<n;++i){
		scanf("%d",&x[i]);
	}
	for(i=1;i<n;++i){
		for(j=0;j<n-i;++j){
			if(x[j]>x[j+1]){
			s=x[j+1];
			x[j+1]=x[j];
			x[j]=s;}
		}
	}
}

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

运行截图:
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("%4d",x[i][j]);
		
		printf("\n");
	}
} 

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

运行截图:
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 i=0,s=0;
	int a[N];
	while(x>0){
		a[i++]=x%n;
	x/=n;
	}
	s=i-1;
	for(s;s>=0;--s){
		if(a[s]>9){
		printf("%c",'A'+a[s]-10);}
		else{
		printf("%d",a[s]);}
	}
	printf("\n");
}

运行截图:
image

posted @ 2025-04-19 19:46  子春拾捌  阅读(7)  评论(0)    收藏  举报