版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C語言程序的數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)第2篇數(shù)據(jù)結(jié)構(gòu)+算法=程序C語言提供的數(shù)據(jù)持久化技術(shù),用來把數(shù)據(jù)存儲在外部存儲器上一種基于變量地址的派生數(shù)據(jù)類型一種描述一類對象屬性的構(gòu)造型數(shù)據(jù)類型一種用來組織同類型數(shù)據(jù)的構(gòu)造型數(shù)據(jù)類型數(shù)組結(jié)構(gòu)體指針文件這一篇主要介紹C語言提供的4種構(gòu)造型數(shù)據(jù)類型:順序地組織同類型數(shù)據(jù)——數(shù)組類型數(shù)組是一種用于組織同類型數(shù)據(jù)的構(gòu)造型數(shù)據(jù)類型,其特征是類型相同、順序存儲、隨機訪問、空間連續(xù)。第5單元5.1數(shù)組基礎(chǔ)數(shù)組定義、數(shù)組初始化、數(shù)組元素引用5.1.1撲克牌的表示與數(shù)組定義1.用數(shù)組存儲撲克牌101~113,分別表示紅桃A~紅桃K;201~213,分別表示方塊A~方塊K;301~313,分別表示梅花A~梅花K;401~413,分別表示黑桃A~黑桃K;501、502,分別表示大王、小王。這樣,54張撲克牌可以用一個int類型數(shù)組card表示和存儲,而每個元素以其在數(shù)組中下標(subscript)或索引(index)區(qū)分,如card[0]、card[1]、card[2]、…、card[53]分別表示54張撲克牌。2.數(shù)組的定義數(shù)組定義的一般格式是數(shù)組用一個名字存儲多個同類型數(shù)據(jù)。使用數(shù)組前,必須先進行定義。存儲撲克的數(shù)組card可以用如下聲明定義。
intcard[54];
數(shù)組類型
數(shù)組名
[數(shù)組長度
];這個聲明語句定義了一個名字為card的數(shù)組;它有54個元素——下標變量,稱數(shù)組大小為54;并且每個元素都是int類型,稱這是一個int類型的數(shù)組。3.數(shù)組初始化數(shù)組card的初始化語句為 intcard[54]={101,102,103,104,105,106,107,108,109,110,111,112,113,201,202,203,204,205,206,207,208,209,210,211,212,213,301,302,303,304,305,306,307,308,309,310,311,312,313,401,402,403,404,405,406,407,408,409,410,411,412,413,501,502};注1:C語言允許對數(shù)組中左面的部分元素初始化。例如,可以寫成intcard[54]={101,102};注2:對于將全部元素都初始化時,在聲明語句中可以省略數(shù)組長度。例如intcard[]={101,102,103,104,105,106,107,108,109,110,111,112,113,201,202,203,204,205,206,207,208,209,210,211,212,213,301,302,303,304,305,306,307,308,309,310,311,312,313,401,402,403,404,405,406,407,408,409,410,411,412,413,501,502};這樣,只有前兩個元素被初始化,后面元素的值還是不確定的只對部分元素初始化時,不可以省略數(shù)組大小。4.數(shù)組的特點各元素具有相同類型。這個類型稱為數(shù)組基類型。元素之間具有順序性——邏輯上的順序性和物理存儲上的順序性,并用下標表示這種順序關(guān)系。(1)(2)一個數(shù)組的所有元素占有一片連續(xù)的內(nèi)存空間。(3)數(shù)組的元素可以用下標隨機訪問。注意:下標從0開始(4)5.1.2撲克牌查找:數(shù)組元素引用與數(shù)組名參數(shù)1.數(shù)組元素的引用數(shù)組名加上括在方括號中的下標。例如card[0]、card[1]、card[2]、card[3]、…的語法意義,就相當于一組變量,稱為下標變量。用下標變量可以隨機地訪問數(shù)組中的任何一個元素,對其賦值或引用其值。代碼5.1用賦值方法給給定每張撲克克牌的值,輸輸出各張撲克克牌的值并搜搜索一張牌。。#include<stdio.h>intmain(void){intcard[54],i,j,k,x,flag=-1;/*數(shù)組元素賦值值*/for(i=0;i<4;i++)/*在重復(fù)結(jié)構(gòu)中中給前52個元素賦值*/for(j=0;j<13;j++)card[i*13+j]=100*(i+1)+j+1;card[52]=501;/*給最后兩張撲撲克牌賦值*/card[53]=502;/*輸出各張牌的的值*/for(i=0;i<=53;i++){printf("card[%d]=%d,",i,card[i]);}/*搜索一張撲克克牌*/printf("\n輸入要查找的的牌:");scanf(“%d”,&x);for(k=0;k<54;k++)/*搜索為x的牌 */if(card[k]==x){flag=k;break;}if(flag==-1)printf("\n找不到要找的的牌!");elseprintf("\n這張牌是第%d張牌。",k);return0;}2.用函數(shù)實現(xiàn)數(shù)數(shù)組操作功能能與數(shù)組名參參數(shù)代碼5.3撲克牌搜索函函數(shù)。intsearchCard(intpk[54],intx){intk;for(k=0;k<54;k++)/*搜索為為x的牌*/if(pk[k]==x){returnk;}return-1;}代碼5.4函數(shù)searchCard()的測試試主函函數(shù)。。#include<stdio.h>intsearchCard(intpk[],intx);intmain(void){intx,f;intcard[54]={101,102,103,104,105,106,107,108,109,110,111,112,113,201,202,203,204,205,206,207,208,209,210,211,212,213,301,302,303,304,305,306,307,308,309,310,311,312,313,401,402,403,404,405,406,407,408,409,410,411,412,413,501,502};printf("\n輸入要要查找找的牌牌:");scanf("%d",&x);f=searchCard(card,x);if(f==-1)printf("\n找不到到要找找的牌牌!\n");elseprintf("\n要找的的是第第%d張牌??!\n",f);return0;}在C語言中中數(shù)組組名有有兩種種含義義:一是用用來標標識數(shù)數(shù)組;;二是代代表數(shù)數(shù)組的的首地地址。。因此,,數(shù)組組名作作為函函數(shù)參參數(shù),,在函函數(shù)被被調(diào)用用時所所傳遞遞的不不是數(shù)數(shù)組的的內(nèi)容容,而而是數(shù)數(shù)組在在內(nèi)存存中的的起始始地址址。使用數(shù)數(shù)組名名作為為函數(shù)數(shù)參數(shù)數(shù),需需要用用一對對方括括號明明確地地指明明它是是一個個數(shù)組組,并并且要要指出出其數(shù)數(shù)組類類型。。除非特特殊情情況,,一般般數(shù)組組的大大小可可以不不傳輸輸。因因為在在調(diào)用用時,,會用用實際際數(shù)組組參數(shù)數(shù)的大大小來來初始始化形形式數(shù)數(shù)組參參數(shù)的的大小小。3.函數(shù)的的測試試要測試試函數(shù)數(shù),需需要為為之設(shè)設(shè)計一一個驅(qū)驅(qū)動函函數(shù)。。在C語言中中,一一般用用主函函數(shù)作作為驅(qū)驅(qū)動函函數(shù)。。驅(qū)動動函數(shù)數(shù)要為為被測測試函函數(shù)準準備所所需要要的實實際參參數(shù)。。對于于函數(shù)數(shù)searchCard(),需要要有一一個為為之提提供可可操作作的數(shù)數(shù)組。。撲克洗洗牌的的隨機機模擬擬1.一次洗洗牌模模擬算算法在0~53之間產(chǎn)產(chǎn)生一一個隨隨機數(shù)數(shù)rdm,將card[0]與card[rdm]交換;;在1~53之間產(chǎn)產(chǎn)生一一個隨隨機數(shù)數(shù)rdm,將card[1]與card[rdm]交換;;在2~53之間產(chǎn)產(chǎn)生一一個隨隨機數(shù)數(shù)rdm,將card[2]與card[rdm]交換;;……在i~53之間產(chǎn)產(chǎn)生一一個隨隨機數(shù)數(shù)rdm,將card[i]與card[rdm]交換;;……這個過過程可可以描描述為為:12…0i…rdm53…已洗好部分未洗好部分下標內(nèi)容tempfor(i=0;i<54;++i){在i到53之間產(chǎn)產(chǎn)生隨隨機數(shù)數(shù)rdm;將card[i]與card[rdm]交換;}代碼5.5一次洗洗牌模模擬函函數(shù)。。#include<stdlib.h>#include<time.h>voidshuffle(intcard[]){inti,rdm,temp;srand(time(00));/*用時間間函數(shù)數(shù)作為為偽隨隨機數(shù)數(shù)序列列種子子*/for(i=0;i<54;++i){rdm=rand()%(54-i)+i;/*生成一一個[i,53]之間的的隨機機數(shù)*/temp=card[i];/*交換兩兩個數(shù)數(shù)組元元素的的值*/card[i]=card[rdm];card[rdm]=temp;}}代碼5.6多次洗洗牌模模擬函函數(shù)。。#include<stdlib.h>#include<time.h>voidshuffle(intcard[]){inttimes=1;/*洗牌次次數(shù)*/inti,j,rdm,temp;srand(time(00));/*用時間間函數(shù)數(shù)作為為偽隨隨機數(shù)數(shù)序列列種子子*/printf("\n請輸入入洗牌牌次數(shù)數(shù):");scanf("%d",×);for(j=0;j<times;++j){/*重復(fù)n次*/for(i=0;i<54;++i){rdm=rand()%(54-i)+i;/*生成一一個[i,53]之間的的隨機機數(shù)*/temp=card[i];card[i]=card[rdm];card[rdm]=temp;}}}撲克牌牌整理理:數(shù)數(shù)組元元素排排序1.冒泡排排序算算法每當一一場撲撲克游游戲結(jié)結(jié)束后后,人人們總總要把把玩后后被搞搞得亂亂序的的牌進進行整整理,,即按按照一一定的的順序序排列列好。。對于于本例例來說說,就就是把把card數(shù)組中中的元元素進進行排排序。。排序((sorting)也稱稱分類類,是是指將將一列列數(shù)據(jù)據(jù)按一一定的的規(guī)則則排列列。排排序方方法很很多,,例如如,有有交換換法、、選擇擇法、、希爾爾法、、插入入法等等,不不同的的方法法效率率不同同。本本節(jié)僅僅介紹紹一種種在算算法上上具有有代表表性的的交換換排序序算法法——冒泡排序序。7 5 3 9 1 5 7 3 9 1 5 3 7 9 1 5 3 7 9 1 5 3 7 1 9 3 5 1 7 9 3 1 5 7 9 1 3 5 7 9 開始第1輪(n-1)次比較第2輪(n-2)次比較結(jié)束第n-1輪…2.撲克牌整整序函數(shù)數(shù)代碼代碼5.7使用冒泡泡排序法法的撲克克整理((排序))函數(shù)。。voidcardSort(intcard[]){/*撲克整理理方法*/inttemp,i,j;for(j=0;j<53-1;j++)/*總輪數(shù)*/for(i=0;i<53-j;i++)/*每輪中次次數(shù)*/if(card[i]>card[i+1]){temp=card[i];card[i]=card[i+1];card[i+1]=temp;}}3.撲克牌輸輸出函數(shù)數(shù)代碼補充代碼碼:撲克輸出出函數(shù)。。voidprintCards(intcard[],intcardNum){inti;for(i=0;i<cardNum;i++){printf("card[%d]=%d,",i,card[i]);}}4.整牌函數(shù)數(shù)的測試試#include<stdlib.h>#include<stdio.h>#include<time.h>/*time()要求的頭頭文件*/voidshuffle(intcard[]);/*洗牌函數(shù)數(shù)原型*/voidcardSort(intcard[]);/*整牌函數(shù)數(shù)原型*/voidprintCards(intcard[],intcardNum); /*輸出各張張撲克牌牌*/intmain(void){intcard[]={101,102,103,104,105,106,107,108,109,110,111,112,113,201,202,203,204,205,206,207,208,209,210,211,212,213,301,302,303,304,305,306,307,308,309,310,311,312,313,401,402,403,404,405,406,407,408,409,410,411,412,413,501,502};printf(“\n撲克牌的的初始序序列:\n");printCards(card,54);shuffle(card);printf(“\n洗牌后的的撲克牌牌序列::\n");printCards(card,54);cardSort(card);printf(“\n整牌后的的撲克牌牌序列::\n");printCards(card,54);return0;}撲克發(fā)牌牌:二維維數(shù)組應(yīng)應(yīng)用1.問題描述述與算法法框架發(fā)牌(deal)就是把把洗好的的牌,按按照約定定張數(shù)逐逐一發(fā)送送到玩家家(hand)手中。。hand1hand2hand3hand453…1314121617157861011919201821120453ij代碼5.8發(fā)牌算法法的C語言描述述。inti=0,j;for(j=0;j<cardNumber;++j){/*cardNumber為每人發(fā)牌數(shù)數(shù)目*/hand1[j]=card[i];card[i]=0;++i;/*card[i]=0象征牌已經(jīng)被被取走*/hand2[j]=card[i];card[i]=0;++i;/*++i為下一張牌下下標*/hand3[j]=card[i];card[i]=0;++i;hand4[j]=card[i];card[i]=0;++i;}2.用二維數(shù)組表表示玩家手中中的牌即一維維用于于表示示玩家家,另另一維維用于于表示示玩家家手中中的牌牌。例例如,,二維維數(shù)組組hand采用聲聲明語語句inthand[4][12];聲明后后,就就表示示開辟辟了一一個4××12個int類型存存儲空空間,,4表示4個玩家家,12表示每每人手手中有有12張牌。。每個個下標標變量量分別別表示示某個個人手手中的的某張張牌。。例如如,hand[2][5]表示第第3個玩家家手中中的第第6張牌。。(1)引用用二維維數(shù)組組元素素,要要使用用兩個個下標標,并并且它它們都都用從從0開始的的整型型常量量或整整型表表達式式表示示。(2)二維維數(shù)組組初始始化:例如::inta[3][2]={{1,2},{3,4},{5,6}};例如::inta[3][2]={1,2,3,4,5,6};(1)(2)例如::inta[][2]={{1,2},{3,4},{5,6}};(3)例如::inta[3][2]={{1},{3},{5}};可以將將行((第1維)的的長度度省略略,但第2維的大大小不不可以以省略略(4)還可以以對部部分元元素初初始化化,但這時時不可可缺省省第1維的大大小。。3.使用二二維數(shù)數(shù)組的的發(fā)牌牌方法法使用二二維數(shù)數(shù)組inthand[][]后,用用第1維表示示玩家家;用用第2維表示示給每每位玩玩家的的發(fā)牌牌數(shù),,各人人手中中的牌牌分別別是::hand[0][0]、hand[0][1]、hand[0][2]、……、hand[0][11];第1人手中中的牌牌為hand[1][0]、hand[1][1]、hand[1][2]、……、hand[1][11];第2人手中中的牌牌為hand[2][0]、hand[2][1]、hand[2][2]、……、hand[2][11];第3人手中中的牌牌為hand[3][0]、hand[3][1]、hand[3][2]、……、hand[3][11];第4人手中中的牌牌為對于更更一般般的情情況,,需要要先確確定玩玩家數(shù)數(shù)(handNumber)和每每人發(fā)發(fā)牌數(shù)數(shù)(cardNumber)代碼5.9使用二二維數(shù)數(shù)組的的發(fā)牌牌函數(shù)數(shù)。#definecardNumber12/*cardNumber為每人人發(fā)牌牌數(shù)目目*/#definehandNumber4/*handNumber為玩家家數(shù)目目*/voiddeal(intcard[],inthand[][cardNumber]){inti=0,j,k;for(j=0;j<cardNumber;++j)for(k=0;k<handNumber;++k){hand[k][j]=card[i];card[i]=0;++i;}}代碼碼5.10不傳傳遞遞二二維維數(shù)數(shù)組組的的發(fā)發(fā)牌牌函函數(shù)數(shù)。。#definecardNumber12/*cardNumber為每每人人發(fā)發(fā)牌牌數(shù)數(shù)目目*/#definehandNumber4/*handNumber為玩玩家家數(shù)數(shù)目目*/voiddeal(intcard[]){inti=0,j,k;inthand[handNumber][cardNumber];for(j=0;j<cardNumber;++j)for(k=0;k<handNumber;++k){hand[k][j]=card[i];card[i]=0;++i;}for(k=0;k<handNumber;++k){printf("\n第%d人手手中中的的牌牌為為:",k+1);for(j=0;j<cardNumber;++j)printf("%d",hand[k][j]);}}4.發(fā)牌牌函函數(shù)數(shù)的的測測試試使用用代代碼碼5.9中的的發(fā)發(fā)牌牌函函數(shù)數(shù),,調(diào)調(diào)用用函函數(shù)數(shù)需需要要為為其其傳傳輸輸如如下下數(shù)數(shù)據(jù)據(jù)::·每人人發(fā)發(fā)牌牌數(shù)數(shù)目目cardNumber。·玩家家數(shù)數(shù)目目handNumber?!ご鎯鋼淇丝伺婆频牡臄?shù)數(shù)組組首首地地址址。?!ご鎯ν嫱婕壹沂质种兄信婆频牡亩S維數(shù)數(shù)組組首首地地址址。。同時時,,調(diào)調(diào)用用函函數(shù)數(shù)還還需需要要對對撲撲克克牌牌數(shù)數(shù)組組進進行行了了初初始始化化。。#include<stdio.h>#definecardNumber12#definehandNumber4voiddeal(intcard[],inthand[][cardNumber]);voidprintCards(intcard[],intcardNum);/*輸出出各各張張撲撲克克牌牌*/intmain(void){inti;intcard[54]={101,102,103,104,105,106,107,108,109,110,111,112,113,201,202,203,204,205,206,207,208,209,210,211,212,213,301,302,303,304,305,306,307,308,309,310,311,312,313,401,402,403,404,405,406,407,408,409,410,411,412,413,501,502};printf("\n撲克克牌牌的的初初始始序序列列::");printCards(card,54);printf("\n發(fā)牌牌情情況況::");deal(card);printf("\n發(fā)牌牌后后的的底底牌牌::");printCards(card,54);return0;}#include<stdio.h>#definecardNumber12#definehandNumber4voiddeal(intcard[],inthand[][cardNumber]);voidprintCards(intcard[],intcardNum);/*輸出出各各張張撲撲克克牌牌*/intmain(void){inthand[handNumber][cardNumber];inti;intcard[54]={101,102,103,104,105,106,107,108,109,110,111,112,113,201,202,203,204,205,206,207,208,209,210,211,212,213,301,302,303,304,305,306,307,308,309,310,311,312,313,401,402,403,404,405,406,407,408,409,410,411,412,413,501,502};printf("撲克牌的初初始序列::");printCards(card,54);deal(card,hand);printf("發(fā)牌情況::");for(i=0;i<handNumber;i++){printf("玩家%d手中的牌為為:",i);printCards(hand[i],cardNumber);printf("\n");}printf("發(fā)牌后的底底牌:");printCards(card,54);return0;}5.2字符串C語言的字符符串是基于于字符數(shù)組組的字符串與字字符數(shù)組1.字符串的概概念在C語言中,把把用一對雙雙撇號括起起來的零個個或多個字字符序列稱稱為字符串串常數(shù)。如如“hello”、“ProgramminginC””等。字符串中的的字符數(shù)稱稱為該字符符串的長度度。如上述述字符串的的長度分別別為5和16。2.字符串中的的特殊字符符(1)轉(zhuǎn)義字符的的書寫。字符串以雙雙撇號為定定界符,但但雙撇號并并不屬于字字符串。要要在字符串串中插入撇撇號,應(yīng)借借助轉(zhuǎn)義字字符。例如如,要處理理字符串"Isay:"Goodbye!""時,可以把把它寫為"Isay:\"Goodbye!\""(2)格式字符串串中的格式式字符。格式化輸入入輸出函數(shù)數(shù)的格式參參數(shù)都是一一個字符串串也稱格式式字符串,,其中的格格式字符((如c、d、f等)都要以以%開頭書寫。。所有的轉(zhuǎn)義義字符,在在字符串中中都要以反反斜杠開頭頭書寫。3.字符串的存存儲與字符符數(shù)組在C語言中,字字符串用字字符數(shù)組存存儲,并且且在字符串串的末尾加加一個字符符串結(jié)束標標志——轉(zhuǎn)義字符“\0”。如字符串串“hello”在內(nèi)存中存存儲為注意字符常常數(shù)與字符符串常數(shù)的的區(qū)別,例如:‘A’是一個字符符常數(shù),用用65存儲;而““A”是一個字符符串常數(shù),,用65\0存儲?!肀硎疽粋€空空格,用32存儲;而““”表示一一個空字符符串,用\0存儲。hello\04.字符數(shù)組的的定義及初初始化字符數(shù)組是是以字符為為元素的數(shù)數(shù)組,它的的定義與初初始化方法法與一維數(shù)數(shù)組相同。。例如:charstr1[]={'C','h','i','n','a'};charstr2[12]={'C','','p','r','o','g','r','a','m','i','n','g'};字符串是特特殊的字符符數(shù)組,以以字符串結(jié)結(jié)束標志'\0'為最后一個個元素。5.字符串的定定義和初始始化可以有有如下幾種種形式:charstr1[6]={‘‘C’,‘‘h’,‘‘i’,‘‘n’,‘‘a(chǎn)’,‘‘\0’};/*基于字符的初初始化*/charstr1[6]={““China”};/*字符串形式的的初始化*/charstr1[6]=“China””;/*字符串形式的的初始化*/charstr1[]={‘C’’,‘h’’,‘i’’,‘n’’,‘a(chǎn)’’,‘\0’};/*基于字符的初初始化*/charstr1[]={“China”};/*字符串形式的的初始化*/charstr1[]=“China”;/*字符串形式的的初始化*/使用字符串形形式的初始化化方式,C編譯器將自動動加上一個'\0'標志。因此給給定的字符數(shù)數(shù)組的大小要要比實際存儲儲的字符串中中的有效字符符數(shù)多1。6.為字符串常量量添加下標C++語言也允許用用下標來引用用字符串常量量中的一個字字符,例如charch;ch=“Iamastudent.”[8]printf(“%c””,ch);將輸出字符‘‘t’。這在某些情情況下會比較較方便。字符串輸入輸輸出在定義了一個個字符串后,,可以采用兩兩類庫函數(shù)進進行輸入/輸出操作。使使用這兩類庫庫函數(shù),必須須在程序中使使用文件包含含語句#include<stdio.h>。輸入函數(shù)輸出函數(shù)格式化輸入輸出庫函數(shù)scanf()printf()非格式化輸入輸出庫函數(shù)gets()puts()1.使用%s格式的格式化化輸入函數(shù)scanf()在scanf()/printf()函數(shù)中使用%s格式,可以實實現(xiàn)字符數(shù)組組內(nèi)容的一次次性輸入/輸出。若字符符串變量名為為str,則可以使用用下面的語句句進行整體的的鍵盤輸入::scanf("%s",str);注意(1):在scanf()函數(shù)中,若數(shù)數(shù)據(jù)參考處使使用的是數(shù)組組名,則數(shù)組組名前不可以以加取地址符符&。因為數(shù)組名名本身就是一一個地址。注意(2):使用%s格式的scanf()函數(shù)進行字符符串的鍵盤輸輸入時,遇到到一個空白類類字符(空格格、制表符,,Enter等)就表示一一個字符串的的結(jié)束,系統(tǒng)統(tǒng)會就此給它它加上一個字字符串結(jié)束標標志‘\0’。例如對于語語句:scanf("%s",str);若從鍵盤上鍵鍵入Computer&C↙則在變量str中保存的是Computer\0注意(3):若用已經(jīng)經(jīng)定義的長度度較大字符數(shù)數(shù)組存儲字符符串,則數(shù)組組中的空余元元素將用'\0'填充。例如charstr1[9],str2[9],str3[9];scanf("%s%s%s",str1,str2,str3);若從鍵盤上鍵鍵入Computer&C↙則這三個數(shù)組組中的存儲情情況為:str1str2str3Computer\0&\0\0\0\0\0\0\0\0C\0\0\0\0\0\0\0\02.使用%s格式的格式化化輸出函數(shù)printf()使用下面的語語句可以進行行字符串的整整體輸出printf("%s",str);注意:輸出的的內(nèi)容中不包包括字符串結(jié)結(jié)束標志'\0'。3.使用字符串處處理函數(shù)gets()和puts()實現(xiàn)非格式化化輸入輸出puts()函數(shù)用來輸出出一個字符串串,它的作用用與printf(“%s””,字符串)相同。但用puts()函數(shù)一次只能能輸出一個字字符串,不能能企圖用puts(str1,str2)的形式一次輸輸出兩個字符符串。gets()函數(shù)是一個用用來輸入一個個字符串的函函數(shù)。代碼5.11#include<stdio.h>#defineN13intmain(void){charstr[N];printf("請輸入一個字字符串:\n");gets(str);puts(str);puts(str);return0;}(1)用gets()可以讀入包括括空格字符的的字符串。(2)用puts()輸出時,將““\0”字符轉(zhuǎn)換成換換行符,因此此用puts()時一次輸出一一行,不必另另加換行符。。(3)gets()和puts()函數(shù)都是具有有返回值的函函數(shù),它們執(zhí)執(zhí)行成功時將將返回字符數(shù)數(shù)組首元素的的地址。請輸入一個字字符串:Computer&C?Computer&CComputer&C代碼5.12#include<stdio.h>#defineN13intmain(){charstr[N];printf("請輸入一一個字符符串:\n");printf("gets的返回值值為:%d\n", printf("puts的返回值為:%d\n",puts(str));return0;}字符串的的其他操操作1.字符串操操作庫函函數(shù)字符串不不能直接接用系統(tǒng)統(tǒng)定義的的操作符符進行賦賦值、比比較等操操作。下下表是其其中應(yīng)用用較多的的幾個字字符串操操作庫函函數(shù)。函數(shù)的一般形式功能說明返回值strlen(字符串)求字符串長度有效字符個數(shù)strcpy(字符串1,字符串2)將字符串2復(fù)制到字符串1中字符串1的起始地址strcmp(字符串1,字符串2)比較兩個字符串字符串1==字符串2,返回0;字符串1>字符串2,返回正整數(shù);字符串1<字符串2,返回負整數(shù)strchr(字符串,字符)在字符串中找字符找到,返回字符第1次出現(xiàn)位置;找不到,返回空地址;strcat(字符串1,字符串2)將字符串2連接到字符串1中有效字符后返回字符串1的首地址這些庫函函數(shù)的聲聲明都包包含在頭頭文件string.h中代碼5.13字符串函函數(shù)的簡簡單應(yīng)用用#include<stdio.h>#include<string.h>/*字符串處處理函數(shù)數(shù)頭文件件*/#defineN120#defineN28intmain(void){charc charstr1[N1]="abcdefg",str2[N2]="hijklm"; /*定義并初始化兩個字符串*/ printf("\nstr1=%s,str2=%s\n",str1,str2); /*輸出兩個字符串初始值*/ printf("\nstrcat的返回值:%ld\n",strcat(str1,str2)); /*將str2連接到str1*/ printf("\n連接后的str1=%s\n",str1); printf("\n輸入要查找的字符\n"); /*在str1中查找字符 */ scanf("%c",&c); printf("\nstrchr的返回值:%ld\n",strchr(str1,c));
printf("\nstrlen的返回值:%d\n",strlen(str1));/*求字符串str1的長度 */return0;}代碼5.14輸入5個字符串串,輸出出其中最最小的字字符串。。#include<stdio.h>#include<string.h>#defineN10intmain(void){charstr[N],min inti; printf("先輸入第1個字符串:"); gets(min); /*先輸入一個字符串到min中*/ for(i=2;i<=5;i++){ /*輸入后面第2~5個字符串 */ printf("輸入第%d個字符串:",i); gets(str); if(strcmp(min,str)>0) /*總把最小的字符串放到min中*/ strcpy(min,str); }printf("\n最小的字符串是:%s\n",min); return0;}字符串之之間不能能進行賦賦值操作作,只能能采用復(fù)復(fù)制的方方法把一一個字符符串保到到另一個個字符串串空間((即字符符數(shù)組))中。2.字符串操操作代碼碼分析字符串函函數(shù)庫中中的標準準函數(shù)都都是設(shè)計計得非常常精辟的的一些函函數(shù)。分分析這些些代碼,,對于提提高程序序設(shè)計能能力非常常有用。。下面舉舉例分析析這些函代碼5.15計算字符符串長度度。intstrlenth(chars[]){inti=0,len=0;while(s[i++])len++;returnlen;}代碼5.16字符串復(fù)復(fù)制。voidstrcopy(chardest[],charsrc[]){inti=0,j=0;while((dest[i++]=src[j++])!=’\0’);}d\0destcbaidef\0srccba\0\0\0jTheendThankYou!9、靜夜四無鄰鄰,荒居舊業(yè)業(yè)貧。。1月-231月-23Sunday,January1,202310、雨中黃葉葉樹,燈下下白頭人。。。20:51:0920:51:0920:511/1/20238:51:09PM11、以我獨沈沈久,愧君君相見頻。。。1月-2320:51:0920:51Jan-2301-Jan-2312、故人江海海別,幾度度隔山川。。。20:51:1020:51:1020:51Sunday,January1,202313、乍乍見見翻翻疑疑夢夢,,相相悲悲各各問問年年。。。。1月月-231月月-2320:51:1020:51:10January1,202314、他鄉(xiāng)生生白發(fā),,舊國見見青山。。。01一一月20238:51:10下午午20:51:101月-2315、比不不了得得就不不比,,得不不到的的就不不要。。。。。一月238:51下下午午1月-2320:51January1,202316、行行動動出出成成果果,,工工作作出出財財富富。。。。2023/1/120:51:1020:51:1001January
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 民間擔保合同格式撰寫
- 廢鐵購銷合同范本2024年
- 咨詢服務(wù)銷售合同范本2024年
- 技術(shù)攻關(guān)與協(xié)作合同
- 中介人居間的合同范本2024年
- 抗體委托生產(chǎn)合同范文
- 教師短期用工合同范本
- 合同履行糾紛案例
- 女方離婚協(xié)議書樣本
- 2024年車位轉(zhuǎn)讓協(xié)議模板
- 植物盆栽課件教學課件
- 2024年中小學天文知識競賽初賽試卷
- 2024年10月時政100題(附答案)
- 學生校外托管協(xié)議書
- 建筑幕墻施工方案
- 第二章 地圖(考點串講課件)七年級地理上學期期中考點大串講(人教版2024)
- 2024年危險化學品經(jīng)營單位安全管理人員證考試題庫
- JJF(蘇) 275-2024 測斜儀校驗臺校準規(guī)范
- 【9道期中】安徽省黃山地區(qū)2023-2024學年九年級上學期期中考試道德與法治試題(含詳解)
- 2024年醫(yī)療污水處理管理制度范本(二篇)
- 2024年健身房管理制度(六篇)
評論
0/150
提交評論