实验4
实验任务1
问题1:一维数组x在内存中连续存放。x和&x[0]的值相同。
问题2:二维数组x在内存中是否按行连续存放。x、x[0]和&x[0][0]的值相同。?x[0]和x[1]相差16,该差值的含义是x[0]和x[1]相差4个数。
实验任务2
问题1:实参直接写x,形参写x[]。
问题2:input将数据输入到数组中,compute计算输入数字在去掉最大值和最小值后的平均值。
实验任务3
问题1:新参写成x[][N],实参写成x。
问题2:不能,第一个可写可不写,第二个必须写。
问题3:output可以输出数组,init可以将输入的数字赋值给指定的范围内的所有数字。
实验任务4
源代码
1 #include <stdio.h> 2 #define N 100 3 double median(int x[],int n); 4 void input(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 int i; 18 for(i = 0; i < n; ++i) { 19 scanf("%d", &x[i]); 20 } 21 } 22 double median(int x[],int n) { 23 int i,j,k; 24 for (i=0;i<n-1;i++){ 25 for(k=0;k<n-1;k++) { 26 if (x[k]>x[k+1]) { 27 j=x[k]; 28 x[k]=x[k+1]; 29 x[k+1]=j; 30 } 31 } 32 } 33 switch (n%2) { 34 case 0:return (x[n/2+1]+x[n/2])/2.0; 35 case 1:return (x[n/2]); 36 } 37 }
运行结果

实验任务5
源代码
1 #include <stdio.h> 2 #define N 100 3 // 函数声明 4 void input(int x[][N], int n); 5 void output(int x[][N], int n); 6 void rotate_to_right(int x[][N], int n); 7 int main() { 8 int x[N][N]; 9 int n; 10 printf("Enter n: "); 11 scanf("%d", &n); 12 input(x, n); 13 printf("原始矩阵:\n"); 14 output(x, n); 15 rotate_to_right(x,n); 16 printf("变换后矩阵:\n"); 17 output(x, n); 18 return 0; 19 } 20 // 函数定义 21 // 功能: 输入一个n*n的矩阵x 22 void input(int x[][N], int n) { 23 int i, j; 24 for (i = 0; i < n; ++i) { 25 for (j = 0; j < n; ++j) 26 scanf("%d", &x[i][j]); 27 } 28 } 29 // 函数定义 30 // 功能: 输出一个n*n的矩阵x 31 void output(int x[][N], int n) { 32 int i, j; 33 for (i = 0; i < n; ++i) { 34 for (j = 0; j < n; ++j) 35 printf("%4d", x[i][j]); 36 printf("\n"); 37 } 38 } 39 void rotate_to_right(int x[][N], int n) { 40 int a,b,i,y[N][N+1]; 41 for(i=0;i<n;++i) { 42 for (a=0;a<n;++a) { 43 y[i][a+1]=x[i][a]; 44 } 45 } 46 for(i=0;i<n;++i) { 47 y[i][0]=x[i][n-1]; 48 } 49 for(i=0;i<n;++i) { 50 for (a=0;a<n;++a) { 51 x[i][a]=y[i][a]; 52 } 53 } 54 }
运行结果

实验任务6
源代码
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); // 函数调用: 把x转换成二进制输出 8 dec_to_n(x, 8); // 函数调用: 把x转换成八进制输出 9 dec_to_n(x, 16); // 函数调用: 把x转换成十六进制输出 10 printf("\n"); 11 } 12 return 0; 13 } 14 void dec_to_n(int x, int n) { 15 int i=0,a; 16 char y[N]; 17 for (;x!=0;i++) { 18 if (x%n<10) { 19 y[i]=x%n+'0'; 20 } 21 else { 22 switch(x%n) { 23 case 10:y[i]='A';break; 24 case 11:y[i]='B';break; 25 case 12:y[i]='C';break; 26 case 13:y[i]='D';break; 27 case 14:y[i]='E';break; 28 default:y[i]='F'; 29 } 30 } 31 x=x/n; 32 } 33 for(a=i-1;a>=0;a--) 34 printf("%c",y[a]); 35 printf("\n"); 36 }
运行结果

实验任务7
源代码
1 #include <stdio.h> 2 #define N 100 3 // 函数声明 4 void input(int x[][N], int n); 5 void output(int x[][N], int n); 6 int is_magic(int x[][N],int n); 7 int main() { 8 int x[N][N]; 9 int n; 10 while(printf("输入n: "), scanf("%d", &n) != EOF) { 11 printf("输入方阵:\n"); 12 input(x, n); 13 printf("输出方阵:\n"); 14 output(x, n); 15 if(is_magic(x, n)) 16 printf("是魔方矩阵\n\n"); 17 else 18 printf("不是魔方矩阵\n\n"); 19 } 20 return 0; 21 } 22 // 函数定义 23 // 功能: 输入一个n*n的矩阵x 24 void input(int x[][N], int n) { 25 int i, j; 26 27 for (i = 0; i < n; ++i) { 28 for (j = 0; j < n; ++j) 29 scanf("%d", &x[i][j]); 30 } 31 } 32 // 功能: 输出一个n*n的矩阵x 33 void output(int x[][N], int n) { 34 int i, j; 35 for (i = 0; i < n; ++i) { 36 for (j = 0; j < n; ++j) 37 printf("%4d", x[i][j]); 38 printf("\n"); 39 } 40 } 41 int is_magic(int x[][N],int n) { 42 int a,b,i,j; 43 a=(n*n+1)*n/2; 44 for (i = 0; i < n; ++i) { 45 b = 0; 46 for (j = 0; j < n; ++j) { 47 b += x[i][j]; 48 } 49 if (b!=a){return 0;} 50 } 51 for (i = 0; i < n; ++i) { 52 b = 0; 53 for (j = 0; j < n; ++j) { 54 b += x[j][i]; 55 } 56 if (b!=a){return 0;} 57 } 58 b=0; 59 for (i=0;i<n;++i) { 60 b+=x[i][i]; 61 } 62 if (b!=a){return 0;} 63 b=0; 64 for (i=n-1;i>=0;--i) { 65 b+=x[i][i]; 66 } 67 if (b!=a){return 0;} 68 return 1; 69 }
运行结果



实验任务8
1 #include<stdio.h> 2 int main() { 3 int a,b,c,d[10],i=0,j=0,k,t; 4 for (a=0;a<10000;a++) { 5 b=a*a; 6 c=a*a*a; 7 i=0; 8 j=0; 9 //将数字存到数组中 10 while(b!=0) 11 {d[i]=b%10; 12 b/=10; 13 i++;} 14 while(c!=0) 15 {d[i]=c%10; 16 c/=10; 17 i++;} 18 //数组排序 19 for (;j<i-1;j++) 20 {for(k=0;k<i-1;k++) 21 {if (d[k]>d[k+1]) 22 {t=d[k]; 23 d[k]=d[k+1]; 24 d[k+1]=t;}}} 25 //判断 26 if (i==10) 27 {for (k=0;k<10;k++) 28 {if(d[k]!=k) 29 {break;}} 30 if (k==10) { 31 printf("%d",a); 32 return 0; 33 } 34 } 35 } 36 return 0; 37 }
运行结果


浙公网安备 33010602011771号