实验4
task1
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 29 printf("\n测试2:int型二维数组\n"); 30 test2(); 31 return 0; 32 }
A1:是;相同
A2:是;相同
task2
1 #include <stdio.h> 2 #define N 100 3 void input(int x[],int n); 4 double compute(int x[],int n); 5 int main(){ 6 int x[N]; 7 int n,i; 8 double ans; 9 while (printf("Enter n:"),scanf("%d",&n)!=EOF){ 10 input(x,n); 11 ans=compute(x,n); 12 printf ("ans=%.2f\n\n",ans); 13 } 14 return 0; 15 } 16 void input(int x[],int n){ 17 int i; 18 19 for(i=0;i<n;++i) 20 scanf("%d",&x[i]); 21 } 22 double compute(int x[],int n){ 23 int i,high,low; 24 double ans; 25 26 high=low=x[0]; 27 ans =0; 28 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 38 ans=(ans-high-low)/(n-2); 39 return ans; 40 }

A1:形参:数据类型+数组名+[];实参:数组名
A2:input:输入数据;compute:对数据进行计算处理
task3:
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<j;++i) 26 for(j=0;j<n;++j) 27 x[i][j]=value; 28 29 }

A1:形参:数据类型+数组名+[];实参:数组名
A2:不能
A3:output:输出数据;init:初始化数据
task4
1 #include <stdio.h> 2 #define N 100 3 void input(int x[],int n); 4 double median(int x[],int n); 5 int main(){ 6 int x[N]; 7 int n; 8 double ans; 9 while(printf("Enter n:"),scanf("%d",&n)!=EOF){ 10 input(x,n); 11 ans = median(x,n); 12 printf("ans=%g\n\n",ans); 13 } 14 return 0; 15 } 16 void input(int x[],int n){ 17 for(int i=0;i<n;i++){ 18 scanf("%d",&x[i]); 19 } 20 } 21 double median(int x[],int n){ 22 for (int i=0;i<n-1;i++){ 23 for(int j=0;j<n-1;j++){ 24 if(x[j]>x[j+1]){ 25 int temp=x[j]; 26 x[j]=x[j+1]; 27 x[j+1]=temp; 28 } 29 } 30 } 31 if (n%2==1){ 32 return x[n/2]; 33 }else{ 34 return (x[n/2-1]+x[n/2])/2.0; 35 } 36 } 37

task5
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 int main(){ 7 int x[N][N]; 8 int n; 9 printf("Enter n:"); 10 scanf("%d",&n); 11 input(x,n); 12 printf("原始矩阵:\n"); 13 output(x,n); 14 rotate_to_right(x,n); 15 printf("变换后矩阵:\n"); 16 output(x,n); 17 return 0; 18 } 19 void input(int x[][N],int n){ 20 int i,j; 21 for (i=0;i<n;++i){ 22 for(j=0;j<n;++j) 23 scanf("%d",&x[i][j]); 24 } 25 } 26 void output(int x[][N],int n){ 27 int i,j; 28 for(i=0;i<n;++i){ 29 for(j=0;j<n;++j) 30 printf("%4d",x[i][j]); 31 printf("\n"); 32 } 33 } 34 void rotate_to_right(int x[][N],int n){ 35 int i,j,temp[n]; 36 for(i=0;i<n;++i){ 37 temp[i]=x[i][n-1]; 38 } 39 for(j=n-1;j>0;--j){ 40 for(i=0;i<n;++i){ 41 x[i][j]=x[i][j-1]; 42 } 43 } 44 for (int i=0;i<n;++i){ 45 x[i][0]=temp[i]; 46 } 47 }

task6
1 #include <stdio.h> 2 #define N 100 3 void dec_to_n(int x,int n); 4 int main(){ 5 int x; 6 while(printf("输入十进制整数:"),scanf("%d",&x)!=EOF){ 7 dec_to_n(x,2); 8 dec_to_n(x,8); 9 dec_to_n(x,16); 10 printf("\n"); 11 } 12 return 0; 13 } 14 void dec_to_n(int x,int n){ 15 int a[20]={0}; 16 int i=0,j; 17 while(x>0){ 18 a[i]=x%n; 19 x=x/n; 20 i++; 21 } 22 for(j=i-1;j>=0;j--){ 23 if(a[j]<10){ 24 printf("%d",a[j]); 25 }else{ 26 switch(a[j]){ 27 case 10:printf("A");break; 28 case 11:printf("B");break; 29 case 12:printf("C");break; 30 case 13:printf("D");break; 31 case 14:printf("E");break; 32 case 15:printf("F");break; 33 } 34 } 35 } 36 printf("\n"); 37 }

task 7
1 int is_magic(int x[][N],int n); 2 int main(){ 3 int x[N][N]; 4 int n; 5 while(printf("输入n:"),scanf("%d",&n)!=EOF){ 6 printf("输入方阵:\n"); 7 input(x,n); 8 printf("输出方阵:\n"); 9 output(x,n); 10 if(is_magic(x,n)) 11 printf("是魔方矩阵\n\n"); 12 else 13 printf("不是魔方矩阵\n\n"); 14 } 15 return 0; 16 } 17 void input(int x[][N],int n){ 18 int i,j; 19 for (i=0;i<n;++i){ 20 for(j=0;j<n;++j) 21 scanf("%d",&x[i][j]); 22 } 23 } 24 void output(int x[][N],int n){ 25 int i,j; 26 for(i=0;i<n;++i){ 27 for(j=0;j<n;++j) 28 printf("%4d",x[i][j]); 29 printf("\n"); 30 } 31 } 32 int is_magic(int x[][N], int n) { 33 int a= n * (n * n + 1) / 2; 34 for (int i = 0; i < n; i++) { 35 int b = 0; 36 for (int j = 0; j < n; j++) { 37 b+= x[i][j]; 38 } 39 if (b!= a) 40 return 0; 41 } 42 for (int j = 0; j < n; j++) { 43 int c= 0; 44 for (int i = 0; i < n; i++) { 45 c+= x[i][j]; 46 } 47 if (c!=a) 48 return 0; 49 } 50 int d= 0; 51 for (int i = 0; i < n; i++) { 52 d+= x[i][i]; 53 } 54 if (d!= a) 55 return 0; 56 int e= 0; 57 for (int i = 0; i < n; i++) { 58 e+= x[i][n - 1 - i]; 59 } 60 if (e!= a) 61 return 0; 62 return 1; 63 }

浙公网安备 33010602011771号