![第5講結(jié)構(gòu)化程序設(shè)計(jì)(PartII)_第1頁(yè)](http://file4.renrendoc.com/view/25a57ff90eabf072860a099a0198321a/25a57ff90eabf072860a099a0198321a1.gif)
![第5講結(jié)構(gòu)化程序設(shè)計(jì)(PartII)_第2頁(yè)](http://file4.renrendoc.com/view/25a57ff90eabf072860a099a0198321a/25a57ff90eabf072860a099a0198321a2.gif)
![第5講結(jié)構(gòu)化程序設(shè)計(jì)(PartII)_第3頁(yè)](http://file4.renrendoc.com/view/25a57ff90eabf072860a099a0198321a/25a57ff90eabf072860a099a0198321a3.gif)
![第5講結(jié)構(gòu)化程序設(shè)計(jì)(PartII)_第4頁(yè)](http://file4.renrendoc.com/view/25a57ff90eabf072860a099a0198321a/25a57ff90eabf072860a099a0198321a4.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5講
結(jié)構(gòu)化程序設(shè)計(jì)(PartII)周水庚2020年10月22日《程序設(shè)計(jì)》-2020年秋提要C程序簡(jiǎn)介函數(shù)基礎(chǔ)知識(shí)文件的簡(jiǎn)單用法簡(jiǎn)單程序設(shè)計(jì)實(shí)例《程序設(shè)計(jì)》-2020年秋提要C程序簡(jiǎn)介函數(shù)基礎(chǔ)知識(shí)文件的簡(jiǎn)單用法簡(jiǎn)單程序設(shè)計(jì)實(shí)例《程序設(shè)計(jì)》-2020年秋C程序簡(jiǎn)介一個(gè)C程序可由若干個(gè)源程序文件組成一個(gè)源文件可以由若干個(gè)函數(shù)和預(yù)處理命令以及全局變量聲明部分組成一個(gè)函數(shù)由變量定義部分和執(zhí)行語(yǔ)句組成每個(gè)源程序文件都是可獨(dú)立編譯的,所以C程序可以按源程序文件分別編寫(xiě)、分別編譯《程序設(shè)計(jì)》-2020年秋《程序設(shè)計(jì)》-2020年秋C語(yǔ)句C語(yǔ)句是C程序的基本組成單元C語(yǔ)句可以分為以下5類(lèi)空語(yǔ)句表達(dá)式語(yǔ)句復(fù)合語(yǔ)句控制語(yǔ)句函數(shù)調(diào)用語(yǔ)句《程序設(shè)計(jì)》-2020年秋C語(yǔ)句(續(xù))控制語(yǔ)句有9種if()…
else…
(條件語(yǔ)句)switch(多分支選擇語(yǔ)句)for()
(循環(huán)語(yǔ)句)while()
(循環(huán)語(yǔ)句)do…
while()(循環(huán)語(yǔ)句)continue(結(jié)束本次循環(huán)語(yǔ)句)break(中止執(zhí)行switch或循環(huán)語(yǔ)句)goto(轉(zhuǎn)向語(yǔ)句)return(從函數(shù)返回語(yǔ)句)《程序設(shè)計(jì)》-2020年秋C語(yǔ)句(續(xù))函數(shù)調(diào)用語(yǔ)句由一次函數(shù)調(diào)用加一個(gè)分號(hào)構(gòu)成表達(dá)式語(yǔ)句由一個(gè)表達(dá)式加一個(gè)分號(hào)構(gòu)成,如賦值語(yǔ)句空語(yǔ)句只有一個(gè)分號(hào)的語(yǔ)句,它什么也不做復(fù)合語(yǔ)句用{}把一些語(yǔ)句括起來(lái)構(gòu)成,又稱(chēng)分程序《程序設(shè)計(jì)》-2020年秋C程序的三種基本結(jié)構(gòu)順序結(jié)構(gòu)條件控制結(jié)構(gòu)if…[else…]循環(huán)結(jié)構(gòu)while()do…while()for()《程序設(shè)計(jì)》-2020年秋提要C程序簡(jiǎn)介函數(shù)基礎(chǔ)知識(shí)正文文件的簡(jiǎn)單用法簡(jiǎn)單程序設(shè)計(jì)實(shí)例《程序設(shè)計(jì)》-2020年秋函數(shù)基礎(chǔ)知識(shí)結(jié)構(gòu)化程序設(shè)計(jì)中,將復(fù)雜的功能分解成若干簡(jiǎn)單的子功能,用函數(shù)編碼實(shí)現(xiàn)子功能,通過(guò)調(diào)用函數(shù)實(shí)施子功能要求函數(shù)是一個(gè)實(shí)現(xiàn)指定功能、邏輯上獨(dú)立的代碼段對(duì)函數(shù)使用者來(lái)說(shuō),把它看作“黑盒”,只需知道要傳送給函數(shù)的數(shù)據(jù)(輸入),和函數(shù)執(zhí)行后能得到什么結(jié)果(輸出)函數(shù)可以定義局部對(duì)象,使函數(shù)在邏輯上作為程序的一個(gè)相對(duì)獨(dú)立單位,不受主函數(shù)或其它函數(shù)的程序?qū)ο竺挠绊憽冻绦蛟O(shè)計(jì)》-2020年秋函數(shù)基礎(chǔ)知識(shí)(續(xù))函數(shù)可帶形參,函數(shù)執(zhí)行時(shí),操作對(duì)象、求值方式等可隨不同調(diào)用的需要而改變函數(shù)為程序的層次構(gòu)造和開(kāi)發(fā)提供支持,使設(shè)計(jì)新程序能在已有函數(shù)基礎(chǔ)上構(gòu)造功能更強(qiáng)的函數(shù)和程序一個(gè)C程序以main()函數(shù)作為程序的主函數(shù)。程序運(yùn)行時(shí),從它開(kāi)始執(zhí)行在C語(yǔ)言中,函數(shù)不能嵌套定義,一個(gè)函數(shù)并不從屬于另一個(gè)函數(shù)除不能調(diào)用main()函數(shù)外,其它函數(shù)可以相互調(diào)用《程序設(shè)計(jì)》-2020年秋函數(shù)庫(kù)把一些公用的、基本的計(jì)算功能所對(duì)應(yīng)的函數(shù)集中起來(lái),構(gòu)成一個(gè)庫(kù),我們稱(chēng)之為函數(shù)庫(kù),相應(yīng)的函數(shù)成為庫(kù)函數(shù)函數(shù)庫(kù)中的函數(shù)具有預(yù)先定義的、標(biāo)準(zhǔn)的輸入、輸入接口C語(yǔ)言中定義了一些基本的標(biāo)準(zhǔn)函數(shù)編程環(huán)境工具廠(chǎng)商(Microsoft、Borland等)往往提供更多的函數(shù)供編程者使用《程序設(shè)計(jì)》-2020年秋函數(shù)庫(kù)(續(xù))C語(yǔ)言使用頭文(headerfile,即*.h文件)對(duì)函數(shù)庫(kù)中的函數(shù)進(jìn)行定義和說(shuō)明函數(shù)庫(kù)中的函數(shù)經(jīng)編譯后,綁定在一起件,構(gòu)成一個(gè)庫(kù)文件(libraryfile,即*.lib文件)C程序調(diào)用C語(yǔ)言或者編程環(huán)境提供的函數(shù)時(shí),要在程序中包含(include)相應(yīng)的頭文件;在產(chǎn)生執(zhí)行文件時(shí),需要與庫(kù)文件中相應(yīng)的目標(biāo)函數(shù)代碼連接為了使用方便,C語(yǔ)言按功能分類(lèi),提供了大量函數(shù)庫(kù),每個(gè)函數(shù)庫(kù)都有自己的頭文件《程序設(shè)計(jì)》-2020年秋庫(kù)函數(shù)的使用使用相應(yīng)庫(kù)函數(shù)的程序都要在使用之前寫(xiě)上包含其頭文件的預(yù)處理命令常用的頭文件stdio.h(輸入輸出庫(kù)函數(shù))math.h、stdlib.h、float.h(數(shù)學(xué)庫(kù)函數(shù))time.h(時(shí)間庫(kù)函數(shù))ctype.h(字符分類(lèi)和轉(zhuǎn)換庫(kù)函數(shù))string.h(內(nèi)存緩沖區(qū)和字符串處理庫(kù)函數(shù))graphics.h(圖形處理庫(kù)函數(shù))malloc.h、stdlib.h(內(nèi)存動(dòng)態(tài)分配庫(kù)函數(shù))signal.h、process.h(進(jìn)程控制庫(kù)函數(shù))《程序設(shè)計(jì)》-2020年秋實(shí)例實(shí)例1:時(shí)間函數(shù)使用實(shí)例2:隨機(jī)函數(shù)使用(1)實(shí)例3:隨機(jī)函數(shù)使用(2)《程序設(shè)計(jì)》-2020年秋#include<stdio.h>#include<time.h>voidmain(){structtm*tmNow;/*定義一個(gè)時(shí)間結(jié)構(gòu)指針變量*/longsecsNow;/*定義以秒為單位的記錄時(shí)間的變量*/char*strNow;/*時(shí)間字符串表示的字符指針*/time(&secsNow);/*調(diào)用函數(shù)time(),得到當(dāng)前時(shí)間*/strNow=ctime(&secsNow);/*獲得時(shí)間的字符串表示*/printf("自1970年1月1日至現(xiàn)在的時(shí)間(以秒為單位):%ld\n",secsNow);printf("當(dāng)前時(shí)間的另一種表示:%s\n",strNow);tmNow=localtime(&secsNow);/*獲得結(jié)構(gòu)形式的時(shí)間*/printf("存于tmNow所指結(jié)構(gòu)中的時(shí)間有年中的日、年、月、日、時(shí)、分、秒:\n");printf("%d%d-%02d-%02d%02d:%02d:%02d\n",tmNow->tm_yday,tmNow->tm_year+1900,tmNow->tm_mon,tmNow->tm_mday,tmNow->tm_hour,tmNow->tm_min,tmNow->tm_sec);strNow=asctime(tmNow);/*得到字符串表示的時(shí)間*/printf("當(dāng)前時(shí)間的另一種表示:%s\n",strNow);}《程序設(shè)計(jì)》-2020年秋#include<stdio.h>#include<time.h>#include<stdlib.h>voidmain(){intk;longnow;srand(time(&now)%60);/*用時(shí)間初始化隨機(jī)數(shù)發(fā)生函數(shù)的初態(tài),使初態(tài)總不相同*/for(k=0;k<10;k++)/*產(chǎn)生10個(gè)隨機(jī)數(shù)輸出*/printf(”%d\n”,rand());/*調(diào)用隨機(jī)函數(shù)*/}《程序設(shè)計(jì)》-2020年秋#include<stdio.h>#include<time.h>#include<stdlib.h>voidmain(){inti;srand(time(NULL));for(i=1;i<=10000;i++){printf(”%10d”,1+rand()%6);if(i%5==0)printf(“\n”);}}《程序設(shè)計(jì)》-2020年秋函數(shù)定義函數(shù)定義的一般形式為
類(lèi)型標(biāo)識(shí)符函數(shù)名(形式參數(shù)說(shuō)明表){
說(shuō)明和定義部分語(yǔ)句序列
}《程序設(shè)計(jì)》-2020年秋函數(shù)定義(續(xù))類(lèi)型標(biāo)識(shí)符用于標(biāo)識(shí)函數(shù)執(zhí)行結(jié)果返回值的類(lèi)型當(dāng)函數(shù)執(zhí)行不返回值時(shí),習(xí)慣用void來(lái)標(biāo)記當(dāng)函數(shù)返回int型值時(shí),類(lèi)型標(biāo)識(shí)符int可以省略函數(shù)名是一個(gè)標(biāo)識(shí)符,一個(gè)C程序有且只有一個(gè)main()函數(shù),其它的函數(shù)名可以隨意命名《程序設(shè)計(jì)》-2020年秋函數(shù)定義(續(xù))函數(shù)名之后括號(hào)內(nèi)的形式參數(shù)說(shuō)明表是按需要而定沒(méi)有形參的函數(shù),也就沒(méi)有形參說(shuō)明表,常用void代之,但函數(shù)名之后的一對(duì)圓括號(hào)不可省略當(dāng)函數(shù)有多個(gè)形參時(shí),形參說(shuō)明之間用逗號(hào)分隔,每個(gè)形參說(shuō)明指定形參的類(lèi)型和形參名《程序設(shè)計(jì)》-2020年秋函數(shù)定義(續(xù))最外層花括號(hào)“{”和“}”括住的部分是函數(shù)體在函數(shù)體的前面部分可有函數(shù)需要的程序?qū)ο蟮恼f(shuō)明和定義函數(shù)體內(nèi)定義的變量是局部變量,只能在函數(shù)體內(nèi)引用它們說(shuō)明和定義之后是由語(yǔ)句序列組成的執(zhí)行代碼《程序設(shè)計(jì)》-2020年秋例子1求兩個(gè)數(shù)中最小值的函數(shù)min()doublemin(doublex,doubley)/*返回double型值,有兩個(gè)形參x,y,都為double型的*/{/*函數(shù)返回x和y中的小者的值*/returnx<y?x:y;}
return語(yǔ)句的執(zhí)行將結(jié)束函數(shù)的執(zhí)行
C語(yǔ)言的return語(yǔ)句有兩種形式:
return;用于不返回值的函數(shù)體中
return表達(dá)式;用于有返回值的函數(shù)體中《程序設(shè)計(jì)》-2020年秋例子2求兩個(gè)正整數(shù)最大公因子的函數(shù)gcd()兩個(gè)正整數(shù)a和b的最大公因子有性質(zhì):gcd(a,b)=gcd(a-b,b),如a>b;gcd(a,b)=gcd(a,b-a),如a<b;gcd(a,b)=a,如a=b。《程序設(shè)計(jì)》-2020年秋intgcd(inta,intb){while(a!=b)if(a>b)a-=b;elseb-=a;returna;}第1解法《程序設(shè)計(jì)》-2020年秋步驟:[求余數(shù)]求a除b的余數(shù)r[判結(jié)束]如r等于0,b為最大公約數(shù)[替換]用b置a,r置b,并回到步驟[求余數(shù)]第2解法《程序設(shè)計(jì)》-2020年秋
intgcd(inta,intb){intr;while(1){if((r=a%b)==0)break;a=b;b=r;}returnb;}《程序設(shè)計(jì)》-2020年秋
intgcd(inta,intb){intr=a;do{a=b;b=r;r=a%b;}while(r);returnb;}《程序設(shè)計(jì)》-2020年秋函數(shù)定義(續(xù))C語(yǔ)言也允許在函數(shù)名后的圓括號(hào)內(nèi)只給出各形參的名,隨后才指定各形參的類(lèi)型,但這種寫(xiě)法在C++中已不允許doublemin(x,y)doublex,y;{returnx<y?x:y;}C語(yǔ)言還允許函數(shù)體為空的函數(shù)dummy()/*或dummy(void)*/{}《程序設(shè)計(jì)》-2020年秋函數(shù)調(diào)用函數(shù)被定義以后,凡要實(shí)現(xiàn)函數(shù)功能的地方,就可簡(jiǎn)單地通過(guò)函數(shù)調(diào)用來(lái)完成函數(shù)調(diào)用的一般形式為函數(shù)名(實(shí)在參數(shù)表)實(shí)在參數(shù),簡(jiǎn)稱(chēng)實(shí)參。函數(shù)調(diào)用時(shí),實(shí)參按它們出現(xiàn)的順序與函數(shù)定義中的形參一一對(duì)應(yīng),并要求實(shí)參類(lèi)型與其對(duì)應(yīng)的形參類(lèi)型相一致《程序設(shè)計(jì)》-2020年秋函數(shù)調(diào)用(續(xù))函數(shù)調(diào)用有兩種方式傳值調(diào)用(callbyvalue)把實(shí)參的值傳給被調(diào)用函數(shù)的參數(shù)(形參)。這時(shí),被調(diào)用函數(shù)對(duì)參數(shù)的改變,不影響調(diào)用函數(shù)實(shí)參的原始值傳引用調(diào)用(callbyreference)把實(shí)參的地址傳給被調(diào)用函數(shù)的參數(shù)(形參)地址。這時(shí),被調(diào)用函數(shù)對(duì)參數(shù)的改變,將影響到調(diào)用函數(shù)實(shí)參的原始值《程序設(shè)計(jì)》-2020年秋函數(shù)調(diào)用(續(xù))對(duì)doublemin(doublex,doubley)的函數(shù)調(diào)用w=min(u,v);函數(shù)調(diào)用min(u,v)就是對(duì)函數(shù)min()的調(diào)用,它提供了兩個(gè)實(shí)參u和v,分別對(duì)應(yīng)形參x和y如果調(diào)用無(wú)形參的函數(shù),這時(shí)函數(shù)的調(diào)用形式變?yōu)楹瘮?shù)名()其中函數(shù)名之后的一對(duì)圓括號(hào)是不能省略的
《程序設(shè)計(jì)》-2020年秋函數(shù)調(diào)用(續(xù))按函數(shù)調(diào)用在程序中的作用,有兩種不同類(lèi)型的應(yīng)用函數(shù)調(diào)用只是利用函數(shù)所完成的功能。此時(shí),將函數(shù)調(diào)用作為一個(gè)獨(dú)立的語(yǔ)句。這種應(yīng)用不要求或無(wú)視函數(shù)的返回值如程序中經(jīng)常使用的調(diào)用格式輸入函數(shù)scanf()和格式輸出函數(shù)printf()等。函數(shù)調(diào)用是利用函數(shù)的返回值:或用這返回值繼續(xù)進(jìn)行表達(dá)式的計(jì)算,或輸出函數(shù)返回值等《程序設(shè)計(jì)》-2020年秋函數(shù)調(diào)用的執(zhí)行過(guò)程為形參分配內(nèi)存空間計(jì)算實(shí)參表達(dá)式的值,并將值賦給對(duì)應(yīng)的形參為函數(shù)的局部變量分配內(nèi)存空間執(zhí)行函數(shù)體內(nèi)的語(yǔ)句序列函數(shù)體執(zhí)行完,或執(zhí)行了return語(yǔ)句后,釋放為這次函數(shù)調(diào)用分配的全部?jī)?nèi)存空間將函數(shù)值(如果有)返回到函數(shù)調(diào)用處繼續(xù)執(zhí)行《程序設(shè)計(jì)》-2020年秋#include<stdio.h>doublex,y,d,min(double,double);voidmain(){printf(“Enterx,y.\n”);scanf(“%lf%lf”,&x,&y);d=min(x,y);printf(“MIN(%.3f,%.3f)=%.3f\n”,x,y,d);}doublemin(doublea,doubleb){doubletemp;temp=a>b?b:a;returntemp;}《程序設(shè)計(jì)》-2020年秋對(duì)函數(shù)調(diào)用的說(shuō)明當(dāng)函數(shù)執(zhí)行return語(yǔ)句或執(zhí)行完函數(shù)體的語(yǔ)句序列后,函數(shù)的這次調(diào)用就結(jié)束,隨之將控制返回到函數(shù)調(diào)用處繼續(xù)執(zhí)行函數(shù)的返回值是通過(guò)執(zhí)行return語(yǔ)句時(shí),計(jì)算return之后的表達(dá)式值而獲得的。如果函數(shù)不提供返回值,則return語(yǔ)句不包含表達(dá)式。如果函數(shù)有返回值,則應(yīng)有確定的類(lèi)型,并在函數(shù)定義時(shí)指明。若函數(shù)定義時(shí)不指明返回值類(lèi)型,且函數(shù)有返回值,C語(yǔ)言約定該函數(shù)的返回值類(lèi)型為int型《程序設(shè)計(jì)》-2020年秋對(duì)函數(shù)調(diào)用的說(shuō)明(續(xù))為了明確指明函數(shù)不提供返回值,建議在函數(shù)定義時(shí),在函數(shù)名之前寫(xiě)上void。并在這樣的函數(shù)體內(nèi),所有的return語(yǔ)句都不帶表達(dá)式當(dāng)函數(shù)執(zhí)行不帶表達(dá)式的return語(yǔ)句返回時(shí),函數(shù)并不是一定不帶回值,而是返回一個(gè)不確定的值。這時(shí),不應(yīng)該利用函數(shù)返回值進(jìn)行再計(jì)算,否則會(huì)產(chǎn)生錯(cuò)誤結(jié)果函數(shù)定義中的return語(yǔ)句的表達(dá)式類(lèi)型應(yīng)與函數(shù)定義中指明的返回值類(lèi)型相一致。如果return語(yǔ)句中的表達(dá)式類(lèi)型與函數(shù)定義指明的返回值類(lèi)型不一致時(shí),對(duì)于基本類(lèi)型情況,則以函數(shù)的返回值類(lèi)型為準(zhǔn),系統(tǒng)會(huì)自動(dòng)進(jìn)行類(lèi)型轉(zhuǎn)換《程序設(shè)計(jì)》-2020年秋實(shí)參向形參單向傳遞數(shù)據(jù)在函數(shù)未被調(diào)用時(shí),函數(shù)定義中的形參和函數(shù)體中定義的局部變量并不占用存儲(chǔ)單元在函數(shù)定義中,必須為函數(shù)的形參指定數(shù)據(jù)類(lèi)型函數(shù)體中所使用的形參的初值是由函數(shù)調(diào)用時(shí)對(duì)應(yīng)的實(shí)參表達(dá)式給定的C語(yǔ)言規(guī)定,實(shí)參表達(dá)式對(duì)形參的數(shù)據(jù)傳遞是“值傳遞”的,即單向傳遞對(duì)于有多個(gè)實(shí)參的函數(shù)調(diào)用情況,C語(yǔ)言不規(guī)定實(shí)參的求值次序《程序設(shè)計(jì)》-2020年秋提要C程序簡(jiǎn)介函數(shù)基礎(chǔ)知識(shí)文件的簡(jiǎn)單用法簡(jiǎn)單程序設(shè)計(jì)實(shí)例《程序設(shè)計(jì)》-2020年秋文件的簡(jiǎn)單用法介紹這部分內(nèi)容的目的學(xué)習(xí)編寫(xiě)從文件輸入數(shù)據(jù)和把結(jié)果輸出到文件的程序了解使用文件程序的結(jié)構(gòu)掌握文件的一般使用方法熟悉一些和文件操作有關(guān)的庫(kù)函數(shù)的用法涉及一些較深的概念先暫且接受!《程序設(shè)計(jì)》-2020年秋定義文件變量在程序的開(kāi)始處定義文件指針變量,和存儲(chǔ)文件名的字符數(shù)組#include<stdio.h>FILE*fp;/*定義文件指針變量fp*/charfname[40];/*存儲(chǔ)文件目錄路徑和文件名的字符數(shù)組*/《程序設(shè)計(jì)》-2020年秋輸入文件名printf(”輸入文件名(包括目錄路徑、擴(kuò)展名)\n”);scanf(”%s%*c”,fname);/*輸入文件名及回車(chē)符*/《程序設(shè)計(jì)》-2020年秋打開(kāi)文件程序從正文文件輸入數(shù)據(jù)程序向正文文件輸出結(jié)果若被打開(kāi)文件不存在,則建立一個(gè)新文件;若被打開(kāi)文件已存在,則該文件中的數(shù)據(jù)被刪除if((fp=fopen(fname,”r”))==NULL){printf(”%s文件不能打開(kāi)\n”,fname);return;}fp=fopen(fname,”w”);/*為寫(xiě)打開(kāi)文件*/讀打開(kāi)時(shí),要求被打開(kāi)文件已存在《程序設(shè)計(jì)》-2020年秋關(guān)閉文件文件使用結(jié)束后,要及時(shí)關(guān)閉fclose(fp);/*以后fp又可用于打開(kāi)文件*/《程序設(shè)計(jì)》-2020年秋文件輸入輸出調(diào)用函數(shù)fgetc()從文件輸出下一個(gè)字符ch=fgetc(fp);/*將輸入字符存于變量ch*/調(diào)用函數(shù)fscanf()從文件按指定格式輸出數(shù)據(jù)fscanf(fp,”%d%d”,&k,&j);/*從文件輸出整數(shù)*/調(diào)用函數(shù)fputc()向文件輸入一個(gè)字符fputc(ch,fp);/*將變量ch中的字符輸出到文件*/調(diào)用函數(shù)fprintf()向文件按指定格式輸入數(shù)據(jù)fprintf(fp,”%d%d\n”,k,j);/*向文件輸入整數(shù)*/《程序設(shè)計(jì)》-2020年秋從文件逐一輸出字符intc;/*不能為char類(lèi)型*/FILE*fp;…/*說(shuō)明有關(guān)變量和設(shè)置初值等*/
if((fp=fopen(文件名,”r”))==NULL){printf(”不能打開(kāi)文件%s。\n”,文件名);return;}while((c=fgetc(fp))!=EOF){…/*對(duì)剛讀入的字符信息c作某種處理*/}fclose(fp);…/*輸出處理結(jié)果*/《程序設(shè)計(jì)》-2020年秋字符逐一輸入形成新文件intc;/*也可以是char類(lèi)型*/FILE*fp;…/*說(shuō)明有關(guān)變量和設(shè)置初值等*/fp=fopen(文件名,”w”);while(還有字符){
…/*生成字符(或字節(jié))存于變量c*/fputc(c,fp);/*將生成的字符輸出*/}fclose(fp);…/*輸出程序結(jié)束報(bào)告*/《程序設(shè)計(jì)》-2020年秋例子將鍵盤(pán)輸入的字符流復(fù)制到指定的文件逐行復(fù)制從鍵盤(pán)輸入字符到指定文件,直至輸入空行結(jié)束《程序設(shè)計(jì)》-2020年秋#include<stdio.h>FILE*fp;voidmain(){intch;charfname[40];printf(”輸入文件名!\n”);scanf(”%s%*c”,fname);fp=fopen(fname,"w");/*以寫(xiě)方式打開(kāi)正文文件*/while((ch=getchar())!=‘\n’){/*逐行處理,至空行結(jié)束*/dofputc(ch,fp);/*行內(nèi)字符逐一復(fù)制*/while((ch=getchar())!=‘\n’);/*處理當(dāng)前行*/fputc(ch,fp);/*輸出換行符*/}fclose(fp);printf(”程序復(fù)制鍵盤(pán)輸入字符結(jié)束。\n”);}《程序設(shè)計(jì)》-2020年秋提要C程序簡(jiǎn)介函數(shù)基礎(chǔ)知識(shí)正文文件的簡(jiǎn)單用法簡(jiǎn)單程序設(shè)計(jì)實(shí)例【例1】輸入整數(shù)n,輸出由2*n+1行2*n+1列,以下形式(n=2)的圖案。
*************圖案分成兩部分,上面由n+1行,下面有n行圖案中,同一行上的兩個(gè)星號(hào)字符之間有一個(gè)空格符對(duì)于上半部分,設(shè)第一行的星號(hào)字符位于屏幕的中間,則后行圖案的起始位置比前行起始位置提前兩個(gè)位置對(duì)于下半部,第一行的起始位置比上半部最后一行起始位置前進(jìn)兩個(gè)字符位置,以后各行也相繼進(jìn)兩個(gè)位置《程序設(shè)計(jì)》-2020年秋#include<stdio.h>voidmain(){intn,j,k;printf("Entern!\n");scanf("%d",&n);for(j=0;j<=n;j++){printf("%*c",40-2*j,’’);for(k=1;k<=2*j+1;k++)printf("*");printf("\n");}for(j=n-1;j>=0;j--){printf("%*c",40-2*j,’’);for(k=1;k<=2*j+1;k++)printf("*");printf("\n");}}《程序設(shè)計(jì)》-2020年秋
“%*c”中的*表示輸入寬度由后面的參量值確定【例2】試編制一個(gè)程序輸出以下形式的乘法表。
12345678911224336944812165510152025661218243036771421283542498816243240485664991827364554637281《程序設(shè)計(jì)》-2020年秋#include<stdio.h>voidmain(){inti,j;
printf("\n\t123456789\n");for(i=1;i<=9;i++){printf("\t%d",i);for(j=1;j<=i;j++)printf("%4d",i*j);printf("\n");}printf("\n\n\n");}《程序設(shè)計(jì)》-2020年秋【例3】編制一個(gè)程序,實(shí)現(xiàn)輸入n(>2)個(gè)整數(shù),輸出其中的次最大數(shù)。為求次最大,程序在循環(huán)過(guò)程中需保留兩個(gè)數(shù),當(dāng)前暫時(shí)最大數(shù)max1和當(dāng)前暫時(shí)次最大數(shù)max2。程序?qū)⑤斎氲牡谝粋€(gè)數(shù)暫時(shí)保留,待輸入第二個(gè)數(shù)后,確定max1和max2。從第三個(gè)輸入數(shù)x開(kāi)始,根據(jù)x調(diào)整max1和max2。調(diào)整過(guò)程需考慮以下幾種可能:x>max1,則以max1作為新的max2,x作為新的max1;max1>x>max2,則以x作為新的max2;x<max2,則不調(diào)整?!冻绦蛟O(shè)計(jì)》-2020年秋#include<stdio.h>voidmain(){intn,i,max1,max2,x,temp;printf("輸入n(>=2)!\n");scanf("%d",&n);if(n<2)return;printf("輸入第%d個(gè)整數(shù).",1);scanf("%d",&temp);printf("輸入第%d個(gè)整數(shù).",2);scanf("%d",&x);if(temp<x){max1=x;max2=temp;}《程序設(shè)計(jì)》-2020年秋else{max1=temp;max2=x;}for(i=3;i<=n;i++){printf("輸入第%d個(gè)整數(shù).",i);scanf("%d",&x);if(x>max1){max2=max1;max1=x;}elseif(x>max2)max2=x;}printf("次最大是%d\n\n",max2);}《程序設(shè)計(jì)》-2020年秋【例4】編制對(duì)給定的整數(shù),判該整數(shù)是否是質(zhì)數(shù)的函數(shù),若是質(zhì)數(shù),函數(shù)返回1,否則函數(shù)返回0。
判一個(gè)整數(shù)n是否是一個(gè)質(zhì)數(shù)有許多方法:如n=2,則n是質(zhì)數(shù);若n是其它偶數(shù),則n不是質(zhì)數(shù);讓整數(shù)變量k自3開(kāi)始,每次增2,直至k的平方超過(guò)n為止,若其中某個(gè)k能整除n,則n不是質(zhì)數(shù)。若所有這樣的k都不能整除n,則n是質(zhì)數(shù)。《程序設(shè)計(jì)》-2020年秋《程序設(shè)計(jì)》-2020年秋intisPrime(longn){longk;if(n==2L)return1;if(n%2==0)return0;for(k=3L;k*k<=n;k+=2L)if(n%k==0)break;if(k*k>n)return1;return0;}【例5】編制輸入整數(shù),輸出小于等于該整數(shù)的全部質(zhì)數(shù)的程序。程序首先輸出質(zhì)數(shù)2,之后對(duì)指定范圍內(nèi)的奇數(shù)采用例4的方法判其是否是質(zhì)數(shù)。#include<stdio.h>voidmain(){longm,n;intj;/*j控制每行輸出10個(gè)質(zhì)數(shù)*/printf(”輸入整數(shù)\n”);scanf(”%ld”,&m);printf(”%6d”,2);j=1;for(n=3L;n<=m;n+=2)if(isPrime(n)){if(j++%10==0)printf(”\n”);printf(”%6ld”,n);}printf(”\n”);}《程序設(shè)計(jì)》-2020年秋【例6】輸入x,求級(jí)數(shù)s(x)的近似值。約定求和的精度為0.000001。
x3x5x7s(x)=x++++…3*1!5*2!7*3!一般地,設(shè)級(jí)數(shù)為
s(x)=t0+t1+t2+┅+tk《程序設(shè)計(jì)》-2020年秋求級(jí)數(shù)部分和的算法可描述如下:{s=0;/*級(jí)數(shù)的部分和變量s,置初值0*/t=首項(xiàng)值;/*置通項(xiàng)變量t為級(jí)數(shù)的首項(xiàng)值*/k=0;/*置項(xiàng)序號(hào)變量k為0*/while(fabs(t)>=Epsilon){s+=t;/*累計(jì)當(dāng)前項(xiàng)tk到部分和*/t=f(t,k);/*由當(dāng)前項(xiàng)t和k計(jì)算下一個(gè)當(dāng)前項(xiàng)的值*/k++;/*項(xiàng)序號(hào)增1*/}}《程序設(shè)計(jì)》-2020年秋對(duì)于本題,首項(xiàng)值為x,級(jí)數(shù)第k(>=0)項(xiàng)tk的算式為
(-1)k*x(2*k+1)/((2*k+1)*k!)k+1項(xiàng)tk+1與k項(xiàng)tk有關(guān)系
tk+1=-tk*x*x*(2*k+1)/((2*k+3)*(k+1))tk是通項(xiàng)t的當(dāng)前項(xiàng)值,tk+1是通項(xiàng)t的下一個(gè)當(dāng)前項(xiàng)值。由當(dāng)前項(xiàng)t和k計(jì)算t的下一個(gè)當(dāng)前項(xiàng)值t’,可用以下表達(dá)式實(shí)現(xiàn):
t’=-t*x*x*(2.0*k+1.0)/((2.0*k+3)*(k+1))把以上式子代入上述算法,并令x的值由輸入給定,寫(xiě)出程序如下:《程序設(shè)計(jì)》-2020年秋#include<stdio.h>#include<math.h>#defineEpsilon0.000001voidmain(){intk;doubles,x,t;printf(“Enterx.\n”);scanf(“%lf”,&x);s=0.0;/*級(jí)數(shù)的部分和變量s置初值0*/t=x;/*置通項(xiàng)變量t為級(jí)數(shù)的首項(xiàng)值*/k=0;/*置項(xiàng)序號(hào)變量k為0*/while(fabs(t)>=Epsilon){s+=t;t=-t*x*x*(2.0*k+1)/((2.0*k+3)*(k+1));k++;/*項(xiàng)序號(hào)增1*/}printf(“s(%f)=%f\n”,x,s);}《程序設(shè)計(jì)》-2020年秋【例7】編制從鍵盤(pán)輸入整數(shù)序列,并按輸入順序輸出到指定的文件中的程序。程序循環(huán)地從鍵盤(pán)輸入整數(shù),將整數(shù)輸出到指定的文件中。當(dāng)程序發(fā)現(xiàn)不能從鍵盤(pán)輸入整數(shù)時(shí)結(jié)束循環(huán)。《程序設(shè)計(jì)》-2020年秋#include<stdio.h>FILE*fp;intmain(){intx,k;charfname[40];printf(”輸入文件名!\n”);scanf(”%s%*c”,fname);if((fp=fopen(fname,"w"))==NULL){printf("不能打開(kāi)文件%s。\n",fname);return0;}k=1;while(scanf(”%d”,&x)==1){fprintf(fp,”%d\t”,x);if(k++%5==0)fprintf(fp,”\n”);}fclose(fp);printf(”\n輸出了%d個(gè)整數(shù).\n”,k-1);return1;}《程序設(shè)計(jì)》-2020年秋/*scanf返回值表示輸入?yún)?shù)的個(gè)數(shù)*/【例8】編制從指定的文件中輸出整數(shù),并按輸出順序輸出到顯示屏上。程序從文件循環(huán)地輸入整數(shù),將整數(shù)輸出到顯示屏。當(dāng)程序發(fā)現(xiàn)不能從文件輸入整數(shù)時(shí)結(jié)束循環(huán)?!冻绦蛟O(shè)計(jì)》-2020年秋#include<stdio.h>FILE*fp;intmain(){intx,k;charfname[40];printf(”輸入文件名!\n”);scanf(”%s%*c”,fname);if((fp=fopen(fname,"r"))==NULL){printf("不能打開(kāi)文件%s。\n",fname);return0;}k=1;while(fscanf(fp,”%d”,&x)==1){printf(”%d\t”,x);if(k++%5==0)printf(”\n”);}fclose(fp);printf(”\n從文件%s輸入了%d個(gè)整數(shù).\n”,fname,k-1);return1;}《程序設(shè)計(jì)》-2020年秋《程序設(shè)計(jì)》-2020年秋【例9】求Sn=a+aa+aaa+…+aa…a(n個(gè)a之值),其中a是一個(gè)十進(jìn)制數(shù)字。#include<stdio.h>main(){longsn;inti,a,t,n;printf(“Inputnanda:”);scanf(“%d%d”,&n,&a);t=a;sn=0;i=1;do{sn+=t;i++;t=t*10+a;}while(i<n);
printf(“Sn=%l\n”,sn);}《程序設(shè)計(jì)》-2020年秋【例10】有一分?jǐn)?shù)序列:2/1,3/2,5/3,8/5,13/8,21/13,…
求出這個(gè)數(shù)列的前n項(xiàng)之和分析:假設(shè)這個(gè)序列的第k項(xiàng)為tk=ak/bk,有tk+1=(ak+bk)/ak=1+1/tka1=2;b1=1《程序設(shè)計(jì)》-2020年秋#include<stdio.h>main(){inti=1,n,floatt,sprintf(“Inputn:”);scanf(“%d”,&n);s=0.0;t=2.0while(i<=n){s+=t;t=1.0+1.0/t;i++}printf(“Thesumis:%f”,s);}《程序設(shè)計(jì)》-2020年秋【例11】用迭代法求。求平方根的迭代公式為要求前后兩次求出的x的差的絕對(duì)值小于10-5。#include<stdio.h>Main(){floata,x1,x2;printf(“Inputa’svalue:”);scanf(“%f”,&a);x2=a;do{x1=x2;x2=0.5*(x1+a/x1);}while(fabs(x2-x1)>=1e-5);printf(“=%f”,x2);}《程序設(shè)計(jì)》-2020年秋【例12】打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè)3位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如,153是一水仙花數(shù),因?yàn)?53=13+53+33#include<stdio.h>main(){inti,first,second,third;for(i=100;i<=999;i++){first=i/100;second=(i/10)%10;third=(i%100)%10;if(i==first*first*first+second*second*second+third*third*third)printf(“%d\n”,i);}}《程序設(shè)計(jì)》-2020年秋【例13】一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱(chēng)為“完數(shù)”。例如,6的因子為1、2、3,而6=1+2+3,因此6是“完數(shù)”。編程序找出1000之內(nèi)的所有完數(shù),并按下面格式輸出其因子:
6’sfactorsare1,2,3《程序設(shè)計(jì)》-2020年秋
#include<stdio.h>main(){inti,j,sum;for(i=1;i<=1000;i++){sum=0;for(j=1;j<i;j++)if(i%j==0)sum+=j;if(i==1)printf(“1’sfactoris1”)elseif(sum==i){printf(“%d’sfactorsare:”);for(j=1;j<i;j++)
if(i%j==0)printf(“%d,”,j);printf(“\n”);}}}猴子吃桃問(wèn)題【例14】猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過(guò)癮,又多吃了一個(gè)。第二天早上又將第一天剩下的桃子吃掉一半,有多吃了一個(gè)。以后每天早上都吃了前一天剩下的一半零一個(gè)。到第10天早上想再吃時(shí),發(fā)現(xiàn)只剩下一個(gè)桃子了。編寫(xiě)程序求猴子第一天摘了多少個(gè)桃子。關(guān)鍵是:搞清楚第一天桃數(shù)和第二天桃子數(shù)之間的關(guān)系,即第二天桃子數(shù)加1的2倍等于第一天的桃子數(shù)?!冻绦蛟O(shè)計(jì)》-2020年秋#include<stdio.h>intmain(){Intday,x1,x2;/*定義day、x1、x23個(gè)變董為基本整型*/day=9;x2=1;while(day>0){
x1=(x2+1)*2;/*第一天的桃子數(shù)是第二天桃子數(shù)加1后
的2倍*/
x2=x1;
day--;/*因?yàn)閺暮笙蚯巴扑蕴鞌?shù)遞減*/}printf("thetotalis%d\n",x1);/*輸出桃子的總數(shù)*/return
0;}《程序設(shè)計(jì)》-2020年秋漁夫打魚(yú)曬網(wǎng)問(wèn)題【例15】如果一個(gè)漁夫從2011年1月1日開(kāi)始每三天打一次漁,兩天曬一次網(wǎng),編程實(shí)現(xiàn)當(dāng)輸入20111月1日以后的任意一天,輸出該漁夫是在打漁還是在
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023二年級(jí)語(yǔ)文上冊(cè) 第八單元 23 紙船和風(fēng)箏說(shuō)課稿 新人教版
- 2025駕駛員安全生產(chǎn)聘用合同
- 2025X大學(xué)技術(shù)合同管理辦法
- 2025建筑外墻改造工程合同
- Module 9 Unit 1 We laughed a lot(說(shuō)課稿)-2023-2024學(xué)年外研版(三起)英語(yǔ)五年級(jí)下冊(cè)001
- Unit 1 School Subjects Lesson3(說(shuō)課稿)-2023-2024學(xué)年人教新起點(diǎn)版英語(yǔ)三年級(jí)下冊(cè)
- 公司法律事務(wù)代理合同范例
- 2024-2025學(xué)年高中歷史 第三單元 各國(guó)經(jīng)濟(jì)體制的創(chuàng)新和調(diào)整 第14課 社會(huì)主義經(jīng)濟(jì)體制的建立(1)教學(xué)說(shuō)課稿 岳麓版必修2
- Module 2 Unit 1 I helped my mum.(說(shuō)課稿)-2024-2025學(xué)年外研版(一起)英語(yǔ)四年級(jí)上冊(cè)
- 9小水滴的訴說(shuō) 第二課時(shí) 說(shuō)課稿-2023-2024學(xué)年道德與法治二年級(jí)下冊(cè)(統(tǒng)編版)
- 2025南網(wǎng)科研院系統(tǒng)內(nèi)招聘13人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 關(guān)于合同知識(shí)的全面解讀
- Unit 6 Beautiful landscapes Integration 說(shuō)課稿 -2024-2025學(xué)年譯林版英語(yǔ)七年級(jí)下冊(cè)001
- 五四制青島版三年級(jí)數(shù)學(xué)下學(xué)期教學(xué)計(jì)劃
- 2024年常德職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)
- 2025 年福建省中考語(yǔ)文試題:作文試題及范文
- 短視頻運(yùn)營(yíng)績(jī)效考核表KPI-企業(yè)管理
- 【譯林】九下英語(yǔ)單詞默寫(xiě)表
- IEC 62368-1標(biāo)準(zhǔn)解讀-中文
- 15J403-1-樓梯欄桿欄板(一)
- QC課題提高金剛砂地面施工一次合格率
評(píng)論
0/150
提交評(píng)論