实验作业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 8 printf("sizeof(x)=%d\n", sizeof(x)); 9 for (i - 0; i < N; ++i) 10 { 11 printf("%p: %d\n", &x[i], x[i]); 12 printf("x=%p\n", x); 13 } 14 } 15 void test2() { 16 int x[M][N] = { {1,9,8,4},{2,0,4,9} }; 17 int i, j; 18 printf("sizeof(x)=%d\n", sizeof(x)); 19 for (i = 0; i < M; ++i) 20 { 21 for (j = 0; j < N; ++j) 22 { 23 printf("%p: %d\n", &x[i][j], x[i][j]); 24 } 25 26 27 } 28 printf("\n"); 29 printf("x=%p\n", x); 30 printf("x[0]=%p\n", x[0]); 31 printf("x[1]=%p\n", x[1]); 32 printf("\n"); 33 34 } 35 int main() { 36 printf("测试1: int型一维数组\n"); 37 test1(); 38 39 printf("\n测试2: int型二维数组\n"); 40 test2(); 41 return 0; 42 }

问题一:是连续的;值是一样的。
问题二:是连续的;值是相同的;差12个字节;表示x[][N]中N的个数。
实验2
1 #include <stdio.h> 2 #define N 100 3 void input(int x[], int n); 4 double compute(int x[], int n); 5 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 return 0; 16 } 17 void input(int x[], int n) { 18 int i; 19 for (i = 0; i < n; ++i) 20 { 21 scanf("%d", &x[i]); 22 23 } 24 } 25 double compute(int x[], int n) { 26 int i, high, low; 27 double ans; 28 high = low = x[0]; 29 ans = 0; 30 for (i = 0; i < n; ++i) { 31 ans += x[i]; 32 if (x[i] > high) 33 { 34 high = x[i]; 35 } 36 else if (x[i] < low) 37 { 38 low = x[i]; 39 } 40 } 41 ans = (ans - high - low) / (n - 2); 42 return ans; 43 }

问题一:形参是intx[];int n;int i 而实参是x和n。
问题二:input的功能是多组输入;compute是去掉一个最高数和一个最小数后取平均值。
实验3
1 #include <stdio.h> 2 #define N 100 3 void output(int x[][N], int n); 4 void init(int x[][N], int n, int value); 5 int main() { 6 int x[N][N]; 7 int n, value; 8 while (printf("Enter n and value: "), scanf("%d%d", &n, &value) != EOF) { 9 init(x, n, value); 10 output(x, n); 11 printf("\n"); 12 } 13 return 0; 14 } 15 16 void output(int x[][N], int n) { 17 int i, j; 18 for (i = 0; i < n; ++i) { 19 for (j = 0; j < n; ++j) 20 printf("%d ", x[i][j]); 21 printf("\n"); 22 } 23 } 24 25 void init(int x[][N], int n, int value) { 26 int i, j; 27 for (i = 0; i < n; ++i) 28 for (j = 0; j < n; ++j) 29 x[i][j] = value; 30 }

问题一:形参为int x[][N];int n;int i,j 而实参为x,n。
问题二:不能。
问题三:output将x[][N]按列表输出;init对二维数组x[][N]赋予value的值。
实验4
1 #include <stdio.h> 2 #define N 100 3 double median(int x[], int n); 4 void input(int x[], int n); 5 void bubbleSort(int x[], int n); 6 7 int main() { 8 int x[N]; 9 int n; 10 double ans; 11 while (printf("Enter n: "), scanf("%d", &n) != EOF) { 12 input(x, n); 13 bubbleSort(x,n); 14 ans = median(x, n); 15 printf("ans=%g\n\n", ans); 16 } 17 return 0; 18 } 19 void input(int x[], int n) { 20 int i; 21 for (i = 0; i < n; ++i) 22 { 23 scanf("%d", &x[i]); 24 } 25 } 26 27 28 double median(int x[], int n) { 29 30 31 if (n % 2 == 0) 32 { 33 return (x[n / 2] + x[n / 2 - 1]) / 2+0.5; 34 } 35 else 36 { 37 return x[n / 2]; 38 } 39 } 40 void bubbleSort(int x[], int n) { 41 int i, j, temp; 42 int isSwap; 43 for (i = 0; i < n-1; i++) { 44 isSwap = 0; 45 for (j = 0; j < n -1- i; j++) { 46 if (x[j] > x[j + 1]) { 47 temp = x[j]; 48 x[j] = x[j + 1]; 49 x[j + 1] = temp; 50 isSwap = 1; 51 } 52 } 53 if (isSwap == 0) { 54 break; 55 } 56 } 57 }

实验5
1 #include <stdio.h> 2 #define N 100 3 int m[N][N]; 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 for (int i = 0; i < n; i++) 17 { 18 for (int j = 0; j < n; j++) 19 { 20 x[i][j] = m[i][j]; 21 } 22 } 23 printf("变换后矩阵:\n"); 24 output(x, n); 25 return 0; 26 } 27 // 函数定义 28 // 功能: 输入一个n*n的矩阵x 29 void input(int x[][N], int n) { 30 int i, j; 31 for (i = 0; i < n; ++i) { 32 for (j = 0; j < n; ++j) 33 scanf("%d", &x[i][j]); 34 } 35 } 36 // 函数定义 37 // 功能: 输出一个n*n的矩阵x 38 void output(int x[][N], int n) { 39 int i, j; 40 for (i = 0; i < n; ++i) { 41 for (j = 0; j < n; ++j) 42 printf("%4d", x[i][j]); 43 printf("\n"); 44 } 45 } 46 void rotate_to_right(int x[][N], int n) 47 { 48 int j,i; 49 50 for ( i = 0; i < n; i++) 51 { 52 m[i][0]=x[i][n-1]; 53 for ( j = 0; j < n-1; j++) 54 { 55 m[i][j+1]=x[i][j]; 56 } 57 } 58 }

实验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); 8 printf("\n"); 9 dec_to_n(x, 8); 10 printf("\n"); 11 dec_to_n(x, 16); 12 printf("\n"); 13 } 14 return 0; 15 } 16 void dec_to_n(int x, int n) 17 { 18 int m[N]; 19 int i; 20 for ( i = 0; x > 0; i++) 21 { 22 m[i]= x % n; 23 x /= n; 24 25 } 26 i--; 27 for (i; i >= 0; i--) 28 { 29 if (m[i] > 9) 30 { 31 switch (m[i]) 32 { 33 case 10:printf("A"); break; 34 case 11:printf("B"); break; 35 case 12:printf("C"); break; 36 case 13:printf("D"); break; 37 case 14:printf("E"); break; 38 case 15:printf("F"); break; 39 } 40 } 41 else 42 { 43 printf("%d", m[i]); 44 } 45 } 46 47 }

实验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 // 功能: 判断一个n阶方阵是否为魔方矩阵,如果是,返回1,否则,返回0 42 int is_magic(int x[][N], int n) 43 { 44 int high[N] = { 0 }; 45 int line[N] = { 0 }; 46 int i, j,z=0,y=0; 47 for(i=0;i<n;i++) 48 { 49 for(j=0;j<n;j++) 50 { 51 if(x[0][0]==x[i][j]&&i!=0&&j!=0) 52 { 53 return 0; 54 } 55 } 56 } 57 for ( i = 0; i < n; i++) 58 { 59 for ( j = 0; j < n; j++) 60 { 61 line[i] += x[i][j]; 62 } 63 } 64 for ( j = 0; j < n; j++) 65 { 66 for ( i = 0; i < n; i++) 67 { 68 high[j] += x[i][j]; 69 } 70 } 71 for (i=0,j=0;i<n;i++,j++) 72 { 73 y += x[i][j]; 74 z += x[i][n - 1 - j]; 75 } 76 if (z != y) 77 { 78 return 0; 79 } 80 for (i = 0; i < n; i++) 81 { 82 if (line[i] != high[i] || line[i] != y) 83 return 0; 84 85 } 86 return 1; 87 88 }

实验8
#include <stdio.h> #define N 100 int func(); int main() { printf("%d", func()); return 0; } int func() { int n, m, x, y, t ,X,Y; int a[N] ; int b[N] ; for (int i = 47;; i++) { t = 0; n = i * i; m = i * i * i; for ( x = 0; m> 0; x++) { a[x] = m % 10; m /= 10; } for (y = 0; n > 0; y++) { b[y] = n % 10; n /= 10; } X = --x; Y = --y; for (x=X; x >=0; x--) { for (y=Y;y>=0;y--) { if (a[x] == b[y]) { t = 1; break; } } if (t) { break; } } for(x=0;x<=X;x++) for (int i = x+1; i<=X; i++) { if (a[x] == a[i]) { t = 1; break; } if (t) { break; } } for (y = 0; y <=Y; y++) for (int i = y+1; i<=Y; i++) { if (b[y] == b[i]) { t = 1; break; } if (t) { break; } } if (!t) { return i; } } }

浙公网安备 33010602011771号