數組
在學數組之前,有必要把前面的知識復習一遍,當然我的復習,僅僅只是提一下,而對於你,則應該認真的看一下前面的知識點,不懂可以百度,哈哈。
前面我們大致學了 1.定義變量,2.數據的輸入與輸出,3.判斷語句if...else if ...else ,4.循環語句 while,do while,for 三種循環方式。
然而上面面講的都是廢話。。。下面開始講數組。
數組是什麼?數組是構造數據類型。很難懂嗎?說直白一點,數組就是很多個相同的數據類型的元素聚集在一起之後的結果。
當然,使用數組的時候,同樣需要定義它。還記得怎麼定義一個變量嗎? 現在,請定義一個整型變量a。如果你認真復習過前面的類容,相信可以很容易寫出來 int a; 這樣的語句。那麼,我現在問,如何定義1000個整型變量,難道要取一千個變量名,諸如int a,b,c,d,e......;這樣嗎?那也太麻煩了吧。所以就出現了數組這一概念。數組的定義很方便,如下
#include<stdio.h> int main() {//定義了有一千個空間的整型變量 //此時在計算機中會開辟1000個整型大小的內存空間 //每個空間都可以表示一個整型變量 int a[1000]; }
上面的程序中就定義了一個大小為1000的整型數組。當然數組的出現就是為了輸入和存儲的方便。運用數組一般都與上一篇文章的循環相結合。
1.從鍵盤中第一行輸入一個數字a,第二行輸入a個數字,按回車,然後出現每個數字加一的結果。
代碼:
#include<stdio.h> int main() { //為防止出現n的值過大的情況,一般吧數組開的比較大 int n,i,a[100000]; scanf("%d",&n); //從鍵盤中輸入一個數 for(int i=0;i<n;i++) {//通過循環從鍵盤中輸入n個數 scanf("%d",&a[i]); //i代表著數組的下標,數組下標從0開始 } for(int i=0;i<n;i++) { a[i]+=1;//通過循環使數組中的每個數都加1 //輸出結果 printf("%d ",a[i]); } return 0; }
運行結果
當然用while循環也能做到如上操作,自己可以試試,此處就不再說明了。真正值得關注的是,1.數組必須提前說明開辟了多少的空間,並且要開的夠用。例如上題,如果第一行輸入的是n是1001
,很明顯,我只開了1000個空間,只能存放1000個數,這種現象稱為數組越界,程序雖然可以運行,不會報錯,但是是錯誤的。2.訪問數組存放的第一個數是0,即a[0]代表數組存放的第一個數,a[n-1]代表數組存放的最後一個數。3.數組空間是邏輯地址是連續的,即可以通過0~n-1來訪問數組中的所有的元素。
2.觀察這段數字 1,1,2,3,5,8,13,21... 發現規律,現在從鍵盤中輸入一個小於50的數m,按下回車,輸出數列中的第m個數。
可以看出,這個數的前兩數的和等於這個數。即 a(n)=a(n-1)+a(n-2) n>=3
規律發現了,那麼用程序如何實現它:
#include<stdio.h> int main() { /*用數組來存放這個數列, 因為已知前兩個數,就能知道下一個數 ,所以可以用遞推的思想來求解*/ int n,i,a[50]; //數組的下標從0開始, a[0]=1; a[1]=1; for(i=2;i<=50;i++) { //遞推式 a[i]=a[i-1]+a[i-2]; } scanf("%d",&n); /*由於數組下標從0開始,a[0]即數列的第一個數 所以第n個數是a[n-1].*/ printf("%d",a[n-1]); }
運行結果
3.不止語句是可以嵌套使用,數組同樣也可以,比如如果有兩個數組a[100],b[100]。如果b數組是一個整型數組,完全可以用b數組裡面的某個數數來表示a數組的下標,例如a[b[i]]; b[i]作為了a數組的下標.
不過數組用的比較多的不只是存數字,它還可以存字符,即字符數組,定義一個字符數組:char a[100];每一個空間可以存放一個字符,例如,'a','b','.'.'?','8'......等。此處需要區分字符數組與字符串的區別。字符串一般都有一個結束符‘\0’,放在存放的字符末尾.表示字符串的結束.例如我要存放"good,time",一共有九個字符,在數組中需要開辟10個空間,存放情況為'g','o','o','d',',','t','i','m','e','\0'.最後一個為結束符.並且對於字符數組的操作c定義了許多的庫函數,有些例如復制syrcpy,求長度strlen,比較strcmp函數都是很常用的,需要掌握它。
例題:從鍵盤中輸入一串字符串,無空格,把它倒著輸出出來
代碼:
#include<stdio.h> //關於字符,庫函數所以需要的頭文件 #include<string.h> int main() { int i,l; char a[10000]; //輸入字符串 scanf("%s",a); //庫函數求字符串的長度 l=strlen(a); //倒著輸出 for(i=l-1;i>=0;i--) printf("%c",a[i]); }
由於只想著能讓大家對c語言有一個簡單的整體的認識,並且限於個人水平,所以都寫的是一些比較基礎的東西。如想了解的更深入需要自己去下功夫。