实验四

任务一: 问题一:int型一维数组x在内存中是连续存放的。数组名x和&x[0]对应的值相同都是数组的首地址。

任务二:int型一维数组x在内存中是按行连续存放的。x,x[0],&x[0]在字面上其对应的值是一样的。x[0]与x[1]相差16。这个差值是相差十六个字节。

              观察:形参:void input(int x[], int n); 实参:input(x, n); 问题:input功能是记录输入的值;compute功能是找到输入值的最大和最小值,并用输入值减去最大和最小值后求平均值。

任务三: 观察:形参:void output(int x[][N], int n); 实参:void init(int x[][N], int n, int value) {} 问题一:第二维不能省略

问题二:output是将x[][]的值按特定格式输出,init功能是将输入的value的值存储在x[][]中。

任务四:

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

任务五:

 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 int main() {
10     int x[N][N];
11     int n;
12 
13     printf("输入n: "); 
14     scanf("%d", &n);
15     input(x, n);
16 
17     printf("原始矩阵:\n");
18     output(x, n);
19 
20     rotate_to_right(x,n);
21 
22     printf("变换后矩阵:\n");
23     output(x, n);
24 
25     return 0;
26 }
27 
28 // 函数定义
29 // 功能: 输入一个n*n的矩阵x
30 void input(int x[][N], int n) {
31     int i, j;
32     
33     for (i = 0; i < n; ++i) {
34         for (j = 0; j < n; ++j)
35             scanf("%d", &x[i][j]);
36     }
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 
52 void rotate_to_right(int x[][N],int n){
53     int i,j;
54     for(i=0;i<n;i++){
55         int temp=x[i][n-1];
56         x[i][n-1]=x[i][0];
57         x[i][0]=temp;
58     }
59 }

任务六:

 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 void dec_to_n(int x,int n){
20     int binary[32];
21     int i=0,j=0;
22     while(x>0){
23         binary[i]=x%n;
24         x=x/n;
25         i++;
26     }
27 
28 
29     for(j=i-1;j>=0;j--){
30         if(n==16&&binary[j]>=10){
31             printf("%c",binary[j]-10+'A');
32         }
33         else
34         printf("%d",binary[j]);
35     }
36     printf("\n");
37     
38     
39 }

任务七:

 

 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 // 待补足函数is_magic声明
 8 // xxx
 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 
54 void is_magic(int x[][N], int n){
55     int sum_diagonal1 = 0, sum_diagonal2 = 0;
56     int sum_row[100], sum_col[100];
57     int i,j;
58     for (i = 0; i < n; i++) {
59         sum_row[i] = 0;
60         sum_col[i] = 0;
61     }
62     for (i = 0; i < n; i++) {
63         sum_diagonal1 += x[i][i];
64         sum_diagonal2 += x[i][n - 1 - i];
65         for (j = 0; j < n; j++) {
66             sum_row[i] += x[i][j];
67             sum_col[i] += x[j][i];
68         }
69     }
70     if (sum_diagonal1!= sum_diagonal2) {
71         return 0;
72     }
73     for (i = 0; i < n; i++) {
74         if (sum_row[i]!= sum_diagonal1 || sum_col[i]!= sum_diagonal1) {
75         return 0;
76         
77         }
78     }
79     
80     return 1;
81 }

 

posted @ 2024-11-04 09:38  落半月尘  阅读(3)  评论(0编辑  收藏  举报