------- 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.下标小的元素位址在小位址上,下标大的元素在大位址上

注意:
數組下标越界導緻的問題:
約錯對象,通路你不該通路的元素,出現莫名的錯誤
越界超出很大範圍,程式崩潰
注意:
1.基本資料類型作為函數參數傳遞是值傳遞;
2. 數組作為函數參數類型傳遞是位址傳遞,如果在函數中改變數組的某個值,實參的值也會改變。
3. 當數組作為函數參數傳遞的時候,會被自動轉換為指針類型。是以在函數中不能擷取形參數組的長度,隻能由主調函數傳入
四.二維數組的基本概念
二維數組:元素為一維數組的數組;
格式:資料類型 數組名稱[一維數組個數][一維數組元素個數]
五.定義二維數組
char scores[3][2]
周遊二維數組:
代碼示範:
#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. 冒泡排序規則:大的下沉,小的上浮
#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;
}