版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、數(shù)組的基本概念一維數(shù)組二維數(shù)組字符數(shù)組數(shù)組的應(yīng)用舉例,第七章 數(shù) 組,一、概述,C數(shù)據(jù)類型: ·基本類(簡單類)——字符型/整型/實型 ·構(gòu)造類(組合類)——數(shù)組/結(jié)構(gòu)體/共用體,對于變量,基本類型——單個出現(xiàn)的變量,每個變量可以代表一個確定的數(shù)據(jù)(變量值),且具有一定屬性。如 int x,y;但變量間不存在確定的相互關(guān)系。,數(shù)組的概念引入,用基本數(shù)據(jù)類型可以解決所有問題嗎?例如:對某班學(xué)生
2、的成績按由高到底的次序進(jìn)行排序。 3 名?,30 名?,數(shù)組:一種常用的構(gòu)造型數(shù)據(jù)類型。 由具有固定數(shù)目 相同類型 的元素按一定順序排列。,數(shù)組的基本概念,特點:1、數(shù)組元素的個數(shù)是確定,不可改變,元素值可變,2、數(shù)組元素的類型必須相同,不允許混合。,1、一維數(shù)組的定義和使用,例如: int a[10],定義 類
3、型說明符 數(shù)組名[ 常量表達(dá)式 ];,10個元素: a[0]、a[1]、a[2]...a[9],,,,,整型數(shù)組 a,,特別申明:不可對數(shù)組的大小作動態(tài)定義,判斷,錯誤: 正確: int n=5; #define N 5 int a[n]; int a[N];正確:
4、int a[10], b[5][4]; char name[8], ch[2][3]; float x[8*2+1], table[2][3][4]; #define NUM 40; int a[NUM], b[NUM+2];,7.1.2 一維數(shù)組元素的引用,1、先定義,后使用。,3、只能逐個引用數(shù)組元素,而不能一次引用整個數(shù)組,2、引用方式: 數(shù)組名 [下標(biāo)] 。,例:int a[9];
5、 char c[4]; float f[10];,a[0]=1; c[3]=‘b’; f[5]=1.23,a[8]=a[5]+a[7]-a[2*3],4、引用數(shù)組元素要注意下標(biāo)不要出界(編譯程序不檢查是否“出界”),示例,引用示例:,a[2][3] a[2-1][2*3-1] a[x] (x為整型表達(dá)式) 錯誤: a[2,3],比較:,錯誤
6、 正確 int n; int a[5]; scanf(“%d”,&n); for (i=0;i<5;i++) int a[n]; printf(“%d\n”,a[i
7、]);定義時不可用變量作下標(biāo) 引用時可以用整型變量及表達(dá)式 作下標(biāo),,三、數(shù)組的存儲結(jié)構(gòu),·根據(jù)數(shù)組的數(shù)據(jù)類型,為每一元素安排相同長度的存儲單元,·根據(jù)數(shù)組的存儲屬性,確定將其安排在內(nèi)存動態(tài)、靜態(tài)存儲區(qū)或寄存器區(qū),說明:數(shù)組元素在內(nèi)存中順次存放,它們的地址是連續(xù)的。,數(shù)組名字是一個常量,存放數(shù)組第一個元素的內(nèi)存地址。
8、,定義時賦值,一維數(shù)組的初始化,1、對數(shù)組的全部元素賦初值。 int a[3]={3,6,9}; a[0]=3; a[1]=6; a[2]=9; 2、對數(shù)組的部分元素賦初值。 int a[4]={3,6,9} ; a[0]=3; a[1]=6; a[2]=9; a[3]=0; 3、對全部數(shù)組元素賦初值時,可以不指定數(shù)組長度。但若提供 初值的個數(shù)與定義的數(shù)組長度不一樣,則數(shù)組長度不能省略。 int
9、a[]={3,6,9}; int a[3]; a[0]=3; a[1]=6; a[2]=9;,對數(shù)組的元素賦初值。方式:賦值語句、輸入語句,a[0]=12;scanf(“ %d ”,&a[1]);,注意:不能給數(shù)組整體賦初值,數(shù)組名不可被賦值。,通常數(shù)組的輸入與輸出,輸入:int i,a[10];for(i=0;i<10;i++){ scanf(“%d”,&a[i]);},輸出:fo
10、r(i=0;i<10;i++){ printf(“%d”,a[i]);},main( ) { static int a[10]={1,3,4,8,5,7,12,9,5,23}; int i,total=0; printf(“Total of array element values is % d\n”, total);},執(zhí)行結(jié)果 Tot
11、al of array element values is 77,7.1.4 一維數(shù)組程序應(yīng)用舉例,for (i=0;i<=10-1;i++) total+=a[i];,例 計算數(shù)組元素之和,例: 輸入10個數(shù)據(jù),求和并求最大值。 main( ) { int m; float a[10],total=0.0 , max=0.0; for (m=0; m<10 m++)
12、 /*輸入數(shù)據(jù)*/ scanf(“%f”,&a[m]); printf(“\n”);,for (i=0; imax) max=a[i];} /*求最大值*/,printf(“Total of array element values is %3.2f, %7.3f\n”,total,max);},例 7.2 用數(shù)組計算Fibonacci數(shù)列
13、的前20項 (p133) main( ) { int i=0; int f[20]={1,1}; /*僅對f [0],f [1]賦確定值,其他元素自動賦0*/ for (i=2; i<20; i++) /*求值*/ f [i] =f [i-2]+f [i-1];,i=2 f [2]=f [0]+f [1]i=3 f
14、[3]=f [1]+f [2]i=4 f [4]=f [2]+f [3] ……,,for (i=0; i<20; i++) /*輸出 */ { if (i%5=0) printf(“\n”); /*每行輸出5個數(shù)據(jù)*/ printf(“%12d”,f [i]); } },用數(shù)組計算Fibonacci數(shù)列的前20項程序執(zhí)行
15、結(jié)果 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765,第 2 遍 a[0]~a[1] ,a[1]~a[2] …
16、 a[n-3]~a[n-2] 最終a[n-2]為次大數(shù),冒泡法(起泡法/氣泡法)有n個雜亂無序的數(shù),要求將這n個數(shù)從小到大(或從大到小)排序后輸出。相鄰兩元素比較 a[i]~a[i+1]第 1 遍 a[0]~a[1]比較, a[1]存放大的數(shù)。 a[1]~a[2]比較, a
17、[2]存放大的數(shù)。 a[2]~a[3] ,a[3]~a[4] …… a[n-2]~a[n-1]比較, 最終a[n-1]為最大數(shù),比較n-1次,比較n-2次,,,… 結(jié)論: n 個數(shù)排序, 要進(jìn)行 n-1 遍循環(huán),這種排序方法之所以叫“冒泡法”,是因為在排序過程中,較小的數(shù)象氣泡一樣逐漸往前冒(向上冒),大的數(shù)逐漸向后沉,最終完成排序。,起泡排序
18、,對具有n個元素的序列按升序進(jìn)行起泡排序的步驟:首先將第一個元素與第二個元素進(jìn)行比較,若為逆序,則將兩元素交換。然后比較第二、第三個元素,依次類推,直到第n-1和第n個元素進(jìn)行了比較和交換。此過程稱為第一趟起泡排序。經(jīng)過第一趟,最大的元素便被交換到第n個位置。對前n-1個元素進(jìn)行第二趟起泡排序,將其中最大元素交換到第n-1個位置。如此繼續(xù),直到某一趟排序未發(fā)生任何交換時,排序完畢。對n個元素的序列,起泡排序最多需要進(jìn)行n-1趟。
19、,起泡排序舉例:,對整數(shù)序列 8 5 2 4 3 按升序排序,85243,5,2,4,3,8,2,4,3,5,8,2,3,4,5,8,2,3,4,5,8,,初始狀態(tài),第一趟結(jié)果,第二趟結(jié)果,第三趟結(jié)果,第四趟結(jié)果,小的逐漸上升,,,,,,每趟沉下一個最大的,流程圖如下,程序如下:,#define N 10 main(){ int i, j, t, a[N+1]; for (i=1; i a[j+1])
20、{ t = a[j]; a[j] = a[j+1]; a[j+1] = t; } for (i=1; i<=N; i++) printf(" %d ",a[i]);},定義 類型說明符 數(shù)組名[ 常量表達(dá)式 ] [ 常量表達(dá)式 ] ;,列,,,行,,,2、二維數(shù)組的定義和使用,例 float a[3][4]; a
21、 為 3 行,4列有12個元素的數(shù)組。 可理解為: float a[0][4],a[1][4],a[2][4];,一維數(shù)組,,,,引用 數(shù)組名 [下標(biāo)] [下標(biāo)] float a[3][4],b[3][5]; 例 : b[1][2]=a[2][3]/3;,int M=a[2][4],多維數(shù)組—第一維下標(biāo)變化最慢,最右邊的下標(biāo)變化最快 定義
22、 float a[2][3][4]; 存儲順序 a000 a001 a002 a003 a010 …a013 a020 …a023 a100 …a103 a110 …a113 a120 …a123,按行存放,地址是連續(xù)的。 例: float a[3][4]; 數(shù)組的存儲順
23、序為: a,二維數(shù)組存儲順序,存放數(shù)組第一個元素的內(nèi)存地址,1、對數(shù)組的全部元素賦初值,分行賦初值; static int stud[3][2]={{1,2},{3,4},{5,6}};,存儲時的排列順序 static int stud[3][2]={1,2,3,4,5,6};,省略第一維長度的說明--對全部元素賦初值 static int stud[ ][2]={
24、1,2,3,4,5,6};,語句執(zhí)行后:stud[0][0]=1, stud[0][1]=2,stud[1][0]=3, stud[1][1]=4, stud[2][0]=5, stud[2][1]=6,,7.23 二維數(shù)組的初始化,2、對數(shù)組的部分元素賦初值,省略某些元素 int stud [3][2]={{1},{2,3},{4}};,省略第一維長度的說明(應(yīng)分行賦初值) int stud [ ][2]={{
25、1,0},{2,3},{}};,語句執(zhí)行后: stud[0][0]=1, stud[0][1]=0, stud[1][0]=2, stud[1][1]=3, stud[2][0]=4, stud[2][1]=0,,語句執(zhí)行后: stud[0][0]=1, stud[0][1]=0, stud[1
26、][0]=2, stud[1][1]=3, stud[2][0]=0, stud[2][1]=0,,例7.2.4 (p138) 將一個二維數(shù)組行和列元素互換,存到另一個二維數(shù)組中,a[0][0]~ b[0][0], a[0][1]~ b[1][0], a[0][2]~ b[2][0] 規(guī)律: a[i][j] ~ b[j][i],main()
27、 程序 { int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j; for(i=0;i<=1;i++) { for(j=0;j<=2;j++) b[j][i]=a[i][j]; /*行、列互換*/ }
28、 },prints(“array a:\n”);for(i=0;i<=1;i++) /* 按行、列打印a 數(shù)組*/{ for(j=0;j<=2;j++) printf(“%5d”,a[i][j]); printf(“\n”);}printf(“array b:\n”);for(i=0;i<=2;i++){ for(j=0;j<=1;j+
29、+) /* 按行、列打印b數(shù)組*/ printf(“%5d”,b[i][j]); printf(“\n”);},運(yùn)行結(jié)果: array a: 1 2 3 4 5 6 array b: 1 4 2 5 3 6,應(yīng)用舉例-6,題目:從一個三行四
30、列的整型二維數(shù)組中查找第一個出現(xiàn)的負(fù)數(shù)。分析算法要點用兩層嵌套的 for 循環(huán)來遍歷數(shù)組元素,判斷是否為負(fù)數(shù)。當(dāng)找到第一個負(fù)數(shù)時就應(yīng)該退出循環(huán),為此,應(yīng)定義一個標(biāo)記變量,用于標(biāo)記找到與否的狀態(tài),并將此標(biāo)記加入循環(huán)控制條件中,以控制循環(huán)在適當(dāng)時候退出。,main(){ int i,j,found,num[3][4]; printf("Enter 12 integers:\n"); for
31、(i=0;i<3;i++) for(j=0;j<4;j++)scanf("%d",&num[i][j]); found=0; for(i=0;i<3 && !found;i++) for(j=0;j<4 && !found;j++)if(num[i][j]<0) found=1; if(!
32、found) printf("not found\n"); else printf("minus number num[%d][%d]:%d\n", i-1,j-1,num[i-1][j-1]);},運(yùn)行結(jié)果:Enter 12 integers:3 5 56 1 45 -6 43 -1 1 4 -8 15minus
33、 number num[1][1]:-6,【完善程序】下列程序的功能是顯示如下圖形:,1 0 0 0 0 2 1 0 0 0 3 2 1 0 0 4 3 2 1 0 5 4 3 2 1,【分析】這類題的元素值排列很有規(guī)律,所以一般要從分析行數(shù)i、列數(shù)j與元素值的關(guān)系著手。分析上圖可知,當(dāng)i=j時,元素值隨行數(shù)i增加而增加,隨列數(shù)j增加而減小,這樣就很
34、容易得出其元素值與i,j的關(guān)系是i+1-j。,main(){int a[5][5],i,j; clrscr(); for (i=0;i<5;i++) {for (j=0;j<5;j++) { if ( 【6】 ) a[i][j]=0; else a[i][j]=【7】; printf("%3d",a[i][j]); } printf("\n");
35、}},a[5][5]分析:a00 a01 a02 a03 a04a10 a11 a12 a13 a14a20 a21 a22 a23 a24a30 a31 a32 a33 a34a40 a41 a42 a43 a44,答案:【6】i<j 【7】i+1-j,【字符數(shù)組】存放字符(每個數(shù)組元素存放一個字符) 1、字符數(shù)組的定義,如: char a[10]; int
36、a[10]; char a[2][3]; 字符數(shù)組——各個元素分別存放一個字符的數(shù)組。字符串—— “……” (字符串常量)以“\0”結(jié)尾,【注意】字符數(shù)組與字符串的區(qū)別:字符串存放在字符數(shù)組中,但字符數(shù)組與字符串可以不等長;字符串以“\0”結(jié)尾。即:C語言中無字符串變量,但可用一個字符數(shù)組存放字符串;反之,存放在字符數(shù)組中的并非都是字符串。,7.3、字符數(shù)組,【‘\0’】 ‘\0’是指ASCII代碼為0的字符。它既
37、不是一個普通的可顯示字符,也不是一個具有操作功能的字符,而是一個“空操作”字符。它不進(jìn)行任何操作,在字符數(shù)組中僅作字符串結(jié)束標(biāo)記使用?!甛0’可以用賦值方法賦給一個字符變量或字符型數(shù)組中的某個元素,如c[8]= ‘\0’。運(yùn)算時,按0(NULL)看待。如:#include Main(){ printf(“%d,%d,%d,%d”,NULL,-100,’\0’,-100); }結(jié)果:0,-100,0,-100,7.
38、3.2、字符數(shù)組的初始化,單字符方式 char a[10]={‘A’, ‘B’, ‘C’, ‘D’}; char b[2][3]={ ‘A’, ‘B’, ‘C’, ‘D’, ‘E’,’F’};,【注意】如果初值個數(shù)小于數(shù)組長度,則多余的數(shù)組元素自動為空字符(’\0’),字符串方式 char a[5]={“ABCD”}; char c[ ]=”ABCD”; char a[2][5]={{‘A’,’
39、B’,’C’,’\0’},{‘x’,’y’,’\0’}}; char a[2][5]={“ABC”,”XY”};二維數(shù)組可以認(rèn)為由若干個一維數(shù)組組成。,【例一】比較以下字符數(shù)組長度是否相同:,char a[ ]=”ABCD”; char b[ ]= {“ABCD”}; char c[ ]={‘A’,’B’,’C’,’D’};,(5) (5) (4),例 7.6 (p131)
40、 輸出一個字符串,main(){ char c[10]={'I',' ','a','m',' ','a','b','o','y'}; int i; for(i=0;i<10;i++) printf("%c
41、",c[i]); printf("\n");},運(yùn)行結(jié)果: I am a boy,例 7.7 (p131) 輸出一個鉆石圖形,main() { static char diamond[ ][5]={{'','','*'}, {'','*','
42、','*'},{'*','','','','*'},{'','*','','*'},{'','','*'}}; int i,j; for (i=0;i<5;i++) { for(j=0;j
43、<5;j++); printf("%c",diamond[i][j]); printf("\n"); } },先建立存儲空間(先定義一個字符數(shù)組),再輸入其元素值。如果 char a[10];除了直接在定義時初始化,定義后賦值的方法有:,法1:,逐個元素賦值 a[0]=’A’,a[1]=’X’;,法2:,循環(huán)+scanf(
44、“%c”, &…); /*用格式符%c逐個字符輸入/輸出*/ for (i=0;i<10;i++) scanf(“%c”,&a[i]);,法3:,scanf(“%s”, 字符數(shù)組名); (用于從鍵盤接收一個不帶空格的字符串scanf(“%s”,a); /*數(shù)組名代表該字符數(shù)組(字符串)的首地址,不可加&號*/,【注意】此法可自動在所輸入的字
45、符串末尾加上’\0’。但輸入的字符串中不能有空格(C語言規(guī)定scanf用%s時,以空格或回車符作為字符串的間隔符。所以,上例中,如果從鍵盤輸入“Computer”然后回車,則數(shù)組a存放的是”Computer\0”。如果輸入“Turbo C“,數(shù)組a中實際只存放”Turbo\0”。,7.3.5-A、字符數(shù)組的輸入,法4:gets(字符數(shù)組名); (用于從鍵盤接收 一個任意字符串),gets(a)執(zhí)行時,將一直讀取用戶從鍵盤輸入的所有字
46、符,直到遇到回車符(’\n’)為止。成功:返回數(shù)組a首地址,否則返回NULL。gets(a)亦會自動在字符串末尾加上’\0’(代替’\n’)。,【注意】如果輸入的字符長度(含’\0’)超過字符數(shù)組定義的長度,將會引起出錯。,7.3.5-B、字符數(shù)組的輸出,,法1:逐個元素輸出: 循環(huán)+printf(“%c”,…);法2:字符串輸出: printf(“%s”,字符數(shù)組名);法3:字符串輸出: put
47、s(字符數(shù)組名);將一個以NULL(’\0’)結(jié)尾的字符串輸出到屏幕上,并自動換行。,【注意】,1、 常用s[i] 作循環(huán)條件,當(dāng)循環(huán)(i遞增)到字符串結(jié)束處(’\0’)便自動結(jié)束循環(huán)。 2、 典型結(jié)構(gòu):如果s是字符串,則下列結(jié)構(gòu)可以將s中不符合條件的字符刪去。,int i, j; for (i=0,j=0; str[i]; i++) if (條件) str[j++] =
48、str[i]; str[j] = '\0’;,例如: 程序中有下列語句: char str1[5],str2[5],str3[5]; scanf("%s%s%s",str1,str2,str3); 運(yùn)行時輸入數(shù)據(jù): How are you?,若改為: char str[13]; scanf("%s",s
49、tr); 運(yùn)行時輸入數(shù)據(jù): How are you?,【例】下列程序段的運(yùn)行結(jié)果是:,結(jié)果:(ab),char a[5]={‘a(chǎn)’,’b’, ’\0’,’d’,’\0’};printf(“%s”,a);,說明:%s的作用是輸出一個字符串,直到遇到’\0’為止。,注意:在二維數(shù)組中,雙下標(biāo)引用——某行某列的某個元素 單下標(biāo)引用——某行的字符串,【例】分析以下程序的運(yùn)行結(jié)果:
50、,main(){char word[3][10];int i;for (i=0;i<3;i++) scanf("%s",word[i]);printf("%s",word[1]);},運(yùn)行時,輸入:12345abcdef ABCDEFG,結(jié)果:abcdef,【注】word[i]第i+1行word元素首地址(二維數(shù)組用單下標(biāo)表示某行的字符串)
51、。,(#include)puts 輸出字符串 gets 輸入字符串 (#include) strcat 字符串連接 strcpy 字符串復(fù)制 strcmp 字符串比較 strlen 字符串長度 strlwr 將字符串中的大寫字符轉(zhuǎn)換為小寫字符 strupr 將字符串中的小寫字符轉(zhuǎn)換為大寫字符,7.3.6字符串處理函數(shù),① get
52、s( )和puts( )② strcpy( ) 字符串考貝函數(shù)(包含在string.h中,下同)形式: strcpy(目的字符數(shù)組,源字符串);作用: 將源字符串考貝到目的字符數(shù)組中,直到遇到源 字符串的終止符’\0’為止。 函數(shù)返回值:目的字符數(shù)組的地址。,注意:目的字符數(shù)組要定義得足夠大。若要將一個字符串常量或從某一首地址開始的字符串復(fù)制給別的數(shù)組,只能用本函數(shù)或指針。,【例一】,main( )
53、{ char a[ ]=“abcde”; char b[10]; b = “abcde”; b = a; /*編譯出錯*/},【討論】編譯出錯原因何在?a,b都是兩個數(shù)組定義時分配的內(nèi)存存儲單元首地址,是個常量,不能改變(不能賦值)。,#include “string.h”main( ){ char s[10],sp[ ]=“HELLO”; strcpy(s,sp); s[0]=‘h’;
54、 s[6]=‘!’; puts(s);},結(jié)果:hELLO,【例二】以下程序的輸出結(jié)果是 。,【討論】結(jié)果為什么不是:hELLO! 如果讓s[5]=’!’,結(jié)果又會如何?(結(jié)果:hELLO后面跟了一堆亂碼)如果是拷貝字符串的一部分,可用函數(shù)strncpy(目的字符數(shù)組,源字符串,拷貝字符數(shù)),【例三】以下程序的輸出結(jié)果是 。,#include “string.h”main( ){ char s[
55、 ]=“This is a source string.”, b[20]; strncpy(b,s,16); b[16] = ‘\0’; printf(“%s\n”,b);},結(jié)果:This is a source,③strcat( ) 字符串連接函數(shù),形式:strcat(目的字符數(shù)組,源字符串); 作用:將源字符串連接到目的字符數(shù)組后面。 函數(shù)返回值:目的字符數(shù)組的地址。,注意:目的字符數(shù)組要定
56、義得足夠大。,【例四】以下程序的輸出結(jié)果是 。,#include "string.h"main(){char a[ ]="abcde"; char b[ ]="12345"; strcat(b,a); printf("%s,%s\n",a,b);},結(jié)果:abcde,12345abcde,【討論】程序執(zhí)行完后出錯(數(shù)組b長度定義不夠
57、,將數(shù)組b的長度定義11,則出錯消失),【例五】以下程序的輸出結(jié)果是 。,#include "string.h"main(){ char a[80]=“AB”,b[80]=”LMNP”; int i=0; strcat(a,b); while (a[i++]!=’\0’) b[i]=a[i]; puts(b);},結(jié)果:LBLMNP (注意b[i]=a[i]是從i=1開始),④
58、strcmp( ) 字符串比較函數(shù),形式:strcmp(字符串1,字符串2); 作用:對兩個字符串從各自第一個字符開始進(jìn)行逐一比較,直到對應(yīng)字符不相同或到達(dá)串尾為止 函數(shù)返回值:確定了比較結(jié)果—— 小于0 字符串1小于字符串2 等于0 字符串1等于字符串2 大于0 字符串1大于字符串2,【例六】運(yùn)行以下程序時,從鍵盤輸入:BOOKCUTGAMEPA
59、GE(表示回車),則運(yùn)行結(jié)果是什么?,#include “string.h”main(){int i; char str[10],temp[10]=”Control”; for ( i=0; i<4; i++) { gets(str); if(strcmp(temp,str)<0) strcpy(temp,str); }puts(temp);},變量跟蹤:temp s
60、tr 比較i=1 Control BOOK >0i=2 Control CUT >0i=3 Control GAME <0 GAMEi=4 GAME PAGE <0 PAGE,⑤strlen( ) 字符串長度函數(shù),形式:strlen(字符串)作用:測試所給字符串的實際字符個數(shù)(不包括’\0’)函數(shù)返回值:實際
61、字符個數(shù),【例七】以下程序段的運(yùn)行結(jié)果是什么?,char a[ ]=“\t\r\\\0will\n”;printf(“%d,%d”,sizeof(a),strlen(a));,結(jié)果:10,3,【討論】如果中間不是0(零)而是字母O,結(jié)果是什么?(10,9),⑥strupr( )和strlwr( ) 大小寫轉(zhuǎn)換函數(shù),strupr(字符串) 小寫→大寫 strlwr(字符串) 大寫→小寫,應(yīng) 用 舉 例,應(yīng)用
62、舉例-1 (習(xí)題7.13),題目: 接受鍵盤輸入的兩個字符串,并將其首尾相接后輸出。每個字符串內(nèi)部不含空格。(將兩個字符串連接起來,不要用strcat函數(shù))分析:數(shù)據(jù)結(jié)構(gòu):字符串的存儲需要用字符數(shù)組算法要點:字符串輸入,可以用具有詞處理功能的scanf( )函數(shù)字符串拼接方法:先找到第一個字符串的末尾,然后將第二個串的字符逐個添加到末尾。注意,要去掉第一個串的結(jié)束符'\0',但第二個串的結(jié)束符'\
63、0'要添加進(jìn)去。,main(){ char str1[50], str2[20]; int i=0, j=0; printf("Enter string No.1:\n"); scanf("%s",str1); printf("Enter string No.2:\n"); scanf("%s",str2)
64、; while(str1[i] != '\0') i++; while((str1[i++]=str2[j++])!='\0') ; printf("string No.1->%s\n",str1); },,隨著j++的移動,str2的串結(jié)束標(biāo)志“\0”也被賦到str1中,此時循環(huán)結(jié)束。,運(yùn)行結(jié)果:Enter string No.
65、1: abcdefghEnter string No.2: IJKLMNOPQRSstring No.1->abcdefghIJKLMNOPQRS,應(yīng)用舉例-3(參考習(xí)題7.5),題目:把輸入的字符串逆序排列,并顯示。分析:數(shù)據(jù)結(jié)構(gòu): 輸入的字符串用字符數(shù)組存放。算法要點: 逆序排列用交換算法,求出
66、字符串最后一個字符的下標(biāo),然后將第一個字符和最后一個字符交換,第二個和倒數(shù)第二個交換,……,#include “stdio.h”#include “string.h”main(){ char str[80]; int c,i,j; printf("Enter a string:\n"); scanf("%s",str); for(i=0, j=strlen(
67、str)-1; i<j ; i++, j-- ) { c=str[ i ]; str[ i ]=str[ j ]; str[ j ]=c; } printf("\nReversed string:\n%s\n",str);},運(yùn)行結(jié)果:Enter a string: abcdefghR
68、eversed string: hgfedcba,應(yīng)用舉例-4 (參考習(xí)題7.10),題目:從鍵盤輸入字符,以 ctrl+z 結(jié)束,統(tǒng)計輸入的數(shù)字 0~9、空白符和其它字符的個數(shù)。分析:[數(shù)據(jù)結(jié)構(gòu)]1、定義一個具有 10 個元素的整型數(shù)組來存放數(shù)字 0~9 的個數(shù)。2、定義兩個整型變量來存放空白符和其它字符的 個數(shù)。 [算法要點]1、計數(shù)用的數(shù)組和變量要初始化為0。2、用循
69、環(huán)結(jié)構(gòu)處理字符讀入,內(nèi)嵌分支結(jié)構(gòu)處理 計數(shù)。,,#includemain( ){ int c, i, nwhite, nother, ndigit[10]; nwhite=nother=0; for(i=0;i='0'&&c<='9') ++ndigit[ c-'0' ]; else if (c=='
70、; ‘ || c=='\n‘ || c=='\t') ++nwhite; else ++nother; for(i=0; i<10; i++) printf("digit '%d':%d\n", i, n
71、digit[i]); printf("white space:%d\n", nwhite); printf("other character:%d\n", nother);},注: c為int型,所以它為輸入字符的ASIC碼,運(yùn)行結(jié)果:The use of the double colon in front ofthe variable name, in lines 11
72、, 13, and16, instructs the system that we areinterested in using the global variablenamed index. digit '1':4 digit '2':0 digit '3':1 digit '4':0
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言實驗6一維數(shù)組和二維數(shù)組
- perl 數(shù)組
- 指針和數(shù)組區(qū)別
- 數(shù)組去重復(fù)
- 數(shù)組編程練習(xí)
- 實驗6數(shù)組的使用
- 數(shù)組函數(shù)講座
- 數(shù)組與指針
- 數(shù)組的循環(huán)移位
- 數(shù)組的讀入讀出
- 第五章 數(shù)組
- 實驗十一 數(shù)組(續(xù))
- 第5章-數(shù)組
- 數(shù)組習(xí)題課
- 高數(shù)組教研計劃
- 數(shù)組參考答案
- 怪物數(shù)組的查找方法
- 怪物數(shù)組的查找方法
- flash actionscript3.0多維數(shù)組的訪問以及多個數(shù)組的合并
- 小學(xué)奧數(shù)組合圖形的面積
評論
0/150
提交評論