c語言中數組名可以與其他變量名相同,C語言初學者入門講座?第九講?數組(1)...

a4c26d1e5885305701be709a3d33442f.png

C語言初學者入門講座?第九講?數組(1)

(2007-01-17 11:39:19)

數組在程序設計中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數據元素的集合稱為數組。在C語言中,數組屬于構造數據類型。一個數組可以分解為多個數組元素,這些數組元素可以是基本數據類型或是構造類型。因此按數組元素的類型不同,數組又可分為數值數組、字符數組、指針數組、結構數組等各種類別。

本章介紹數值數組和字符數組,其余的在以后各章陸續介紹。數組類型說明在C語言中使用數組必須先進行類型說明。

數組說明的一般形式為:

類型說明符 數組名 [常量表達式],……;

其中,類型說明符是任一種基本數據類型或構造數據類型。數組名是用戶定義的數組標識符。方括號中的常量表達式表示數據元素的個數,也稱為數組的長度。

例如:

int a[10]; 說明整型數組a,有10個元素。

float b[10],c[20];

說明實型數組b,有10個元素,實型數組c,有20個元素。

char ch[20]; 說明字符數組ch,有20個元素。

對于數組類型說明應注意以下幾點:

1.數組的類型實際上是指數組元素的取值類型。對于同一個數組,其所有元素的數據類型都是相同的。

2.數組名的書寫規則應符合標識符的書寫規定。

3.數組名不能與其它變量名相同,例如:

void main()

{

int a;

float a[10];

……

}

是錯誤的。

4.方括號中常量表達式表示數組元素的個數,如a[5]表示數組a有5個元素。但是其下標從0開始計算。因此5個元素分別為a[0],a[1],a[2],a[3],a[4]。

5.不能在方括號中用變量來表示元素的個數,但是可以是符號常數或常量表達式。例如:

#define FD 5

void main()

{

int a[3+2],b[7+FD];

……

}

是合法的。但是下述說明方式是錯誤的。

void main()

{

int n=5;

int a[n];

……

}

6.允許在同一個類型說明中,說明多個數組和多個變量。

例如: int a,b,c,d,k1[10],k2[20];

數組元素的表示方法

數組元素是組成數組的基本單元。數組元素也是一種變量,其標識方法為數組名后跟一個下標。下標表示了元素在數組中的順序號。數組元素的一般形式為:

數組名[下標]

其中的下標只能為整型常量或整型表達式。如為小數時,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;)

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

}

for(i=0;i<10;)

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(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

if(i!=p)

{

s=a[i];

a[i]=a[p];

a[p]=s;

}

printf("%d",a[i]);

}

}

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539404.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539404.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539404.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pb通過對象名稱調用對象_C++ 可調用對象(二)

點擊上方“藍字”&#xff0c;發現更多精彩。本文在前一篇關于函數對象、bind 函數的基礎上&#xff0c;對 C 中 lambda不表達式的使用進行總結。lambda01PART定義一個 lambda 表達式表示一個可調用的代碼單元&#xff0c;可以理解為是一個未命名的內斂函數。類似任何函數&…

easyui datagrid 表格組件列屬性formatter和styler使用方法

明確單元格DOM結構 要想弄清楚formatter和styler屬性是怎么工作的&#xff0c;首先要弄清楚datagrid組件內容單元格的DOM接口&#xff0c;注意&#xff0c;這里指的是內容單元格&#xff0c;不包括標題單元格&#xff0c;標題單元格的結構有所區別。我們所有內容單元格的默認DO…

c+++11并發編程語言,C++11并發編程:多線程std:thread

原標題&#xff1a;C11并發編程&#xff1a;多線程std:thread一&#xff1a;概述C11引入了thread類&#xff0c;大大降低了多線程使用的復雜度&#xff0c;原先使用多線程只能用系統的API&#xff0c;無法解決跨平臺問題&#xff0c;一套代碼平臺移植&#xff0c;對應多線程代碼…

交換機虛擬化和堆疊的區別_核心交換機和普通交換機有何區別?

提起核心交換機與普通交換機有什么區別&#xff1f;相信很多朋友都有點迷惑&#xff0c;今天我們一起來了解下。核心交換機并不是交換機的一種類型&#xff0c;而是放在核心層(網絡主干部分)的交換機叫核心交換機。一般大型企業網絡和網吧需要購買核心交換機來實現強大的網絡擴…

tmpfiles.d導致的unix:///tmp/supervisor.sock no such file坑(待續)

為什么80%的碼農都做不了架構師&#xff1f;>>> 系統環境: CentOS Linux release 7.1.1503 (Core) supervisor 3.3.1今天初七&#xff0c;剛放完假需要去supervisor restart下程序。發現報了這個錯誤。但是看supervisord的進程還在運行&#xff0c;項目代碼也還在…

springMVC兩種方式實現多文件上傳及效率比較

springMVC實現多文件上傳的方式有兩種&#xff0c;一種是我們經常使用的以字節流的方式進行文件上傳&#xff0c;另外一種是使用springMVC包裝好的解析器進行上傳。這兩種方式對于實現多文件上傳效率上卻有著很大的差距&#xff0c;下面我們通過實例來看一下這兩種方式的實現方…

c語言 個位,如何才能給C語言增加幾個位操作函數

在匯編語言中有直接對位進行操作的指令&#xff0c;如置位、復位、位取反、測試某一位等&#xff0c;這對于硬件操作十分方便&#xff0c;在C語言中盡管也提供了一些位操作手段&#xff0c;如按位與、按位或、按位取反等&#xff0c;但它們是對一個字節進行操作&#xff0c;如要…

hsrp 切換_HSRP、VRRP、GLBP | 網絡工程師之網關高可用、冗余

在RS的學習過程中我們接觸到很多網絡技術&#xff0c;后面就把工作中常用的拿來與大家分享&#xff0c;本次我們來分享網關冗余技術。當我們的網關設備無法使用堆疊(VSS,istack&#xff0c;IRF)&#xff0c;或者不同廠商設備的時候&#xff0c;非常有效&#xff0c;能夠提供網關…

Linux文件系統詳解

從操作系統的角度詳解Linux文件系統層次、文件系統分類、文件系統的存儲結構、不同存儲介質的區別(RAM、ROM、Flash)、存儲節點inode。本文參考&#xff1a; http://blog.chinaunix.net/uid-8698570-id-1763151.htmlhttp://www.iteye.com/topic/816268http://soft.chinabyte.co…

opencv機器學習線性回歸_機器學習(線性回歸(二))

Lasso與嶺回歸的同和異Lasso、嶺回歸都可以預防模型過擬合Lasso回歸懲罰項為L1正則&#xff0c;嶺回歸為L2正則Lasso回歸可用來特征選擇&#xff0c;嶺回歸則不能Lasso回歸用坐標下降法求解&#xff0c;嶺回歸用梯度下降法求解。為什么Lasso可用于特征選擇&#xff0c;而嶺回歸…

c語言int a什么意思,問一下吧里大神 int a = a; 這么定義是什么意思?

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓使用自身初始化&#xff0c;具有indeterminate value&#xff0c;可能是trap representation導致使用這個對象的值引起undefined behavior。但這個初始化語法上是正確的&#xff0c;也沒有語義錯誤。ISO C113.19.21 indeterminate …

把EXCEL用程序導入到ORACLE中(SpringMVC+MyBatis)

前提&#xff1a;項目中需要把EXCEL數據批量導入oracle中兩張表中。如是用到了poi技術。分別導入poi-3.11-beta2.jar和poi-ooxml-schemas-3.9.jar這兩個包。EXCEL數據如下 第一步&#xff1a;修改spring框架配置文件。 springmvc-servlet.xml加上&#xff1a; <!-- 文件上傳…

access實例_西門子PLC1200組態王跟Access數據庫-⑥組態王變量

西門子PLC1200&#xff0c;組態王跟Access數據庫--⑥組態王變量組態王的變量設置1.0 變量設置如下圖所示&#xff0c;選擇數據詞典&#xff0c;里面是系統變量跟新建的變量&#xff0c;選擇新建1.1 如下圖&#xff0c;從上往下依次&#xff0c;變量名(這個應該知道)&#xff0c…

Android 擼起袖子,自己封裝 DialogFragment

前言 具體的代碼以及示例我都放上 Github 了&#xff0c;有需要的朋友可以去看一下 DialogFragmentDemos&#xff0c;歡迎 star 和 fork. 本文的主要內容 DialogFragment 是什么創建通用的 CommonDialogFragment實現各種類型的 DialogFragment在寫正文之前&#xff0c;先來一波…

as模擬器文件夾路徑_EGG Switch手機模擬器怎么用?中文教程來了......

大家好&#xff0c;小雞妹我又來啦。自從昨天曝光了美國NX工作室的EGG模擬器之后&#xff0c;推文底下就多了一千多條留言&#xff0c;說啥的都有。不過小雞妹大概總結了一下&#xff0c;發現下面這幾條問題&#xff0c;出現的頻率最高&#xff1a;① 找不到網址&#xff1b;②…

xml文件c語言讀取函數,讀寫xml文件的2個小函數

#region 讀寫xml文件的2個小函數&#xff0c;2005 4 2 by hycpublic void SetXmlFileValue(string xmlPath,string AppKey,string AppValue)//寫xmlPath是文件路徑文件名&#xff0c;AppKey是 Key Name&#xff0c;AppValue是Value{XmlDocument xDoc new XmlDocument();xDoc.L…

Java導入導出Excel工具類ExcelUtil

前段時間做的分布式集成平臺項目中&#xff0c;許多模塊都用到了導入導出Excel的功能&#xff0c;于是決定封裝一個ExcelUtil類&#xff0c;專門用來處理Excel的導入和導出 本項目的持久化層用的是JPA&#xff08;底層用hibernate實現&#xff09;&#xff0c;所以導入和導出也…

郁金香匯編代碼注入怎么寫看雪_世界黑客編程大賽冠軍的匯編代碼 你見過嗎?...

前幾天發布了一篇“雷軍22年前寫的匯編代碼”的文章&#xff0c;引起網友的熱議。有人說匯編是最牛逼的編程語言&#xff0c;沒有之一。匯編語言確實厲害&#xff0c;不知道你有沒有見過世界黑客編程大賽冠軍的作品?雷軍編寫的的匯編代碼有 網友分享了97年Mekka ’97 4K Intro…

變位齒輪重合度計算公式_齒輪“模數”是如何計算的?

模數是決定齒輪大小的因素。齒輪模數被定義為模數制輪齒的一個基本參數&#xff0c;是人為抽象出來用以度量輪齒規模的數。目的是標準化齒輪刀具&#xff0c;減少成本。直齒、斜齒和圓錐齒齒輪的模數皆可參考標準模數系列表。工業定義&#xff1a;齒輪的分度圓是設計、計算齒輪…

c語言改錯和填空能運行嗎,C語言改錯填空編程

改錯題1、在考生文件夾下&#xff0c;給定程序MODI.C的功能是&#xff1a;從低位開始取出長整型變量s中奇數位上的數&#xff0c;依次構成一個新數放在t中。例如&#xff0c;當s中的數為&#xff1a;7654321時&#xff0c;t中的數為&#xff1a;7531。請修改并運行該程序&#…