实验四

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

5290ad6ff41491f0e73b250d846abfd0

问题一:是连续存放  相同
问题二:是 相同 16 差值的含义是二维数组一行所占内存
 1 #include<stdio.h>
 2 #define N 100
 3 void input(int x[ ], int n);
 4 double compute(int x[ ], int n);
 5 
 6 
 7 int main(){
 8    int x[N];
 9    int n,i;
10    double ans;
11 
12 
13    while(printf("Enter n:  "), scanf("%d",&n)!=EOF){
14     input(x,n);
15     ans=compute(x,n);
16    printf("ans=%.2f\n\n",ans);
17 }
18   return 0;
19 }
20 
21 
22 void input(int x[ ],int n){
23 
24 
25    int i;
26     for (i=0;i<n;++i)
27     scanf("%d",&x[i]);
28 }
29 
30 
31 double compute(int x[],int n){
32   int i,high,low;
33   double ans;
34 
35 
36  high=low=x[0];
37  ans=0;
38 
39 
40 for(i=0;i<n;++i){
41 ans+=x[i];
42 
43 
44 if(x[i]>high)
45 high=x[i];
46 
47 
48 else if(x[i]<low)
49 low=x[i];
50 }
51 ans = (ans-high- low)/(n-2);
52 
53 
54 return ans;

e1cdf114c1504e68a65a3dfb3bbede74

问题一:input的形式参数书写形式为input (int x[], int n) 实际参数书写形式为x n
问题二:input的功能:n代表输入的数字个数 然后input函数读取所输入的n个数字存储到x[i]中
 1 #include<stdio.h>
 2 #define N 100
 3 void output(int x[][N],int n);
 4 void init(int x[][N],int n,int value);
 5 int main(){
 6  int x[N][N];
 7  int n ,value;
 8  while(printf("Enter n and value:"),scanf("%d%d",&n,&value)!=EOF){
 9   init(x,n,value);
10   output(x,n);
11   printf("\n");
12  }
13  return 0;
14 }
15 void output(int x[][N],int n){
16  int i,j;
17  for(i=0;i<n;++i){
18   for(j=0;j<n;++j)
19   printf("%d",x[i][j]);
20   printf("\n");
21  }
22 }
23 void init(int x[][N],int n,int value){
24  int i,j;
25  for(i=0;i<n;++i)
26  for(j=0;j<n;++j)
27  x[i][j]=value;
28 }
7e5d15972c3a28f941e92789b0d58737
问题一:形式参数书写形式 output(int x[][N], int n) 实际参数书写形式x,n
问题二:不能省略
问题三:output的功能是将x[i][j]按照n行n列输出 init的功能是将所输入的value值赋给x[i][j]
 1 #include <stdio.h>
 2 #define N 100
 3 // 函数声明
 4 // 待补足
 5 // xxx
 6 void input(int x[],int n);
 7 double median(int x[],int n);
 8 int main() {
 9 int x[N];
10 int n;
11 double ans;
12 while(printf("Enter n: "), scanf("%d", &n) != EOF) {
13 input(x, n); // 函数调用
14 ans = median(x, n); // 函数调用
15 printf("ans = %g\n\n", ans);
16 }
17 return 0;
18 }
19 // 函数定义
20 // 待补足
21 // xxx
22 void input(int x[],int n){
23 int i;
24 for(i=0;i<n;++i)
25 scanf("%d",&x[i]);
26 }
27 double median(int x[],int n){
28 int i,j,t=0;
29 double ans;
30     for(i=0;i<n-1;i++){
31         for(j=0;j<n-i-1;j++){
32             if(x[j]<x[j+1]){
33             t=x[j];
34             x[j]=x[j+1];
35             x[j+1]=t;
36         }
37         }
38     }
39 if(n%2==1)
40     return x[n/2];
41 else
42     return (x[n/2]+x[n/2-1])/2.0;
43 }

baaa2d8d5602c8f2d0cf1437c2f4519a

 1  #include <stdio.h>
 2  #define N 100
 3  // 函数声明
 4 void input(int x[][N], int n);
 5 void output(int x[][N], int n);
 6  // 函数rotate_to_right声明
 7 // 待补足
 8 int rotate_to_right(int x[][N],int n);
 9  int main() {
10  int x[N][N];
11  int n;
12  printf("Enter n: ");
13  scanf("%d", &n);
14  input(x, n);
15  printf("原始矩阵:\n");
16  output(x, n);
17  // 函数rotate_to_right调用
18 // 待补足
19 rotate_to_right(x,n);
20 printf("变换后矩阵:\n");
21  output(x, n);
22  return 0;
23  }
24  // 函数定义
25 // 功能: 输入一个n*n的矩阵x
26 void input(int x[][N], int n) {
27  int i, j;
28  for (i = 0; i < n; ++i) {
29  for (j = 0; j < n; ++j)
30  scanf("%d", &x[i][j]);
31  }
32  }
33  // 函数定义
34 // 功能: 输出一个n*n的矩阵x
35  void output(int x[][N], int n) {
36  int i, j;
37  for (i = 0; i < n; ++i) {
38  for (j = 0; j < n; ++j)
39  printf("%4d", x[i][j]);
40  printf("\n");
41  }
42  }
43 int rotate_to_right(int x[][N],int n){
44      int i,j,t[N];
45      for(i=0;i<n;++i){
46      t[i]=x[i][n-1];
47  }
48     for (j = n-2; j >= 0; j--) {
49     for (i = 0; i < n; i++) {
50     x[i][j+1] = x[i][j];
51         }
52     }
53     for (i = 0; i < n; i++) {
54     x[i][0] = t[i];
55     }
56  }

88945894547df08d48616cd82dd1b9bf

 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     return 0;
16 }
17 void dec_to_n(int x, int n) {
18     int t[N]; 
19     int cnt = 0;
20     char b[] = "0123456789ABCDEF"; 
21     while (x> 0) {
22         t[cnt++] = x % n;
23         x = x / n;
24     }
25     for (int i = cnt - 1; i >= 0; i--) {
26         if (n == 16) {
27             printf("%c", b[t[i]]); 
28         } else {
29             printf("%d", t[i]); 
30         }
31     }
32     printf("\n");
33 }

2c44c150d9a6eaf996251a2090cd245d

 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 
11     while(printf("输入n: "), scanf("%d", &n) != EOF) {
12         printf("输入方阵:\n");  
13         input(x, n); 
14 
15         printf("输出方阵:\n");  
16         output(x, n);   
17 
18         if(is_magic(x, n))
19             printf("是魔方矩阵\n\n");
20         else
21             printf("不是魔方矩阵\n\n");
22     }
23 
24     return 0;
25 }
26 void input(int x[][N], int n) {
27     int i, j;
28     
29     for (i = 0; i < n; ++i) {
30         for (j = 0; j < n; ++j)
31             scanf("%d", &x[i][j]);
32     }
33 }
34 void output(int x[][N], int n) {
35     int i, j;
36 
37     for (i = 0; i < n; ++i) {
38         for (j = 0; j < n; ++j)
39             printf("%4d", x[i][j]);
40 
41         printf("\n");
42     }
43 }
44 int is_magic(int x[][N], int n) {
45     int i,j;
46     if (n % 2 == 0) return 0;
47     int sum = n * (n*n + 1) / 2;
48     for (i =0; i <n; ++i) {
49         int hangsum =0;
50         for(j=0; j<n; ++j)
51         hangsum +=x[i][j];
52         if (hangsum != sum) 
53         return 0;
54     }    
55     for (j=0; j<n; ++j) {
56         int liesum=0;
57         for ( i=0; i<n; ++i) 
58         liesum +=x[i][j];
59         if (liesum != sum) 
60         return 0;
61     }
62     int zhuduisum=0;
63     for ( i=0; i<n; ++i) 
64     zhuduisum +=x[i][i];
65     if (zhuduisum != sum) 
66     return 0;
67     int fuduisum=0;
68     for (i=0; i<n; ++i) 
69     fuduisum +=x[i][n-1 -i];
70     if (fuduisum != sum) 
71     return 0;
72     return 1;
73 }

1ccb030c260f2df6097e8a2c186df172

 

 

posted @ 2025-11-13 21:01  陆绎  阅读(1)  评论(0)    收藏  举报