




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第5章數(shù)組5.1一維數(shù)組二維數(shù)組5.2字符數(shù)組和字符串5.3本章內(nèi)容導(dǎo)讀本章主要介紹一維數(shù)組和二維數(shù)組的定義、初始化和數(shù)組元素的引用方法,同時介紹字符數(shù)組和字符串的處理方法。通過學(xué)習(xí)本章,讀者應(yīng)掌握以下內(nèi)容:掌握一維數(shù)組、二維數(shù)組、字符數(shù)組的定義、初始化和數(shù)組元素的引用方法;掌握字符串的存儲和處理方法;掌握常用的處理字符、字符串的庫函數(shù)的使用方法。數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),處于這種結(jié)構(gòu)中的變量具有相同的性質(zhì),并按一定的順序排列。數(shù)組的定義:
數(shù)據(jù)類型數(shù)組名[數(shù)組長度];
a[0]0145a[1]a[2]a[3]a[4]a[5]23a數(shù)組元素(下標(biāo)變量)數(shù)組中的每個分量,用下標(biāo)來表示其所處位置,各分量排列有序且數(shù)據(jù)類型相同。數(shù)組元素的表示:數(shù)組名[下標(biāo)]
數(shù)組名表示數(shù)組存儲區(qū)域的首地址,數(shù)組的首地址也就是第一個元素的地址,是一個地址常量,不能向它賦值。例如:a或&a[0]下標(biāo)用來表示該數(shù)組元素在數(shù)組中相對位置,是整型常量,最小值為0,最大值為數(shù)組長度-1。例如a[3]中的下標(biāo)35.1一維數(shù)組定義
一維數(shù)組是只有一個下標(biāo)的數(shù)組,數(shù)組同變量一樣,也必須先定義后使用。例如inta[6];
數(shù)據(jù)類型符數(shù)組名1[長度1],數(shù)組名2[長度2],…;說明(1)“數(shù)據(jù)類型符”是指數(shù)組元素的數(shù)據(jù)類型,數(shù)據(jù)類型可以是任何基本類型。(2)數(shù)組名,與變量名一樣,必須遵循標(biāo)識符命名規(guī)則。(3)數(shù)組長度是用常量表達(dá)式來表示數(shù)組元素的個數(shù),它是一個整型值,其中可以包含常數(shù)和符號常量,但不能出現(xiàn)變量。(4)數(shù)組名中存放的是一個地址常量,它代表整個數(shù)組的首地址。同一數(shù)組中的所有元素,按其下標(biāo)的順序占用一段連續(xù)的存儲單元。(5)數(shù)組元素的下標(biāo),是元素相對于數(shù)組首地址或起始地址的偏移量,所以從0開始順序編號。(6)一個數(shù)組定義語句中可以只定義一個數(shù)組,也可以定義多個數(shù)組,還可以同時定義數(shù)組和變量。
1、一維數(shù)組的定義5.1一維數(shù)組引用形式數(shù)組名[下標(biāo)表達(dá)式]說明(1)“下標(biāo)表達(dá)式”可以是一個整型常量、整型變量或整型表達(dá)式,取值范圍是0至(元素個數(shù)-1)。
注意:在運(yùn)行C語言程序時,系統(tǒng)不自動檢驗(yàn)數(shù)組元素的下標(biāo)是否越界。因此在編寫程序時,保證數(shù)組下標(biāo)不越界十分重要。(2)一個數(shù)組元素,實(shí)質(zhì)上是一個變量,它具有和相同類型單個變量一樣的屬性,可以進(jìn)行賦值和參與各種運(yùn)算。(3)C語言中,數(shù)組作為一個整體,不能參加數(shù)據(jù)運(yùn)算,只能對單個的元素進(jìn)行處理。2、一維數(shù)組元素的引用5.1一維數(shù)組格式數(shù)據(jù)類型符數(shù)組名[長度]={初值表},…;說明(1)如果對數(shù)組的全部元素賦以初值,定義時可以不指定數(shù)組長度(系統(tǒng)根據(jù)初值個數(shù)自動確定)。如果被定義數(shù)組的長度,與初值個數(shù)不同,則數(shù)組長度不能省略。(2)“初值表”中的初值個數(shù),可以少于元素個數(shù),即允許只給部分元素賦初值。若只對數(shù)組的前若干個元素賦初值,則沒有給出初值的元素均有默認(rèn)的初值。對于數(shù)值型數(shù)組默認(rèn)的初值為0;對于字符型數(shù)組,默認(rèn)的初值為空字符'\0'(ASCII碼值為0)。3、一維數(shù)組的初始化5.1一維數(shù)組給一維數(shù)組的全部元素賦初值給一維數(shù)組的部分元素賦初值初值的個數(shù)不能超過一維數(shù)組元素的個數(shù)給一維數(shù)組的全部元素賦初值時允許省略數(shù)組長度的說明注意:①數(shù)組長度可省略,賦初值時系統(tǒng)自動分配。②花括號中的常量個數(shù)小于數(shù)組長度,相應(yīng)賦值后,其余賦0。③若數(shù)組長度小于初值個數(shù),則編譯錯誤。
inta[]={0,1,2,3,4,5,6,7,8,9};inta[10]={0,1,2,3,4,5,6,7,8,9};inta[10]={0,1,2,3,4};inta[4]={1,2,3,4,5};【例5-1】利用冒泡排序法對一維數(shù)組的n個整數(shù)從小到大排序?;舅枷耄和ㄟ^相鄰兩個數(shù)之間的比較和交換,使數(shù)值較小的數(shù)據(jù)逐漸從底部移向頂部,數(shù)值較大的數(shù)逐漸從頂部移向底部。就像水底的氣泡一樣逐漸向上冒,故而得名。排序過程:設(shè)有n個數(shù)據(jù),存放到a[1]到a[n]的n個數(shù)組元素中。(1)從a[1]到a[n],依次把兩個相鄰元素兩兩比較,即a[1]與a[2]比,a[2]與a[3]比,…,a[n-1]與a[n]比;(2)每次兩相鄰元素比較后,若前一個元素值比后一個元素值大,則交換兩元素值;否則,不交換。(3)重復(fù)上述算法,把a(bǔ)[1]到a[n]中的最大值換到a[n],再把a(bǔ)[1]到a[n-1]中最大值換到a[n-1],……最后把a(bǔ)[1]到a[2]中最大值換到a[2]中,即完成排序。#include<stdio.h>intmain(void){int
i,j,k,n,temp,a[200];
printf("Inputnumbers:\n");
scanf("%d",&n);/*從鍵盤輸入待排序的數(shù)據(jù)個數(shù)n<200*/for(k=1;k<=n;k++)
scanf("%d",&a[k]);/*利用for循環(huán)依次從鍵盤輸入待排序的數(shù)據(jù)*/for(i=1;i<=n-1;i++)/*外層循環(huán),變量i控制排序總共進(jìn)行n-1輪*/
for(j=n;j>=i+1;j--)/*內(nèi)層循環(huán),變量j控制每輪進(jìn)行比較的次數(shù)是n-i*/
if(a[j]<a[j-1])
{temp=a[j];a[j]=a[j-1];a[j-1]=temp;}/*相鄰兩個元素比較,若前大后小則交換*/for(k=1;k<=n;k++)
printf("%d",a[k]);/*利用for循環(huán)依次輸出排序結(jié)果*/return0;}【例5-2】利用選擇排序法對一維數(shù)組的n個整數(shù)從小到大排序?;舅悸罚涸诿恳惠啽容^中不是每當(dāng)a[i]<a[j]時就交換,而是用一個變量k記下其中值較小的元素的下標(biāo)值,在a[i]與a[i+1]到a[n]全部進(jìn)行比較后,只將a[i]與a[i+1]到a[n]中值最小的那個元素進(jìn)行交換,為此每一輪只需將a[i]與a[k]的值交換即可。#include<stdio.h>intmain(void){
int
i,j,temp,k,n,a[200];
printf("Inputnumbers:\n");
scanf("%d",&n);/*從鍵盤輸入待排序的數(shù)據(jù)個數(shù)n<200*/for(i=0;i<n;i++)
scanf("%d",&a[i]);/*利用for循環(huán)依次從鍵盤輸入待排序的數(shù)據(jù)*/for(i=0;i<n-1;i++)/*外層循環(huán),變量i控制排序總共進(jìn)行n-1輪*/{k=i;
for(j=i+1;j<n;j++)/*內(nèi)層循環(huán),變量j控制每輪進(jìn)行比較的次數(shù)*/
if(a[j]<a[k])k=j;/*k記錄每輪比較中的最小數(shù)的下標(biāo)*/
if(k!=i)
{temp=a[i];a[i]=a[k];a[k]=temp;}/*將第i輪的最小數(shù)與a[i]交換*/}
printf("thesortednumbers:\n");for(i=0;i<n;i++)printf("%d",a[i]);/*利用for循環(huán)依次輸出排序結(jié)果*/return0;}定義格式
數(shù)據(jù)類型符數(shù)組名[行長度][列長度];例:inta[3][4];
a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]014523a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[0][0]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[1][2]67101189a[0]a[1]a[2]第0行第1行第2行存儲結(jié)構(gòu):以行為主序方式存放。二維數(shù)組長度=行長度*列長度
邏輯結(jié)構(gòu)
第0列第1列第2列第3列5.2二維數(shù)組1、二維數(shù)組的定義
引用形式數(shù)組名[行下標(biāo)][列下標(biāo)]
行號列號說明(1)“行下標(biāo)”和“列下標(biāo)”可以是整型常量、整型變量、整型表達(dá)式或符號常量。(2)“行下標(biāo)”和“列下標(biāo)”的值,都應(yīng)在已定義數(shù)組大小的范圍內(nèi)。例如數(shù)組x[3][4],則可用的行下標(biāo)范圍為0~2,列下標(biāo)范圍為0~3。2、二維數(shù)組元素的引用5.2二維數(shù)組直述型:將所有常量寫在一個花括號內(nèi),各個常量之間用逗號分開,按數(shù)組元素存儲的順序?qū)Ω髟刭x初值。inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};分列型:用花括號嵌套,即每一組一維數(shù)組的初值數(shù)據(jù)再用一對花括號括起。注意:若對全部元素都賦初值,第一維長度可省略,但第二維長度不能省。inta[3][4]={{1},{5},{9}};inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};3、二維數(shù)組的初始化5.2二維數(shù)組【例5-3】輸入一個3*3的數(shù)組,將其行和列互換。#include<stdio.h>intmain(void){
int
i,j,b[3][3];staticinta[3][3]={{1,2,3},{4,5,6},{7,8,9}};for(i=0;i<=2;i++)for(j=0;j<=2;j++)b[j][i]=a[i][j];for(i=0;i<=2;i++){for(j=0;j<=2;j++)
printf("%d",b[i][j]);
printf("\n");}return0;}47258369【例5-4】求矩陣A與B乘積C。#include<stdio.h>intmain(void){int
i,j,k,m=2,n=3,p=2;staticinta[2][3]={{6,8,7},{3,4,5}};staticintb[3][2]={{1,2},{2,1},{-1,0}};staticintc[2][2]={{0,0},{0,0}};for(i=0;i<m;i++)for(j=0;j<p;j++){c[i][j]=0;for(k=0;k<n;k++)c[i][j]=c[i][j]+a[i][k]*b[k][j];}for(i=0;i<m;i++){for(j=0;j<p;j++)
printf("%d",c[i][j]);
printf("\n");}return0;}1520610一維字符數(shù)組的定義
char數(shù)組名[數(shù)組長度]={初值表};charc[10];二維字符數(shù)組的定義char數(shù)組名[行長度][列長度]={{初值表},{初值表},…,{初值表}};5.3字符數(shù)組和字符串1、字符數(shù)組的定義和初始化用字符常量對字符數(shù)組進(jìn)行初始化charstr[8]={'p','r','o','g','r','a','m','\0'};charstr[8]={112,114,111,103,114,97,109,0};用字符的ASCII碼值對字符數(shù)組進(jìn)行初始化用字符串對字符數(shù)組進(jìn)行初始化charstr[]="program";charstr[]={"program"};
注意:只能在定義時賦初值,不能在語句中直接將一個字符串賦給一個字符數(shù)組,可用strcpy()實(shí)現(xiàn)將一個字符串賦給另一個字符數(shù)組。
int
qus[19];qus[]="What'syourname?";1、字符數(shù)組的定義和初始化5.3字符數(shù)組和字符串字符數(shù)組的輸入除了可以通過初始化使字符數(shù)組各元素獲得初值外,也可使用getchar()或scanf()函數(shù)輸入字符。例如charstr[10];
for(i=0;i<10;i++)
scanf("%c",&str[i]);2、字符數(shù)組的輸入和輸出5.3字符數(shù)組和字符串字符數(shù)組的輸出字符數(shù)組的輸出,可以用putchar()或printf()函數(shù)。例如charstr[10]="clanguage";
for(i=0;i<10;i++)printf("%c",str[i]);
printf("\n");
注意:逐個字符輸入、輸出時需要給出元素的下標(biāo),而且使用%c格式符。另外,從鍵盤上輸入字符時,無需輸入字符的定界符──單引號;輸出時,系統(tǒng)也不輸出字符的定界符。2、字符數(shù)組的輸入和輸出5.3字符數(shù)組和字符串逐個字符的輸入和輸出scanf("%c",&ch);printf("%c",ch);ch=getchar();putchar(ch);
3、字符串5.3字符數(shù)組和字符串【例5-5】逐個字符輸入輸出。#include<stdio.h>intmain(void){inti;charstr[10];for(i=0;i<9;i++)scanf("%c",&str[i]);
str[i]='\0';for(i=0;i<9;i++)printf("%c",str[i]);return0;}123456789123456789str[i]=getchar();putchar(str[i]);字符串的整體輸入和輸出scanf("%s",字符數(shù)組名);注意:輸入時自動加'\0'。printf("%s",字符數(shù)組名);charc[]={"China"};printf("%s",c);輸出:Chinacharc[]={"China"};printf("%s",c[0]);charstr[13];scanf("%s",str);輸入:Howareyou<CR>charstr[13];scanf("%s",&str);charstr1[5],str2[5],str3[5];scanf("%s%s%s",str1,str2,str3);輸入:Howareyou<CR>整行輸入和輸出gets(str);注意:讀入由鍵盤輸入的字符(包括空格),直至換行符為止(換行符不存入)。puts(str);注意:把字符串的內(nèi)容顯示在屏幕上。charstr[]={"China\nBeijing"};puts(str);輸出:ChinaBeijing3、字符串5.3字符數(shù)組和字符串在使用以下字符串處理的庫函數(shù)時應(yīng)在源程序中包含頭文件“string.h”。字符串輸入函數(shù)gets()調(diào)用格式
gets(字符數(shù)組名)功能:從標(biāo)準(zhǔn)輸入設(shè)備即鍵盤上讀取一個字符串(可以包含空格,僅以回車換行符作為結(jié)束標(biāo)志),并將其存儲到指定的字符數(shù)組中。說明(1)gets()函數(shù)讀取的字符串的長度沒有限制,編程者應(yīng)保證字符數(shù)組有足夠大的空間,存放輸入的字符串。(2)gets()函數(shù)和使用%s格式的scanf()函數(shù)都可以從鍵盤輸入字符串,但兩者是有區(qū)別的。對于scanf()函數(shù),回車換行符和空格符都看成是輸入字符串的結(jié)束標(biāo)志;對于gets()函數(shù)輸入的字符串中允許包含空格,只有回車換行符才看作是輸入字符串的結(jié)束標(biāo)志。4、字符串處理的常用庫函數(shù)5.3字符數(shù)組和字符串字符串輸出函數(shù)puts()調(diào)用格式puts(字符數(shù)組名)功能:把字符數(shù)組中所存放的字符串,輸出到標(biāo)準(zhǔn)輸出設(shè)備中去,并用'\n'取代字符串的結(jié)束標(biāo)志'\0'。所以用puts()函數(shù)輸出字符串時,不要求另加換行符。說明(1)字符串中允許包含轉(zhuǎn)義字符,輸出時產(chǎn)生一個控制操作。(2)puts()函數(shù)和使用%s格式的printf()函數(shù)都可以輸出字符串,但兩者是有區(qū)別的。對于printf()函數(shù),不輸出字符串結(jié)束標(biāo)志符;對于puts()函數(shù),字符串結(jié)束標(biāo)志符轉(zhuǎn)換為回車換行符輸出。此外,puts()函數(shù)一次只能輸出一個字符串,而printf()函數(shù)用來輸出字符串時一次可以輸出多個。4、字符串處理的常用庫函數(shù)5.3字符數(shù)組和字符串字符串比函數(shù)strcmp()調(diào)用格式
strcmp(字符串1,字符串2)參數(shù):“字符串1”和“字符串2”可以是字符串常量,也可以是已經(jīng)存放字符串的字符數(shù)組名。功能:比較兩個字符串的大小。
如果字符串1=字符串2,函數(shù)返回值是0;
如果字符串1<字符串2,函數(shù)返回值是負(fù)整數(shù);
如果字符串1>字符串2,函數(shù)返回值是正整數(shù)。說明(1)如果一個字符串是另一個字符串從頭開始的子串,則母串為大。(2)不能使用關(guān)系運(yùn)算符==比較兩個字符串,只能用strcmp()函數(shù)處理。4、字符串處理的常用庫函數(shù)5.3字符數(shù)組和字符串strcmp(str1,str2);strcmp("China","Korea");strcmp(str1,"Beijing");字符串復(fù)制函數(shù)strcpy()調(diào)用格式
strcpy(字符數(shù)組名,字符串[,整型表達(dá)式])參數(shù):字符數(shù)組”是已經(jīng)定義的字符數(shù)組名;“字符串”可以是字符串常量,也可以是已經(jīng)存放字符串的字符數(shù)組名;“整型表達(dá)式”可以是任何整型表達(dá)式,這一參數(shù)也可以省略。功能:將“字符串”的前“整型表達(dá)式”個字符組成新的字符串復(fù)制到“字符數(shù)組”中。若省略“整型表達(dá)式”,則將“字符串”完整地復(fù)制到“字符數(shù)組”中,字符數(shù)組的原有內(nèi)容被覆蓋。說明(1)字符數(shù)組必須定義得足夠大,以便容納復(fù)制過來的字符串。復(fù)制時,連同結(jié)束標(biāo)志'0'一起復(fù)制。(2)不能用賦值運(yùn)算符=將一個字符串直接賦值給一個字符數(shù)組,只能用strcpy()函數(shù)處理。4、字符串處理的常用庫函數(shù)5.3字符數(shù)組和字符串charstr1[10],str2[]={"China"};strcpy(str1,str2);字符串連接函數(shù)strcat()調(diào)用格式
strcat(字符數(shù)組名,字符串)功能:把“字符串”連接到“字符數(shù)組”中字符串的尾端(最后一個有效字符的后面),組成新的字符串并存儲到“字符數(shù)組”?!白址麛?shù)組”中原來的結(jié)束標(biāo)志,被“字符串”的第一個字符覆蓋,而“字符串”在操作中未被修改。返回值:字符數(shù)組的首地址。說明(1)由于沒有邊界檢查,編程者要注意“字符數(shù)組”定義得足夠大,以便容納連接后的目標(biāo)字符串;否則會因長度不夠而產(chǎn)生問題。(2)連接前兩個字符串都有結(jié)束標(biāo)志'0',連接后“字符數(shù)組”中存儲的字符串的結(jié)束標(biāo)志'0'被舍棄,只在目標(biāo)串的最后保留一個'0'。4、字符串處理的常用庫函數(shù)5.3
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6《比例尺》大單元整體設(shè)計(教學(xué)設(shè)計)-2024-2025學(xué)年六年級上冊數(shù)學(xué)冀教版
- 2023二年級數(shù)學(xué)上冊 七 分一分與除法第4課時 分香蕉配套教學(xué)設(shè)計 北師大版
- 2023三年級數(shù)學(xué)上冊 二 觀察物體第1課時 看一看(一)教學(xué)設(shè)計 北師大版
- 畢業(yè)論文課題答辯匯報
- 7 中華民族一家親 第一課時 (教學(xué)設(shè)計)-部編版道德與法治五年級上冊
- Unit5 Drink Lesson 1(教學(xué)設(shè)計)-2023-2024學(xué)年人教新起點(diǎn)版英語一年級下冊
- 胰體尾脾切除護(hù)理
- Unit 3 Lesson 2教學(xué)設(shè)計 2024-2025學(xué)年冀教版(2024)七年級英語上冊
- 2024秋九年級化學(xué)上冊 第三單元 物質(zhì)構(gòu)成的奧秘 課題2 原子的結(jié)構(gòu)第2課時 原子核外電子的排布 離子教學(xué)設(shè)計(新版)新人教版
- 6《騎鵝旅行記(節(jié)選)》教學(xué)設(shè)計-2023-2024學(xué)年統(tǒng)編版語文六年級下冊
- 安徽省蚌埠市2025屆高三第二次教學(xué)質(zhì)量檢查考試英語試卷(含答案)
- 金氏五行升降中醫(yī)方集
- 小兒常見皮疹識別與護(hù)理
- 補(bǔ)充協(xié)議-房屋租賃承租方變更
- 2025年山西經(jīng)貿(mào)職業(yè)學(xué)院單招職業(yè)技能考試題庫新版
- 某連鎖藥店公司發(fā)展戰(zhàn)略
- 2025年河南工業(yè)和信息化職業(yè)學(xué)院單招職業(yè)技能測試題庫及答案1套
- 跌倒護(hù)理RCA案例匯報
- 利用DeepSeek優(yōu)化水資源管理
- DeepSeek人工智能語言模型探索AI世界科普課件
- 《迪拜帆船酒店》課件
評論
0/150
提交評論