二、一維陣列
在此前的程式中,所使用的變數均為標量型別(即基本型別)的變數。
然而,當乙個程式需要儲存批量資料時,使用標量型別的變數甚為不便。
此時,可以使用一種組合型別的資料陣列。
總結一下就是因為定義一堆變數太麻煩人了,還不便於管理,就像公布成績的時候乙個同學一張成績單,老師折騰也費勁,所以想辦法整合一下,同型別的整理在一起,全班人的成績整理成一張**,也就是乙個集合體,所以在程式中也得想辦法把同型別的變數整合在一起,不過這個集合體不叫**,叫陣列
所謂陣列,是一組有序變數的集合,而且這些變數具有相同的資料型別
(你把a同學學號跟b同學身份證號混在乙個統計學號的**裡不行吧,人家就是int型的,你非得給人家塞進去個float型的也說不太過去吧)
陣列中的變數稱為陣列元素
別管有沒有賦值,乙個**我列了幾行就是幾行,不管我有沒有寫東西,所以元素不管有沒有賦值,我定義了幾個就是幾個
比如這裡就是6個元素,雖然我只賦值了三個元素
而且這種定義的時候就賦初值的,陣列裡其他的未賦值元素都是0。這種賦值方法還是蠻重要的,畢竟有隨機值做題的時候可能會出錯。
陣列元素的個數稱為陣列長度
陣列中最常用的是一維陣列
一維陣列中的所有元素可以看作一行。
一維陣列的每個元素只需要乙個序號(也稱為下標)。
一維陣列就一行想用別的區分你也沒機會啊
在程式中使用陣列時,必須先定義後使用。
型別名,陣列名[陣列長度];
例如:int a[10];
定義了乙個一維陣列a,包含10個int型的陣列元素,即a[0]、a[1]、 a[2]、…a[9]。
每個陣列元素有乙個序號(也稱為下標)。
一維陣列的元素,不但在名稱上是有序的,在記憶體中的儲存也是連續且有序的。
陣列元素的有序性特點,使得陣列元素適合於採用迴圈處理。
(以後題目大部分都跟迴圈有關,畢竟都在一行裡面,順序結構多舒服,排著順序輸入輸出多好,難道還乙個個手動嗎,那也就沒陣列的必要了)
這就有意思了,a[10]是從a[0]到a[9]數一下,0到9是十個數字對吧,先把數目對起來,不能缺斤少兩啊。
然後呢為啥從0開始,這個跟c語言的取位址啊啥的有關,不從0的話計算量會增大,這只是其中之一,我感覺有一篇解釋文章挺好的,放在下面了,有興趣可以去看看
ok,為啥從0開始就解釋清楚了,然後數目(或者正規一點:元素個數)也對起來了
在c89標準中,不允許定義變長陣列,即在表示陣列長度的表示式中,不能包含變數名。
而在c99標準中,則允許定義變長陣列。即陣列長度可以是整型變數或整型變數的表示式。
例如:
int n=10;
int a[n]
;//在c89標準中是錯誤的。
//在c99標準中正確合法
在程式中,一般不能將一維陣列作為乙個整體進行輸入、輸出和運算。
而只能針對一維陣列的元素進行操作。
這個操作方法跟以前一樣,本質上他還是個變數,怎麼操作變數就怎麼運算元組。一把菜刀跟一堆菜刀放在一起還能變成屠龍刀嗎?
int a[10]
;a[0]
=100
;//a[0]是陣列元素。
a[10]=
200;
/*是錯誤的
因為陣列a中沒有a[10]這個元素
這種錯誤稱為下標越界
在程式中引用陣列元素時,陣列元素的下標可以用變數表示。
很多陣列題目都是這麼玩的,就因為陣列下標可以用變數表示
對陣列元素的操作方法,與同型別變數的操作方法相同。
i=0;
a[i]
=100
;//等價於a[0
]=100;
printf
("%d"
,a[i]);
printf
("%d"
,a[0])
;
程式設計思路:
首先定義如下陣列和變數: int a[10],i;
然後完成該陣列元素的輸入與輸出。
int a[10]
,i;a[
10]就是因為10個元素
他要是說100
就a[100
]i就是那個變數了
i就為為了存放下標的
首先用順序結構完成輸入:i=0
;scanf
("%d"
,&a[i]);
//等價於scanf("%d" ,&a[0]);i=1
;scanf
("%d"
,&a[i]);
i=2;scanf
("%d"
,&a[i]);
i=3;scanf
("%d"
,&a[i]);
i=4;scanf
("%d"
,&a[i]);
i=5;scanf
("%d"
,&a[i]);
i=6;scanf
("%d"
,&a[i]);
i=7;scanf
("%d"
,&a[i]);
i=8;scanf
("%d"
,&a[i]);
i=9;scanf
("%d"
,&a[i]);
上面就是不用迴圈的後果
上述語句組可以歸納為如下的迴圈:
for(i=
0;i<=
9;i++
)scanf
("%d"
,&a[i]);
同樣逆序輸出
然後用順序結構完成輸出:i=9
;printf
("%d"
,a[i]);
//等價於printf("%d ",a[9]);i=8
;printf
("%d"
,a[i]);
....
.i=0;
printf
("%d"
,a[i]);
上述語句組可以歸納為如下的迴圈:
for(i=
9;i>=
0;i--
)printf
("%d"
,a[i]
);
完整源程式
#include
intmain()
效果如下
在定義一維陣列的同時,給陣列元素賦值,稱為陣列的初始化。
給所有元素賦初值:
int a[6]
=;
可以只給部分元素賦初值。
例如:
inta[6]
=;
此時,其它元素自動取0。
初始化時,可以不指定一維陣列的長度。
例如:
inta=
;
系統編譯時,能根據初值的個數自動確定陣列長度。
不過,inta;這種形式是錯誤的,因為無法確定陣列的長度。
就不想寫的很長,那樣太長了不想看,所以我就分開寫
Python 第二節 第八課
toc 我們可以使用 特殊字元 實現某些難以用字元表示的效果.比如 換行等.常見的轉義字元有這些 在結尾時 續行符 反斜槓符號 單引號 雙引號 b 退格 backspace n 換行 t 橫向製表符 r 回車 1.可以使用 將多個字串拼接起來.例如 aa bb aabb 1 如果 兩邊都是字串,則拼...
第一節課作業
1.c語言程式的基本語句能完成功能的體會 雖說c語言的基本語句不多,但通過複雜的組合能有非常強大的處理能力,在科技高度發展的今天,計算機在人們之中的作用越來越突出。而c語言作為一種計算機的語言,我們 學習它,有助於我們更好的了解計算機,與計算機進行交流,因此,c語言的學習對我們尤其重要。學習c程式語...
Android 第一節課
android 第一節課 android 第一節課 view與wiewgroup view和viewgroup介紹 view類似於swing中的jpanel,代表乙個空白的矩形區域,android應用中的絕大部分ui元件都繼承於view或其子類 view還乙個重要的子類viewgroup,它通常作為...