<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # C數組 C 語言支持**數組**數據結構,它可以存儲一個固定大小的相同類型元素的順序集合。數組是用來存儲一系列數據,但它往往被認為是一系列相同類型的變量。 數組的聲明并不是聲明一個個單獨的變量,比如 number0、number1、...、number99,而是聲明一個數組變量,比如 numbers,然后使用 numbers\[0\]、numbers\[1\]、...、numbers\[99\] 來代表一個個單獨的變量。數組中的特定元素可以通過索引訪問。 所有的數組都是由連續的內存位置組成。最低的地址對應第一個元素,最高的地址對應最后一個元素。 ![](https://box.kancloud.cn/2015-12-13_566d2e1e9fb32.jpg) ## 聲明數組 在 C 中要聲明一個數組,需要指定元素的類型和元素的數量,如下所示: ~~~ type arrayName [ arraySize ]; ~~~ 這叫做一維數組。**arraySize**必須是一個大于零的整數常量,**type**可以是任意有效的 C 數據類型。例如,要聲明一個類型為 double 的包含 10 個元素的數組**balance**,聲明語句如下: ~~~ double balance[10]; ~~~ 現在*balance*是一個可用的數組,可以容納 10 個類型為 double 的數字。 ## 初始化數組 在 C 中,您可以逐個初始化數組,也可以使用一個初始化語句,如下所示: ~~~ double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0}; ~~~ 大括號 { } 之間的值的數目不能大于我們在數組聲明時在方括號 \[ \] 中指定的元素數目。 如果您省略掉了數組的大小,數組的大小則為初始化時元素的個數。因此,如果: ~~~ double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0}; ~~~ 您將創建一個數組,它與前一個實例中所創建的數組是完全相同的。下面是一個為數組中某個元素賦值的實例: ~~~ balance[4] = 50.0; ~~~ 上述的語句把數組中第五個元素的值賦為 50.0。所有的數組都是以 0 作為它們第一個元素的索引,也被稱為基索引,數組的最后一個索引是數組的總大小減去 1。以下是上面所討論的數組的的圖形表示: ![](https://box.kancloud.cn/2015-12-14_566e449008415.jpg) ## 訪問數組元素 數組元素可以通過數組名稱加索引進行訪問。元素的索引是放在方括號內,跟在數組名稱的后邊。例如: ~~~ double salary = balance[9]; ~~~ 上面的語句將把數組中第 10 個元素的值賦給 salary 變量。下面的實例使用了上述的三個概念,即,聲明數組、數組賦值、訪問數組: ## 實例 ``` #include <stdio.h> int main () { int n[ 10 ]; /* n 是一個包含 10 個整數的數組 */ int i,j; /* 初始化數組元素 */ for ( i = 0; i < 10; i++ ) { n[ i ] = i + 100; /* 設置元素 i 為 i + 100 */ } /* 輸出數組中每個元素的值 */ for (j = 0; j < 10; j++ ) { printf("Element[%d] = %d\n", j, n[j] ); } return 0; } ``` 當上面的代碼被編譯和執行時,它會產生下列結果: ~~~ Element[0] = 100 Element[1] = 101 Element[2] = 102 Element[3] = 103 Element[4] = 104 Element[5] = 105 Element[6] = 106 Element[7] = 107 Element[8] = 108 Element[9] = 109 ~~~ 數組練習: 1 將數組A中的內容和數組B中的內容進行交換。(數組長度相同) 2 計算一個數組中數字的最大值最小值及其所在的位置 3 有一個有序的數組,用戶輸入一個數字k,將k插入數組。要求插入后數組依然有序 4 用數組保存 Fibonacci 數列的前20項,以5個數為一行的形式輸出 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597 5 數組中存儲學生成績,計算該班級最高分,最低分,平均分,及格人數(60分以上) 成績用戶輸入 當用戶輸入-1 表示輸入結束 6 用戶輸入5個數,將其反序輸出 7 用戶輸入5個數,將其翻轉后輸出 8 用戶輸入一串字符,統計單詞的數量 # 冒泡排序法 在實際開發中,有很多場景需要我們將數組元素按照從大到小(或者從小到大)的順序排列,這樣在查閱數據時會更加直觀,例如: * 一個保存了班級學號的數組,排序后更容易分區好學生和壞學生; * 一個保存了商品單價的數組,排序后更容易看出它們的性價比。 對數組元素進行排序的方法有很多種,比如冒泡排序、歸并排序、選擇排序、插入排序、快速排序等,其中最經典最需要掌握的是「冒泡排序」。 以從小到大排序為例,冒泡排序的整體思想是這樣的: * 從數組頭部開始,不斷比較相鄰的兩個元素的大小,讓較大的元素逐漸往后移動(交換兩個元素的值),直到數組的末尾。經過第一輪的比較,就可以找到最大的元素,并將它移動到最后一個位置。 * 第一輪結束后,繼續第二輪。仍然從數組頭部開始比較,讓較大的元素逐漸往后移動,直到數組的倒數第二個元素為止。經過第二輪的比較,就可以找到次大的元素,并將它放到倒數第二個位置。 * 以此類推,進行 n-1(n 為數組長度)輪“冒泡”后,就可以將所有的元素都排列好。 整個排序過程就好像氣泡不斷從水里冒出來,最大的先出來,次大的第二出來,最小的最后出來,所以將這種排序方式稱為 下面我們以“3? 2? 4? 1”為例對冒泡排序進行說明。 第一輪? 排序過程 3? 2? 4? 1??? (最初) 2? 3? 4? 1? ? (比較3和2,交換) 2? 3? 4? 1??? (比較3和4,不交換) 2? 3? 1? 4??? (比較4和1,交換) 第一輪結束,最大的數字 4 已經在最后面,因此第二輪排序只需要對前面三個數進行比較。 第二輪? 排序過程 2? 3? 1? 4 (第一輪排序結果) 2? 3? 1? 4 (比較2和3,不交換) 2? 1? 3? 4 (比較3和1,交換) 第二輪結束,次大的數字 3 已經排在倒數第二個位置,所以第三輪只需要比較前兩個元素。 第三輪? 排序過程 2? 1? 3? 4? (第二輪排序結果) 1? 2? 3? 4? (比較2和1,交換) 至此,排序結束。 ## 算法總結及實現 對擁有 n 個元素的數組 R\[n\] 進行 n-1 輪比較。 第一輪,逐個比較 (R\[1\], R\[2\]),? (R\[2\], R\[3\]),? (R\[3\], R\[4\]),? …….? (R\[N-1\], R\[N\]),最大的元素被移動到 R\[n\] 上。 第二輪,逐個比較 (R\[1\], R\[2\]),? (R\[2\], R\[3\]),? (R\[3\], R\[4\]),? …….? (R\[N-2\], R\[N-1\]),次大的元素被移動到 R\[n-1\] 上。 。。。。。。 以此類推,直到整個數組從小到大排序。 具體的代碼實現如下所示: ``` ~~~ #include <stdio.h> int main(){ int nums[10] = {4, 5, 2, 10, 7, 1, 8, 3, 6, 9}; int i, j, temp; //冒泡排序算法:進行 n-1 輪比較 for(i=0; i<10-1; i++){ //每一輪比較前 n-1-i 個,也就是說,已經排序好的最后 i 個不用比較 for(j=0; j<10-1-i; j++){ if(nums[j] > nums[j+1]){ temp = nums[j]; nums[j] = nums[j+1]; nums[j+1] = temp; } } } //輸出排序后的數組 for(i=0; i<10; i++){ printf("%d ", nums[i]); } printf("\n"); return 0; } ~~~ 運行結果: 1 2 3 4 5 6 7 8 9 10 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看