实验4

实验任务1

 1 #include <stdio.h>
 2 #define N 4
 3 #define M 2
 4 
 5 void test1() {
 6 int x[N] = {1, 9, 8, 4};          
 7 int i;
 8 printf("sizeof(x) = %d\n", sizeof(x));
 9 for (i = 0; i < N; ++i)
10  printf("%p: %d\n", &x[i], x[i]);
11 printf("x = %p\n", x); 
12 }
13 
14 void test2() {
15 int x[M][N] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
16   int i, j;
17 printf("sizeof(x) = %d\n", sizeof(x));
18 for (i = 0; i < M; ++i)
19  for (j = 0; j < N; ++j)
20  printf("%p: %d\n", &x[i][j], x[i][j]);
21  printf("\n");
22 printf("x = %p\n", x);
23  printf("x[0] = %p\n", x[0]);
24  printf("x[1] = %p\n", x[1]);
25  printf("\n");
26  }
27  
28  int main() {
29  printf("测试1: int型一维数组\n");
30  test1();
31  printf("\n测试2: int型二维数组\n");
32  test2();
33  return 0;
34 }

截图

2025.11.10 task1

问题1:是连续存放的。相同。

问题2:是按行连续存放的。相同。相差了16个字节。含义是一行的大小。

实验任务2

 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  while(printf("Enter n: "), scanf("%d", &n) != EOF) {
11  input(x, n);            
12 ans = compute(x, n);    
13 printf("ans = %.2f\n\n", ans);
14  }
15  return 0;
16  }
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  
24 double compute(int x[], int n) {
25  int i, high, low;
26  double ans;
27  high = low = x[0];
28  ans = 0;
29  for(i = 0; i < n; ++i) {
30  ans += x[i];
31  
32  if(x[i] > high)
33  high = x[i];
34  else if(x[i] < low)
35  low = x[i];
36  }
37  ans = (ans - high - low)/(n-2);
38  return ans;
39  }

截图

2025.11.10 task2

问题1:形参:void input(int x[ ], int n);实参:input(x,n);

问题2:input:将输入的数读取并保存在数组中;compute:计算去掉一个最高分和一个最低分后的平均分。

实验任务3

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 void output(int x[][N], int n);
 5 void init(int x[][N], int n, int value);
 6 
 7 int main() {
 8  int x[N][N];
 9  int n, value;
10  while(printf("Enter n and value: "), scanf("%d%d", &n, &value) != EOF) {
11  init(x, n, value);  
12 output(x, n);       
13 printf("\n");
14  }
15  return 0;
16  }
17 
18 void output(int x[][N], int n) {
19  int i, j;
20  for(i = 0; i < n; ++i) {
21  for(j = 0; j < n; ++j)
22  printf("%d ", x[i][j]);
23  printf("\n");
24  }
25  }
26 
27 void init(int x[][N], int n, int value) {
28  int i, j;
29  for(i = 0; i < n; ++i)
30  for(j = 0; j < n; ++j)
31   x[i][j] = value;
32  }

截图

2025.11.10 task3

问题1:形参:void output(int x][N], int n);实参:output(x,n);

问题2:不能,编译器会报错。

问题3:output:打印输出一个矩阵;init:将矩阵中的每个值都初始化为value的值。

实验任务4

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

截图

2025.11.10 task4

实验任务5

 1 #include <stdio.h>
 2  #define N 100
 3 void input(int x[][N], int n);
 4 void output(int x[][N], int n);
 5 void rotate_to_right(int x[][N], int n);
 6 
 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  rotate_to_right(x,n);
16 printf("变换后矩阵:\n");
17  output(x, n);
18  return 0;
19  }
20  
21  void input(int x[][N], int n) {
22  int i, j;
23  for (i = 0; i < n; ++i) {
24  for (j = 0; j < n; ++j)
25  scanf("%d", &x[i][j]);
26  }
27  }
28 
29  void output(int x[][N], int n) {
30  int i, j;
31  for (i = 0; i < n; ++i) {
32  for (j = 0; j < n; ++j)
33  printf("%4d", x[i][j]);
34  printf("\n");
35  }
36  }
37  
38  void rotate_to_right(int x[][N], int n){
39      for(int i=0;i<n;i++){
40          int t=x[i][n-1];
41          for(int j=n-1;j>0;j--){
42              x[i][j]=x[i][j-1];
43          }
44          x[i][0]=t;
45      }
46  }
47  

截图

2025.11.10 task5

实验任务6

 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     while(printf("输入十进制整数: "), scanf("%d", &x) != EOF) {
 8         dec_to_n(x, 2);  
 9         dec_to_n(x, 8);  
10         dec_to_n(x, 16); 
11         printf("\n");
12     }
13     return 0;
14  }
15  
16  void dec_to_n(int x, int n){
17      int a[N];
18      int cnt=0;
19      char map[]="0123456789ABCDEF";
20      if(x==0){
21          printf("0");
22      }
23      while(x!=0){
24          a[cnt]=x%n;
25          x=x/n;
26          cnt++;
27      }
28      
29     for(int i=cnt-1;i>=0;i--){
30         printf("%c",map[a[i]]);
31     }
32     printf("\n");
33  }

截图

2025.11.10 task6

实验任务7

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

截图

2025.11.10 task7_1

2025.11.10 task7_2

2025.11.10 task7_3

2025.11.10 task7_4

 

posted @ 2025-11-13 12:41  Hoon0626  阅读(4)  评论(0)    收藏  举报