实验4
Task1.c
问题1:是,是
问题2:是,是,相差为4,x[0]所占字节
Task2.c
形参形式:int fuc(int x[]),实参形式:fuc(x)
input作用:输入数组,确定数组元素。compute功能:去掉最大值,去掉最小值,取平均数
Task3.c
观察:形参书写形式:int x[][N]。实参书写形式:x
问题1:二维
问题2:output:确定二维数组数组的行数和二维数组的值。init:将二维数组初始化为一个n阶0矩阵。
Task4.c
1 #include <stdio.h> 2 #define N 100 3 4 // 函数声明 5 void input(int x[],int n); 6 double median(int x[],int n); 7 // 待补足 8 // xxx 9 10 int main() { 11 int x[N]; 12 int n; 13 double ans; 14 15 while(printf("Enter n: "), scanf("%d", &n) != EOF) { 16 input(x, n); 17 ans = median(x, n); 18 printf("ans = %g\n\n", ans); 19 } 20 21 return 0; 22 } 23 24 // 函数定义 25 // 待补足 26 // xxx 27 void input(int x[],int n) 28 { 29 for (int i = 0; i < n; i++) 30 { 31 scanf("%d",&x[i]); 32 } 33 } 34 35 double median(int x[],int n) 36 { 37 int i, j; 38 for (i = 0; i < n - 1; i++) { 39 for (j = 0; j < n - i - 1; j++) { 40 if (x[j] > x[j + 1]) { 41 int temp = x[j]; 42 x[j] = x[j + 1]; 43 x[j + 1] = temp; 44 } 45 } 46 } 47 if (n%2==0) 48 { 49 int a,b; 50 double c; 51 a=n/2; 52 b=(n/2)+1; 53 c=(x[a-1]+x[b-1])/2.0; 54 return c; 55 } 56 else 57 { 58 int d; 59 d=(n+1)/2; 60 return x[d-1]; 61 } 62 }
task5.c
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 void rotate_to_right(int x[][N],int n); 9 // 待补足 10 // ××× 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 printf("变换后矩阵:\n"); 27 output(x, n); 28 29 return 0; 30 } 31 32 // 函数定义 33 // 功能: 输入一个n*n的矩阵x 34 void input(int x[][N], int n) { 35 int i, j; 36 37 for (i = 0; i < n; ++i) { 38 for (j = 0; j < n; ++j) 39 scanf("%d", &x[i][j]); 40 } 41 } 42 43 // 函数定义 44 // 功能: 输出一个n*n的矩阵x 45 void output(int x[][N], int n) { 46 int i, j; 47 48 for (i = 0; i < n; ++i) { 49 for (j = 0; j < n; ++j) 50 printf("%4d", x[i][j]); 51 52 printf("\n"); 53 } 54 } 55 56 // 函数rotate_to_right定义 57 // 功能: 把一个n*n的矩阵x,每一列向右移, 最右边被移出去的一列绕回左边 58 // 待补足 59 // xxx 60 void rotate_to_right(int x[][N],int n) 61 { 62 int temp[n]; 63 for (int j = 0; j < n; j++) 64 { 65 temp[j]=x[j][n-1]; 66 for (int i = n - 1; i > 0; i--) 67 { 68 x[j][i] = x[j][i-1]; 69 } 70 x[j][0] = temp[j]; 71 } 72 73 }
Task6.c
1 #include <stdio.h> 2 #define N 100 3 4 void dec_to_n(int x, int n); // 函数声明 5 6 int main() { 7 int x; 8 9 while(printf("输入十进制整数: "), scanf("%d", &x) != EOF) { 10 dec_to_n(x, 2); // 函数调用: 把x转换成二进制输出 11 dec_to_n(x, 8); // 函数调用: 把x转换成八进制输出 12 dec_to_n(x, 16); // 函数调用: 把x转换成十六进制输出 13 14 printf("\n"); 15 } 16 17 return 0; 18 } 19 20 // 函数定义 21 // 功能: 把十进制数x转换成n进制,打印输出 22 // 补足函数实现 23 // xxx 24 25 void dec_to_n(int x, int n) 26 { 27 int yu[20],t=0; 28 while (x!=0) 29 { 30 yu[t]=x%n; 31 x/=n; 32 t++; 33 } 34 int i; 35 for ( i = t-1; i >= 0; i--) 36 { 37 if(yu[i]>=10&&n==16) 38 { 39 printf("%c",yu[i]-10+'A'); 40 } 41 else 42 { 43 printf("%d",yu[i]); 44 } 45 } 46 printf("\n"); 47 48 }
Task7.c
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 int is_magic(int x[][N],int n); 8 // 待补足函数is_magic声明 9 // xxx 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 { 60 int ans=0,sum=0; 61 //hang 62 for (int i = 0; i < n; i++) 63 { 64 sum+=x[0][i]; 65 } 66 for (int i = 0; i < n; i++) 67 { 68 ans=0; 69 for (int j = 0; j < n; j++) 70 { 71 ans+=x[i][j]; 72 } 73 if (sum!=ans) 74 { 75 return 0; 76 } 77 } 78 //lie 79 for (int i = 0; i < n; i++) 80 { 81 ans=0; 82 for (int j = 0; j < n; j++) 83 { 84 ans+=x[j][i]; 85 } 86 if (sum!=ans) 87 { 88 return 0; 89 } 90 } 91 //fuduijiaoxian 92 ans=0; 93 for (int i = 0; i < n; i++) 94 { 95 ans+=x[i][n-1-i]; 96 } 97 if (ans!=sum) 98 { 99 return 0; 100 } 101 //zhuduijiaoxian 102 ans=0; 103 for (int i = 0; i < n; i++) 104 { 105 ans+=x[i][i]; 106 } 107 if (ans!=sum) 108 { 109 return 0; 110 } 111 112 return 1; 113 114 }