版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù)組數(shù)組概述5.1一維數(shù)組5.2二維數(shù)組5.3字符數(shù)組5.45.1數(shù)組概述在程序設(shè)計中,為了處理方便,對于一批類型相同的數(shù)據(jù),如學(xué)生成績,可以利用數(shù)組來存儲,這樣,既能從整個數(shù)組出發(fā)去處理其中的個別元素,如某一個學(xué)生的成績,也能以統(tǒng)一方式處理數(shù)組的一批元素或所有元素,如部分或所有學(xué)生的成績。而后一種處理方式是由一批元素構(gòu)成的數(shù)組和一批獨立命名的變量之間的主要區(qū)別。5.1數(shù)組概述數(shù)組是C語言提供的一種常用的構(gòu)造數(shù)據(jù)類型。數(shù)組是數(shù)目固定,類型相同的若干變量的有序集合。在程序中,主要利用數(shù)組來處理一批類型相同的數(shù)據(jù)。每個數(shù)組都有一個名字,稱為數(shù)組名。它表示內(nèi)存中一塊連續(xù)的存儲區(qū)域。組成數(shù)組的變量稱為數(shù)組元素,它們可以是基本數(shù)據(jù)類型或者是構(gòu)造數(shù)據(jù)類型。數(shù)組元素按順序分配在內(nèi)存中一塊連續(xù)的存儲區(qū)域中,每個元素的類型相同并占用相同大小的內(nèi)存單元。數(shù)組元素是一種變量,只是數(shù)組中的元素沒有獨立的變量名,而是用數(shù)組名以及元素在數(shù)組中的位置號來標(biāo)識該元素。數(shù)組元素在數(shù)組中的位置號通常稱為下標(biāo),所以數(shù)組元素也稱為下標(biāo)變量,并通過下標(biāo)相互區(qū)分。數(shù)組可以有多個下標(biāo),下標(biāo)的個數(shù)稱為數(shù)組的維數(shù)。數(shù)組按維數(shù)的多少可分為一維數(shù)組和多維數(shù)組5.2一維數(shù)組在C語言中使用數(shù)組之前必須先進(jìn)行定義。數(shù)組要占用內(nèi)存空間,定義時需要指定數(shù)組有多少個元素以及類型,使編譯系統(tǒng)可以分配相應(yīng)的內(nèi)存空間。數(shù)組的維數(shù)在其定義中給定。5.2.1一維數(shù)組的定義與初始化
1.一維數(shù)組定義
一般格式為:存儲類型數(shù)據(jù)類型數(shù)組名[常量表達(dá)式];存儲類型與變量聲明中的存儲類型相同。數(shù)據(jù)類型可以是所有的C語言數(shù)據(jù)類型(包括基本數(shù)據(jù)類型或構(gòu)造類型)。它指明了數(shù)組的數(shù)據(jù)類型也就是該數(shù)組所有元素的數(shù)據(jù)類型,對于同一個數(shù)組,其所有元素的數(shù)據(jù)類型都是相同的。數(shù)組名是標(biāo)識符。數(shù)組名后的一對方括號是必須的,它指明前面的標(biāo)識符是數(shù)組名而不是普通變量名。方括號中的常量表達(dá)式表示數(shù)組元素的個數(shù),也稱為數(shù)組的長度。要求必須是整型。
例:數(shù)組定義方式#include<stdio.h>#defineSIZE20voidmain(){intn=5;inta1[5];/*可以,整型常量*/inta2[5*2+1];/*可以,整型常量表達(dá)式*/staticdoublea3[sizeof(int)];/*可以,sizeof表達(dá)式被認(rèn)為是一個整型常量*/chara4[SIZE];/*可以,符號常量*/inta5[-3];/*不可以,數(shù)組大小必須大于0*/inta6[0];/*不可以,數(shù)組大小必須大于0*/inta7[4.5];/*不可以,數(shù)組大小必須是整數(shù)*/inta8[(int)4.5];/*可以,強制轉(zhuǎn)換為整型*/inta9[n];/*C99之前不可以*/}5.2.1一維數(shù)組的定義與初始化
一旦定義了一個數(shù)組,系統(tǒng)將分配一塊連續(xù)內(nèi)存空間來存放它的所有元素,數(shù)組元素通過數(shù)組名和下標(biāo)來表示。例如有如下定義:inta[5];在上面的程序中,定義了一個自動(auto)型的整型數(shù)組a,方括號“[]”中的整型常量“5”指定該數(shù)組共有5個數(shù)組元素,分別為:a[0],a[1],a[2],a[3],a[4]。每個元素占用一個整型大小的內(nèi)存空間。注意:數(shù)組元素下標(biāo)從0開始計算,其它元素順序編號。2.一維數(shù)組的初始化數(shù)組初始化是指在數(shù)組定義的同時給數(shù)組元素賦予初值。數(shù)組初始化是在編譯階段進(jìn)行的,這樣將減少運行時間,提高效率。數(shù)組初始化的一般格式為:存儲類型數(shù)據(jù)類型數(shù)組名[常量表達(dá)式]={值,值……值};其中在一對花括號“{}”中的各個值即為各元素的初值,各值之間用逗號間隔。2.一維數(shù)組的初始化初始化時,花括號“{}”中的初值的個數(shù)通常和數(shù)組元素的個數(shù)一致。例如:inta[5]={23,57,42,36,89};
表示定義了一個有5個數(shù)組元素的數(shù)組a,初始化列表花括號“{}”中的初值的個數(shù)也是5個。其初始化結(jié)果是將各個初值按順序賦予對應(yīng)的數(shù)組元素。即a[0]=23,a[1]=57,a[2]=42,a[3]=36,a[4]=89。2.一維數(shù)組的初始化如果初始值的個數(shù)少于數(shù)組元素個數(shù),其余的元素將被初始化為零。
例如:intb[5]={23,57,42};
表示定義了一個有5個數(shù)組元素的數(shù)組b,初始化列表花括號“{}”中的初值個數(shù)只有3個。其初始化結(jié)果是只給b[0]到b[2]前3個元素賦值,而后2個元素自動賦0值。即b[0]=23,b[1]=57,b[2]=42,b[3]=0,b[4]=0。如果初值的個數(shù)多于數(shù)組元素的個數(shù),將產(chǎn)生編譯錯誤。2.一維數(shù)組的初始化如果初始化時,方括號“[]”中的常量表達(dá)式為空,即省略數(shù)組元素的個數(shù),那么編譯器將用初始化列表花括號“{}”中初值的個數(shù)來隱式地指定數(shù)組的大小。例如:inta[]={23,57,42,36,89};則編譯器根據(jù)初始化列表中初值的個數(shù)指定數(shù)組的大小為5。如果不初始化數(shù)組,自動(auto)型的數(shù)組元素和未初始化的自動(auto)型普通變量一樣,其中存儲的是無用的數(shù)據(jù)。5.2.2一維數(shù)組元素的引用數(shù)組元素是組成數(shù)組的基本單元。對數(shù)組的引用最終都是通過對其元素的引用而實現(xiàn)的。數(shù)組元素可以通過數(shù)組名加上用方括號“[]”括起來的下標(biāo)表達(dá)式來引用。引用數(shù)組元素一般格式為:數(shù)組名[下標(biāo)表達(dá)式]其中下標(biāo)表達(dá)式可以為常量、變量或表達(dá)式,要求必須為整型。下標(biāo)表達(dá)式計算的結(jié)果是元素在數(shù)組中的下標(biāo)。實際上,包括下標(biāo)的方括號“[]”是一個C運算符,稱為下標(biāo)運算符,其優(yōu)先級和結(jié)合性與圓括號“()”相同。下標(biāo)表達(dá)式如果是整型常量,則可直接明確的指定要訪問的是那一個數(shù)組元素。5.2.2一維數(shù)組元素的引用下標(biāo)表達(dá)式如果是變量,則可比較靈活的指定要訪問的是哪個數(shù)組元素。例如輸出數(shù)組c中所有的元素#include<stdio.h>voidmain(){intc[10]={6,-30,45,0,12,-89,2,-7,56,93};for(inti=0;i<10;i++)printf("%d\t",c[i]);printf("\n");}【例5.1】輸入10個學(xué)生的成績,要求輸出所有高于平均分的成績(用數(shù)組處理)。#include<stdio.h>#defineSIZE10voidmain(){inti;floata[SIZE],avg,sum=0;/*定義一個數(shù)組用來存放學(xué)生成績*/for(i=0;i<SIZE;i++) {scanf("%f",&a[i]);/*循環(huán)中逐個元素的輸入*/ sum=sum+a[i];/*求和*/}avg=sum/SIZE;printf("avg=%f\n",avg);
for(i=0;i<SIZE;i++) if(a[i]>avg)/*循環(huán)中依次判斷各數(shù)組元素*/printf("%.2f\t",a[i]);printf("\n");}5.2.2一維數(shù)組元素的引用在引用數(shù)組元素時要注意,如果用超出數(shù)組的合法下標(biāo)范圍的表達(dá)式進(jìn)行數(shù)據(jù)的訪問,會導(dǎo)致越界訪問的錯誤?!纠吭浇缭L問示例一#include<stdio.h>voidmain(){intc[10]={6,-30,45,0,12,-89,2,-7,56,93};printf("%d\n",c[10]);/*沒有這個數(shù)組元素*/}C編譯器不會檢查下標(biāo)的合法性。如果使用了錯誤的下標(biāo),程序執(zhí)行結(jié)果是不可知的,程序或者能運行,但是運行結(jié)果可能很奇怪,也可能會中斷程序的執(zhí)行?!纠吭浇缭L問示例二#include<stdio.h>voidmain(){inta=11,b[2],c=99,i;printf("a=%d\tc=%d\n",a,c);for(i=-1;i<3;i++)b[i]=2*i;for(i=-1;i<4;i++)printf("b[%2d]=%d\n",i,b[i]);printf("a=%d\tc=%d\n",a,c);}程序中通常使用數(shù)組存儲數(shù)據(jù),C語言不支持把數(shù)組作為一個整體來賦值,也不支持用花括號括起來的列表形式進(jìn)行賦值(初始化的時候除外)。下面例子中展示了一些不允許的賦值方式?!纠繜o效的數(shù)組賦值#include<stdio.h>voidmain(){inta[10],b[10]={1,2,3,4,5};/*初始化是可以的*/a=b;/*不允許*/a={1,2,3,4,5};/*不允許*/a[10]={1,2,3,4,5};/*不允許*/}程序中要對數(shù)組賦值,只能一個一個元素地逐個賦值,通常是利用循環(huán)進(jìn)行的?!纠繑?shù)組元素賦值#include<stdio.h>voidmain(){inti,a[5],b[5]={1,2,3,4,5};for(i=0;i<5;i++)a[i]=b[i];/*循環(huán)中依次賦值*/for(i=0;i<5;i++)printf("%d\t",a[i]);printf("\n");}程序中不能用scanf()函數(shù)直接賦值給整個數(shù)組(字符數(shù)組除外)。下面例子中展示了一些不正確的用scanf()函數(shù)給數(shù)組元素賦值的方式?!纠繜o效的用scanf()函數(shù)給數(shù)組元素賦值#include<stdio.h>voidmain(){inta[10];scanf("%d%d%d%d%d%d%d%d%d%d",&a);/*不正確*/scanf("%d%d%d%d%d%d%d%d%d%d",a);/*不正確*/scanf("%d",a);/*不正確*/scanf("%d",&a);/*不正確*/
}也不能用printf()函數(shù)直接輸出整個數(shù)組(字符數(shù)組除外)。下面例子中展示了一些不正確的用printf()函數(shù)輸出數(shù)組元素的方式?!纠繜o效的用printf()函數(shù)輸出數(shù)組元素#include<stdio.h>voidmain(){inta[5]={1,2,3,4,5};printf("%d\n",a);/*不正確*/printf("%d,%d,%d,%d,%d\n",a);/*不正確*/
}程序中用scanf()函數(shù)給數(shù)組元素賦值以及用printf()函數(shù)輸出數(shù)組元素值時通常要用到循環(huán)?!纠繑?shù)組元素的輸入輸出#include<stdio.h>voidmain(){inta[5],i;for(i=0;i<5;i++) scanf("%d",&a[i]);for(i=0;i<5;i++)
printf("%d\n",a[i]);
}5.2.3一維數(shù)組作為函數(shù)參數(shù)
數(shù)組可以作為函數(shù)的參數(shù)使用,進(jìn)行數(shù)據(jù)傳送。數(shù)組用作函數(shù)參數(shù)有兩種形式,一種是把數(shù)組元素(下標(biāo)變量)作為實參使用;另一種是把數(shù)組名作為函數(shù)的形參和實參使用。1.數(shù)組元素作函數(shù)實參數(shù)組元素作為函數(shù)實參使用與處理普通變量沒有什么差別,在發(fā)生函數(shù)調(diào)用時,把作為實參的數(shù)組元素的值傳送給形參,實現(xiàn)單向的值傳送。如果在函數(shù)中形參發(fā)生改變,對作為實參的數(shù)組元素是沒有影響的?!纠?.2】數(shù)組元素作函數(shù)實參2.數(shù)組名作為函數(shù)參數(shù)
【例5.3】數(shù)組名作為函數(shù)參數(shù)注意:數(shù)組名作為函數(shù)參函數(shù)時,形參和實參都必須是類型相同的數(shù)組。另外,為了防止越界訪問,將數(shù)組傳遞給被調(diào)函數(shù)時,通常也將其長度同時傳遞給被調(diào)函數(shù),注意:在用數(shù)組名作函數(shù)參數(shù)時,不是把實參數(shù)組的每一個元素的值都賦予形參數(shù)組的各個元素。編譯器不為形參數(shù)組分配內(nèi)存。函數(shù)調(diào)用時,形參數(shù)組名從實參數(shù)組那里取得首地址之后,也就等于有了實際的存儲空間(與實參數(shù)組共用)。5.2.4一維數(shù)組應(yīng)用舉例
1.統(tǒng)計【例5.4】有一個學(xué)院在學(xué)生會換屆選舉中由全體學(xué)生無記名投票直選學(xué)生會主席,共有10名候選人,每個人的代號分別用1,2,3,…,10表示。每個學(xué)生填寫一張選票,若同意某名候選人則在其姓名后畫個圓圈即可(只能選一個)。編寫一個程序根據(jù)所有選票統(tǒng)計出每位候選人所得票數(shù),其中每張選票上所投候選人的代號從鍵盤輸入,當(dāng)輸入完所有選票后用-1作為數(shù)據(jù)輸入結(jié)束的標(biāo)志。
2.排序【例5.5】已知有10個整數(shù):24,56,8,47,63,82,27,15,90,39,編寫一個程序按照從小到大的順序輸出。第一趟j=0第二趟j=1245684763824475663i=1245684763第三趟j=2i=2248
564763824475663i=3248475663i=42484756633.查找【例5.6】已知有10個整數(shù):22,10,44,17,31,51,89,68,120,95,從鍵盤輸入一個給定值x,在該序列中查找是否有與給定值x相等的一個數(shù)。1)順序查找2)二分查找4.插入【題目】已知有10個整數(shù):3,6,18,28,54,68,87,105,127,162,已從小到大排好序,編寫一個程序?qū)⒁唤o定值x插入到該序列中并保持原來的從小到大的順序不變。給定值x從鍵盤輸入。思考題:5.3二維數(shù)組5.3.1二維數(shù)組的定義與初始化1.二維數(shù)組的定義二維數(shù)組定義的一般格式是:存儲類型數(shù)據(jù)類型數(shù)組名[整型表達(dá)式1][整型表達(dá)式2]二維數(shù)組定義的要求和一維數(shù)組定義的一樣,只是多了一對方括號“[]”極其整型表達(dá)式。其中整型表達(dá)式1表示第一維(行)的長度,整型表達(dá)式2表示第二維(列)的長度?!纠慷S數(shù)組定義#include<stdio.h>voidmain(){inta[3][4];introw=2,col=3;doubleb[row][col];/*變長數(shù)組,C99之前不可以*/}假設(shè)第一維(行)的長度為m,第二維(列)的長度為n,則整個數(shù)組的元素個數(shù)為m×n個。二維數(shù)組的數(shù)組元素用數(shù)組名和兩個下標(biāo)表示,則數(shù)組元素行下標(biāo)的取值范圍是0~m-1之間的m個整數(shù),列下標(biāo)的取值范圍是0~n-1之間的n個整數(shù)。例如,上面程序中定義的二維數(shù)組a,共有3×4=12個數(shù)組元素,行下標(biāo)的取值范圍是0~2;列下標(biāo)的取值范圍是0~3。2.二維數(shù)組的初始化1)按行分組賦值將初值分別用花括號“{}”
括起來進(jìn)行按行分組,例如:【例】按行分組初始化#include<stdio.h>voidmain(){inta[2][3]={{80,75,92},{61,65,71}};}2)按行連續(xù)賦值初值之間沒有用花括號“{}”按行分組,只有最外面的一對花括號“{}”。例如:【例】按行連續(xù)初始化#include<stdio.h>voidmain(){inta[2][3]={80,75,92,61,65,71};}系統(tǒng)將自動用初值按順序一行一行初始化各數(shù)組元素。5.3
.2二維數(shù)組數(shù)組元素的引用
二維數(shù)組的元素也稱為雙下標(biāo)變量,其表示使用的格式為:數(shù)組名[下標(biāo)表達(dá)式][下標(biāo)表達(dá)式]其中下標(biāo)表達(dá)式可以為常量、變量或表達(dá)式,要求必須為整型。對行下標(biāo)和列下標(biāo)都要進(jìn)行運算來唯一指定二維數(shù)組中的一個元素使用二維數(shù)組的元素同使用一維數(shù)組的元素和普通變量一樣,既可以用它存儲數(shù)據(jù),又可以取出它的值參與運算?!纠恳脭?shù)組元素時兩個下標(biāo)都為整型常量#include<stdio.h>voidmain(){inta[3][4]={{20,51,-64,8},{42,97,33,84},{102,76,12,9}};printf("%d\n",a[0][1]);}【例】引用數(shù)組元素時行下標(biāo)為整型常量,下列標(biāo)為整型變量#include<stdio.h>voidmain(){inta[3][4]={{20,51,-64,8},{42,97,33,84},{102,76,12,9}};intcolumn;for(column=0;column<4;column++)a[1][column]*=2;for(column=0;column<4;column++)printf("%d\t",a[1][column]);printf("\n");}【例】引用數(shù)組元素時兩個下標(biāo)都為變量#include<stdio.h>voidmain(){inta[3][4]={{20,51,-64,8},{42,97,33,84},{102,76,12,9}};inttotal=0,row,column;for(row=0;row<3;row++)for(column=0;column<4;column++)total+=a[row][column];printf("%d\n",total);}5.3.3二維數(shù)組應(yīng)用舉例【例5.7】有下列一個3×4的矩陣,要求編寫程序輸出其中值最大的那個元素,以及其所在的行號和列號。12-349876-1016-52【例5.8】一個小組有5位學(xué)生,每個人有三門課程的考試成績,如下表所示。編寫一個程序計算全組學(xué)生的各門課程的分科平均成績和總平均成績。
課程成績姓名語文數(shù)學(xué)英語張三807592王五616571李四536370趙一858790周六7677855.4字符數(shù)組5.4.1字符串與字符數(shù)組字符串是一個或多個字符的序列。下面是一個字符串的例子:"Howareyou"這里雙引號“”不是字符串的一部分。他們只是通知編譯器其中包含了一個字符串。C語言中沒有為字符串定義專門的變量類型,而是把它存儲在字符數(shù)組中。雙引號中的字符加上編譯器自動添加的結(jié)束符‘\0’,作為一個字符串被存儲在相鄰的內(nèi)存單元中,每個字符占用一個單元。字符數(shù)組就是數(shù)據(jù)類型為字符型的數(shù)組,每個元素可以用來存放一個字符。如果字符數(shù)組包含了空字符‘\0’,那么字符數(shù)組的內(nèi)容就構(gòu)成一個字符串,其中空字符‘\0’標(biāo)志著字符串的結(jié)尾。但如果字符數(shù)組中沒有空字符‘\0’,則不能表示一個字符串。
5.4.2字符數(shù)組的定義與初始化
1.字符數(shù)組定義
字符數(shù)組定義形式與其它類型數(shù)組相同。例如,下面定義了一個有10個元素的字符數(shù)組c(其中每個數(shù)組元素中可以存放一個字符):【例】字符數(shù)組定義#include<stdio.h>voidmain(){charc[10];}字符數(shù)組也可以是二維或多維數(shù)組。例如,下面定義了一個5行10列的二維字符數(shù)組:【例】二維字符數(shù)組定義#include<stdio.h>voidmain(){chard[5][10];}2.字符數(shù)組初始化
字符數(shù)組也允許在定義時作初始化賦值?!纠孔址麛?shù)組初始化#include<stdio.h>voidmain(){charstr1[10]={‘p’,‘r’,‘o’,‘g’,‘r’,‘a(chǎn)’,’m’};}當(dāng)對全體元素賦初值時也可以省去長度說明。例如:【例】省去長度說明的字符數(shù)組初始化#include<stdio.h>voidmain(){charstr2[]={‘p’,‘r’,‘o’,‘g’,‘r’,‘a(chǎn)’,’m’};}【例】用字符串常量進(jìn)行初始化#include<stdio.h>voidmain(){charstr4[50]="Youcanseeit.";}當(dāng)然,進(jìn)行初始化時如果省略數(shù)組大小,讓編譯器決定數(shù)組大小是很方便的。例如:【例】用字符串常量進(jìn)行初始化時省略數(shù)組大小#include<stdio.h>voidmain(){charstr5[]="program";}5.4.3字符數(shù)組的引用
字符數(shù)組的引用和其他類型數(shù)組一樣,通過數(shù)組名加上用方括號“[]”括起來的下標(biāo)表達(dá)式來引用數(shù)組中的各個元素?!纠?.9】字符數(shù)組中各元素的訪問#include<stdio.h>voidmain(){inti=0;charstr[]="program";while(str[i]!='\0')//判斷字符串是否結(jié)束
{str[i]=str[i]-32;//小寫字母轉(zhuǎn)化為大寫
printf("%c",str[i]);//單個元素(字符)輸出
i++;}printf("\n");}5.4.4字符串輸出和輸入
1.字符串輸出(1)printf()函數(shù)在程序中還可以使用帶%s格式控制符的printf()函數(shù),輸出一個字符串,但需要一個字符串地址如字符數(shù)組名作為對應(yīng)的輸出項?!纠縫rintf()函數(shù)帶%s格式控制符輸出#include<stdio.h>voidmain(){ charstring[]="stringliteral";printf("%s\n",string);//字符數(shù)組名作為輸出項
printf("%s\n",&string[3]);//數(shù)組元素的地址作為輸出項}(2)puts()函數(shù)使用puts()函數(shù)輸出字符串,只需要給出字符串地址作為參數(shù)?!纠縫uts()函數(shù)示例#include<stdio.h>voidmain(){charstring[]="stringliteral";puts("Thisisanexample");//字符串常量作為參數(shù)puts(string);//字符數(shù)組名作為參數(shù)
puts(&string[3]);//數(shù)組元素的地址作為參數(shù)}puts()函數(shù)和printf()函數(shù)都可以用于輸出字符串,例如,下面兩條語句效果一樣。printf("%s\n",string);puts(string);printf()函數(shù)與puts()函數(shù)主要區(qū)別在于:printf()函數(shù)并不會自動添加換行符而在新行上輸出每個字符串。使用printf()函數(shù)時,必須明確指出需要另起一行的位置,并添加換行符‘\n’
進(jìn)行換行。所以printf()函數(shù)使用起來沒有puts()函數(shù)方便,需要鍵入更多的代碼,不過用printf()函數(shù)可以很簡單的在一行上輸出多個字符串。2.字符串輸入
要把一個字符串讀到程序中,必須首先預(yù)留存儲字符串的空間,然后使用輸入函數(shù)來獲取這個字符串。最簡單的方法是定義一個足夠大小的字符數(shù)組,用來存放該字符串。(1)scanf()函數(shù)使用帶%s格式控制符scanf()函數(shù)可以用來讀入一個字符串。【例】scanf()函數(shù)帶%s格式控制符輸入#include<stdio.h>voidmain(){charname[51];printf("What'syourname?\n");scanf("%s",name);printf("Nicename,%s.\n",name);}scanf()函數(shù)開始讀取輸入后,會在遇到的第一個空白字符:空格(blank)、制表符(tab)或換行符(newline)處停止讀取。因此,使用%s的scanf()函數(shù)只會把一個單詞而不是把整個語句作為字符串讀入。(2)gets()函數(shù)使用gets()函數(shù)可以從系統(tǒng)的標(biāo)準(zhǔn)設(shè)備(通常是鍵盤)獲取一個字符串。因為字符串沒有預(yù)定的長度,所以gets()函數(shù)需要知道輸入何時結(jié)束。解決方法是讀字符串直到遇到一個換行符(newline),按回車鍵可以產(chǎn)生這個字符。gets()函數(shù)將讀取換行符之前(不包括換行符)的所有字符,并在這些字符后添加一個空字符‘\0’。然后把這個字符串交給調(diào)用它的程序。gets()函數(shù)會將讀取的換行符丟棄,這樣下一次讀取就會在新的一行開始。【例】gets()函數(shù)示例#include<stdio.h>voidmain(){charname[51];printf("What'syourname?\n");gets(name);printf("Nicename,%s.\n",name);}scanf()函數(shù)和gets()函數(shù)主要區(qū)別在于如何決定字符串何時結(jié)束。scanf()函數(shù)遇到的第一個空白字符(空格、制表符或換行符)停止讀取。gets()函數(shù)在遇到的第一個換行符停止讀取。scanf()函數(shù)更基于獲取單詞而不是獲取字符串。5.4.5字符數(shù)組應(yīng)用舉例
【例5.10】編寫一個程序,實現(xiàn)從鍵盤上輸入一個字符串,將該字符串中的小寫字母變?yōu)榇髮懽帜?,而其它字符保持不變。分?先定義一個足夠大小的字符數(shù)組str,存放從鍵盤上輸入一個字符串。從該字符數(shù)組第一元素str[0](存放著字符串第一個字符)開始,每個數(shù)組元素逐一(即字符)判斷,看是否為小寫字母,如果是就進(jìn)行轉(zhuǎn)換。如果不是則不變,直到該字符串結(jié)束【例5.11】“回文”是從前向后和從后向前讀起來都一樣的句子。例如英文中的:“l(fā)evel”、“radar”等。編寫一個程序判斷一個字符串是否為一個“回文”。分析:先用字符串的第一個字符和最后一個字符進(jìn)行比較看是否相等,如果相等就繼續(xù)比較第二個字符和倒數(shù)第二個字符,以此類推。比較過程中只要有一次比較不相等,則可判斷不是“回文”,如果比較到最中間的字符時都相等則可以判斷是“回文”。5.4.6字符串處理函數(shù)
由于字符串的使用非常廣泛,C標(biāo)準(zhǔn)庫提供了許多專門處理字符串的函數(shù)(參見附錄C),這些函數(shù)的原型在頭文件“string.h”里說明。要使用標(biāo)準(zhǔn)字符串處理函數(shù)時,程序前部應(yīng)寫:#include<string.h>1.求字符串長度函數(shù)strlen()函數(shù)原型:intstrlen(constchars[])本函數(shù)的功能是求出字符串的長度,也就是字符串里的字符個數(shù)。在計算字符個數(shù)時不計表示字符串結(jié)束的空字符‘\0’。該函數(shù)只有一個類型為字符的數(shù)組參數(shù),參數(shù)前面使用了關(guān)鍵字const表示該參數(shù)的內(nèi)容在函數(shù)執(zhí)行中是不允許改變的。該函數(shù)對應(yīng)的實參可以是任何形式的字符串,如一個字符串常量、一個一維字符數(shù)組等。函數(shù)的返回值是求出的字符串長度?!纠壳笞址L度函數(shù)示例#include<string.h>#include<stdio.h>voidmain(){chara[10]="",b[]="a",c[20]="StringLength";printf("alengthis:%d\n",strlen(a));//調(diào)用字符串長度函數(shù)
printf("blengthis:%d\n",strlen(b));printf("clengthis:%d\n",strlen(c));printf("constantlengthis:%d\n",strlen("constant"));}2.字符串復(fù)制函數(shù)strcpy()函數(shù)原型:char*strcpy(char*dest,constchar*src)本函數(shù)的功能是把第二個參數(shù)src所指字符串復(fù)制到第一個參數(shù)dest所指的存儲空間(即dest字符數(shù)組)中。該函數(shù)有兩個字符指針參數(shù),因為每個字符指針是指向相應(yīng)字符串的首地址。而字符數(shù)組名就是所在字符串的首地址。所以字符數(shù)組名也就是一個字符指針。字符指針參數(shù)說明同字符數(shù)組參數(shù)說明是等價的,既該函數(shù)的兩個參數(shù)說明同chardest[]和constcharsrc[]是等價的。參數(shù)dest或src都能接受由實參傳遞來的一個字符指針,既一個字符串存儲空間的首地址。因為該函數(shù)只需要從第二個參數(shù)src字符串中讀取內(nèi)容,不需要修改它,所以用const修飾,而對于第一個參數(shù)dest,需要修改它的內(nèi)容,所以就不能用const修飾。函數(shù)的返回值是一個字符指針,即dest字符數(shù)組的首地址。dest應(yīng)是一個足夠大的字符數(shù)組,以保證字符串復(fù)制不越界。
【例】字符串復(fù)制函數(shù)示例#include<string.h>#include<stdio.h>voidmain(){chara[10],b[10]="strcopy",c[20];strcpy(a,b);//調(diào)用字符串復(fù)制函數(shù)
strcpy(c,"constant");printf("a=%s\tb=%s\t",a,b);printf("c=%s\n",c);}1.字符串比較函數(shù)strcmp()函數(shù)原型:intstrcmp(constchar*s1,constchar*s2)本函數(shù)的功能是比較s1所指字符串與s2所指字符串的大小,若字符串s1大于字符串s2時返回一個大于0的值(C標(biāo)準(zhǔn)沒有規(guī)定采用什么值);若兩個字符串s1和s2相同時返回0;若字符串s1小于字符串s2時返回一個小于0的值。判斷字符串大小的標(biāo)準(zhǔn)是字典序(普通英語詞典里排列單詞詞條時所用的順序)。該函數(shù)有兩個字符指針參數(shù),各自指向相應(yīng)的字符串。函數(shù)的返回值為整型。
【例】字符串復(fù)制函數(shù)示例#include<string.h>#include<stdio.h>voidmain(){chara[10]="int",b[10]="double",c[20]="float";printf("%d\n",strcmp(a,b));//調(diào)用字符串復(fù)制函數(shù)
printf("%d\n",strcmp(b,c));printf("%d\n",strcmp("int",a));}4.字符串連接函數(shù)strcat()函數(shù)原型:char*strcat(char*dest,constchar*src)。本函數(shù)的功能是把第二個參數(shù)src所指字符串復(fù)制到第一個參數(shù)dest所指字符串中已有字符的后面,形成相當(dāng)于兩個串連在一起的字符串。這里要求dest所指字符串之后有足夠大的存儲空間用于存儲src串。該函數(shù)有兩個字符指針參數(shù),各自指向相應(yīng)的字符串。函數(shù)的返回值為dest的指針?!纠孔址B接函數(shù)示例#include<string.h>#include<stdio.h>
voidmain(){charb1[40]="Programming",b2[10]="C";strcat(b1,"language");
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版?zhèn)€人對個人民宿短租服務(wù)合同3篇
- 二零二五年度版權(quán)監(jiān)控合同2篇
- 二零二五版物流配送合同管理員安全生產(chǎn)保障協(xié)議3篇
- 二零二五年度餐飲業(yè)食品安全培訓(xùn)及咨詢服務(wù)合同范本3篇
- 二零二五年電梯安全知識競賽獎品贊助與提供合同3篇
- 二零二五年海參養(yǎng)殖基地與農(nóng)產(chǎn)品營銷策劃公司合作合同文本3篇
- 二零二五年度鋼結(jié)構(gòu)景觀亭臺制作安裝合同3篇
- 二零二五年度CFG樁基施工與監(jiān)理一體化承包合同2篇
- 二零二五年度高鐵站車庫租賃與行李寄存服務(wù)合同3篇
- 二零二五年教育培訓(xùn)機構(gòu)實習(xí)學(xué)生勞動合同規(guī)范文本3篇
- 2025年湖北武漢工程大學(xué)招聘6人歷年高頻重點提升(共500題)附帶答案詳解
- 【數(shù) 學(xué)】2024-2025學(xué)年北師大版數(shù)學(xué)七年級上冊期末能力提升卷
- GB/T 26846-2024電動自行車用電動機和控制器的引出線及接插件
- 遼寧省沈陽市皇姑區(qū)2024-2025學(xué)年九年級上學(xué)期期末考試語文試題(含答案)
- 妊娠咳嗽的臨床特征
- 國家公務(wù)員考試(面試)試題及解答參考(2024年)
- 《阻燃材料與技術(shù)》課件 第6講 阻燃纖維及織物
- 2024年金融理財-擔(dān)保公司考試近5年真題附答案
- 泰山產(chǎn)業(yè)領(lǐng)軍人才申報書
- 高中語文古代文學(xué)課件:先秦文學(xué)
- 三創(chuàng)賽獲獎-非遺文化創(chuàng)新創(chuàng)業(yè)計劃書
評論
0/150
提交評論