天天看點

黑馬程式員-C學習日記-數組

                 ------- ios教育訓練、android教育訓練、java教育訓練、期待與您交流! ----------

一. 數組的基本概念

1. 數組:用來儲存多個相同資料類型的資料的集合

定義變量:   資料類型 變量名稱

定義數組:   資料類型 數組名稱[元素個數]

二. 數組的多種初始化方式

數組隻有定義了才能進行初始化,隻有初始化才能使用

數組周遊:取出數組中的每一個元素看一下

代碼示範:

#include <stdio>
int main(int argc ,const char *argv[]{
// 定義一個數組 
 int scores [0];={1,9,9,0,7,9,11};
// 計算數組所占用的位元組數,也就是數組元素個數
   int count = sizeof(nums)/sizeof(int);
 // 周遊數組:  
   for(int i=0;i<count;i++){
       printf("scores [%d]=%d",i,nums[i]);
    }
   return 0;
}
           

1.  1使用常量作為元素個數

1.2使用變量作為元素個數(C99不支援使用變量作為元素個數,但是LLVM支援)

使用變量作為元素個數的好處:你可以在程式運作到這一行的時候再決定要建立有多少元素的數組

   

2.  定義數組的同時進行初始化

2.1指定元素個數,同時全部進行初始化

 int nums[5] = {1,2,3,4,5}

2.2 不指定元素個數,全部進行初始化

 int nums[] = {1,2,3,4,5}

2.3 指定元素個數,部分初始化:從下标為0的元素開始初始化,沒有顯式初始化的元素系統自動将其初始化為0

 int nums[5] = {1,2}

2.4 指定元素個數,為指定的元素初始化

 int nums[5] = {[1] = 1,[2]=5}

注意:定義數組同時進行初始化的時候,不可以使用變量作為元素個數

三. 數組的存儲細節

數組名稱本身就是一個位址

1.數組的位址就是第一個元素的位址

2.數組是一塊連續的存儲空間

3.下标小的元素位址在小位址上,下标大的元素在大位址上

黑馬程式員-C學習日記-數組

注意:

數組下标越界導緻的問題:

約錯對象,通路你不該通路的元素,出現莫名的錯誤

越界超出很大範圍,程式崩潰

 注意:

1.基本資料類型作為函數參數傳遞是值傳遞;

2. 數組作為函數參數類型傳遞是位址傳遞,如果在函數中改變數組的某個值,實參的值也會改變。

3. 當數組作為函數參數傳遞的時候,會被自動轉換為指針類型。是以在函數中不能擷取形參數組的長度,隻能由主調函數傳入

四.二維數組的基本概念

二維數組:元素為一維數組的數組;

格式:資料類型 數組名稱[一維數組個數][一維數組元素個數]

五.定義二維數組

 char scores[3][2]

黑馬程式員-C學習日記-數組

周遊二維數組:

代碼示範:

#include <stdio>
int main(int argc ,const char *argv[]{
 //定義一個二維數組
  char scores[3][2]
 //外層循環控制行(一維數組的個數)
  for(int i=0;i<3;i++){
     //内層循環控制列(一維數組元素個數)
     for(int j=0;j<2,j++){
       printf("scores[%d][%d]=%c\n",i,j,scores[i][j]);
      }
   }
  return 0;
}
           

二維數組的多種初始化方式:

1. 先定義二維數組,然後初始化(定義二維數組的時候必須指定一維數組的元素個數)

2. 定義二維數組同時初始化

  2.1 指定一維數組個數,對全部元素進行初始化

      int  scores[3][2]={{1,2},{3,4},{5,6}};

  2.2不指定一維數組個數,對全部元素進行初始化

     int  scores[][2]={{1,2},{3,4},{5,6}};

  2.3 指定一維數組的元素個數,用一個大括号進行初始化

     int  scores[3][2]={1,2,3,4,5,6};

     int  scores[][2]={1,2,3,4,5,};

Ps:定義的同時進行初始化,沒有顯式初始化的元素會被自動初始化為0

六. 練習

1.錄入一個班級成績,然後計算平均分,班級中有多少人需要自己錄入

#include <stdio.h>
int main(int argc ,const char *argv[]{
 // 定義學生人數變量,提示使用者輸入班級學生的人數
  int count;
  printf("請輸入班級學生人數\n");
 // 接收使用者的錄入
  scanf("%d",&count);
 //定義一個數組儲存學生成績
  int scores[count];
 //接收使用者錄入的每一個學生的成績
 for(int i=0;i<count;i++){
    printf("請錄入第%d個學生成績:\n",i+1);
    scanf("%d",&scores[i]);
  }
 //計算學生總成績
   int sum = 0;
   for(int i=0;i<count;i++){
     sum+=scores[i];  
    }
 //計算平均值
   double average = (double)sum/count;
 //輸出學生平均成績
   printf("學生平均成績為:%.2lf\n",average);
   
   return 0;
}
           

2. 冒泡排序規則:大的下沉,小的上浮

黑馬程式員-C學習日記-數組
#include <stdio.h>
int main(int argc ,const char *argv[]{
 升序排列數組元素
 int nums[]={1,9,9,0,7,9,11};
 //計算數組長度
 int length = sizeof(nums)/sizeof(int);
 //使用冒泡排序
 //外層循環控制趟數
 for(int i=0;i<length-1;i++){
     //内層循環控制每一趟比較多少次
     for(int j=0;j<length-1-i);j++{
        //元素兩兩比較,如果前面元素大,則與後面的元素交換位置 
         if(nums[j]>nums[j+1]){
           int temp;
           temp = nums[j];
           nums[j]=nums[j+1];
           nums[j+1]=temp;
          }
      }
  }
  周遊數組,列印排序後的結果
  for(int i=0;i<length;i++){
      printf("%d ",nums[i]);
   }

  return 0;
}