[注] 使用數(shù)組的目的祠够,是為了方便地批量定義變量
[前言] c語(yǔ)言中提供了數(shù)組,可以實(shí)現(xiàn)批量地定義相同類型的變量,在我們需要多個(gè)相同類型的變量時(shí)航罗,可以選擇使用數(shù)組
數(shù)組分為兩類:一維數(shù)組,二維數(shù)組
一屁药、一維數(shù)組
1.一維數(shù)組的定義
類型符 數(shù)組名[元素個(gè)數(shù)]粥血;
類型符,可以是int酿箭,char复亏,double等等這些基本數(shù)據(jù)類型,類型符決定了數(shù)組中多個(gè)變量的類型
數(shù)組名缭嫡,數(shù)組名必須符合標(biāo)識(shí)符的命名規(guī)則
元素個(gè)數(shù)缔御,表示數(shù)組一次性定義的變量的個(gè)數(shù)(數(shù)組中包含的元素個(gè)數(shù))
? 例如:int array[4];
2.一維數(shù)組---元素表示
int array[4]妇蛀;
[注] 數(shù)組中元素的下標(biāo)是從0開(kāi)始的
? array[0]
3.一維數(shù)組的特點(diǎn)
數(shù)組中每個(gè)元素的類型都相同
數(shù)組中每個(gè)元素是由數(shù)組名和下標(biāo)唯一確定的
數(shù)組元素下標(biāo)從0開(kāi)始耕突,最大到元素個(gè)數(shù)減1
數(shù)組元素之間是緊密相連的
蓋住數(shù)組名,剩下的部分就是數(shù)組的類型
數(shù)組所占總內(nèi)存空間评架,是由數(shù)組的類型決定的
4.一維數(shù)組---初始化
數(shù)組的初始化的目的眷茁,是為了讓數(shù)組中每個(gè)元素都有一個(gè)確定的值
//完全初始化
int array[4]={1,2,3,4};
//部分初始化
int array[4]={1,2};//編譯器會(huì)優(yōu)先取初始化列表中的值給數(shù)組前面的元素賦值,那些未顯示初始化的元素默認(rèn)初始化為0
//數(shù)組清空
int array[400]={};
5.一維數(shù)組---賦值
//一維數(shù)組---賦值
int array[4]={1,2,3,4};
//數(shù)組不能整體賦值纵诞,只能單個(gè)元素單獨(dú)賦值
array2[0]=10;
array2[1]=array[1];
//通過(guò)循環(huán)上祈,依次讀取數(shù)據(jù)給數(shù)組的每個(gè)元素賦值
for (int i=0; i<4; i++)
{
scanf("%d",&array[i]);
}
6.數(shù)組下標(biāo)問(wèn)題
數(shù)組元素的下標(biāo)是從0開(kāi)始的
1.數(shù)組下標(biāo)
數(shù)組定義時(shí),數(shù)組的下標(biāo)表示的是數(shù)組中元素的個(gè)數(shù)
2.數(shù)組元素的下標(biāo)
使用數(shù)組元素時(shí)浙芙,下標(biāo)表示的是元素在數(shù)組中的位置
3.數(shù)組下標(biāo)越界問(wèn)題
數(shù)組下標(biāo)使用的合法范圍為:0~元素個(gè)數(shù)-1
數(shù)組下標(biāo)越界可能會(huì)導(dǎo)致程序終止
[注] 在程序運(yùn)行過(guò)程中如果發(fā)生以下報(bào)錯(cuò)信息登刺,一般都是數(shù)組使用越界導(dǎo)致的---Thread 1:signal SIGABRT
7.數(shù)組排序
int array[10]={7,2,6,3,4,9,5,1,8,10};
冒泡法
思想:
數(shù)組中待排序數(shù),從左往右嗡呼,依次取兩兩相鄰的元素進(jìn)行比較纸俭,前一個(gè)元素大于后一個(gè)元素,就交換這兩個(gè)元素
第一趟比較完畢時(shí)南窗,所有參與排序元素中最大值放在所有元素的結(jié)尾
重復(fù)以上步驟揍很,直到所有元素排序完畢
//外層循環(huán)廊宪,控制比較的趟數(shù)
for (int i=1; i<10; i++)
{
//內(nèi)層循環(huán),控制具體某一趟的比較次數(shù)
for (int j=0; j<10-i; j++)
{
if (array[j]<array[j+1])
{
//交換相鄰的兩個(gè)元素
//交換的主角是array[j]和array[j+1]
int temp;
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
//打印數(shù)組中的每個(gè)元素
for(int i=0;i<10;i++)
{
printf("%d ",array[i]);
}
選擇法
思想:
- 取數(shù)組中未排序元素中最左邊的元素女轿,依次和右邊其他元素進(jìn)行比較箭启,如果前一個(gè)比后一個(gè)大,交換兩個(gè)元素
- 第一趟比較完畢時(shí)蛉迹,所有參與排序元素中最小元素傅寡,放在所有參與排序元素的最左邊
- 重復(fù)以上步驟,直到所有元素排序完畢
//外層循環(huán)北救,控制比較的趟數(shù)
for (int i=0; i<9; i++)
{
//內(nèi)層循環(huán)荐操,控制具體某一趟的比較次數(shù)
for (int j=i+1; j<10; j++)
{
if (array[i]>array[j])
{
//交換相鄰的兩個(gè)元素
//交換的主角是array[i]和array[j]
int temp;
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
}
//打印數(shù)組中的每個(gè)元素
for(int i=0;i<10;i++)
{
printf("%d ",array[i]);
}
二、二維數(shù)組
1.二維數(shù)組的定義
類型符 數(shù)組名[元素個(gè)數(shù)][元素的元素個(gè)數(shù)]珍策;
例子:
int arr[4][4];//這是一個(gè)二維數(shù)組托启,這個(gè)二維數(shù)組具有4個(gè)元素,每個(gè)元素的類型是int[4]
2.二維數(shù)組---元素表示
int arr[4][4];
元素:arr[0],arr[1],arr[2],arr[3]
第一個(gè)元素arr[0]
第二個(gè)元素arr[1]
第三個(gè)元素arr[2]
第四個(gè)元素arr[3]
3.二維數(shù)組---初始化
//完全初始化
int array[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int array2[3][3] = {{1,2},{4,5,6},{}};
int array3[3][3] = {{},{},{}};
//部分初始化
int array4[3][3] = {{1,2}};
4.其他
二維數(shù)組賦值
數(shù)組不能整體賦值,只能單個(gè)元素單獨(dú)賦值.
array4[0] = array3[0];
二維數(shù)組在使用過(guò)程中,數(shù)組元素下標(biāo)不能越界訪問(wèn).
三攘宙、練習(xí)
1.將一個(gè)5元素?cái)?shù)組中元素屯耸,相鄰的兩兩相加,找出最大的組合;打印出是哪兩個(gè)元素
int a[5],sum=0,b=0,x=0,y=0;
for (int i=0; i<5; i++)
{
scanf("%d",&a[i]);
}
for (int i=0; i<4; i++)
{
sum=a[i]+a[i+1];
if (sum>b)
{
b=sum;
x=a[i];
y=a[i+1];
}
}
printf("%d %d\n",x,y);
2.輸入10個(gè)數(shù)蹭劈,相鄰的兩個(gè)絕不相同疗绣。輸出每個(gè)遞增遞減序列,并輸出有多少個(gè)這種序列
1 2 3 2 4 5 6 7 6 3
1 2 3
3 2
2 4 5 6 7
7 6 3
總共:4
#include <stdio.h>
int main(int argc, const char * argv[])
{
int a[10],n=1;
for (int i=0; i<10; i++)
{
scanf("%d",&a[i]);
}
for (int i=1; i<9; i++)
{
if ((a[i-1]-a[i]<0&&a[i]-a[i+1]<0)||(a[i-1]-a[i]>0&&a[i]-a[i+1]>0))
{
printf("%d %d ",a[i-1],a[i]);
}
else
{
printf("%d %d\n",a[i-1],a[i]);
n++;
}
}
printf("\n總共:%d\n",n);
return 0;
}