第八課第一節讓你零基礎搞懂數組(一維數組)

一、數組解析

1. 順接基礎與引入

在此前的程序中,所使用的變量均爲標量類型(即基本類型)的變量。
然而,當一個程序需要存儲批量數據時,使用標量類型的變量甚爲不便。
此時,可以使用一種組合類型的數據數組。
總結一下就是因爲定義一堆變量太麻煩人了,還不便於管理,就像公佈成績的時候一個同學一張成績單,老師折騰也費勁,所以想辦法整合一下,同類型的整理在一起,全班人的成績整理成一張表格,也就是一個集合體,所以在程序中也得想辦法把同類型的變量整合在一起,不過這個集合體不叫表格,叫數組

2. 數組簡介

所謂數組,是一組有序變量的集合,而且這些變量具有相同的數據類型
(你把A同學學號跟B同學身份證號混在一個統計學號的表格裏不行吧,人家就是int型的,你非得給人家塞進去個float型的也說不太過去吧)
數組中的變量稱爲數組元素
別管有沒有賦值,一個表格我列了幾行就是幾行,不管我有沒有寫東西,所以元素不管有沒有賦值,我定義了幾個就是幾個
在這裏插入圖片描述
比如這裏就是6個元素,雖然我只賦值了三個元素
而且這種定義的時候就賦初值的,數組裏其他的未賦值元素都是0。這種賦值方法還是蠻重要的,畢竟有隨機值做題的時候可能會出錯。
數組元素的個數稱爲數組長度
數組中最常用的是一維數組

二、一維數組

一維數組中的所有元素可以看作一行。
一維數組的每個元素只需要一個序號(也稱爲下標)。
一維數組就一行想用別的區分你也沒機會啊
在程序中使用數組時,必須先定義後使用。

1.一維數組格式:

類型名,數組名[數組長度];
例如:
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開始就解釋清楚了,然後數目(或者正規一點:元素個數)也對起來了

鏈接:
爲什麼很多編程語言中數組都是從 0 開始編號.
點擊上面的藍字或手動
https://blog.csdn.net/Hanoi_ahoj/article/details/82931630
版權聲明:爲CSDN博主「ahojcn」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

2.一維數組長度

在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]);

3.例題:輸入10個整數存入一維數組中,再按逆序輸出。

編程思路:
首先定義如下數組和變量: 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 <stdio.h>
int main()
{
int a[10],i;
printf("請輸入10個整數: \n");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
printf("逆序輸出的結果: \n");
for(i=9;i>=0;i--)
printf("%d",a[i]);
printf("\n");
return 0;
}

效果如下
在這裏插入圖片描述

4.一維數組初始化

在定義一維數組的同時,給數組元素賦值,稱爲數組的初始化。

  1. 給所有元素賦初值:
int a[6]={1,3,5,7,9,10};
  1. 可以只給部分元素賦初值。
    例如:
 inta[6]={1,3};

此時,其它元素自動取0。

  1. 初始化時,可以不指定一維數組的長度。
    例如:
inta[]= {1,3,5,8,9};

系統編譯時,能根據初值的個數自動確定數組長度。
不過,inta[];這種形式是錯誤的,因爲無法確定數組的長度。

就不想寫的很長,那樣太長了不想看,所以我就分開寫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章