实验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     
 9     printf("sizeof(x)=%\n",sizeof(x));
10     for (i=0;i<N;++i)
11         printf("%p:%d\n",&x[i],x[i]);
12         
13     printf("x=%p\n",x);
14          
15 }
16 void test2(){
17     int x[M][N]={{1,9,8,4},{2,0,4,9}};
18     int i,j;
19     printf("sizeof(x)=%d\n",sizeof(x));
20     
21     for(i=0;i<M;++i)
22         for(j=0;j<N;++j)
23             printf("%p:%d\n",&x[i][j],x[i][j]);
24     printf("\n");
25     
26     printf("x=%p\n",x);
27     printf("x[0]=%p\n",x[0]);
28     printf("x[1]=%p\n",x[1]);
29     printf("\n");
30 }
31 
32 int main(){
33     printf("测试1:int型一维数组\n");
34     test1();
35     printf("\n测试2:int型二维数组\n");
36     test2();
37     
38     return 0;
39 }

p1

1、连续,相同
2、 连续, 相同, 16, 为一行占的总字节数

任务2

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

p2

1、形参: int x[ ],int n,实参:x,n
2、 input依次读取x[ ];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     
11     while(printf("Enter n and value:"),scanf("%d%d",&n,&value)!=EOF){
12         init(x,n,value);
13         output(x,n);
14         printf("\n");
15         
16     }
17     
18     return 0;
19     
20 }
21 
22 
23 void output(int x[][N],int n){
24     int i,j;
25     
26     for(i=0;i<n;++i){
27     
28         for(j=0;j<n;++j)
29            printf("%d",x[i][j]);
30         printf("\n");
31         }
32 }
33 
34 
35 void init(int x[][N],int n,int value){
36     int i,j;
37     
38     for(i=0;i<n;++i)
39         for(j=0;j<n;++j)
40             x[i][j]=value;
41 }
View Code

p3

1、形参: int x[][N],int n,实参;x,n
2、不能
3、output :将value的值赋给x[][],init:依次输出x[][]

任务4

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 // 函数声明
 5 // 待补足
 6 // xxx
 7 
 8 void input(int x[N],int n);
 9 double median(int x[N],int n); 
10 
11 int main() {
12     int x[N];
13     int n;
14     double ans;
15 
16     while(printf("Enter n: "), scanf("%d", &n) != EOF) {
17         input(x, n);        // 函数调用
18         ans = median(x, n); // 函数调用
19         printf("ans = %g\n\n", ans);
20     }
21 
22     return 0;
23 }
24 
25 // 函数定义
26 // 待补足
27 // xxx
28 
29 void input(int x[N],int n){
30     int i;
31     for(i=0;i<n;i++)
32         scanf("%d",&x[i]);
33     
34 }
35 
36 double median(int x[N],int n){
37     int j,k,t;
38     for(j=0;j<n-1;j++){
39         
40         for(k=0;k<n-j-1;k++){
41         
42             if(x[k]>x[k+1]){
43         
44                t=x[k];
45                x[k]=x[k+1];
46                x[k+1]=t;
47                
48            }
49     }
50     } 
51     
52     int i;
53     if(n%2!=0){
54         i=n/2;
55         return x[i];
56     }
57     else{
58         i=n/2-1;
59         return (x[i]+x[i+1])/2.0;
60     }
61     
62 }
View Code

p4

 

任务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 // 函数rotate_to_right声明
 8 // 待补足
 9 // ×××
10 void  rotate_to_right(int x[N][N],int t);
11 
12 int main() {
13     int x[N][N];
14     int n;
15 
16     printf("输入n: "); 
17     scanf("%d", &n);
18     input(x, n);
19 
20     printf("原始矩阵:\n");
21     output(x, n);
22 
23     // 函数rotate_to_right调用
24     // 待补足
25     rotate_to_right(x,n);
26 
27     printf("变换后矩阵:\n");
28     output(x, n);
29 
30     return 0;
31 }
32 
33 // 函数定义
34 // 功能: 输入一个n*n的矩阵x
35 void input(int x[][N], int n) {
36     int i, j;
37     
38     for (i = 0; i < n; ++i) {
39         for (j = 0; j < n; ++j)
40             scanf("%d", &x[i][j]);
41     }
42 }
43 
44 // 函数定义
45 // 功能: 输出一个n*n的矩阵x
46 void output(int x[][N], int n) {
47     int i, j;
48 
49     for (i = 0; i < n; ++i) {
50         for (j = 0; j < n; ++j)
51             printf("%4d", x[i][j]);
52 
53         printf("\n");
54     }
55 }
56 
57 void  rotate_to_right(int x[N][N],int n){
58     int i,j,t;
59     for(i=0;i<n;i++){
60         t=x[i][n-1];
61         
62         for(j=0;j<n-1;j++){
63             x[i][n-j-1]=x[i][n-j-2];             
64         } 
65         x[i][0]=t;
66     }    
67     
68 }
69 
70 // 函数rotate_to_right定义
71 // 功能: 把一个n*n的矩阵x,每一列向右移, 最右边一列绕回左边
72 // 待补足
73 // xxx
View Code

p5

 

任务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 
 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 // 函数定义
20 // 功能: 把十进制数x转换成n进制,打印输出
21 // 补足函数实现
22 // xxx
23 void dec_to_n(int x, int n){
24     int a[20]={0};
25     int i=0;
26     int j;
27 
28     
29        while(x>0){
30         a[i]=x%n;
31         x=x/n; 
32         i++;
33     }
34        
35     for(j=i-1;j>=0;j--){        
36         if(a[j]<10){
37         printf("%d",a[j]);
38     }   
39         else{
40             switch(a[j]){
41                 case 10:printf("A");break;
42                 case 11:printf("B");break;
43                 case 12:printf("C");break;
44                 case 13:printf("D");break;
45                 case 14:printf("E");break;
46                 case 15:printf("F");break;
47                 
48             }
49         
50     }
51 }
52     printf("\n");
53 
54 }
View Code

p6

 

任务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 // 待补足函数is_magic声明
  8 // xxx
  9 int  is_magic(int x[][N],int n);
 10 
 11 int main() {
 12     int x[N][N];
 13     int n;
 14 
 15     while(printf("输入n: "), scanf("%d", &n) != EOF) {
 16         printf("输入方阵:\n");  
 17         input(x, n); 
 18 
 19         printf("输出方阵:\n");  
 20         output(x, n);   
 21 
 22         if(is_magic(x, n))
 23             printf("是魔方矩阵\n\n");
 24         else
 25             printf("不是魔方矩阵\n\n");
 26     }
 27 
 28     return 0;
 29 }
 30 
 31 // 函数定义
 32 // 功能: 输入一个n*n的矩阵x
 33 void input(int x[][N], int n) {
 34     int i, j;
 35     
 36     for (i = 0; i < n; ++i) {
 37         for (j = 0; j < n; ++j)
 38             scanf("%d", &x[i][j]);
 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 
 55 // 功能: 判断一个n阶方阵是否为魔方矩阵,如果是,返回1,否则,返回0
 56 // 待补足函数is_magic定义
 57 // xxx
 58 int  is_magic(int x[][N],int n){
 59     int i,j,l,p,m,q,k,w,e,r,t,y,z,ans=0,bns=0;
 60     int a[100]={0},b[100]={0};
 61     for(l=0;l<n;l++){
 62         for(p=0;p<n;p++){
 63         
 64         for(k=0;k<n;k++){
 65             for(m=0;m<n;m++){
 66                 if(l==k&&p==m){
 67                 m++;
 68                 if(x[l][p]==x[k][m])
 69                    return 0;
 70         }
 71     }
 72     }
 73 }
 74 }
 75 //
 76     for(i=0;i<n;i++){
 77         a[i]=0;
 78         for(j=0;j<n;j++){
 79             a[i]+=x[i][j];
 80         }    
 81     }
 82     for(q=0;q<n-1;q++){
 83         if(a[q]!=a[q+1])
 84            return 0;
 85     }
 86 //
 87     for(w=0;w<n;w++){
 88         b[w]=0;
 89         for(e=0;e<n;e++){
 90             b[w]+=x[e][w];
 91         }    
 92     }
 93     for(r=0;r<n-1;r++){
 94         if(b[r]!=b[r+1])
 95            return 0;}
 96 //对角线
 97        y=0;z=n-1;
 98     for(t=0;t<n;t++){
 99  
100         ans+=x[t][y];
101         bns+=+x[t][z];
102         y++;z--;
103     } 
104     if(a[0]==b[0]&&b[0]==ans&&ans==bns)
105        return 1;
106        
107     return 0; 
108 
109 }
View Code

p7

p7,

 

posted @ 2025-11-11 20:43  仇昕泽  阅读(14)  评论(0)    收藏  举报