实验四
实验任务一
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 6 #define N 4 7 #define M 2 8 void test1() { 9 int x[N] = { 1, 9, 8, 4 }; 10 int i; 11 // 输出数组x占用的内存字节数 12 printf("sizeof(x) = %d\n", sizeof(x)); 13 // 输出每个元素的地址、值 14 for (i = 0; i < N; ++i) 15 printf("%p: %d\n", &x[i], x[i]); 16 // 输出数组名x对应的值 17 printf("x = %p\n", x); 18 } 19 void test2() { 20 int x[M][N] = { {1, 9, 8, 4}, {2, 0, 4, 9} }; 21 int i, j; 22 // 输出二维数组x占用的内存字节数 23 printf("sizeof(x) = %d\n", sizeof(x)); 24 // 输出每个元素的地址、值 25 for (i = 0; i < M; ++i) 26 for (j = 0; j < N; ++j) 27 printf("%p: %d\n", &x[i][j], x[i][j]); 28 printf("\n"); 29 // 输出二维数组名x, 以及,x[0], x[1]的值 30 printf("x = %p\n", x); 31 printf("x[0] = %p\n", x[0]); 32 printf("x[1] = %p\n", x[1]); 33 printf("\n"); 34 } 35 int main() { 36 printf("测试1: int型一维数组\n"); 37 test1(); 38 printf("\n测试2: int型二维数组\n"); 39 test2(); 40 return 0; 41 }

Q1:连续存放;x和x[0]值相同
Q2:连续存放;x,x[0],x[0][0]的值相同;相差16;含义为存放x[0]d的字节数
实验任务二
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 6 #define N 100 7 // 函数声明 8 void input(int x[], int n); 9 double compute(int x[], int n); 10 int main() { 11 int x[N]; 12 int n, i; 13 double ans; 14 while (printf("Enter n: "), scanf("%d", &n) != EOF) { 15 input(x, n); 16 // 函数调用 17 ans = compute(x, n); 18 // 函数调用 19 printf("ans = %.2f\n\n", ans); 20 } 21 return 0; 22 } 23 // 函数定义 24 void input(int x[], int n) { 25 int i; 26 for (i = 0; i < n; ++i) 27 scanf("%d", &x[i]); 28 } 29 // 函数定义 30 double compute(int x[], int n) { 31 int i, high, low; 32 double ans; 33 high = low = x[0]; 34 ans = 0; 35 for (i = 0; i < n; ++i) { 36 ans += x[i]; 37 if (x[i] > high) 38 high = x[i]; 39 else if (x[i] < low) 40 low = x[i]; 41 } 42 ans = (ans - high - low) / (n - 2); 43 return ans; 44 }

Q1:int x[];x[];
Q2:记录输入的数组;计算数组去掉最大最小值后的平均值
实验任务三
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 6 #define N 100 7 // 函数声明 8 void output(int x[][N], int n); 9 void init(int x[][N], int n, int value); 10 int main() { 11 int x[N][N]; 12 int n, value; 13 while (printf("Enter n and value: "), scanf("%d%d", &n, &value) != EOF) { 14 init(x, n, value); // 函数调用 15 output(x, n); 16 // 函数调用 17 printf("\n"); 18 } 19 return 0; 20 } 21 // 函数定义 22 void output(int x[][N], int n) { 23 int i, j; 24 for (i = 0; i < n; ++i) { 25 for (j = 0; j < n; ++j) 26 printf("%d ", x[i][j]); 27 printf("\n"); 28 } 29 } 30 // 函数定义 31 void init(int x[][N], int n, int value) { 32 int i, j; 33 for (i = 0; i < n; ++i) 34 for (j = 0; j < n; ++j) 35 x[i][j] = value; 36 }

Q1:int x[N];x[N][N]
Q2:第二维不能不写
Q3:记录需打印数字的行和列
实验任务四
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 6 #define N 100 7 double median(int x[], int n); 8 void input(int x[], int n); 9 10 int main() { 11 int x[N]; 12 int n; 13 double ans; 14 while (printf("Enter n: "), scanf("%d", &n) != EOF) { 15 input(x, n); // 函数调用 16 ans = median(x, n); // 函数调用 17 printf("ans = %g\n\n", ans); 18 } 19 return 0; 20 } 21 // 函数定义 22 void input(int x[], int n) { 23 int i; 24 for (i = 0; i < n; ++i) { 25 scanf("%d", &x[i]); 26 } 27 } 28 29 double median(int x[], int n) { 30 int i, t, j; 31 for (i = 0; i < n - 1; ++i) { 32 for (j = 0; j < n - i -1; ++j) { 33 if (x[j] > x[j + 1]) { 34 t = x[j]; 35 x[j] = x[j + 1]; 36 x[j + 1] = t; 37 } 38 } 39 } 40 if (n % 2 == 0) { 41 return (x[n / 2] + x[n / 2 - 1]) / 2.0; 42 } 43 else 44 return x[(n - 1) / 2]; 45 }

实验任务五
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 6 #define N 100 7 // 函数声明 8 void input(int x[][N], int n); 9 void output(int x[][N], int n); 10 // 函数rotate_to_right声明 11 void rotate_to_right(int x[][N], int n); 12 int main(){ 13 int x[N][N]; 14 int n; 15 printf("Enter n: "); 16 scanf("%d", &n); 17 input(x, n); 18 printf("原始矩阵:\n"); 19 output(x, n); 20 // 函数rotate_to_right调用 21 rotate_to_right(x, n); 22 printf("变换后矩阵:\n"); 23 output(x, n); 24 return 0; 25 } 26 // 函数定义 27 // 功能: 输入一个n*n的矩阵x 28 void input(int x[][N], int n) { 29 int i, j; 30 for (i = 0; i < n; ++i) { 31 for (j = 0; j < n; ++j) 32 scanf("%d", &x[i][j]); 33 } 34 } 35 // 函数定义 36 // 功能: 输出一个n*n的矩阵x 37 void output(int x[][N], int n) { 38 int i, j; 39 for (i = 0; i < n; ++i) { 40 for (j = 0; j < n; ++j) 41 printf("%4d", x[i][j]); 42 printf("\n"); 43 } 44 } 45 // 函数rotate_to_right定义 46 // 功能: 把一个n*n的矩阵x,每一列向右移, 最右边一列绕回左边 47 void rotate_to_right(int x[][N],int n) { 48 if (n <= 1) 49 return 0; 50 int i, j, t; 51 for (i = 0; i < n; ++i) { 52 t = x[i][n - 1]; 53 for (j = 0; j < n - 1; ++j) { 54 x[i][n - 1 - j] = x[i][n - 2 - j]; 55 } 56 x[i][0] = t; 57 } 58 }

实验任务六
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 6 #define N 100 7 void dec_to_n(int x, int n); // 函数声明 8 int main() { 9 int x; 10 while (printf("输入十进制整数: "), scanf("%d", &x) != EOF) { 11 dec_to_n(x, 2); // 函数调用: 把x转换成二进制输出 12 dec_to_n(x, 8); // 函数调用: 把x转换成八进制输出 13 dec_to_n(x, 16); // 函数调用: 把x转换成十六进制输出 14 printf("\n"); 15 } 16 return 0; 17 } 18 // 函数定义 19 // 功能: 把十进制数x转换成n进制,打印输出 20 // 补足函数实现 21 void dec_to_n(int x, int n) { 22 char y[100]; 23 int i, j, t; 24 for (i = 0; x != 0; ++i) { 25 if (x % n < 10) 26 y[i] = x % n + 48; 27 else if (x % n >= 10) 28 y[i] = x % n + 55; 29 x = x / n; 30 } 31 for (--i; i >= 0; i--) 32 { 33 printf("%c", y[i]); 34 } 35 printf("\n"); 36 }


浙公网安备 33010602011771号