实验4

#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("测试一:int型一维数组\n");
	test1();
	printf("\n测试二:int型二维数组\n");
	test2();
	return 0;
}

 屏幕截图 2026-05-01 195155问题1:连续存放;不同

问题2:
连续存放;
x与x[0]相同,其余不同;
x[0]与x[1]相差16个内存地址: 第一行所有元素所占空间(4个*(int)4).

 1 #include<stdio.h>
 2 #define N 100
 3 void input(int x[],int n);
 4 double compute(int x[], int n);
 5 
 6 int main(){
 7     int x[N];
 8     int n,i;
 9     double ans;
10     
11     while(printf("Enter n:"),scanf("%d",&n)!=EOF){
12         input(x,n);
13         ans=compute(x,n);
14         printf("ans=%.2f\n\n",ans);
15     }
16     return 0;
17 }
18 void input(int x[],int n){
19     int i;
20     for(i=0;i<n;++i)
21       scanf("%d",&x[i]);
22 }
23 double compute(int x[],int n){
24     int i,high,low;
25     double ans;
26     high=low=x[0];
27     ans=0;
28     for(i=0;i<n;++i){
29         ans+=x[i];
30         if(x[i]>high)
31          high=x[i];
32         else if(x[i]<low)
33           low=x[i];
34     }
35     ans=(ans-high-low)/(n-2);
36     
37     return ans;
38 }

屏幕截图 2026-05-01 200147

问题1:

形参:int x[]  实参:x

问题2:

input:让用户输入n个数,并存储进x这个数组里

compute:计算平均值(去掉最大值和最小值)

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

  屏幕截图 2026-05-01 201032

问题1:

形参:int x[][N] 实参:x

问题2:

不能,会报错

屏幕截图 2026-05-04 004239

问题三:

output:输出格式化矩阵

init():输入矩阵的大小与每个数据的内容

 1 #include<stdio.h>
 2 #define N 100
 3 void input(int x[N],int n);
 4 double median(int x[N],int n);
 5 int main(){
 6     int x[N];
 7     int n;
 8     double ans;
 9     while(printf("Enter n:"),scanf("%d\n",&n)!=EOF){
10         input(x,n);
11         ans=median(x,n);
12         printf("ans=%g\n\n",ans);
13     }
14     return 0;
15 }
16 void input(int x[N],int n){
17     int i;
18     for(i=0;i<n;++i)
19       scanf("%d",&x[i]);
20     printf("\n");
21     
22 }
23 double median(int x[N],int n){
24     int i,j,temp;
25     for(i=0;i<n-1;++i)
26      for(j=0;j<n-1-i;++j)
27       if(x[j]>x[j+1]){
28           temp=x[j];
29           x[j]=x[j+1];
30           x[j+1]=temp;
31       }
32     
33     if(n%2==1){
34           return x[n/2]; 
35     } else{
36         return(x[n/2-1]+x[n/2])/2.0;
37     }
38 }

屏幕截图 2026-05-02 125458

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define N 100
 4 void input(int x[][N],int n);
 5 void output(int x[][N],int n);
 6 void rotato_to_right(int x[][N],int n);
 7 int main(){
 8     int x[N][N];
 9     int n;
10     printf("Enter n:");
11     scanf("%d",&n);
12     input(x,n);
13     printf("原始矩阵:\n");
14     output(x,n);
15     rotato_to_right(x,n);
16     printf("变幻后矩阵:\n");
17     output(x,n);
18     return 0;
19 }
20 void input(int x[][N],int n){
21     for(int i=0;i<n;i++){
22       for(int j=0;j<n;j++)
23         scanf("%d",&x[i][j]);}
24 }
25 void output(int x[][N],int n){
26     for(int i=0;i<n;i++){
27       for(int j=0;j<n;j++)
28         printf(" %d",x[i][j]);
29 
30 printf("\n");}}
31 
32 
33  void rotato_to_right(int x[][N], int n) {
34  for(int i=0; i<n; i++) {
35         int tmp=x[i][n-1];
36         memcpy(&x[i][1], &x[i][0], (n-1) * sizeof(int));
37         x[i][0] = tmp;
38     }
39 }

屏幕截图 2026-05-03 234854

 1 #include <stdio.h>
 2 #define N 100
 3 void dec_to_n(int x, int n); // 函数声明
 4 
 5 int main() {
 6     int x;
 7 
 8     while(printf("输入十进制整数: "), scanf("%d", &x) != EOF) {
 9         dec_to_n(x, 2);  // 函数调用: 把x转换成二进制输出
10         dec_to_n(x, 8);  // 函数调用: 把x转换成八进制输出
11         dec_to_n(x, 16); // 函数调用: 把x转换成十六进制输出
12 
13         printf("\n");
14     }
15 
16     return 0;
17 }
18 
19 void dec_to_n(int x,int n){
20 if(x==0){
21 printf("0\n");
22 return;
23 }
24 char s[N];
25 int i=0;
26 int j;
27 while(x>0){
28 int yushu=x%n;
29  if(yushu<10){
30 s[i++]='0'+yushu;
31  }
32  else{
33     s[i++]='A'+(yushu-10);
34  }
35  x=x/n;
36 }
37 for(j=i-1;j>=0;j--){
38 printf("%c",s[j]);
39 }
40 printf("\n");
41 
42 
43 }

屏幕截图 2026-05-03 235212

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 // 函数声明
 5 void input(int x[][N], int n);
 6 void output(int x[][N], int n);
 7 int is_magic(int x[][N],int n);
 8 
 9 int main() {
10     int x[N][N];
11     int n;
12 
13     while(printf("输入n: "), scanf("%d", &n) != EOF) {
14         printf("输入方阵:\n");  
15         input(x, n); 
16 
17         printf("输出方阵:\n");  
18         output(x, n);   
19 
20         if(is_magic(x, n))
21             printf("是魔方矩阵\n\n");
22         else
23             printf("不是魔方矩阵\n\n");
24     }
25 
26     return 0;
27 }
28 
29 // 函数定义
30 // 功能: 输入一个n*n的矩阵x
31 void input(int x[][N], int n) {
32     int i, j;
33     
34     for (i = 0; i < n; ++i) {
35         for (j = 0; j < n; ++j)
36             scanf("%d", &x[i][j]);
37     }
38 }
39 
40 // 功能: 输出一个n*n的矩阵x
41 void output(int x[][N], int n) {
42     int i, j;
43 
44     for (i = 0; i < n; ++i) {
45         for (j = 0; j < n; ++j)
46             printf("%4d", x[i][j]);
47 
48         printf("\n");
49     }
50 }
51 int is_magic(int x[][N], int n) {
52      int i, j;
53      int sum;
54      int magic_sum;
55      magic_sum = n * (n * n + 1) / 2;
56      sum = 0;
57      for(i = 0; i < n; i++) {
58          sum = sum + x[i][i];
59      }
60      if(sum != magic_sum) {
61          return 0;
62      }
63      sum = 0;
64      
65      for(i = 0; i < n; i++) {
66          sum = sum + x[i][n - 1 - i];
67      }
68      if(sum != magic_sum) {
69          return 0;
70      }
71  
72      for(i = 0; i < n; i++) {
73          sum = 0;
74          for(j = 0; j < n; j++) {
75              sum = sum + x[i][j];
76          }
77          if(sum != magic_sum) {
78              return 0;
79          }
80      }
81  
82      for(j = 0; j < n; j++) {
83         sum = 0;
84         for(i = 0; i < n; i++) {
85              sum = sum + x[i][j];
86          }
87         if(sum != magic_sum) {
88             return 0;
89          }
90      }
91      return 1;
92  }
93         

屏幕截图 2026-05-04 003034

 

posted @ 2026-05-04 00:48  梅歌宁  阅读(10)  评论(0)    收藏  举报