实验4
实验任务1:
源代码:
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 (int 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 printf("测试2:int型二维数组\n"); 29 test2(); 30 return 0; 31 }
图片:
问题1:是 相同
问题2:是,相同,相差16,第一行所占的字节;
实验任务2:
源代码:
1 #include<stdio.h> 2 #define N 100 3 void input(int x[], int n) { 4 int i; 5 for (i = 0; i < n; i++) 6 scanf_s("%d", &x[i]); 7 } 8 double compute(int x[], int n) { 9 int i, high, low; 10 double ans = 0; 11 high = low = x[0]; 12 for (i = 0; i < n; i++) { 13 ans += x[i]; 14 if (x[i] > high) 15 high = x[i]; 16 else if (x[i] < low) 17 low = x[i]; 18 } 19 ans = (ans - high - low) / (n - 2); 20 return ans; 21 } 22 int main() { 23 int x[N]; 24 int n, i; 25 double ans; 26 while (printf("Enter n:"), scanf_s("%d", &n) != EOF) { 27 input(x, n); 28 ans = compute(x, n); 29 printf("ans=%.2f\n\n", ans); 30 } 31 32 return 0; 33 }
图片:
问题1:形参x[]和n 实参x和n
问题2:输入n个数;计算将这n个数去掉最大值与最小值的平均数;
实验任务3:
源代码:
1 #include<stdio.h> 2 #define N 100 3 void output(int x[][N], int n) { 4 int i, j; 5 for (i = 0; i < n; i++) { 6 for (j = 0; j < n; j++) 7 printf("%d", x[i][j]); 8 printf("\n"); 9 } 10 } 11 void init(int x[][N], int n,int value) { 12 int i, j; 13 14 for (i = 0; i < n; i++) 15 for (j = 0; j < n; j++) 16 x[i][j] = value; 17 } 18 int main() { 19 int x[N][N]; 20 int n, value; 21 22 while (printf("Enter n and value:"), scanf_s("%d%d", &n,&value) != EOF) { 23 init(x, n,value); 24 output(x, n); 25 printf("\n"); 26 } 27 28 return 0; 29 }
图片:
问题1:形参:x[][N]和n 实参:x和n;
问题2:不能
问题3:output打印数组 init使数组中每个数都为value
实验任务4
源代码
1 #include<stdio.h> 2 #define N 100 3 void input(int x[], int n) { 4 for (int i = 0; i < n; i++) 5 scanf_s("%d", &x[i]); 6 } 7 double median(int x[], int n) { 8 double ans; 9 int t; 10 for (int i = 0; i < n - 1; i++) { 11 for (int j = 0; j <= i; j++) { 12 if (x[j] < x[j + 1]) { 13 t = x[j]; 14 x[j] = x[j + 1]; 15 x[j + 1] = t; 16 } 17 } 18 } 19 if (n % 2 != 0) 20 ans = x[n / 2]; 21 else 22 ans = (x[n / 2 - 1] + x[n / 2]) / 2.0; 23 return ans; 24 25 26 27 } 28 int main() { 29 int x[N]; 30 int n; 31 double ans; 32 33 while (printf("Enter n:"), scanf_s("%d", &n) != EOF) { 34 input(x, n); 35 ans = median(x, n); 36 printf("ans=%g\n\n", ans); 37 38 39 } 40 return 0; 41 }
图片
实验任务5
1 #include<stdio.h> 2 #define N 100 3 void input(int x[][N], int n) { 4 for (int i = 0; i < n; i++) { 5 6 for (int j = 0; j < n; j++) 7 scanf_s("%d", &x[i][j]); 8 } 9 } 10 void output(int x[][N], int n) { 11 12 for (int i = 0; i < n; i++) { 13 14 for (int j = 0; j < n; j++) 15 printf("%4d", x[i][j]); 16 printf("\n"); 17 } 18 } 19 20 void rotate(int x[][N], int n) { 21 int c[N]; 22 for (int i = 0; i < n; i++) 23 c[i] = x[i][n - 1]; 24 25 for (int i = n - 1; i >= 0; i--) { 26 27 for (int j = n - 1; j > 0; j--) 28 29 30 31 x[i][j] = x[i][j - 1]; 32 33 } 34 for (int i = 0; i < n; i++) 35 x[i][0] = c[i]; 36 37 for (int i = 0; i < n; i++) { 38 for (int j = 0; j < n; j++) 39 printf("%4d", x[i][j]); 40 printf("\n"); 41 42 } 43 } 44 45 int main() { 46 int x[N][N]; 47 int n; 48 printf("Enter n:"); 49 scanf_s("%d", &n); 50 input(x, n); 51 printf("原始矩阵\n"); 52 output(x, n); 53 printf("变换后矩阵\n"); 54 rotate(x, n); 55 return 0; 56 }
图片
实验任务6
源代码
1 #include<stdio.h> 2 #define N 100 3 int m[N]; 4 char h[N]; 5 void input(int x, int n) { 6 int t = 0; 7 8 while (x > 0) { 9 m[t] = x % n; 10 x = x / n; 11 if (m[t] >= 10) 12 h[t] = m[t] % 10 + 'A'; 13 else 14 h[t] = m[t] + '0'; 15 t++; 16 17 } 18 19 while (t-1 >= 0) { 20 21 22 printf("%c", h[t-1]); 23 t--; 24 25 } 26 printf("\n"); 27 28 } 29 int main() { 30 int x; 31 int n; 32 while (printf("输入十位整数\n"), scanf_s("%d", &x) != EOF) { 33 input(x, 2); 34 input(x, 8); 35 input(x, 16); 36 printf("\n"); 37 } 38 39 return 0; 40 }
图片:
实验任务7:
源代码
1 #include<stdio.h> 2 #define N 100 3 int m[N]; 4 char h[N]; 5 void input(int x[][N], int n) { 6 for (int i = 0; i < n; i++) { 7 for (int j = 0; j < n; j++) 8 scanf_s("%d", &x[i][j]); 9 } 10 } 11 void output(int x[][N], int n) { 12 for (int i = 0; i < n; i++) { 13 for (int j = 0; j < n; j++) 14 printf("%4d", x[i][j]); 15 printf("\n"); 16 } 17 } 18 int magic(int x[][N], int n) { 19 int M = n * (n * n + 1) / 2; 20 int t= 0; 21 for (int i = 0; i < n; i++) 22 t += x[i][i]; 23 if (t != M) 24 return 0; 25 t = 0; 26 for (int i = 0; i < n; i++) 27 t += x[n - 1 - i][i]; 28 if (t != M) 29 return 0; 30 t = 0; 31 for (int i = 0; i < n; i++) { 32 for (int j = 0; j < n; j++) { 33 t += x[i][j]; 34 if (j == n - 1) { 35 if (t != M) 36 return 0; 37 t = 0; 38 39 } 40 } 41 } 42 t = 0; 43 for (int i = 0; i < n; i++) { 44 for (int j = 0; j < n; j++) { 45 t += x[j][i]; 46 if (j == n - 1) { 47 if (t != M) 48 return 0; 49 t = 0; 50 51 } 52 } 53 } 54 for (int i = 0; i < n; i++) { 55 for (int j = 0; j < n; j++) 56 if (x[i][j]<1 || x[i][j]>n * n) 57 return 0; 58 } 59 return 1; 60 } 61 int main() { 62 int x[N][N]; 63 int n; 64 while (printf("输入n\n"), scanf_s("%d", &n) != EOF) { 65 printf("输入方阵\n"); 66 input(x, n); 67 printf("输出方阵\n"); 68 output(x, n); 69 if (magic(x, n)) 70 printf("是魔方方阵\n"); 71 else 72 printf("不是魔方方阵\n"); 73 74 } 75 76 return 0; 77 }
图片![屏幕截图 2025-11-11 222426]()
![屏幕截图 2025-11-11 222511]()


实验任务8
源代码:
1 #include<stdio.h> 2 #define N 10 3 int x[N]; 4 int c[N]; 5 int is(int x[],int c[]) { 6 int m = 0; 7 for (int i = 0; i < 10; i++) { 8 for (int j =0; j < 10; j++) { 9 if (i != j) { 10 if (x[i] == c[j]) 11 return 0; 12 else m++; 13 } 14 if (m == 72) 15 return 1; 16 17 18 } 19 } 20 } 21 int main() { 22 23 24 int n; 25 int m, t, k = 0; 26 n = 46; 27 while (n != 99) { 28 if (k != 0) 29 break; 30 n++; 31 m = n * n; 32 for (int i = 0; i < 4; i++) { 33 x[i] = m % 10; 34 c[i] = x[i]; 35 m = m / 10; 36 } 37 t = n * n * n; 38 for (int i = 4; i < 10; i++) { 39 x[i] = t % 10; 40 c[i] = x[i]; 41 t = t / 10; 42 } 43 44 45 if (is(x, c) == 1) { 46 47 printf("%d", n); 48 k++; 49 } 50 else continue; 51 52 } 53 return 0;
图片
浙公网安备 33010602011771号