实验4
Test1
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 } 21 int main(){ 22 printf("测试1:int型一维数组\n"); 23 test1(); 24 printf("\n测试2:int型二维数组\n"); 25 test2(); 26 system("pause"); 27 return 0; 28 }

问题1:是,相同;
问题2: 是,相同,表示数组存储一个值所占内存大小;
Test2
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 for(i=0;i<n;++i) 19 scanf("%d",&x[i]); 20 } 21 double compute(int x[],int n){ 22 int i,high,low; 23 double ans; 24 high=low=x[0]; 25 ans=0; 26 for(i=0;i<n;++i){ 27 ans+=x[i]; 28 if(x[i]>high) 29 high=x[i]; 30 else if(x[i]<low) 31 low=x[i]; 32 } 33 ans=(ans-high-low)/(n-2); 34 return ans; 35 }

问题1:int ,int;
问题2:根据输入n值,将输入的值存储到数组中;算出这组数去掉最大和最小值后的平均值赋值给ans并输出;
Test3
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 }

问题1:int,int;
问题2:不能;
问题3:根据输入的值输出相应的方阵,将scanf输入的值存储到相应的数组位置;
Test4
1 #include<stdio.h> 2 #define N 100 3 double median(int x[N],int n); 4 void input(int x[N],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 system("pause"); 15 return 0; 16 } 17 void input(int x[N],int n){ 18 int i; 19 for(i=0;i<n;++i) 20 scanf("%d",&x[i]); 21 } 22 double median(int x[N],int n){ 23 int i,j,t; 24 double ans; 25 for(j=0;j<n-1;j++){ 26 for(i=0;i<n-j-1;i++){ 27 if(x[i]>x[i+1]){ 28 t=x[i]; 29 x[i]=x[i+1]; 30 x[i+1]=t; 31 } 32 } 33 } 34 if(n%2==0) 35 ans=(x[n/2-1]+x[n/2])/2.0; 36 else 37 ans=x[n/2]; 38 return ans; 39 }

Test5
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 system("pause"); 18 return 0; 19 } 20 void input(int x[][N], int n){ 21 int i,j; 22 for(i=0;i<n;++i){ 23 for(j=0;j<n;++j) 24 scanf("%d",&x[i][j]); 25 26 } 27 } 28 void output(int x[][N],int n){ 29 int i,j; 30 for(i=0;i<n;++i){ 31 for(j=0;j<n;++j) 32 printf("%4d",x[i][j]); 33 34 printf("\n"); 35 36 } 37 } 38 void rotate_to_right(int x[][N],int n){ 39 int i,j,t; 40 for(i=0;i<n;++i){ 41 t=x[i][n-1]; 42 for(j=n-1;j>0;--j){ 43 44 x[i][j]=x[i][j-1]; 45 } 46 x[i][0]=t; 47 } 48 }

Test6
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 system("pause"); 13 return 0; 14 } 15 void dec_to_n(int x,int n){ 16 int a[N]={0}; 17 int i=0,j; 18 do{a[i]=(x%n); 19 x/=n; 20 ++i; 21 }while(x!=0); 22 for(j=i-1;j>=0;--j){ 23 if(a[j]>=10){ 24 printf("%c",'A'+(a[j]-10)); 25 }else 26 printf("%d",a[j]); 27 }printf("\n"); 28 }

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




实验总结
1.嵌套循环中需注意重置变量,同时关注其所在位置。
2.重视理论知识点(简答题不是很会组织语言,答案也有不确定)。
【可以提点一下任务8吗?没做出来(╥╯^╰╥)】

浙公网安备 33010602011771号