作業4
task1:
1 #include <stdio.h> 2 #define N 4 3 #define M 2 4 5 void test1() { 6 int x[N] = { 1, 9, 8, 4 }; 7 int i; 8 9 // 輸出數組x占用的內存字節數 10 printf("sizeof(x) = %d\n", sizeof(x)); 11 12 // 輸出每個元素的地址、值 13 for (i = 0; i < N; ++i) 14 printf("%p: %d\n", &x[i], x[i]); 15 16 // 輸出數組名x對應的值 17 printf("x = %p\n", x); 18 } 19 20 void test2() { 21 int x[M][N] = { {1, 9, 8, 4}, {2, 0, 4, 9} }; 22 int i, j; 23 24 // 輸出二維數組x占用的內存字節數 25 printf("sizeof(x) = %d\n", sizeof(x)); 26 27 // 輸出每個元素的地址、值 28 for (i = 0; i < M; ++i) 29 for (j = 0; j < N; ++j) 30 printf("%p: %d\n", &x[i][j], x[i][j]); 31 printf("\n"); 32 33 // 輸出二維數組名x, 以及,x[0], x[1]的值 34 printf("x = %p\n", x); 35 printf("x[0] = %p\n", x[0]); 36 printf("x[1] = %p\n", x[1]); 37 printf("\n"); 38 } 39 40 int main() { 41 printf("測試1: int型一維數組\n"); 42 test1(); 43 44 printf("\n測試2: int型二維數組\n"); 45 test2(); 46 47 return 0; 48 }

問題1:是連續存放的;一樣
問題2:是;一樣;12字節
task2:
1 #include <stdio.h> 2 #define N 100 3 4 // 函數聲明 5 void input(int x[], int n); 6 double compute(int x[], int n); 7 8 int main() { 9 int x[N]; 10 int n, i; 11 double ans; 12 13 while (printf("Enter n: "), scanf_s("%d", &n) != EOF) { 14 input(x, n); // 函數調用 15 ans = compute(x, n); // 函數調用 16 printf("ans = %.2f\n\n", ans); 17 } 18 19 return 0; 20 } 21 22 // 函數定義 23 void input(int x[], int n) { 24 int i; 25 26 for (i = 0; i < n; ++i) 27 scanf_s("%d", &x[i]); 28 } 29 30 // 函數定義 31 double compute(int x[], int n) { 32 int i, high, low; 33 double ans; 34 35 high = low = x[0]; 36 ans = 0; 37 38 for (i = 0; i < n; ++i) { 39 ans += x[i]; 40 41 if (x[i] > high) 42 high = x[i]; 43 else if (x[i] < low) 44 low = x[i]; 45 } 46 47 ans = (ans - high - low) / (n - 2); 48 49 return ans; 50 }

問題1:輸入數組;計算去除極值后的平均數
task3:
1 #include <stdio.h> 2 #define N 100 3 4 // 函數聲明 5 void output(int x[][N], int n); 6 void init(int x[][N], int n, int value); 7 8 int main() { 9 int x[N][N]; 10 int n, value; 11 12 while (printf("Enter n and value: "), scanf_s("%d%d", &n, &value) != EOF) { 13 init(x, n, value); // 函數調用 14 output(x, n); // 函數調用 15 printf("\n"); 16 } 17 18 return 0; 19 } 20 21 // 函數定義 22 void output(int x[][N], int n) { 23 int i, j; 24 25 for (i = 0; i < n; ++i) { 26 for (j = 0; j < n; ++j) 27 printf("%d ", x[i][j]); 28 printf("\n"); 29 } 30 } 31 32 // 函數定義 33 void init(int x[][N], int n, int value) { 34 int i, j; 35 36 for (i = 0; i < n; ++i) 37 for (j = 0; j < n; ++j) 38 x[i][j] = value; 39 }

問題1:第二維
問題2:輸出數組;獲取數組的維數與內容
task4:
1 #include <stdio.h> 2 #define N 100 3 4 // 函數聲明 5 6 double median(int x[N], int n); 7 void input(int x[N], int n); 8 9 int main() { 10 int x[N]; 11 int n; 12 double ans; 13 14 while (printf("Enter n: "), scanf_s("%d", &n) != EOF) { 15 input(x, n); 16 ans = median(x, n); 17 printf("ans = %g\n\n", ans); 18 } 19 20 return 0; 21 } 22 23 // 函數定義 24 void input(int x[], int n) { 25 int i; 26 27 for (i = 0; i < n; ++i) 28 scanf_s("%d", &x[i]); 29 } 30 31 double median(int x[N], int n) { 32 int i, j, a; 33 34 for (i = 0; i < n-1;i++) { 35 for (j = 0; j < n - 1; j++) { 36 if (x[j] > x[j + 1]) 37 { 38 a = x[j]; 39 x[j] = x[j + 1]; 40 x[j + 1] = a; 41 } 42 } 43 } 44 45 if (n % 2 == 0) { 46 return (x[n / 2] + x[n / 2 - 1]) / 2.0; 47 } 48 else 49 { 50 return (double)x[n / 2]; 51 } 52 53 }

task5:
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 void rotate_to_right(int x[][N], int n); 8 // 函數rotate_to_right聲明 9 // 待補足 10 // ××× 11 12 int main() { 13 int x[N][N]; 14 int n; 15 16 printf("輸入n: "); 17 scanf_s("%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 27 printf("變換后矩陣:\n"); 28 output(x, n); 29 30 return 0; 31 } 32 33 // 函數定義 34 // 功能: 輸入一個n*n的矩陣x 35 void input(int x[][N], int n) { 36 int i, j; 37 38 for (i = 0; i < n; ++i) { 39 for (j = 0; j < n; ++j) 40 scanf_s("%d", &x[i][j]); 41 } 42 } 43 44 // 函數定義 45 // 功能: 輸出一個n*n的矩陣x 46 void output(int x[][N], int n) { 47 int i, j; 48 49 for (i = 0; i < n; ++i) { 50 for (j = 0; j < n; ++j) 51 printf("%4d", x[i][j]); 52 53 printf("\n"); 54 } 55 } 56 57 // 函數rotate_to_right定義 58 // 功能: 把一個n*n的矩陣x,每一列向右移, 最右邊被移出去的一列繞回左邊 59 // 待補足 60 // xxx 61 void rotate_to_right(int x[][N], int n) { 62 int i, j, a; 63 for (i = 0; i < n; i++) { 64 for (j = n-1; j > 0; --j) { 65 a = x[i][j]; 66 x[i][j] = x[i][j - 1]; 67 x[i][j - 1] = a; 68 } 69 } 70 }

task6:
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_s("%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 void dec_to_n(int x, int n) { 25 char map[] = "0123456789ABCDEF"; 26 char sum[N]; 27 int r, cnt; 28 cnt = 0; 29 30 while (1) { 31 r = x % n; 32 x = x / n; 33 sum[cnt++] = map[r]; 34 35 if (x == 0) 36 break; 37 38 } 39 for (cnt--; cnt >= 0; cnt--) { 40 printf("%c", sum[cnt]); 41 } 42 43 printf("\n"); 44 }

浙公網安備 33010602011771號