程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> C語言學習教程第四章-數組(2)

C語言學習教程第四章-數組(2)

編輯:C語言基礎知識

數組元素的表示方法

數組元素是組成數組的基本單元。數組元素也是一種變量, 其標識方法為數組名後跟一個下標。 下標表示了元素在數組中的順序號。數組元素的一般形式為: 數組名[下標] 其中的下標只能為整型常量或整型表達式。如為小數時,C編譯將自動取整。例如,a[5],a[i+j],a[i++]都是合法的數組元素。 數組元素通常也稱為下標變量。必須先定義數組, 才能使用下標變量。在C語言中只能逐個地使用下標變量, 而不能一次引用整個數組。 例如,輸出有10 個元素的數組必須使用循環語句逐個輸出各下標變量:
for(i=0; i<10; i++) printf("%d",a[i]); 而不能用一個語句輸出整個數組,下面的寫法是錯誤的: printf("%d",a);
void main()
{
int i,a[10];
for(i=0;i<10;i++)
a[i++]=2*i+1;
for(i=9;i>=0;i--)
printf("%d",a[i]);
printf("\n%d %d\n",a[5.2],a[5.8]);
}
本例中用一個循環語句給a數組各元素送入奇數值,然後用第二個循環語句從大到小輸出各個奇數。在第一個 for語句中,表達式3省略了。在下標變量中使用了表達式i++,用以修改循環變量。當然第二個for語句也可以這樣作, C語言允許用表達式表示下標。 程序中最後一個printf語句輸出了兩次a[5]的值, 可以看出當下標不為整數時將自動取整。數組的賦值給數組賦值的方法除了用賦值語句對數組元素逐個賦值外, 還可采用初始化賦值和動態賦值的方法。數組初始化賦值數組初始化賦值是指在數組說明時給數組元素賦予初值。 數組初始化是在編譯階段進行的。這樣將減少運行時間,提高效率。

初始化賦值的一般形式為: static 類型說明符 數組名[常量表達式]={值,值……值}; 其中static表示是靜態存儲類型, C語言規定只有靜態存儲數組和外部存儲數組才可作初始化賦值(有關靜態存儲,外部存儲的概念在第五章中介紹)。在{ }中的各數據值即為各元素的初值, 各值之間用逗號間隔。例如: static int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相當於a[0]=0;a[1]=1...a[9]=9;

C語言對數組的初始賦值還有以下幾點規定:
1.可以只給部分元素賦初值。當{ }中值的個數少於元素個數時,只給前面部分元素賦值。例如: static int a[10]={0,1,2,3,4};表示只給a[0]~a[4]5個元素賦值,而後5個元素自動賦0值。
2.只能給元素逐個賦值,不能給數組整體賦值。 例如給十個元素全部賦1值,只能寫為: static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為: static int a[10]=1;
3.如不給可初始化的數組賦初值,則全部元素均為0值。
4.如給全部元素賦值,則在數組說明中, 可以不給出數組元素的個數。例如: static int a[5]={1,2,3,4,5};可寫為: static int a[]={1,2,3,4,5};動態賦值可以在程序執行過程中,對數組作動態賦值。 這時可用循環語句配合scanf函數逐個對數組元素賦值。
void main()
{
int i,max,a[10];
printf("input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
max=a[0];
for(i=1;i<10;i++)
if(a[i]>max) max=a[i];
printf("maxmum=%d\n",max);
}
本例程序中第一個for語句逐個輸入10個數到數組a中。 然後把a[0]送入max中。在第二個for語句中,從a[1]到a[9]逐個與max中的內容比較,若比max的值大,則把該下標變量送入max中,因此max總是在已比較過的下標變量中為最大者。比較結束,輸出max的值。
void main()
{
int i,j,p,q,s,a[10];
printf("\n input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++){
p=i;q=a[i];
for(j=i+1;j<10;j++)
if(q<a[j]) { p=j;q=a[j]; }
if(i!=p)
{s=a[i];
a[i]=a[p];
a[p]=s; }
printf("%d",a[i]);
}
}
本例程序中用了兩個並列的for循環語句,在第二個for 語句中又嵌套了一個循環語句。第一個for語句用於輸入10個元素的初值。第二個for語句用於排序。本程序的排序采用逐個比較的方法進行。在i次循環時,把第一個元素的下標i賦於p,而把該下標變量值a[i]賦於q。然後進入小循環,從a[i+1]起到最後一個元素止逐個與a[i]作比較,有比a[i]大者則將其下標送p,元素值送q。 一次循環結束後,p即為最大元素的下標,q則為該元素值。若此時i≠p,說明p,q值均已不是進入小循環之前所賦之值,則交換a[i]和a[p]之值。 此時a[i]為已排序完畢的元素。輸出該值之後轉入下一次循環。對i+1以後各個元素排序。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved