《二叉樹(shù)的建立》課件_第1頁(yè)
《二叉樹(shù)的建立》課件_第2頁(yè)
《二叉樹(shù)的建立》課件_第3頁(yè)
《二叉樹(shù)的建立》課件_第4頁(yè)
《二叉樹(shù)的建立》課件_第5頁(yè)
已閱讀5頁(yè),還剩79頁(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ù)的建立循環(huán)鏈表文件操作1精選ppt二叉樹(shù)的建立循環(huán)鏈表文件操作1精選ppt二叉樹(shù)的建立2精選ppt二叉樹(shù)的建立2精選ppt二叉樹(shù)的建立建立二叉樹(shù)的過(guò)程是一個(gè)“插入”過(guò)程,下面我們用一個(gè)例子來(lái)講解這一過(guò)程。我們想建立這樣一棵二叉樹(shù),樹(shù)中的每一個(gè)結(jié)點(diǎn)有一個(gè)整數(shù)數(shù)據(jù)名為data,有兩個(gè)指針:左指針L,右指針R,分別指向這個(gè)結(jié)點(diǎn)的左子樹(shù)和右子樹(shù),顯然可以用如下名為T(mén)REE的結(jié)構(gòu)來(lái)描述這種結(jié)點(diǎn):

structTREE { intdata; structTREE*L,*R; }3精選ppt二叉樹(shù)的建立建立二叉樹(shù)的過(guò)程是一個(gè)“插入”過(guò)程,下面我們用一對(duì)二叉樹(shù)最重要的是根,它起定位的作用,因此,首先建立的是根結(jié)點(diǎn)。也就是說(shuō),如果從鍵盤(pán)輸入數(shù)據(jù)來(lái)建立二叉樹(shù),第一個(gè)數(shù)據(jù)就是這棵樹(shù)的根的數(shù)據(jù),之后再輸入的數(shù)據(jù),每一個(gè)都要與根中的數(shù)據(jù)作比較,以便確定該數(shù)據(jù)所在結(jié)點(diǎn)的插入位置。假定我們這里依然用圖1的中序遍歷的方式。即如果待插入結(jié)點(diǎn)的數(shù)據(jù)比根結(jié)點(diǎn)的數(shù)據(jù)小,則將其插至左子樹(shù),否則插入右子樹(shù)。定義一個(gè)遞歸函數(shù)

voidinsert(structTREE**proot,structTREE*p)其中,指針p指向含有待插入數(shù)據(jù)的結(jié)點(diǎn)。 proot為樹(shù)的根指針的地址。 insert函數(shù)棵理解為將p結(jié)點(diǎn)插入到*proot所指向的樹(shù)中。4精選ppt對(duì)二叉樹(shù)最重要的是根,它起定位的作用,因此,首先建立的是根結(jié)insert(proot,p)可用下列與或結(jié)點(diǎn)圖來(lái)描述5精選pptinsert(proot,p)可用下列與或結(jié)點(diǎn)圖來(lái)描述5精注意在上圖中proot是被調(diào)用函數(shù)的形參。從前面對(duì)它的定義看,proot是指針的指針,實(shí)際上是指向二叉樹(shù)根結(jié)點(diǎn)的指針的指針,或者說(shuō)是指向二叉樹(shù)根結(jié)點(diǎn)的指針的地址。如下圖。因此,在主程序調(diào)用insert函數(shù)時(shí),根結(jié)點(diǎn)proot實(shí)參&root實(shí)參為&root,p形參為proot,

p下面是建立二叉樹(shù)的參考程序。6精選ppt注意在上圖中proot是被調(diào)用函數(shù)的形參。從前面對(duì)它的定義看#include<stdio.h> //預(yù)編譯命令#include<malloc.h> //內(nèi)存空間分配#definenull0 //定義空指針常量#defineLENsizeof(structTREE) //定義常量,表示結(jié)構(gòu)長(zhǎng)度structTREE //結(jié)構(gòu)聲明{ intdata; //整型數(shù)

structTREE*L,*R; //TREE結(jié)構(gòu)指針};7精選ppt#include<stdio.h> //預(yù)編譯命令7//被調(diào)用函數(shù)insert,將結(jié)點(diǎn)插入二叉樹(shù)voidinsert(structTREE**proot,structTREE*p){ //函數(shù)體開(kāi)始

if(*proot==null) //如果根結(jié)點(diǎn)為空

{ *proot=p; //將結(jié)點(diǎn)p插入根結(jié)點(diǎn)

return; //返回

} else //根結(jié)點(diǎn)不為空

{ //如果p結(jié)點(diǎn)數(shù)據(jù)小于等于根結(jié)點(diǎn)數(shù)據(jù) if(p->data<=(*proot)->data)

insert(&((*proot)->L),p); //插入左子樹(shù)

else //如果p結(jié)點(diǎn)數(shù)據(jù)大于等于根結(jié)點(diǎn)數(shù)據(jù)

insert(&((*proot)->R),p); //插入右子樹(shù)

}} //函數(shù)體結(jié)束8精選ppt//被調(diào)用函數(shù)insert,將結(jié)點(diǎn)插入二叉樹(shù)8精選ppt//被調(diào)用函數(shù),形參為T(mén)REE結(jié)構(gòu)指針,輸出二叉樹(shù)內(nèi)容voidprint(structTREE*root) { //函數(shù)體開(kāi)始

if(root==null) //根或子樹(shù)根結(jié)點(diǎn)為空

return; //返回

print(root->L); //輸出左子樹(shù)內(nèi)容

printf("%d",root->data);//輸出根結(jié)點(diǎn)內(nèi)容

print(root->R); //輸出右子樹(shù)內(nèi)容} //被調(diào)用函數(shù)結(jié)束voidmain() //主函數(shù)開(kāi)始{ //函數(shù)體開(kāi)始 structTREE*root,*p; //TREE型結(jié)構(gòu)指針 inttemp; //臨時(shí)變量,用于用戶輸入數(shù)據(jù) root=null; //初始化二叉樹(shù)根結(jié)點(diǎn)為空 p=null; //初始化待插入結(jié)點(diǎn)的指針為空 printf("請(qǐng)輸入待插入結(jié)點(diǎn)的數(shù)據(jù)\n"); //提示信息 printf("如果輸入-1表示插入過(guò)程結(jié)束\n");//提示信息 scanf("%d",&temp); //輸入待插入結(jié)點(diǎn)數(shù)據(jù)9精選ppt//被調(diào)用函數(shù),形參為T(mén)REE結(jié)構(gòu)指針,輸出二叉樹(shù)內(nèi)容9精 while(temp!=-1) //當(dāng)型循環(huán),-1為結(jié)束標(biāo)志 { //循環(huán)體開(kāi)始 //為待插入結(jié)點(diǎn)分配內(nèi)存單元 p=(structTREE*)malloc(LEN); p->data=temp; //將temp賦值給p結(jié)點(diǎn)的數(shù)據(jù)域 p->L=p->R=null; //將p結(jié)點(diǎn)的左右指針域置為空 insert(&root,p); //將p結(jié)點(diǎn)插入到根為root的樹(shù)中, //&root表示二叉樹(shù)根結(jié)點(diǎn)的地址 printf("請(qǐng)輸入待插入結(jié)點(diǎn)的數(shù)據(jù)\n"); //提示信息 printf("如果輸入-1表示插入過(guò)程結(jié)束\n");//提示信息 scanf("%d",&temp); //輸入待插入結(jié)點(diǎn)數(shù)據(jù) } //循環(huán)體結(jié)束 if(root==null) //如果根結(jié)點(diǎn)為空 printf("這是一棵空樹(shù)。\n");//輸出空樹(shù)信息 else //根結(jié)點(diǎn)不為空 print(root); //調(diào)用print函數(shù),輸出二叉樹(shù)內(nèi)容} //主函數(shù)結(jié)束10精選ppt while(temp!=-1) //當(dāng)型循環(huán),-1循環(huán)鏈表11精選ppt循環(huán)鏈表11精選ppt循環(huán)鏈表例:猴子選大王。

n只猴子圍成一圈,順時(shí)針?lè)较驈?到n編號(hào)。之后從1號(hào)開(kāi)始沿順時(shí)針?lè)较蜃尯镒訌?,2,…,m依次報(bào)數(shù),凡報(bào)到m的猴子,都讓其出圈,取消候選資格。然后不停地按順時(shí)針?lè)较蛑鹨蛔寛?bào)出m者出圈,最后剩下一個(gè)就是猴王。12精選ppt循環(huán)鏈表例:猴子選大王。

n只猴子圍成一圈,順時(shí)針?lè)较驈?起始位置猴王123456783615284猴子被淘汰的順序演示:n=8,m=313精選ppt起始位置猴王123456783615284猴子被淘汰的順序說(shuō)明: 如圖1所示有8只猴子圍成一圈,m=3。從1#猴的位置開(kāi)始,順時(shí)針1至3報(bào)數(shù),第一個(gè)出圈的是3#;第二個(gè)出圈的是6#,第3個(gè)出圈的是1#;第4個(gè)出圈的是5#;第5個(gè)是2#,第6個(gè)是8#;第7個(gè)是4#。最后剩下一個(gè)是7#,它就是猴王。我們用循環(huán)鏈表來(lái)模擬這個(gè)選擇過(guò)程。14精選ppt說(shuō)明:14精選ppt1、定義一個(gè)名為mon的結(jié)構(gòu)

structmon

{

intnum; //整數(shù),表示猴子的編號(hào)

structmon*next; //指針,指向相鄰的下一只猴子

}2、將鏈表的頭指針head定義為全局變量。

structmon*head;3、主函數(shù)

用鍵盤(pán)輸入猴子數(shù)n,輸入數(shù)m,調(diào)用函數(shù)create建立一個(gè)循環(huán)鏈表,模擬眾猴圍成一圈的情況。該函數(shù)的實(shí)參為n。調(diào)用函數(shù)select,模擬1至m報(bào)數(shù),讓n-1只猴子逐一出列的過(guò)程。即在具有n個(gè)結(jié)點(diǎn)的循環(huán)鏈表按報(bào)數(shù)m刪除結(jié)點(diǎn)的過(guò)程。該函數(shù)的實(shí)參為m,最后輸出猴王的編號(hào)。15精選ppt1、定義一個(gè)名為mon的結(jié)構(gòu)

structmon

{

i4、建立循環(huán)鏈表的函數(shù)create(intnn)

其中nn為形式參數(shù)。要從編號(hào)1到編號(hào)nn。思路是(1)先做第1個(gè)結(jié)點(diǎn),讓其中的數(shù)據(jù)域p->num賦值為1,讓指針域賦值為null。之后讓鏈頭指針head指向第1個(gè)結(jié)點(diǎn)。利用指針q記住這個(gè)結(jié)點(diǎn),以便讓指針p去生成下面的結(jié)點(diǎn)。(2)利用一個(gè)計(jì)數(shù)循環(huán)結(jié)構(gòu),做出第2個(gè)結(jié)點(diǎn)到第nn個(gè)結(jié)點(diǎn)。并將相鄰結(jié)點(diǎn)一個(gè)接一個(gè)鏈接到一起。(3)最后一個(gè)結(jié)點(diǎn)要和頭結(jié)點(diǎn)用下一語(yǔ)句鏈接到一起

tail=q;tail->next=head;headtailq16精選ppt4、建立循環(huán)鏈表的函數(shù)create(intnn)

其中nn5、刪結(jié)點(diǎn)的函數(shù)select(intmm)

mm為形式參數(shù),從1至m報(bào)數(shù),凡報(bào)到mm者刪除其所在的結(jié)點(diǎn)。

設(shè)計(jì)兩個(gè)指針p和q。一開(kāi)始讓q指向鏈表的尾部q=tail。讓p指向q的下一個(gè)結(jié)點(diǎn)。開(kāi)始時(shí)讓p指向1#猴所在的結(jié)點(diǎn)。用一個(gè)累加器x,初始時(shí)x=0,從1#猴所在結(jié)點(diǎn)開(kāi)始讓x=x+1=1,如果mm是1的話,1#猴所在的p結(jié)點(diǎn)就要被刪除。有三條語(yǔ)句

printf(“被刪掉的猴子號(hào)為%d號(hào)\n”,p->num);

q->next=p->next;

free(p);1head28tailqp演示17精選ppt5、刪結(jié)點(diǎn)的函數(shù)select(intmm)

mm為形式參這里free(p)是釋放p結(jié)點(diǎn)所占用的內(nèi)存空間的語(yǔ)句。如果mm不是1而是3,程序會(huì)在do-while循環(huán)中,讓x加兩次1,q和p一起移動(dòng)兩次,p指向3#所在結(jié)點(diǎn),q指向2#所在結(jié)點(diǎn),之后仍然用上述三條語(yǔ)句刪去3#所在的結(jié)點(diǎn)。1head28qp34qppq演示18精選ppt這里free(p)是釋放p結(jié)點(diǎn)所占用的內(nèi)存空間的語(yǔ)句。如果m這個(gè)do-while循環(huán)的退出條件是q==q->next。即當(dāng)只剩下一個(gè)結(jié)點(diǎn)時(shí)才退出循環(huán)。當(dāng)然猴王非其莫屬了。這時(shí),讓頭指針head指向q,head是全局變量,在主程序最后輸出猴王時(shí)要用head->num。參考程序如下:7headq19精選ppt這個(gè)do-while循環(huán)的退出條件是q==q->next。即#include<stdio.h> //預(yù)編譯命令#include<malloc.h> //內(nèi)存空間分配#definenull0 //定義空指針常量//定義常量,表示結(jié)構(gòu)長(zhǎng)度#defineLENsizeof(structmon)structmon //結(jié)構(gòu)聲明{ intnum; //整型數(shù),用于記錄猴子號(hào)

structmon*next; //mon結(jié)構(gòu)指針};structmon*head,*tail; //mon結(jié)構(gòu)指針,全局變量20精選ppt#include<stdio.h> //預(yù)編譯命令20voidcreate(intnn) //被調(diào)用函數(shù){ //函數(shù)體開(kāi)始inti; //整型變量i,用于計(jì)數(shù) structmon*p,*q; //聲明mon結(jié)構(gòu)指針p,q

//為p分配內(nèi)存空間

p=(structmon*)malloc(LEN); p->num=1; //初始化p結(jié)點(diǎn)num域?yàn)? p->next=null; //初始化p結(jié)點(diǎn)next域?yàn)榭?head=p; //鏈表頭指針head賦值為p q=p; //q賦值為p21精選pptvoidcreate(intnn) //被調(diào)用函數(shù)21 for(i=2;i<=nn;i=i+1) //利用循環(huán)結(jié)構(gòu)構(gòu)造鏈表 { //循環(huán)體開(kāi)始 p=(structmon*)malloc(LEN);//為p分配內(nèi)存空間 p->num=i; //初始化p結(jié)點(diǎn)num域?yàn)閕,表示猴子號(hào) q->next=p; //將p結(jié)點(diǎn)加到鏈表尾部 q=p; //讓q指向鏈表尾部結(jié)點(diǎn) p->next=null; //鏈表尾部指向空 } //循環(huán)體結(jié)束 tail=q; //鏈表尾 tail->next=head;

//鏈表尾部指向鏈表頭, //形成循環(huán)鏈表} //函數(shù)體結(jié)束22精選ppt for(i=2;i<=nn;i=i+1) //利用循環(huán)結(jié)//被調(diào)用函數(shù)select,mm表示結(jié)點(diǎn)刪除間隔voidselect(intmm){ //函數(shù)體開(kāi)始 intx=0; //聲明整型值x,并初始化為0 structmon*p,*q; //聲明結(jié)構(gòu)指針p,q q=tail; //q賦值為tail,指向循環(huán)鏈表尾部

do //直到型循環(huán),用于循環(huán)刪除指定間隔的結(jié)點(diǎn) { //循環(huán)體開(kāi)始 p=q->next; //p賦值為q相鄰的下一個(gè)結(jié)點(diǎn) x=x+1; //x加1 if(x%mm==0) //x是否整除mm, { //表示是否跳過(guò)指定間隔

//輸出被刪掉的猴子號(hào) printf("被刪掉的猴子號(hào)為%d號(hào)\n",p->num); q->next=p->next; //刪除此結(jié)點(diǎn) free(p); //釋放空間 } elseq=p; //q指向相鄰的下一個(gè)結(jié)點(diǎn)p }while(q!=q->next); //剩余結(jié)點(diǎn)數(shù)不為1,則繼續(xù)循環(huán) head=q; //head指向結(jié)點(diǎn)q,q為鏈表中剩余的一個(gè)結(jié)點(diǎn)} //函數(shù)體結(jié)束23精選ppt//被調(diào)用函數(shù)select,mm表示結(jié)點(diǎn)刪除間隔23精選pvoidmain()

//主函數(shù)開(kāi)始{ //函數(shù)體開(kāi)始 intn,m;

//聲明整型變量n,m head=null; //初始化head為空

printf("請(qǐng)輸入猴子數(shù)\n"); //提示信息 scanf("%d",&n); //輸入待插入結(jié)點(diǎn)數(shù)據(jù) printf("請(qǐng)輸入間隔m\n"); //提示信息 scanf("%d",&m); //輸入間隔create(n); //調(diào)用函數(shù)create建立循環(huán)鏈表 select(m);

//調(diào)用函數(shù)select,找出剩下的猴子 printf("猴王是%d號(hào)\n",head->num); //輸出猴王} //函數(shù)體結(jié)束24精選pptvoidmain() //主函數(shù)開(kāi)始24精選ppt第十三講文件25精選ppt第十三講文件25精選ppt有關(guān)文件的概念和名詞文件——是信息的集合,是信息存放在外存中的一種形式??梢蚤L(zhǎng)期保存。

EOF——文件的結(jié)束符。

C語(yǔ)言中的文件視為信息流,文件的讀寫(xiě)是按順序進(jìn)行的。可以以字符為單位讀寫(xiě),也可以以“行”為單位讀寫(xiě)。一行是以“\n”為結(jié)束的一串字符。文件指針——是指向含有文件信息結(jié)構(gòu)的指針。文件指針又稱內(nèi)部文件名。

對(duì)文件進(jìn)行操作,先要將文件打開(kāi)。所謂“打開(kāi)文件”,就是在內(nèi)存中為文件建立一個(gè)緩沖區(qū),文件指針就要指向緩沖區(qū)的首地址。26精選ppt有關(guān)文件的概念和名詞文件——是信息的集合,是信息存放在外存中標(biāo)準(zhǔn)文件C語(yǔ)言中規(guī)定的標(biāo)準(zhǔn)文件有三個(gè):1、標(biāo)準(zhǔn)輸入文件(鍵盤(pán)),文件指針為stdin;2、標(biāo)準(zhǔn)輸出文件(顯示屏幕),文件指針為stdout;3、標(biāo)準(zhǔn)出錯(cuò)信息文件,文件指針為stderr。特點(diǎn)是這些文件在操作前或后,系統(tǒng)會(huì)自動(dòng)將其打開(kāi)或關(guān)閉,程序不需管。27精選ppt標(biāo)準(zhǔn)文件C語(yǔ)言中規(guī)定的標(biāo)準(zhǔn)文件有三個(gè):27精選ppt一般文件特點(diǎn):操作前需打開(kāi),操作后需關(guān)閉。開(kāi)和閉均是通過(guò)函數(shù)進(jìn)行的。打開(kāi)文件就是要在內(nèi)存中建立緩沖區(qū),如打開(kāi)成功,打開(kāi)函數(shù)返回一個(gè)內(nèi)存地址值,由一個(gè)文件指針接收。以后的操作使用這個(gè)指針。如內(nèi)存不可建立緩沖區(qū),則打開(kāi)失敗,打開(kāi)函數(shù)返回NULL。關(guān)閉文件很重要,是要將文件送回磁盤(pán),并從內(nèi)存中清除。及時(shí)釋放內(nèi)存空間,并可保證文件安全。28精選ppt一般文件特點(diǎn):操作前需打開(kāi),操作后需關(guān)閉。開(kāi)和閉均是通過(guò)函數(shù)標(biāo)準(zhǔn)文件的操作1、getchar(),從標(biāo)準(zhǔn)輸入文件<stdio.h>中使用該函數(shù)可以得到一個(gè)字符。返回值是該字符的ASCII碼值。因此可見(jiàn)返回值是int型的。2、putchar(),將字符代碼送至屏幕上,顯示成字符。29精選ppt標(biāo)準(zhǔn)文件的操作1、getchar(),從標(biāo)準(zhǔn)輸入文件<std#include<stdio.h>voidmain() //主函數(shù){ //主函數(shù)開(kāi)始

inttemp; //定義整型變量

while((temp=getchar())!=EOF) //標(biāo)準(zhǔn)輸入未結(jié)束 if(temp>=‘a(chǎn)’&&temp<=‘z’) //小寫(xiě)字母 //將對(duì)應(yīng)的大寫(xiě)字母輸出到屏幕 putchar(temp-’a’+’A’); else putchar(temp); //輸出到屏幕} //主函數(shù)結(jié)束例文件1.c30精選ppt#include<stdio.h>例文件1.c30精選說(shuō)明:1、由于getchar()返回的是整數(shù)(ASCII碼值),因此,temp定義為整數(shù)型。2、EOF被定義為-1,當(dāng)getchar()函數(shù)返回-1時(shí)結(jié)束,這里EOF被定義為-1,在DOS系統(tǒng)中只有用<Ctrl>+Z才能結(jié)束鍵盤(pán)輸入。從實(shí)驗(yàn)中可以看出getchar()函數(shù)是將鍵盤(pán)輸入的字符的ASCII碼的形式存至緩沖區(qū),敲入字符之后,須回車才響應(yīng)輸出a //敲入的小寫(xiě)字符 temp=97 //回車之后,輸入’a’的ASCII碼A //回應(yīng)大寫(xiě)字符’A’, temp=10 //輸出回車鍵的ASCII碼值31精選ppt說(shuō)明:a //敲入的小寫(xiě)字符31精選ppt3、在上述程序基礎(chǔ)上,將getchar改為getch,觀察程序運(yùn)行情況。這時(shí)不再顯示敲入的小寫(xiě)字母,屏幕上看到的都是大寫(xiě)字母了。但顯示的ASCII碼值仍是小寫(xiě)字母的碼值。

退出方式用<Ctrl>+<Break>

4、將getch改為getche再試,觀察有何變化?

5、字符串的讀寫(xiě)函數(shù)gets()和puts()。32精選ppt3、在上述程序基礎(chǔ)上,將getchar改為getch,觀察程#include<stdio.h> //預(yù)編譯命令#definenull0 //定義null為空voidmain() //主函數(shù){ //主函數(shù)開(kāi)始 chars[256]; //定義字符數(shù)組s intno; //定義整型變量no no=1; //初始化no為1 while(gets(s)!=null) //s須為指針

{ //循環(huán)體開(kāi)始 printf(“%d:%s\n”,no,s);//輸出no和s printf(“%X\n”,s); //s是指針 no=no+1; //no加1 } //循環(huán)體結(jié)束} //主函數(shù)結(jié)束例文件2.c33精選ppt#include<stdio.h> //預(yù)編譯命令例說(shuō)明:

gets(s)函數(shù)的形參為字符指針,指向一個(gè)由鍵盤(pán)輸入的字符串。正常時(shí)返回一個(gè)讀取到的字符串的首地址。出錯(cuò)時(shí)返回NULL。輸入的字符串以‘\n’結(jié)束,該函數(shù)在內(nèi)存中將‘\n’以‘\0’存放,從而使s變?yōu)樽址?聪吕?4精選ppt說(shuō)明:34精選pptputs(s)是將s所指向的字符串寫(xiě)到屏幕上,寫(xiě)時(shí)將‘\n’轉(zhuǎn)換為‘\0’。6、使用printf(),scanf()

略#include<stdio.h> //預(yù)編譯命令#definenull0 //定義空指針常量voidmain() //主函數(shù){ //主函數(shù)開(kāi)始 chars[256]; //定義字符串 while(gets(s)!=null) //循環(huán)輸入 puts(s); //輸出s到屏幕} //循環(huán)體結(jié)束35精選pptputs(s)是將s所指向的字符串寫(xiě)到屏幕上,寫(xiě)時(shí)將‘\n’一般文件的操作1、打開(kāi)和關(guān)閉文件函數(shù)

1.1打開(kāi)文件函數(shù)fopen()

格式為

fopen(“文件名”,打開(kāi)方式);“r”:讀方式“w”:寫(xiě)方式“a”:追加方式“rb”:二進(jìn)制讀方式“wb”:二進(jìn)制寫(xiě)方式“ab”:二進(jìn)制追加方式“rw”:讀寫(xiě)方式36精選ppt一般文件的操作1、打開(kāi)和關(guān)閉文件函數(shù)

1.1打開(kāi)文件函數(shù)用“r”只能讀不能寫(xiě),用“w”只能寫(xiě)不能讀。用“a”打開(kāi)的文件可向已有文件內(nèi)容后邊增加新的內(nèi)容。使原內(nèi)容不被新內(nèi)容所覆蓋。在用文本文件輸入時(shí),將回車換行符轉(zhuǎn)換為一個(gè)換行符;在輸出時(shí),把換行符轉(zhuǎn)換成回車符和換行符(兩個(gè)字符),在用二進(jìn)制文件時(shí),不作上述轉(zhuǎn)換,內(nèi)存當(dāng)中的數(shù)據(jù)形式與輸出到外部文件中的數(shù)據(jù)形式完全一樣。fopen函數(shù)有一個(gè)返回值,正常時(shí)返回一個(gè)文件指針,指向內(nèi)存為該文件開(kāi)辟的緩沖區(qū)首地址。失敗時(shí)返回NULL。比如該文件并不存在,你要打開(kāi)它,當(dāng)然要返回NULL。為了寫(xiě)或追加寫(xiě)時(shí),如果要打開(kāi)的文件不存在,這時(shí)系統(tǒng)會(huì)自動(dòng)幫你建立一個(gè)要打開(kāi)的文件。37精選ppt用“r”只能讀不能寫(xiě),用“w”只能寫(xiě)不能讀。37精選ppt實(shí)際使用時(shí)要判斷fopen()函數(shù)的返回值。常用語(yǔ)句為if((fp=fopen(“f1.c”,“rw”))==NULL){ printf(“Can’topenthisfile.\n”); exit(1);}其中的fp是已經(jīng)定義好的文件指針。1.2關(guān)閉文件的函數(shù)為fclose(文件指針);

這個(gè)函數(shù)在正常情況下返回值為0,關(guān)閉有錯(cuò)時(shí)返回非0值,可用ferror()函數(shù)來(lái)檢查。38精選ppt實(shí)際使用時(shí)要判斷fopen()函數(shù)的返回值。if((fp2、文件的讀和寫(xiě)#include<stdio.h>chars[]=“Iamastudent”;voidmain(){ chara[100]; //定義a字符串 FILE*fp; //定義文件指針為fp intn=strlen(s); //字符串s的長(zhǎng)度

//打開(kāi)f1.txt文件,寫(xiě)方式,fp不為空

if((fp=fopen(“f1.txt”,”w”))!=NULL) { //將s所指的字符串寫(xiě)到fp所指的文件中

fputs(s,fp);

} fclose(fp);39精選ppt2、文件的讀和寫(xiě)#include<stdio.h>39精選 //打開(kāi)f1.txt文件,讀,文件指針為fp fp=fopen(“f1.txt”,”r”); //將fp所指的文件中的內(nèi)容讀到a中去 fgets(a,n+1,fp);

printf(“%s\n”,a); //輸出a中的內(nèi)容

fclose(fp); //關(guān)閉fp所指向的文件} //主函數(shù)結(jié)束說(shuō)明:1、要進(jìn)行文件讀寫(xiě)操作先要定義文件指針。

使用FILE*fp,(fp可以是其它名稱)2、測(cè)出s字符串長(zhǎng)度,使用intn=strlen(s);40精選ppt //打開(kāi)f1.txt文件,讀,文件指針為fp說(shuō)明:40精3、打開(kāi)“f1.txt”,“w”,要往f1.txt中寫(xiě)入。如空則自動(dòng)建立一個(gè)文件,自然不會(huì)空了。4、fputs(s,fp)是說(shuō)將s字符串寫(xiě)入由指針fp所指向的f1.txt文件中。5、fclose(fp),將fp所指向的f1.txt文件關(guān)閉。6、打開(kāi)f1.txt用讀的方式

fp=fopen(“f1.txt”,“r”);7、將讀出的字符串放入a串中,在使用fgets()函數(shù)時(shí)用fgets(a,n+1,fp);其中a是已經(jīng)定義好的字符串,n+1是讓fp所向的文件內(nèi)容,依次取n個(gè)字符給a,這n個(gè)字符恰為s串的內(nèi)容,之后還要在該串后自動(dòng)加入一個(gè)’\0’字符。因此要寫(xiě)n+1。41精選ppt3、打開(kāi)“f1.txt”,“w”,要往f1.txt中寫(xiě)入。如結(jié)束42精選ppt結(jié)束42精選ppt二叉樹(shù)的建立循環(huán)鏈表文件操作43精選ppt二叉樹(shù)的建立循環(huán)鏈表文件操作1精選ppt二叉樹(shù)的建立44精選ppt二叉樹(shù)的建立2精選ppt二叉樹(shù)的建立建立二叉樹(shù)的過(guò)程是一個(gè)“插入”過(guò)程,下面我們用一個(gè)例子來(lái)講解這一過(guò)程。我們想建立這樣一棵二叉樹(shù),樹(shù)中的每一個(gè)結(jié)點(diǎn)有一個(gè)整數(shù)數(shù)據(jù)名為data,有兩個(gè)指針:左指針L,右指針R,分別指向這個(gè)結(jié)點(diǎn)的左子樹(shù)和右子樹(shù),顯然可以用如下名為T(mén)REE的結(jié)構(gòu)來(lái)描述這種結(jié)點(diǎn):

structTREE { intdata; structTREE*L,*R; }45精選ppt二叉樹(shù)的建立建立二叉樹(shù)的過(guò)程是一個(gè)“插入”過(guò)程,下面我們用一對(duì)二叉樹(shù)最重要的是根,它起定位的作用,因此,首先建立的是根結(jié)點(diǎn)。也就是說(shuō),如果從鍵盤(pán)輸入數(shù)據(jù)來(lái)建立二叉樹(shù),第一個(gè)數(shù)據(jù)就是這棵樹(shù)的根的數(shù)據(jù),之后再輸入的數(shù)據(jù),每一個(gè)都要與根中的數(shù)據(jù)作比較,以便確定該數(shù)據(jù)所在結(jié)點(diǎn)的插入位置。假定我們這里依然用圖1的中序遍歷的方式。即如果待插入結(jié)點(diǎn)的數(shù)據(jù)比根結(jié)點(diǎn)的數(shù)據(jù)小,則將其插至左子樹(shù),否則插入右子樹(shù)。定義一個(gè)遞歸函數(shù)

voidinsert(structTREE**proot,structTREE*p)其中,指針p指向含有待插入數(shù)據(jù)的結(jié)點(diǎn)。 proot為樹(shù)的根指針的地址。 insert函數(shù)棵理解為將p結(jié)點(diǎn)插入到*proot所指向的樹(shù)中。46精選ppt對(duì)二叉樹(shù)最重要的是根,它起定位的作用,因此,首先建立的是根結(jié)insert(proot,p)可用下列與或結(jié)點(diǎn)圖來(lái)描述47精選pptinsert(proot,p)可用下列與或結(jié)點(diǎn)圖來(lái)描述5精注意在上圖中proot是被調(diào)用函數(shù)的形參。從前面對(duì)它的定義看,proot是指針的指針,實(shí)際上是指向二叉樹(shù)根結(jié)點(diǎn)的指針的指針,或者說(shuō)是指向二叉樹(shù)根結(jié)點(diǎn)的指針的地址。如下圖。因此,在主程序調(diào)用insert函數(shù)時(shí),根結(jié)點(diǎn)proot實(shí)參&root實(shí)參為&root,p形參為proot,

p下面是建立二叉樹(shù)的參考程序。48精選ppt注意在上圖中proot是被調(diào)用函數(shù)的形參。從前面對(duì)它的定義看#include<stdio.h> //預(yù)編譯命令#include<malloc.h> //內(nèi)存空間分配#definenull0 //定義空指針常量#defineLENsizeof(structTREE) //定義常量,表示結(jié)構(gòu)長(zhǎng)度structTREE //結(jié)構(gòu)聲明{ intdata; //整型數(shù)

structTREE*L,*R; //TREE結(jié)構(gòu)指針};49精選ppt#include<stdio.h> //預(yù)編譯命令7//被調(diào)用函數(shù)insert,將結(jié)點(diǎn)插入二叉樹(shù)voidinsert(structTREE**proot,structTREE*p){ //函數(shù)體開(kāi)始

if(*proot==null) //如果根結(jié)點(diǎn)為空

{ *proot=p; //將結(jié)點(diǎn)p插入根結(jié)點(diǎn)

return; //返回

} else //根結(jié)點(diǎn)不為空

{ //如果p結(jié)點(diǎn)數(shù)據(jù)小于等于根結(jié)點(diǎn)數(shù)據(jù) if(p->data<=(*proot)->data)

insert(&((*proot)->L),p); //插入左子樹(shù)

else //如果p結(jié)點(diǎn)數(shù)據(jù)大于等于根結(jié)點(diǎn)數(shù)據(jù)

insert(&((*proot)->R),p); //插入右子樹(shù)

}} //函數(shù)體結(jié)束50精選ppt//被調(diào)用函數(shù)insert,將結(jié)點(diǎn)插入二叉樹(shù)8精選ppt//被調(diào)用函數(shù),形參為T(mén)REE結(jié)構(gòu)指針,輸出二叉樹(shù)內(nèi)容voidprint(structTREE*root) { //函數(shù)體開(kāi)始

if(root==null) //根或子樹(shù)根結(jié)點(diǎn)為空

return; //返回

print(root->L); //輸出左子樹(shù)內(nèi)容

printf("%d",root->data);//輸出根結(jié)點(diǎn)內(nèi)容

print(root->R); //輸出右子樹(shù)內(nèi)容} //被調(diào)用函數(shù)結(jié)束voidmain() //主函數(shù)開(kāi)始{ //函數(shù)體開(kāi)始 structTREE*root,*p; //TREE型結(jié)構(gòu)指針 inttemp; //臨時(shí)變量,用于用戶輸入數(shù)據(jù) root=null; //初始化二叉樹(shù)根結(jié)點(diǎn)為空 p=null; //初始化待插入結(jié)點(diǎn)的指針為空 printf("請(qǐng)輸入待插入結(jié)點(diǎn)的數(shù)據(jù)\n"); //提示信息 printf("如果輸入-1表示插入過(guò)程結(jié)束\n");//提示信息 scanf("%d",&temp); //輸入待插入結(jié)點(diǎn)數(shù)據(jù)51精選ppt//被調(diào)用函數(shù),形參為T(mén)REE結(jié)構(gòu)指針,輸出二叉樹(shù)內(nèi)容9精 while(temp!=-1) //當(dāng)型循環(huán),-1為結(jié)束標(biāo)志 { //循環(huán)體開(kāi)始 //為待插入結(jié)點(diǎn)分配內(nèi)存單元 p=(structTREE*)malloc(LEN); p->data=temp; //將temp賦值給p結(jié)點(diǎn)的數(shù)據(jù)域 p->L=p->R=null; //將p結(jié)點(diǎn)的左右指針域置為空 insert(&root,p); //將p結(jié)點(diǎn)插入到根為root的樹(shù)中, //&root表示二叉樹(shù)根結(jié)點(diǎn)的地址 printf("請(qǐng)輸入待插入結(jié)點(diǎn)的數(shù)據(jù)\n"); //提示信息 printf("如果輸入-1表示插入過(guò)程結(jié)束\n");//提示信息 scanf("%d",&temp); //輸入待插入結(jié)點(diǎn)數(shù)據(jù) } //循環(huán)體結(jié)束 if(root==null) //如果根結(jié)點(diǎn)為空 printf("這是一棵空樹(shù)。\n");//輸出空樹(shù)信息 else //根結(jié)點(diǎn)不為空 print(root); //調(diào)用print函數(shù),輸出二叉樹(shù)內(nèi)容} //主函數(shù)結(jié)束52精選ppt while(temp!=-1) //當(dāng)型循環(huán),-1循環(huán)鏈表53精選ppt循環(huán)鏈表11精選ppt循環(huán)鏈表例:猴子選大王。

n只猴子圍成一圈,順時(shí)針?lè)较驈?到n編號(hào)。之后從1號(hào)開(kāi)始沿順時(shí)針?lè)较蜃尯镒訌?,2,…,m依次報(bào)數(shù),凡報(bào)到m的猴子,都讓其出圈,取消候選資格。然后不停地按順時(shí)針?lè)较蛑鹨蛔寛?bào)出m者出圈,最后剩下一個(gè)就是猴王。54精選ppt循環(huán)鏈表例:猴子選大王。

n只猴子圍成一圈,順時(shí)針?lè)较驈?起始位置猴王123456783615284猴子被淘汰的順序演示:n=8,m=355精選ppt起始位置猴王123456783615284猴子被淘汰的順序說(shuō)明: 如圖1所示有8只猴子圍成一圈,m=3。從1#猴的位置開(kāi)始,順時(shí)針1至3報(bào)數(shù),第一個(gè)出圈的是3#;第二個(gè)出圈的是6#,第3個(gè)出圈的是1#;第4個(gè)出圈的是5#;第5個(gè)是2#,第6個(gè)是8#;第7個(gè)是4#。最后剩下一個(gè)是7#,它就是猴王。我們用循環(huán)鏈表來(lái)模擬這個(gè)選擇過(guò)程。56精選ppt說(shuō)明:14精選ppt1、定義一個(gè)名為mon的結(jié)構(gòu)

structmon

{

intnum; //整數(shù),表示猴子的編號(hào)

structmon*next; //指針,指向相鄰的下一只猴子

}2、將鏈表的頭指針head定義為全局變量。

structmon*head;3、主函數(shù)

用鍵盤(pán)輸入猴子數(shù)n,輸入數(shù)m,調(diào)用函數(shù)create建立一個(gè)循環(huán)鏈表,模擬眾猴圍成一圈的情況。該函數(shù)的實(shí)參為n。調(diào)用函數(shù)select,模擬1至m報(bào)數(shù),讓n-1只猴子逐一出列的過(guò)程。即在具有n個(gè)結(jié)點(diǎn)的循環(huán)鏈表按報(bào)數(shù)m刪除結(jié)點(diǎn)的過(guò)程。該函數(shù)的實(shí)參為m,最后輸出猴王的編號(hào)。57精選ppt1、定義一個(gè)名為mon的結(jié)構(gòu)

structmon

{

i4、建立循環(huán)鏈表的函數(shù)create(intnn)

其中nn為形式參數(shù)。要從編號(hào)1到編號(hào)nn。思路是(1)先做第1個(gè)結(jié)點(diǎn),讓其中的數(shù)據(jù)域p->num賦值為1,讓指針域賦值為null。之后讓鏈頭指針head指向第1個(gè)結(jié)點(diǎn)。利用指針q記住這個(gè)結(jié)點(diǎn),以便讓指針p去生成下面的結(jié)點(diǎn)。(2)利用一個(gè)計(jì)數(shù)循環(huán)結(jié)構(gòu),做出第2個(gè)結(jié)點(diǎn)到第nn個(gè)結(jié)點(diǎn)。并將相鄰結(jié)點(diǎn)一個(gè)接一個(gè)鏈接到一起。(3)最后一個(gè)結(jié)點(diǎn)要和頭結(jié)點(diǎn)用下一語(yǔ)句鏈接到一起

tail=q;tail->next=head;headtailq58精選ppt4、建立循環(huán)鏈表的函數(shù)create(intnn)

其中nn5、刪結(jié)點(diǎn)的函數(shù)select(intmm)

mm為形式參數(shù),從1至m報(bào)數(shù),凡報(bào)到mm者刪除其所在的結(jié)點(diǎn)。

設(shè)計(jì)兩個(gè)指針p和q。一開(kāi)始讓q指向鏈表的尾部q=tail。讓p指向q的下一個(gè)結(jié)點(diǎn)。開(kāi)始時(shí)讓p指向1#猴所在的結(jié)點(diǎn)。用一個(gè)累加器x,初始時(shí)x=0,從1#猴所在結(jié)點(diǎn)開(kāi)始讓x=x+1=1,如果mm是1的話,1#猴所在的p結(jié)點(diǎn)就要被刪除。有三條語(yǔ)句

printf(“被刪掉的猴子號(hào)為%d號(hào)\n”,p->num);

q->next=p->next;

free(p);1head28tailqp演示59精選ppt5、刪結(jié)點(diǎn)的函數(shù)select(intmm)

mm為形式參這里free(p)是釋放p結(jié)點(diǎn)所占用的內(nèi)存空間的語(yǔ)句。如果mm不是1而是3,程序會(huì)在do-while循環(huán)中,讓x加兩次1,q和p一起移動(dòng)兩次,p指向3#所在結(jié)點(diǎn),q指向2#所在結(jié)點(diǎn),之后仍然用上述三條語(yǔ)句刪去3#所在的結(jié)點(diǎn)。1head28qp34qppq演示60精選ppt這里free(p)是釋放p結(jié)點(diǎn)所占用的內(nèi)存空間的語(yǔ)句。如果m這個(gè)do-while循環(huán)的退出條件是q==q->next。即當(dāng)只剩下一個(gè)結(jié)點(diǎn)時(shí)才退出循環(huán)。當(dāng)然猴王非其莫屬了。這時(shí),讓頭指針head指向q,head是全局變量,在主程序最后輸出猴王時(shí)要用head->num。參考程序如下:7headq61精選ppt這個(gè)do-while循環(huán)的退出條件是q==q->next。即#include<stdio.h> //預(yù)編譯命令#include<malloc.h> //內(nèi)存空間分配#definenull0 //定義空指針常量//定義常量,表示結(jié)構(gòu)長(zhǎng)度#defineLENsizeof(structmon)structmon //結(jié)構(gòu)聲明{ intnum; //整型數(shù),用于記錄猴子號(hào)

structmon*next; //mon結(jié)構(gòu)指針};structmon*head,*tail; //mon結(jié)構(gòu)指針,全局變量62精選ppt#include<stdio.h> //預(yù)編譯命令20voidcreate(intnn) //被調(diào)用函數(shù){ //函數(shù)體開(kāi)始inti; //整型變量i,用于計(jì)數(shù) structmon*p,*q; //聲明mon結(jié)構(gòu)指針p,q

//為p分配內(nèi)存空間

p=(structmon*)malloc(LEN); p->num=1; //初始化p結(jié)點(diǎn)num域?yàn)? p->next=null; //初始化p結(jié)點(diǎn)next域?yàn)榭?head=p; //鏈表頭指針head賦值為p q=p; //q賦值為p63精選pptvoidcreate(intnn) //被調(diào)用函數(shù)21 for(i=2;i<=nn;i=i+1) //利用循環(huán)結(jié)構(gòu)構(gòu)造鏈表 { //循環(huán)體開(kāi)始 p=(structmon*)malloc(LEN);//為p分配內(nèi)存空間 p->num=i; //初始化p結(jié)點(diǎn)num域?yàn)閕,表示猴子號(hào) q->next=p; //將p結(jié)點(diǎn)加到鏈表尾部 q=p; //讓q指向鏈表尾部結(jié)點(diǎn) p->next=null; //鏈表尾部指向空 } //循環(huán)體結(jié)束 tail=q; //鏈表尾 tail->next=head;

//鏈表尾部指向鏈表頭, //形成循環(huán)鏈表} //函數(shù)體結(jié)束64精選ppt for(i=2;i<=nn;i=i+1) //利用循環(huán)結(jié)//被調(diào)用函數(shù)select,mm表示結(jié)點(diǎn)刪除間隔voidselect(intmm){ //函數(shù)體開(kāi)始 intx=0; //聲明整型值x,并初始化為0 structmon*p,*q; //聲明結(jié)構(gòu)指針p,q q=tail; //q賦值為tail,指向循環(huán)鏈表尾部

do //直到型循環(huán),用于循環(huán)刪除指定間隔的結(jié)點(diǎn) { //循環(huán)體開(kāi)始 p=q->next; //p賦值為q相鄰的下一個(gè)結(jié)點(diǎn) x=x+1; //x加1 if(x%mm==0) //x是否整除mm, { //表示是否跳過(guò)指定間隔

//輸出被刪掉的猴子號(hào) printf("被刪掉的猴子號(hào)為%d號(hào)\n",p->num); q->next=p->next; //刪除此結(jié)點(diǎn) free(p); //釋放空間 } elseq=p; //q指向相鄰的下一個(gè)結(jié)點(diǎn)p }while(q!=q->next); //剩余結(jié)點(diǎn)數(shù)不為1,則繼續(xù)循環(huán) head=q; //head指向結(jié)點(diǎn)q,q為鏈表中剩余的一個(gè)結(jié)點(diǎn)} //函數(shù)體結(jié)束65精選ppt//被調(diào)用函數(shù)select,mm表示結(jié)點(diǎn)刪除間隔23精選pvoidmain()

//主函數(shù)開(kāi)始{ //函數(shù)體開(kāi)始 intn,m;

//聲明整型變量n,m head=null; //初始化head為空

printf("請(qǐng)輸入猴子數(shù)\n"); //提示信息 scanf("%d",&n); //輸入待插入結(jié)點(diǎn)數(shù)據(jù) printf("請(qǐng)輸入間隔m\n"); //提示信息 scanf("%d",&m); //輸入間隔create(n); //調(diào)用函數(shù)create建立循環(huán)鏈表 select(m);

//調(diào)用函數(shù)select,找出剩下的猴子 printf("猴王是%d號(hào)\n",head->num); //輸出猴王} //函數(shù)體結(jié)束66精選pptvoidmain() //主函數(shù)開(kāi)始24精選ppt第十三講文件67精選ppt第十三講文件25精選ppt有關(guān)文件的概念和名詞文件——是信息的集合,是信息存放在外存中的一種形式??梢蚤L(zhǎng)期保存。

EOF——文件的結(jié)束符。

C語(yǔ)言中的文件視為信息流,文件的讀寫(xiě)是按順序進(jìn)行的。可以以字符為單位讀寫(xiě),也可以以“行”為單位讀寫(xiě)。一行是以“\n”為結(jié)束的一串字符。文件指針——是指向含有文件信息結(jié)構(gòu)的指針。文件指針又稱內(nèi)部文件名。

對(duì)文件進(jìn)行操作,先要將文件打開(kāi)。所謂“打開(kāi)文件”,就是在內(nèi)存中為文件建立一個(gè)緩沖區(qū),文件指針就要指向緩沖區(qū)的首地址。68精選ppt有關(guān)文件的概念和名詞文件——是信息的集合,是信息存放在外存中標(biāo)準(zhǔn)文件C語(yǔ)言中規(guī)定的標(biāo)準(zhǔn)文件有三個(gè):1、標(biāo)準(zhǔn)輸入文件(鍵盤(pán)),文件指針為stdin;2、標(biāo)準(zhǔn)輸出文件(顯示屏幕),文件指針為stdout;3、標(biāo)準(zhǔn)出錯(cuò)信息文件,文件指針為stderr。特點(diǎn)是這些文件在操作前或后,系統(tǒng)會(huì)自動(dòng)將其打開(kāi)或關(guān)閉,程序不需管。69精選ppt標(biāo)準(zhǔn)文件C語(yǔ)言中規(guī)定的標(biāo)準(zhǔn)文件有三個(gè):27精選ppt一般文件特點(diǎn):操作前需打開(kāi),操作后需關(guān)閉。開(kāi)和閉均是通過(guò)函數(shù)進(jìn)行的。打開(kāi)文件就是要在內(nèi)存中建立緩沖區(qū),如打開(kāi)成功,打開(kāi)函數(shù)返回一個(gè)內(nèi)存地址值,由一個(gè)文件指針接收。以后的操作使用這個(gè)指針。如內(nèi)存不可建立緩沖區(qū),則打開(kāi)失敗,打開(kāi)函數(shù)返回NULL。關(guān)閉文件很重要,是要將文件送回磁盤(pán),并從內(nèi)存中清除。及時(shí)釋放內(nèi)存空間,并可保證文件安全。70精選ppt一般文件特點(diǎn):操作前需打開(kāi),操作后需關(guān)閉。開(kāi)和閉均是通過(guò)函數(shù)標(biāo)準(zhǔn)文件的操作1、getchar(),從標(biāo)準(zhǔn)輸入文件<stdio.h>中使用該函數(shù)可以得到一個(gè)字符。返回值是該字符的ASCII碼值。因此可見(jiàn)返回值是int型的。2、putchar(),將字符代碼送至屏幕上,顯示成字符。71精選ppt標(biāo)準(zhǔn)文件的操作1、getchar(),從標(biāo)準(zhǔn)輸入文件<std#include<stdio.h>voidmain() //主函數(shù){ //主函數(shù)開(kāi)始

inttemp; //定義整型變量

while((temp=getchar())!=EOF) //標(biāo)準(zhǔn)輸入未結(jié)束 if(temp>=‘a(chǎn)’&&temp<=‘z’) //小寫(xiě)字母 //將對(duì)應(yīng)的大寫(xiě)字母輸出到屏幕 putchar(temp-’a’+’A’); else putchar(temp); //輸出到屏幕} //主函數(shù)結(jié)束例文件1.c72精選ppt#include<stdio.h>例文件1.c30精選說(shuō)明:1、由于getchar()返回的是整數(shù)(ASCII碼值),因此,temp定義為整數(shù)型。2、EOF被定義為-1,當(dāng)getchar()函數(shù)返回-1時(shí)結(jié)束,這里EOF被定義為-1,在DOS系統(tǒng)中只有用<Ctrl>+Z才能結(jié)束鍵盤(pán)輸入。從實(shí)驗(yàn)中可以看出getchar()函數(shù)是將鍵盤(pán)輸入的字符的ASCII碼的形式存至緩沖區(qū),敲入字符之后,須回車才響應(yīng)輸出a //敲入的小寫(xiě)字符 temp=97 //回車之后,輸入’a’的ASCII碼A //回應(yīng)大寫(xiě)字符’A’, temp=10 //輸出回車鍵的ASCII碼值73精選ppt說(shuō)明:a //敲入的小寫(xiě)字符31精選ppt3、在上述程序基礎(chǔ)上,將getchar改為getch,觀察程序運(yùn)行情況。這時(shí)不再顯示敲入的小寫(xiě)字母,屏幕上看到的都是大寫(xiě)字母了。但顯示的ASCII碼值仍是小寫(xiě)字母的碼值。

退出方式用<Ctrl>+<Break>

4、將getch改為getche再試,觀察有何變化?

5、字符串的讀寫(xiě)函數(shù)gets()和puts()。74精選ppt3、在上述程序基礎(chǔ)上,將getchar改為getch,觀察程#include<stdio.h> //預(yù)編譯命令#definenull0 //定義null為空voidmain() //主函數(shù){ //主函數(shù)開(kāi)始 chars[256]; //定義字符數(shù)組s intno; //定義整型變量no no=1; //初始化no為1 while(gets(s)!=null) //s須為指針

{ //循環(huán)體開(kāi)始 printf(“%d:%s\n”,no,s);//輸出no和s printf(“%X\n”,s); //s是指針 no=no+1; //no加1 } //循環(huán)體結(jié)束} //主函數(shù)結(jié)束例文件2.c75精選ppt#include<stdio.h> //預(yù)編譯命令例說(shuō)明:

gets(s)函數(shù)的形參為字符指針,指向一個(gè)由鍵盤(pán)輸入的字符串。正常時(shí)返回一個(gè)讀取到的字符串的首地址。出錯(cuò)時(shí)返回NULL。輸入的字符串以‘\n’結(jié)束,該函數(shù)在內(nèi)存中將‘\n’以‘

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論