譚浩強(qiáng)C程序設(shè)計(jì)完整版第5章課件_第1頁(yè)
譚浩強(qiáng)C程序設(shè)計(jì)完整版第5章課件_第2頁(yè)
譚浩強(qiáng)C程序設(shè)計(jì)完整版第5章課件_第3頁(yè)
譚浩強(qiáng)C程序設(shè)計(jì)完整版第5章課件_第4頁(yè)
譚浩強(qiáng)C程序設(shè)計(jì)完整版第5章課件_第5頁(yè)
已閱讀5頁(yè),還剩36頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第五章

數(shù)組本章目錄

5.1一維數(shù)組

5.2二維數(shù)組

5.3字符數(shù)組和字符串

5.4程序舉例

5.1一維數(shù)組

數(shù)組是有序數(shù)據(jù)的集合。數(shù)組中的每一個(gè)元素都屬于同一個(gè)數(shù)據(jù)類型。用一個(gè)統(tǒng)一的數(shù)組名和下標(biāo)來(lái)唯一地確定數(shù)組中的元素。5.1.1一維數(shù)組的定義使用數(shù)組使應(yīng)注意如下幾點(diǎn):1.數(shù)組名的命名規(guī)則同變量,用標(biāo)識(shí)符表示。2.常量表達(dá)式表示數(shù)組中元素的個(gè)數(shù),即數(shù)組的長(zhǎng)度。3.常量表達(dá)式只能用方括號(hào)括起來(lái)。常量表達(dá)式的值一定是正的整形常量表達(dá)式,可以是常量、符號(hào)常量,但不能包含變量,即不允許對(duì)數(shù)組的長(zhǎng)度作動(dòng)態(tài)的定義。例如,下面對(duì)數(shù)組的定義是不允許的:

intn;inta[n];4.相同類型的變量和數(shù)組可以共用一個(gè)類型說(shuō)明符,它們之間用逗號(hào)分隔開,如:floata,c[10];5.數(shù)組名代表該數(shù)組在內(nèi)存中的起始地址。如inta[4];一個(gè)整型變量在內(nèi)存中占2個(gè)字節(jié),編譯系統(tǒng)為數(shù)組a開辟連續(xù)8個(gè)字節(jié)的存儲(chǔ)空間,a,&a[0]都表示數(shù)組a的起始地址(首地址)。5.1.2一維數(shù)組的引用

數(shù)組應(yīng)先定義,然后才能使用。C語(yǔ)言中,只能逐個(gè)引用數(shù)組的元素,而不能整體引用數(shù)組。數(shù)組元素的表示形式為:數(shù)組名[下標(biāo)]其中:下標(biāo)可以是整形常量、整形變量及其表達(dá)式。C語(yǔ)言中的下標(biāo)從0起始,當(dāng)數(shù)組的長(zhǎng)度為n時(shí),下標(biāo)的取值范圍為0,1,2,…,n-1。下標(biāo)的值不能超過數(shù)組長(zhǎng)度5.1.2一維數(shù)組的引用例5.1輸入10個(gè)整數(shù),求其中的最大值main(){inta[10],i,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("max=%d\n",max);}輸入2398-67130-3106-73874從上例看出數(shù)組元素只能逐個(gè)賦初值,比較的時(shí)候也是逐個(gè)進(jìn)行比較,通過數(shù)組的下標(biāo)來(lái)區(qū)分?jǐn)?shù)組元素。運(yùn)行結(jié)果:5.1.3一維數(shù)組的初始化

數(shù)組元素的賦初值和普通變量一樣,數(shù)組初始化的一般形式如下:數(shù)據(jù)類型數(shù)組名[常量表達(dá)式]={初值表};對(duì)數(shù)組元素的賦初值有下面幾種情況:1.一維數(shù)組可以在定義時(shí)可以對(duì)全部數(shù)組元素進(jìn)行初始化,數(shù)據(jù)間用逗號(hào)隔開。例如:

inta[6]={1,3,5,7,9,11};經(jīng)過上述初始化后,a[0]=1,a[1]=3,a[2]=5,a[3]=7,a[4]=9,a[5]=11。在這種情況下,數(shù)組長(zhǎng)度可以省略,即inta[]={1,3,5,7,9,11};5.1.4一維數(shù)組的應(yīng)用例5.2利用數(shù)組求Fibonacci數(shù)列問題程序如下:main(){inti;intf[20]={1,1};for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if(i%5==0)printf("\n");printf("%8d",f[i]);}}運(yùn)行結(jié)果:5.1.4一維數(shù)組的應(yīng)用#include<stdio.h>main(){inta[9],i,j,t;printf("Input8numbers:\n");for(i=1;i<9;i++)scanf("%d",&a[i]);printf("\n");for(j=1;j<=7;j++)for(i=1;i<=8-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumbers:\n");for(i=1;i<9;i++) printf("%d",a[i]);}

運(yùn)行結(jié)果:5.2二維數(shù)組例如:

inta[3][4];此定義說(shuō)明數(shù)組a為3行4列,共有12個(gè)元素,每個(gè)元素都是整型。定義完二維數(shù)組后編譯系統(tǒng)會(huì)為數(shù)組開辟一連串的存儲(chǔ)空間,二維數(shù)組是按行存放即先放第0行的元素,之后是第1行....注意:二維數(shù)組元素的寫法必須是用[]括起來(lái)。5.2.2二維數(shù)組的引用二維數(shù)組元素的引用形式如下:數(shù)組名[下標(biāo)1][下標(biāo)2]下標(biāo)可以是整型常量、整型變量或整型表達(dá)式。例如:inta[6];a[2]=a[1]+5;a[i]=a[i-1]+a[i-2];5.2.3二維數(shù)組的初始化●

與一維數(shù)組類似,對(duì)二維數(shù)組進(jìn)行初始化的方法有如下幾種:1.按行給二維數(shù)組進(jìn)行初始化,每一行用一對(duì)花括號(hào)括起來(lái)。例如:

inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};2.將所有的元素按順序放置于一個(gè)花括號(hào)內(nèi)。如:

inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};編譯系統(tǒng)自動(dòng)先對(duì)行進(jìn)行排列,在對(duì)列進(jìn)行排序,結(jié)果和第一種是一樣的。3.可以只對(duì)部分元素賦初值。如:

inta[3][4]={{1,2,3},{4,5},{6,7,8,9}};未給出值的元素為0。4.如果對(duì)所有元素都賦值,可以省略第一維的長(zhǎng)度。例如:

inta[][4]={1,28,13,54,50,69,27,48,39,24,56,7};系統(tǒng)將根據(jù)第二維的長(zhǎng)度對(duì)數(shù)據(jù)進(jìn)行分配,每行4列,共3行。若只對(duì)部分元素賦初值,并且省略第一維的長(zhǎng)度,則必須分行賦初值。例如:inta[][4]={{1,3},{4,6,8},{7}};5.2.4二維數(shù)組的應(yīng)用例5.3二維數(shù)組的輸入輸出main(){inti,j,a[3][3];for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++)for(j=0;j<3;j++)printf("%3d",a[i][j]);}輸入123456789運(yùn)行結(jié)果例5.4求3×3矩陣主對(duì)角線之和#include<stdio.h>main(){inta[3][3],i,j,sum=0;for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++)for(j=0;j<3;j++)if(i==j)sum=sum+a[i][j];printf("sum=%d\n",sum);}輸入數(shù)據(jù)123456789運(yùn)行結(jié)果:5.2.4二維數(shù)組的應(yīng)用5.3.1字符數(shù)組的定義

字符數(shù)組的定義與普通數(shù)組類似,形式為:類型說(shuō)明符數(shù)組名[常量表達(dá)式];其中,char是字符型數(shù)據(jù)類型說(shuō)明符,常量表達(dá)式表示數(shù)組的元素的個(gè)數(shù),即數(shù)組的長(zhǎng)度,字符數(shù)組的每一個(gè)元素存放一個(gè)字符。例如:charc[5];定義字符數(shù)組c包含5個(gè)元素即5個(gè)字符,或者存放一個(gè)長(zhǎng)度不大于5的字符串。字符數(shù)組同樣有二維和多維的,如:charc[3][4];定義了一個(gè)3行4列的字符數(shù)組。5.3.2字符數(shù)組的初始化字符數(shù)組的初始化與普通數(shù)組相似,可以采用如下方式:1.依次對(duì)全部元素進(jìn)行賦值。如:

charc[5]={'C’,’H’,’I’,’N’,’A’};2.對(duì)部分元素進(jìn)行賦值。如:

charc[15]={'c’,’h’,’i’,’n’,’a’};將5個(gè)字符賦給數(shù)組的前5個(gè)元素,其余的元素自動(dòng)定為空字符(即’\0’)。3.同樣我們可以定義二位數(shù)組,如:

Charc[3][5]={{'r’,'e’,’d’},{'g’,’r’,’e’,’e’,'n’},{'b’,’l’,’u’,’e'}};4.以字符串常量的形式對(duì)字符數(shù)組賦初值。如:

chars[]={"CHINA"};大括號(hào)可以省略,由于“CHINA”是一個(gè)字符串,編譯系統(tǒng)自動(dòng)在最后一個(gè)字符的后面加上’\n’,并把它一起存到字符數(shù)組中,所以數(shù)組s的實(shí)際長(zhǎng)度是6個(gè)字節(jié),而不是看上去的5個(gè)字節(jié)。初始化后的數(shù)組s如下:CHINA\n5.3.4字符數(shù)組的引用

引用字符數(shù)組中的一個(gè)元素,可以得到一個(gè)字符。例5.5輸出一個(gè)字符串。#include<stdio.h>main(){inti;charc[12]={'a','','C','','p','r','o','g','r','a','m','!'};for(i=0;i<12;i++)printf("%c",c[i]);printf("\n");}運(yùn)行結(jié)果見圖5.5:圖5.55.3.4字符串及其常用函數(shù)字符串是用雙括號(hào)括起來(lái)的字符序列。在C語(yǔ)言中,沒有專門的字符串變量,而在實(shí)際的編程工作中,字符串的應(yīng)用又非常廣泛,如:人的姓名、身份證號(hào)碼、產(chǎn)品編號(hào)等,為了解決這個(gè)問題,我們使用字符數(shù)組來(lái)存放和處理字符串。1.字符串的表示方式字符數(shù)組的長(zhǎng)度和字符串的有效長(zhǎng)度很多時(shí)候是不同的,而人們往往關(guān)心的是字符串的有效長(zhǎng)度,為此,C語(yǔ)言規(guī)定以’\0’作為字符串的結(jié)束標(biāo)志,當(dāng)遇到’\0’時(shí),表示字符串結(jié)束。系統(tǒng)對(duì)字符串常量也自動(dòng)加一個(gè)’\0’作為結(jié)束標(biāo)志。例如字符串“student”有7個(gè)字符,在內(nèi)存卻要占用8個(gè)字節(jié),因?yàn)樽詈笠粋€(gè)字節(jié)用來(lái)存放字符’\0’。從ASCII碼表中可以查到,‘\0’的ASCII碼為0,它不是一個(gè)可以顯示的字符,在字符串中僅作為字符串的結(jié)束標(biāo)志。C語(yǔ)言規(guī)定,用scanf輸入字符串時(shí),以空格或回車鍵作為字符串的分隔符,因此若輸入的字符串中包含空格,將只把空格前的部分字符賦給數(shù)組。例如:chars[20];scanf(“%s”,s);若輸入Thisisacomputer.則系統(tǒng)只將“This”作為一個(gè)字符串輸入。若要輸入上述完整的字符串,應(yīng)定義四個(gè)數(shù)組,并輸入四個(gè)字符串:chars1[5],s2[3],s3[2],s4[9];scanf(“%s%s%s%s”,s1,s2,s3,s4);5.3.4字符串及其常用函數(shù)例5.6輸入一個(gè)字符串,統(tǒng)計(jì)字符串的有效長(zhǎng)度。5.3.4字符串及其常用函數(shù)#include<stdio.h>main(){chars[80];inti=0,num=0;scanf("%s",s);while(s[i]!='\0'){num++;i++;}printf("%s",s);printf("\n");printf("num=%d\n",num);}輸入字符串hellobeijing運(yùn)行結(jié)果:由于輸入的字符串中包含有一個(gè)空格,所以系統(tǒng)將其作為兩個(gè)字符串,字符數(shù)組s只接收了空格前面的部分。5.3.4字符串及其常用函數(shù)

3.常用的字符串處理函數(shù)

C語(yǔ)言的函數(shù)庫(kù)中提供有處理字符串的函數(shù),這些函數(shù)方便了字符串的處理,提高了編程效率。常用的有如下幾個(gè)。這些函數(shù)在使用的時(shí)候,應(yīng)使用#include命令,將<string.h>頭文件包含到源程序中。1)字符串輸入函數(shù)gets()

調(diào)用格式:gets(str);gets()函數(shù)的作用:從終端讀入一個(gè)字符串到字符數(shù)組。該函數(shù)可以讀入空格,遇回車結(jié)束輸入,函數(shù)的返回值是字符數(shù)組的起始地址。通常我們利用該函數(shù)把一字符串放進(jìn)字符數(shù)組中,不關(guān)心他的返回值。例如:

charstr[10];gets(str);

5.3.4字符串及其常用函數(shù)3)字符串比較函數(shù)strcmp()

調(diào)用格式為:strcmp(str1,str2)。函數(shù)中的參數(shù)可以是字符數(shù)組也可以是字符串。

strcmp()函數(shù)的作用是比較兩個(gè)字符串。字符串的比較規(guī)則是將兩個(gè)字符串的對(duì)應(yīng)字符逐個(gè)進(jìn)行比較(按ASCII碼的大小比較),直到出現(xiàn)不同的字符或遇到’\0’為止。若所有對(duì)應(yīng)的字符都相等,則認(rèn)為兩個(gè)字符串相等,否則,以第一個(gè)不相等的字符的比較結(jié)果作為整個(gè)字符串的比較結(jié)果。比較的結(jié)果由函數(shù)值帶回。例如:strcmp(s1,s2);strcmp("Beijing","Shanghai");strcmp(s1,"China");

5.3.4字符串及其常用函數(shù)比較的結(jié)果由函數(shù)值帶回。(1)如果str1等于str2,函數(shù)值為0。(2)如果str1大于str2,函數(shù)值為一個(gè)正整數(shù)(第一個(gè)不相同字符的ASCII碼值之差)。(3)如果str1小于str2,函數(shù)值為一個(gè)負(fù)整數(shù)。請(qǐng)注意:比較兩個(gè)字符串是否相等時(shí),不能用關(guān)系運(yùn)算符作比較,只能用strcmp()函數(shù)。不能采用以下形式:

if(str1==str2)……而只能用

if(strcmp(str1,str2)==0)……;5.3.4字符串及其常用函數(shù)4)字符串連接函數(shù):strcat()調(diào)用格式:strcat(str1,str2)。strcat()作用是將字符串str2連接到字符串str1后面,結(jié)果放在字符串str1中。例如有如下程序段:chars1[14]="China",s2[]="Beijing";strcat(s1,s2);printf("%s",s1);輸出結(jié)果為:ChinaBeijing需注意的是使用strcat函數(shù)時(shí),str1應(yīng)足夠大,以便能容納連接后的新字符串。5.3.4字符串及其常用函數(shù)5)字符串拷貝(復(fù)制)函數(shù)調(diào)用格式:strcpy(str1,str2),strcpy(str1,str2,n)strcpy()函數(shù)的作用是將字符串str2拷貝到str1中,也可以將str2中的前n個(gè)字符復(fù)制到數(shù)組str1中。例如有下面程序段:chars1[8],s2[]="China";s3[8];strcpy(s1,s2);/*全部復(fù)制*/puts(s1);strcpy(s3,s2,2);/*只是將str2中前2個(gè)字符復(fù)制到str3中,最后加上字符串結(jié)束標(biāo)志*/puts(s1);程序段的輸出結(jié)果是:Chinach5.3.4字符串及其常用函數(shù)使用時(shí)需注意:(1)str1的長(zhǎng)度應(yīng)大于或等于str2的長(zhǎng)度,以便容納被復(fù)制的字符串。(2)str1必須寫成數(shù)組名的形式,str2可以是數(shù)組名,也可以是一個(gè)字符串常量。(3)執(zhí)行strcpy函數(shù)后,str1中原來(lái)的內(nèi)容將被str2的內(nèi)容(或字符串)所代替。6)字符串長(zhǎng)度函數(shù):strlen()調(diào)用格式:strlen(str)。strlen()函數(shù)的作用是取得字符串的長(zhǎng)度,函數(shù)值為字符串的實(shí)際長(zhǎng)度(即第一個(gè)‘\0’前面的字符個(gè)數(shù))。5.3.4字符串及其常用函數(shù)例如:chars[10]="China";

printf("%d",strlen(s));輸出結(jié)果為:5實(shí)際長(zhǎng)度不包括’\0’7)字符串小寫函數(shù):strlwr()

調(diào)用格式:strlwr(str)。功能:將字符串中的大寫字母轉(zhuǎn)換成小寫字母。8)字符串大寫函數(shù):strupr()調(diào)用格式:strupr(str)。功能:將字符串中的小寫字母轉(zhuǎn)換成大寫字母。5.4程序舉例例5.7將一個(gè)數(shù)組中元素的值按逆序進(jìn)行排列,如原來(lái)的順序是1、7、3、9、4,排列后變?yōu)?、9、3、7、1。分析:這是一個(gè)數(shù)組元素進(jìn)行位置交換的例題,首先要考慮交換次數(shù),交換次數(shù)應(yīng)該是數(shù)組中所有元素的個(gè)數(shù)的一半。本例中共有5個(gè)數(shù),需要交換5/2次。元素之間的交換不能直接賦值,而要通過中間變量,如本例中的變量t。#include<stdio.h>main(){inti,t,a[5]={1,7,3,9,5};for(i=0;i<5;i++)printf("%d",a[i]);printf("\n");for(i=0;i<5/2;i++){t=a[i];a[i]=a[4-i];a[4-i]=t;}for(i=0;i<5;i++)printf("%d",a[i]);}運(yùn)行結(jié)果:5.4程序舉例例5.8字符串處理函數(shù)舉例#include<stdio.h>#include<string.h>main(){chars1[40],s2[40],s3[40];intl1,l2;printf("pleaseinputNO1string:\n");gets(s1);printf("pleaseinputtheN02string:\n");gets(s2);l1=strlen(s1);l2=strlen(s2);printf("thereare%dcharactersintheNO1string\n",l1);printf("thereare%dcharactersintheNO2string\n",l2);if(strcmp(s1,s2)>0)printf("s1>s2\n");elseif(strcmp(s1,s2)==0)printf("s1=s2\n");elseprintf("s1<s2\n");strcat(s1,s2);strcpy(s3,s1);puts(s1);puts(s2);puts(s3);}運(yùn)行結(jié)果:5.4程序舉例例5.9用數(shù)組編寫程序輸出九九乘法表#include<stdio.h>main(){inti,j,s[10][10];for(i=1;i<9;i++){s[i][1]=i;s[1][i]=i;}for(i=1;i<=9;i++)for(j=1;j<=i;j++)s[i][j]=i*j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論