实验4
实验1:
源码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N 4 4 #define M 2 5 void test1(){ 6 int x[N]={1,9,8,4}; 7 int i; 8 printf("sizeof(x)=%d\n",sizeof(x)); 9 for (i=0;i<N;i++) 10 printf("%p:%d\n",&x[i],x[i]); 11 printf("x=%p\n",x); 12 } 13 void test2(){ 14 int x[M][N]={{1,9,8,4},{2,0,4,9}}; 15 int i,j; 16 printf("sizeof(x)=%d\n",sizeof(x)); 17 for(i=0;i<M;++i) 18 for(j=0;j<N;j++) 19 printf("%p:%d\n",&x[i][j],x[i][j]); 20 printf("\n"); 21 printf("x=%p\n",x); 22 printf("x[0]=%p\n",x[0]); 23 printf("x[1]=%p\n",x[1]); 24 printf("\n"); 25 } 26 int main(){ 27 printf("测试1:int型一位数组\n"); 28 test1(); 29 printf("\n测试2:int型二维数组\n"); 30 test2(); 31 system("pause"); 32 return 0; 33 }
截图:
问题1;
是。一样的
问题2:
是。一样的。4个字节。int所占内存
实验2:
源码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N 100 4 void input(int x[],int n); 5 double compute(int x[],int n); 6 int main(){ 7 int x[N]; 8 int n,i; 9 double ans; 10 while(printf("Enter n:"),scanf("%d",&n)!=EOF){ 11 input(x,n); 12 ans=compute(x,n); 13 printf("ans=%.2f\n\n",ans); 14 } 15 system("pause"); 16 return 0; 17 } 18 void input(int x[],int n){ 19 int i; 20 for (i=0;i<n;++i) 21 scanf("%d",&x[i]); 22 } 23 double compute(int x[],int n){ 24 int i,high,low; 25 double ans; 26 high=low=x[0]; 27 ans=0; 28 for(i=0;i<n;i++){ 29 ans+=x[i]; 30 if(x[i]>high) 31 high=x[i]; 32 else if(x[i]<low) 33 low=x[i]; 34 } 35 ans=(ans-high-low)/(n-2); 36 return ans; 37 }
截图:
问题:
给数组赋n个值。计算去掉最大值和最小值的平均值
实验3:
源码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N 100 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 system("pause"); 17 return 0; 18 } 19 20 void output(int x[][N],int n){ 21 int i,j; 22 23 for(i=0;i<n;i++){ 24 for(j=0;j<n;j++) 25 printf("%d ",x[i][j]); 26 printf("\n"); 27 } 28 } 29 30 void init(int x[][N],int n,int value){ 31 int i,j; 32 33 for(i=0;i<n;i++) 34 for(j=0;j<n;j++) 35 x[i][j]=value; 36 }
截图:
问题1:
列标
问题2:
output的功能是输出n × n的数组。init是给n x n的数组赋值
实验4:
源码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N 100 4 void input(int x[],int n); 5 double median(int x[],int n); 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 system("pause"); 17 return 0; 18 } 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 26 double median(int x[],int n){ 27 int i,j,t; 28 for(i=0;i<n-1;i++) 29 for(j=0;j<n-i-1;j++) 30 if(x[j]>x[j+1]){ 31 t=x[j]; 32 x[j]=x[j+1]; 33 x[j+1]=t; 34 } 35 if(n%2) 36 return x[n/2]; 37 else 38 return (x[n/2-1]+x[n/2])/2.0; 39 }
截图:
实验5:
源码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N 100 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 int main(){ 9 int x[N][N]; 10 int n; 11 12 printf("Enter n:"); 13 scanf("%d",&n); 14 input(x,n); 15 16 printf("原始矩阵:\n"); 17 output(x,n); 18 19 rotate_to_right(x,n); 20 printf("变换后矩阵:\n"); 21 output(x,n); 22 23 system("pause"); 24 return 0; 25 } 26 27 void input(int x[][N],int n){ 28 int i,j; 29 30 for(i=0;i<n;i++) 31 for(j=0;j<n;j++) 32 scanf("%d",&x[i][j]); 33 } 34 35 void output(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 printf("%4d",x[i][j]); 41 printf("\n"); 42 } 43 } 44 45 void rotate_to_right(int x[][N],int n){ 46 int a[N],i,j; 47 for(i=0;i<n;i++){ 48 a[i]=x[i][n-1]; 49 for(j=n-2;j>=0;j--) 50 x[i][j+1]=x[i][j]; 51 x[i][0]=a[i]; 52 } 53 }
截图:
实验6:
源码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N 100 4 5 void dec_to_n(int x,int n); 6 7 int main(){ 8 int x; 9 10 while(printf("输入十进制整数:"),scanf("%d",&x)!=EOF){ 11 dec_to_n(x,2); 12 dec_to_n(x,8); 13 dec_to_n(x,16); 14 15 printf("\n"); 16 } 17 system("pause"); 18 return 0; 19 } 20 21 void dec_to_n(int x,int n){ 22 int a[N],i,j=0; 23 for(i=x;i!=0;i/=n){ 24 a[j]=x%n; 25 x/=n; 26 j++; 27 } 28 for(i=j-1;i>=0;i--){ 29 if(a[i]%n>9) 30 printf("%c",a[i]-10+'A'); 31 else 32 printf("%c",a[i]+'0'); 33 } 34 printf("\n"); 35 }
截图:
实验7:
源码:
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<stdlib.h> 4 #define N 100 5 6 void input(int x[][N],int n); 7 void output(int x[][N],int n); 8 int is_magic(int x[][N],int n); 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 system("pause"); 27 return 0; 28 } 29 30 void input(int x[][N],int n){ 31 int i,j; 32 for(i=0;i<n;i++) 33 for(j=0;j<n;j++) 34 scanf("%d",&x[i][j]); 35 } 36 37 void output(int x[][N],int n){ 38 int i,j; 39 40 for(i=0;i<n;i++){ 41 for(j=0;j<n;j++) 42 printf("%4d",x[i][j]); 43 44 printf("\n"); 45 } 46 } 47 48 int is_magic(int x[][N],int n){ 49 int sum1=0,sum2=0,sum3=0,sum4=0,i,j; 50 for(j=0;j<n;j++){ 51 sum3+=x[j][j]; 52 sum4+=x[n-1-j][j]; 53 } 54 for(i=0;i<n;i++){ 55 for(j=0;j<n;j++){ 56 sum1+=x[i][j]; 57 sum2+=x[j][i]; 58 } 59 if(sum1!=sum2||sum1!=sum3||sum1!=sum4) 60 return 0; 61 sum1=0; 62 sum2=0; 63 } 64 return 1; 65 }
截图: