<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      silverbullet4869

      實驗4 C語言數組應用編程

      實驗任務1

      task1_1

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

      1.int型數組a在內存中是連續存放的,每個元素占用4個內存字節單元,數組名a對應的值和&a[0]是一樣的。

      2.char型數組b在內存中是連續存放的,每個元素占用4個內存字節單元,數組名b對應的值和&b[0]是一樣的。

      task1_2

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

      1.int型二維數組a在內存中是"按行連續存放"的,每個元素占用4個內存字節單元,
      數組名a的值、a[0]的值、&a[0][0]的值在數字字面值上是一樣的。
      2.int型二維數組b在內存中是"按行連續存放"的,每個元素占用1個內存字節單元,
      數組名b的值,b[0]的值、&b[0][0]的值在數字字面值上是一樣的。
      3.a[0]和a[1]的值相差16,b[0]和b[1]的值相差4,規律是對于二維數組而言,相鄰的兩行的元素的地址相差的值為一行元素占用的內存字節單元。

       實驗任務2

       1 #include <stdio.h>
       2 #include <string.h>
       3 
       4 #define N 80
       5 
       6 void swap_str(char s1[], char s2[]);
       7 void test1();
       8 void test2();
       9 
      10 int main() {
      11     printf("測試1: 用兩個一維char數組,實現兩個字符串交換\n");
      12     test1();
      13 
      14     printf("\n測試2: 用二維char數組,實現兩個字符串交換\n");
      15     test2();
      16 
      17     return 0;
      18 }
      19 
      20 void test1() {
      21     char views1[N] = "hey, C, I hate u.";
      22     char views2[N] = "hey, C, I love u.";
      23 
      24     printf("交換前: \n");
      25     puts(views1);
      26     puts(views2);
      27 
      28     swap_str(views1, views2);
      29 
      30     printf("交換后: \n");
      31     puts(views1);
      32     puts(views2);
      33 }
      34 
      35 void test2() {
      36     char views[2][N] = {"hey, C, I hate u.", 
      37                         "hey, C, I love u."};
      38 
      39     printf("交換前: \n");
      40     puts(views[0]);
      41     puts(views[1]);
      42 
      43     swap_str(views[0], views[1]);
      44 
      45     printf("交換后: \n");
      46     puts(views[0]);
      47     puts(views[1]);
      48 }
      49 
      50 void swap_str(char s1[N], char s2[N]) {
      51     char tmp[N];
      52 
      53     strcpy(tmp, s1);
      54     strcpy(s1, s2);
      55     strcpy(s2, tmp);
      56 }

      對于一維字符數組而言,一維數組名本身就代表了數組首元素的地址,而一維數組名在函數參數中隱式轉換為指向數組首元素的指針。在test1()中,views1views2是一維字符數組,因此可以直接作為swap_str()函數的參數,無需加上方括號。而在test2()中,views是一個二維字符數組,views[0]views[1]分別是一維字符數組,可以直接作為swap_str()函數的參數,但因為views是一個二維字符數組,其本身可以表示指向第一個元素(即第一行)的指針,但無法表示指向第二個元素的指針,所以它在test2()中調用時需要加上方括號。

      總結:對于一維字符數組,可以直接使用數組名訪問首元素;而對于二維字符數組,需使用數組名[X]訪問第X個元素(即第X行)。

      實驗任務3

      task3_1

       1 /* 
       2 從鍵盤輸入一行英文文本,統計英文單詞總數
       3 為了簡化問題處理,只考慮單詞以空格間隔的情形
       4 對教材例5.22代碼做了些微改動:
       5 1. 統計單詞個數,編寫成函數模塊;增加了多組輸入
       6 2. 去掉了不必要的中間變量
       7 */
       8 
       9 #include <stdio.h>
      10 
      11 #define N 80
      12 
      13 int count(char x[]);
      14 
      15 int main() {
      16     char words[N+1];
      17     int n;
      18 
      19     while(gets(words) != NULL) {
      20         n = count(words);
      21         printf("單詞數: %d\n\n", n);
      22     }
      23 
      24     return 0;
      25 }
      26 
      27 int count(char x[]) {
      28     int i;
      29     int word_flag = 0;  // 用作單詞標志,一個新單詞開始,值為1;單詞結束,值為0
      30     int cnt = 0;  // 統計單詞個數
      31 
      32     for(i = 0; x[i] != '\0'; i++) {
      33         if(x[i] == ' ')
      34             word_flag = 0;
      35         else if(word_flag == 0) {
      36             word_flag = 1;
      37            cnt++;
      38         }
      39     }
      40 
      41     return cnt;
      42 }

      優化后代碼:

       1 #include <stdio.h>
       2 
       3 #define N 80
       4 
       5 int count(char x[]);
       6 
       7 int main() {
       8     char words[N+1];
       9     int n;
      10 
      11     while(gets(words) != NULL) {
      12         n = count(words);
      13         printf("單詞數: %d\n\n", n);
      14     }
      15     return 0;
      16 }
      17 
      18 int count(char x[]) {
      19     int i;
      20     int word_flag = 0;  // 用作單詞標志,一個新單詞開始,值為1;單詞結束,值為0
      21     int cnt = 0;  // 統計單詞個數
      22 
      23     for(i = 0; x[i] != '\0'; i++) {
      24         if(!(x[i] <= 'z' && x[i] >='A'))
      25             word_flag = 0;
      26         else if(word_flag == 0) {
      27             word_flag = 1;
      28            cnt++;
      29         }
      30     }
      31 
      32     return cnt;
      33 }

      task3_2

       1 /*
       2 輸入一行英文文本,統計最長單詞,并打印輸出。
       3 為簡化問題,只考慮單詞之間用空格間隔的情形。
       4 相較于教材例5.24,做了以下改動:
       5 1. 增加了多組輸入,因此,一些變量初始化放到了第一層循環里面
       6 2. 微調了代碼書寫邏輯和順序
       7 */
       8 
       9 #include <stdio.h>
      10 #define N 1000
      11 
      12 int main() {
      13     char line[N];
      14     int word_len;   // 記錄當前單詞長度
      15     int max_len;    // 記錄最長單詞長度
      16     int end;        // 記錄最長單詞結束位置
      17     int i;
      18 
      19     while(gets(line) != NULL) {
      20         word_len = 0;
      21         max_len = 0;
      22         end = 0;
      23 
      24         i = 0;
      25         while(1) {
      26             // 跳過連續空格
      27             while(line[i] == ' ') {
      28                 word_len = 0;  // 單詞長度置0,為新單詞統計做準備
      29                 i++;
      30             }
      31 
      32             // 在一個單詞中,統計當前單詞長度
      33             while(line[i] != '\0' && line[i] != ' ') {
      34                 word_len++;
      35                 i++;
      36             }
      37         
      38             // 更新更長單詞長度,并,記錄最長單詞結束位置
      39             if(max_len < word_len) {
      40                 max_len = word_len;
      41                 end = i;   // end保存的是單詞結束的下一個坐標位置
      42             }
      43 
      44             // 遍歷到文本結束時,終止循環
      45             if(line[i] == '\0')
      46                 break;
      47         }
      48 
      49         // 輸出最長單詞
      50         printf("最長單詞: ");
      51         for(i = end - max_len; i < end; ++i)
      52             printf("%c", line[i]);
      53         printf("\n\n");
      54     }
      55 
      56     return 0;
      57 }

      優化后:

       1 #include <stdio.h>
       2 #define N 1000
       3 
       4 int main() {
       5     char line[N];
       6     int word_len;   // 記錄當前單詞長度
       7     int max_len;    // 記錄最長單詞長度
       8     int end;        // 記錄最長單詞結束位置
       9     int i;
      10 
      11     while(gets(line) != NULL) {
      12         word_len = 0;
      13         max_len = 0;
      14         end = 0;
      15 
      16         i = 0;
      17         while(1) {
      18             // 跳過連續空格
      19             while(!(line[i] <= 'z' && line[i] >='A')) {
      20                 word_len = 0;  // 單詞長度置0,為新單詞統計做準備
      21                 i++;
      22             }
      23 
      24             // 在一個單詞中,統計當前單詞長度
      25             while(line[i] <= 'z' && line[i] >= 'A') {
      26                 word_len++;
      27                 i++;
      28             }
      29         
      30             // 更新更長單詞長度,并,記錄最長單詞結束位置
      31             if(max_len < word_len) {
      32                 max_len = word_len;
      33                 end = i;   // end保存的是單詞結束的下一個坐標位置
      34             }
      35 
      36             // 遍歷到文本結束時,終止循環
      37             if(line[i] == '\0')
      38                 break;
      39         }
      40 
      41         // 輸出最長單詞
      42         printf("最長單詞: ");
      43         for(i = end - max_len; i < end; ++i)
      44             printf("%c", line[i]);
      45         printf("\n\n");
      46     }
      47     return 0;
      48 }

      實驗任務4

       1 #include <stdio.h>
       2 #define N 100
       3 void dec_to_n(int x, int n); // 函數聲明
       4 
       5 int main() {
       6     int x;
       7 
       8     printf("輸入一個十進制整數: ");
       9     while(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     return 0;
      17 }
      18 
      19 // 函數定義
      20 // 功能: 把十進制數x轉換成n進制,打印輸出
      21 // 補足函數實現
      22 // ×××
      23 void dec_to_n(int x, int n) {
      24     char convert[N];
      25     int i = 0,j;
      26 
      27     while (x >= n) {
      28         int num = x % n;
      29         if (num >= 10) {
      30             convert[i] = num - 10 + 'A';
      31         } else {
      32             convert[i] = num + '0';
      33         }
      34         x /= n;
      35         i++;
      36     }
      37 
      38     if (x > 0) {
      39         if (x >= 10) {
      40             convert[i] = x - 10 + 'A';
      41         } else {
      42             convert[i] = x + '0';
      43         }
      44         i++;
      45     }
      46 
      47     for (j = i - 1; j >= 0; j--) {
      48         printf("%c", convert[j]);
      49     }
      50     printf("\n");
      51 }

      實驗任務5

       1 #include <stdio.h>
       2 #define N 5
       3 
       4 // 函數聲明 
       5 void input(int x[], int n);
       6 void output(int x[], int n);
       7 double average(int x[], int n);
       8 void bubble_sort(int x[], int n);
       9 
      10 int main() {
      11     int scores[N];
      12     double ave;
      13     
      14     printf("錄入%d個分數:\n", N);
      15     input(scores, N);
      16     
      17     printf("\n輸出課程分數: \n");
      18     output(scores, N);
      19     
      20     printf("\n課程分數處理: 計算均分、排序...\n");
      21     ave = average(scores, N);
      22     bubble_sort(scores, N);
      23     
      24     printf("\n輸出課程均分: %.2f\n", ave);
      25     printf("\n輸出課程分數(高->低):\n");
      26     output(scores, N);
      27     return 0;
      28 }
      29 
      30 // 函數定義
      31 // 輸入n個整數保存到整型數組x中 
      32 void input(int x[], int n) {
      33     int i;
      34     
      35     for(i = 0; i < n; ++i)
      36         scanf("%d", &x[i]); 
      37 }
      38 
      39 // 輸出整型數組x中n個元素 
      40 void output(int x[], int n) {
      41     int i;
      42     
      43     for(i = 0; i < n; ++i)
      44         printf("%d ", x[i]);
      45     printf("\n");
      46 }
      47 
      48 // 計算整型數組x中n個元素均值,并返回 
      49 // 補足函數average()實現
      50 // ××× 
      51 double average(int x[], int n){
      52     int i,ave,sum=0;
      53     for(i = 0; i < n; i++)
      54         sum += x[i];
      55     ave = sum/n;
      56     return ave;
      57 }
      58 
      59 // 對整型數組x中的n個元素降序排序 
      60 // 補足函數bubble_sort()實現
      61 // ××× 
      62 void bubble_sort(int x[], int n){
      63     int i,j;
      64     for (i = 0; i < n - 1; i++) {
      65         int flag = 0;
      66         for (j = 0; j < n - i - 1; j++) {
      67             if (x[j] < x[j + 1]) {
      68                 int temp = x[j];
      69                 x[j] = x[j + 1];
      70                 x[j + 1] = temp;
      71                 flag = 1; 
      72             }
      73         }
      74         if (!flag) {
      75             break;
      76         }
      77     }
      78 }

      實驗任務6

       1 #include <stdio.h>
       2 #include <string.h>
       3 
       4 #define N 5
       5 #define M 20
       6 
       7 // 函數聲明
       8 void output(char str[][M], int n);
       9 void bubble_sort(char str[][M], int n);
      10 
      11 int main() {
      12     char name[][M] = {"Bob", "Bill", "Joseph", "Taylor", "George"};
      13     int i;
      14 
      15     printf("輸出初始名單:\n");
      16     output(name, N);
      17 
      18     printf("\n排序中...\n");
      19     bubble_sort(name, N);  // 函數調用 
      20 
      21     printf("\n按字典序輸出名單:\n");
      22     output(name, N);
      23     return 0;
      24 }
      25 
      26 // 函數定義
      27 // 功能:按行輸出二維數組中的字符串
      28 void output(char str[][M], int n) {
      29     int i;
      30 
      31     for(i = 0; i < n; ++i)
      32         printf("%s\n", str[i]);
      33 }
      34 
      35 // 函數定義
      36 // 功能:使用冒泡排序算法對二維數組str中的n個字符串按字典序排序
      37 // 補足函數bubble_sort()實現 
      38 // ×××
      39 void bubble_sort(char str[][M], int n){
      40     int i, j;
      41     char tmp[M]; 
      42     
      43     for(i = 0; i < n-1; ++i) {
      44         for(j = 0; j < n-i-1; ++j) {
      45             if(strcmp(str[j], str[j+1]) > 0) {
      46                 strcpy(tmp, str[j]);
      47                 strcpy(str[j], str[j+1]);
      48                 strcpy(str[j+1], tmp);
      49             }
      50         }
      51     }
      52 }

      實驗任務7

       1 #include <stdio.h>
       2 #define N 101
       3 
       4 int is_repeat(char x[]);
       5 
       6 int main() {
       7     char num[N];
       8 
       9     while(scanf("%s",num)!= EOF){
      10         if(is_repeat(num))
      11             printf("YES\n\n");
      12         else
      13             printf("NO\n\n");
      14     }
      15 
      16     return 0;
      17 }
      18 
      19 int is_repeat(char x[]){
      20     int cnt[10] = {0};
      21     int i,j;
      22 
      23     for(i = 0;x[i] != '\0';++i){
      24         j = x[i] - '0';
      25         cnt[j]++;
      26         if(cnt[j] > 1)
      27             return 1;
      28     }
      29 
      30     return 0;
      31 }

      實驗任務8

       1 #include <stdio.h>
       2 #define N 100
       3 #define M 4
       4 
       5 // 函數聲明
       6 void output(int x[][N], int n);          
       7 void rotate_to_right(int x[][N], int n); 
       8 
       9 
      10 int main() {
      11     int t[][N] = {{21, 12, 13, 24},
      12                   {25, 16, 47, 38},
      13                   {29, 11, 32, 54},
      14                   {42, 21, 33, 10}};
      15 
      16     printf("原始矩陣:\n");
      17     output(t, M); // 函數調用
      18 
      19     rotate_to_right(t, M); // 函數調用
      20 
      21     printf("變換后矩陣:\n");
      22     output(t, M); // 函數調用
      23 
      24     return 0;
      25 }
      26 
      27 // 函數定義
      28 // 功能: 輸出一個n*n的矩陣x
      29 void output(int x[][N], int n) {
      30     int i, j;
      31 
      32     for (i = 0; i < n; ++i) {
      33         for (j = 0; j < n; ++j)
      34             printf("%4d", x[i][j]);
      35 
      36         printf("\n");
      37     }
      38 }
      39 
      40 // 待補足3:函數rotate_to_right()定義
      41 // 功能: 把一個n*n的矩陣x,每一列向右移, 最右邊被移出去的一列繞回左邊
      42 // xxx
      43 void rotate_to_right(int x[][N], int n){
      44     int i,j;
      45     int y[N];
      46 
      47     for (i = 0; i < n; ++i)
      48         y[i] = x[i][n - 1];
      49     for (i = n - 1; i > 0; --i)
      50         for (j = 0; j < n; ++j) 
      51             x[j][i] = x[j][i-1];
      52     for (i = 0; i < n; ++i)
      53         x[i][0] = y[i];
      54 }

       實驗總結

      1. 對于字符數組的處理不夠熟練,在訪問和遍歷的時候容易出現問題,還需多加練習;
      2. 實驗任務4和實驗任務7學習到了對整數串的處理方式,遇到數值較大超出數據類型范圍的數值可考慮采用字符串處理;
      3. 數學模型和代碼之間的轉化能力不足,有時候難以用代碼實現自己構建的數學模型,還有很大進步空間。

       

      posted on 2024-05-13 18:32  SilverBullet4869  閱讀(63)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 亚洲色大成网站WWW永久麻豆| 国产精品毛片在线看不卡| 色爱区综合激情五月激情| 岛国大片在线免费播放| 一本色道国产在线观看二区| 99久久国产一区二区三区| 国产欧美精品一区aⅴ影院| 9lporm自拍视频区| 日韩av综合免费在线| 春色校园综合人妻av| 3d全彩无码啪啪本子全彩| 日本熟妇色xxxxx| 午夜成人无码福利免费视频| 柠檬福利第一导航在线| AV免费播放一区二区三区| 敦化市| 91久久国产成人免费观看| 精品无人乱码一区二区三区的优势 | 波多野结系列18部无码观看AV| 盐亭县| 中文精品无码中文字幕无码专区 | 精品一区二区三区蜜桃久| 亚洲中文字幕av天堂| 深夜av在线免费观看| 成人爽A毛片在线视频淮北| 欧美乱码伦视频免费| 国产高清精品在线91| 婷婷99视频精品全部在线观看| 在线观看免费人成视频色| 亚洲男人AV天堂午夜在| 欧美性猛交xxxx乱大交丰满| 久久国产免费观看精品3| 亚洲人成电影在线天堂色| 最新亚洲人成网站在线影院| 久久碰国产一区二区三区| 欧美videos粗暴| 加勒比无码人妻东京热| 亚洲av永久无码精品水牛影视| 狠狠爱俺也去去就色| 亚洲天堂亚洲天堂亚洲色图| 亚洲国产成人久久精品软件|