实验四

实验一

 1  #include<stdio.h>
 2 #define N 4
 3 #define M 2
 4 
 5 void test() {
 6     int x[N] = {1, 9, 8, 4};
 7     int i;
 8     
 9     //输出数组x占用的内存字节数
10     printf("sizeof(x) = %d\n",sizeof(x));
11     
12     //输出数组名x相应的值
13     printf("x = %p\n ",x);
14      
15 }
16 
17 void test2(){
18     int x[M][N] = {{1, 9, 8, 4},{2, 0, 4, 9}};
19     int i, j;
20     
21     //输出二维数组x占用的内存字节数
22     printf("sizeof(x) = %d\n",sizeof(x));
23     
24     //输出每个元素的地址、值
25     for(i = 0; i< M; i++)
26         for (j = 0;j<N ;j++)
27             printf("%p: %d\n",&x[i][j],x[i][j]);
28         printf("\n");
29         
30         //输出二维数组名x,以及下x[0],x[1]的值
31         printf("x = %p\n",x);
32         printf("x[0] = %p",x[0]);
33         printf("x[1] = %p",x[1]);
34         printf("\n");
35             
36         
37     }
38         int main(){
39             printf("测试1:int型一维数组\n");
40             test();
41             
42             printf("\n测试2:int型二维数组\n");
43             test2();
44             
45             return 0;
46         } 

问题1 是连续存储  一样的

问题2 是按行连续存储 三者值相同  相差16 也就是一行所占的字节数 

实验二

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 // 函数声明
 5 void input(int x[], int n);
 6 double compute(int x[], int n);
 7 
 8 int main() {
 9     int x[N];
10     int n, i;
11     double ans;
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 
19     return 0;
20 }
21 
22 // 函数定义
23 void input(int x[], int n) {
24     int i;
25 
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     high = low = x[0];
36     ans = 0;
37 
38     for(i = 0; i < n; ++i) {
39         ans += x[i];
40 
41         if(x[i] > high)
42             high = x[i];
43         else if(x[i] < low)
44             low = x[i];
45     }
46 
47     ans = (ans - high - low)/(n-2);
48 
49     return ans;
50 }

问题 1

input 功能 获取数并储存在数组中 

问题2

计算数组元素去掉最大最小值后的平均值

实验三

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

问题1

列的大小不能忽略

问题2

output 输出数组中每个元素 init 将数组所有元素都赋值为value

实验4

 1 #include <stdio.h>
 2 #define N 100
 3 int input(int x[],int n);
 4 double median(int x[],int n);
 5 
 6 int main() {
 7     int x[N];
 8     int n;
 9     double ans;
10 
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 
17     return 0;
18 }
19 
20 int input(int x[],int n){
21     int i;
22     for(i = 0; i<n; i++)
23         scanf("%d",&x[i]);
24 }
25 
26 
27 double median(int x[],int n){
28     int i, j, temp, sum;
29     for(i = 0;  i<n ;i++){
30         for (j = 0;j<n-1-i; j++){
31             if(x[j] > x[j+1]){
32                 temp = x[j];
33                 x[j] = x[j+1];
34                 x[j+1] = temp; 
35             } 
36     
37         }
38         
39 }
40     if (n%2 == 0){
41         i = n/2 - 1;
42         j = i + 1;
43         sum = x[i] + x[j];
44         
45         return sum /2.0 ;
46     }
47     else{
48         i = n/2 ;
49         
50         return x[i];
51 }
52 }

实验5

 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 void rotate_to_right(int x[][N], int n) ;
 8 // 待补足
 9 // ×××
10 
11 int main() {
12     int x[N][N];
13     int n;
14 
15     printf("输入n: "); 
16     scanf("%d", &n);
17     input(x, n);
18 
19     printf("原始矩阵:\n");
20     output(x, n);
21 
22     rotate_to_right(x,n);
23 
24     printf("变换后矩阵:\n");
25     output(x, n);
26 
27     return 0;
28 }
29 
30 // 函数定义
31 // 功能: 输入一个n*n的矩阵x
32 void input(int x[][N], int n) {
33     int i, j;
34     
35     for (i = 0; i < n; ++i) {
36         for (j = 0; j < n; ++j)
37             scanf("%d", &x[i][j]);
38     }
39 }
40 
41 // 函数定义
42 // 功能: 输出一个n*n的矩阵x
43 void output(int x[][N], int n) {
44     int i, j;
45 
46     for (i = 0; i < n; ++i) {
47         for (j = 0; j < n; ++j)
48             printf("%4d", x[i][j]);
49 
50         printf("\n");
51     }
52 }
53 
54  void rotate_to_right(int x[][N], int n){
55      int i, j,temp;
56      for (i = 0;i<n;i++){
57          temp = x[i][0];
58          for (j = 0;j<n;j++){
59              x[i][j] = x[i][j+1];
60              }
61          x[i][n-1] = temp;    
62      }
63  }

实验6

 

 

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

 

实验7

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

 

posted @ 2024-11-04 23:35  朴飞  阅读(9)  评论(0编辑  收藏  举报