




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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)2018年10月11日1謝謝觀賞2019-8-17謝謝觀賞提要C程序簡(jiǎn)介函數(shù)基礎(chǔ)知識(shí)文件的簡(jiǎn)單用法簡(jiǎn)單程序設(shè)計(jì)實(shí)例22019-8-17謝謝觀賞提要C程序簡(jiǎn)介函數(shù)基礎(chǔ)知識(shí)文件的簡(jiǎn)單用法簡(jiǎn)單程序設(shè)計(jì)實(shí)例32019-8-17謝謝觀賞C程序簡(jiǎn)介一個(gè)C程序可由若干個(gè)源程序文件組成一個(gè)源文件可以由若干個(gè)函數(shù)和預(yù)處理命令以及全局變量聲明部分組成一個(gè)函數(shù)由變量定義部分和執(zhí)行語(yǔ)句組成一個(gè)源程序文件也是可獨(dú)立編譯的單位,所以C程序可以按源程序文件分別編寫(xiě)、分別編譯42019-8-17謝謝觀賞52019-8-17謝謝觀賞C語(yǔ)句C語(yǔ)句是C程序的基本組成單元C語(yǔ)句可以分為以下5類空語(yǔ)句表達(dá)式語(yǔ)句復(fù)合語(yǔ)句控制語(yǔ)句函數(shù)調(diào)用語(yǔ)句62019-8-17謝謝觀賞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ǔ)句)72019-8-17謝謝觀賞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)成,又稱分程序82019-8-17謝謝觀賞C程序的三種基本結(jié)構(gòu)順序結(jié)構(gòu)條件控制結(jié)構(gòu)if…[else…]循環(huán)結(jié)構(gòu)while()do…while()for()92019-8-17謝謝觀賞提要C程序簡(jiǎn)介函數(shù)基礎(chǔ)知識(shí)正文文件的簡(jiǎn)單用法簡(jiǎn)單程序設(shè)計(jì)實(shí)例102019-8-17謝謝觀賞函數(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ū)ο竺挠绊?12019-8-17謝謝觀賞函數(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)用122019-8-17謝謝觀賞函數(shù)庫(kù)把一些公用的、基本的計(jì)算功能所對(duì)應(yīng)的函數(shù)集中起來(lái),構(gòu)成一個(gè)庫(kù),我們稱之為函數(shù)庫(kù),相應(yīng)的函數(shù)成為庫(kù)函數(shù)函數(shù)庫(kù)中的函數(shù)具有預(yù)先定義的、標(biāo)準(zhǔn)的輸入、輸入接口C語(yǔ)言中定義了一些基本的標(biāo)準(zhǔn)函數(shù)編程環(huán)境工具廠商(Microsoft、Borland等)往往提供更多的函數(shù)供編程者使用132019-8-17謝謝觀賞函數(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ǔ)言按功能分類,提供了大量函數(shù)庫(kù),每個(gè)函數(shù)庫(kù)都有自己的頭文件142019-8-17謝謝觀賞庫(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(字符分類和轉(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ù))152019-8-17謝謝觀賞實(shí)例實(shí)例1:時(shí)間函數(shù)使用實(shí)例2:隨機(jī)函數(shù)使用(1)實(shí)例3:隨機(jī)函數(shù)使用(2)162019-8-17謝謝觀賞#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);}172019-8-17謝謝觀賞#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ù)*/}182019-8-17謝謝觀賞#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”);}}192019-8-17謝謝觀賞函數(shù)定義函數(shù)定義的一般形式為
類型標(biāo)識(shí)符函數(shù)名(形式參數(shù)說(shuō)明表){
說(shuō)明和定義部分語(yǔ)句序列
}202019-8-17謝謝觀賞函數(shù)定義(續(xù))類型標(biāo)識(shí)符用于標(biāo)識(shí)函數(shù)執(zhí)行結(jié)果返回值的類型當(dāng)函數(shù)執(zhí)行不返回值時(shí),習(xí)慣用void來(lái)標(biāo)記當(dāng)函數(shù)返回int型值時(shí),類型標(biāo)識(shí)符int可以省略函數(shù)名是一個(gè)標(biāo)識(shí)符,一個(gè)C程序有且只有一個(gè)main()函數(shù),其它的函數(shù)名可以隨意命名212019-8-17謝謝觀賞函數(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ō)明指定形參的類型和形參名222019-8-17謝謝觀賞函數(shù)定義(續(xù))最外層花括號(hào)“{”和“}”括住的部分是函數(shù)體在函數(shù)體的前面部分可有函數(shù)需要的程序?qū)ο蟮恼f(shuō)明和定義函數(shù)體內(nèi)定義的變量是局部變量,只能在函數(shù)體內(nèi)引用它們說(shuō)明和定義之后是由語(yǔ)句序列組成的執(zhí)行代碼232019-8-17謝謝觀賞例子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ù)體中242019-8-17謝謝觀賞例子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。252019-8-17謝謝觀賞intgcd(inta,intb){while(a!=b)if(a>b)a-=b;elseb-=a;returna;}第1解法262019-8-17謝謝觀賞步驟:[求余數(shù)]求a除b的余數(shù)r[判結(jié)束]如r等于0,b為最大公約數(shù)[替換]用b置a,r置b,并回到步驟[求余數(shù)]第2解法272019-8-17謝謝觀賞
intgcd(inta,intb){intr;while(1){if((r=a%b)==0)break;a=b;b=r;}returnb;}282019-8-17謝謝觀賞
intgcd(inta,intb){intr=a;do{a=b;b=r;r=a%b;}while(r);returnb;}292019-8-17謝謝觀賞函數(shù)定義(續(xù))C語(yǔ)言也允許在函數(shù)名后的圓括號(hào)內(nèi)只給出各形參的名,隨后才指定各形參的類型,但這種寫(xiě)法在C++中已不允許doublemin(x,y)doublex,y;{returnx<y?x:y;}C語(yǔ)言還允許函數(shù)體為空的函數(shù)dummy()/*或dummy(void)*/{}302019-8-17謝謝觀賞函數(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)稱實(shí)參。函數(shù)調(diào)用時(shí),實(shí)參按它們出現(xiàn)的順序與函數(shù)定義中的形參一一對(duì)應(yīng),并要求實(shí)參類型與其對(duì)應(yīng)的形參類型相一致312019-8-17謝謝觀賞函數(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í)參的原始值322019-8-17謝謝觀賞函數(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)是不能省略的
332019-8-17謝謝觀賞函數(shù)調(diào)用(續(xù))按函數(shù)調(diào)用在程序中的作用,有兩種不同類型的應(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ù)返回值等342019-8-17謝謝觀賞函數(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í)行352019-8-17謝謝觀賞#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;}362019-8-17謝謝觀賞對(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)有確定的類型,并在函數(shù)定義時(shí)指明。若函數(shù)定義時(shí)不指明返回值類型,且函數(shù)有返回值,C語(yǔ)言約定該函數(shù)的返回值類型為int型372019-8-17謝謝觀賞對(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á)式類型應(yīng)與函數(shù)定義中指明的返回值類型相一致。如果return語(yǔ)句中的表達(dá)式類型與函數(shù)定義指明的返回值類型不一致時(shí),對(duì)于基本類型情況,則以函數(shù)的返回值類型為準(zhǔn),系統(tǒng)會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換382019-8-17謝謝觀賞實(shí)參向形參單向傳遞數(shù)據(jù)在函數(shù)未被調(diào)用時(shí),函數(shù)定義中的形參和函數(shù)體中定義的局部變量并不占用存儲(chǔ)單元在函數(shù)定義中,必須為函數(shù)的形參指定數(shù)據(jù)類型函數(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í)參的求值次序392019-8-17謝謝觀賞提要C程序簡(jiǎn)介函數(shù)基礎(chǔ)知識(shí)文件的簡(jiǎn)單用法簡(jiǎn)單程序設(shè)計(jì)實(shí)例402019-8-17謝謝觀賞文件的簡(jiǎn)單用法介紹這部分內(nèi)容的目的學(xué)習(xí)編寫(xiě)從文件輸入數(shù)據(jù)和把結(jié)果輸出到文件的程序了解使用文件程序的結(jié)構(gòu)掌握文件的一般使用方法熟悉一些和文件操作有關(guān)的庫(kù)函數(shù)的用法涉及一些較深的概念先暫且接受!412019-8-17謝謝觀賞定義文件變量在程序的開(kāi)始處定義文件指針變量,和存儲(chǔ)文件名的字符數(shù)組#include<stdio.h>FILE*fp;/*定義文件指針變量fp*/charfname[40];/*存儲(chǔ)文件目錄路徑和文件名的字符數(shù)組*/422019-8-17謝謝觀賞輸入文件名printf(”輸入文件名(包括目錄路徑、擴(kuò)展名)\n”);scanf(”%s%*c”,fname);/*輸入文件名及回車符*/432019-8-17謝謝觀賞打開(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)文件已存在442019-8-17謝謝觀賞關(guān)閉文件文件使用結(jié)束后,要及時(shí)關(guān)閉fclose(fp);/*以后fp又可用于打開(kāi)文件*/452019-8-17謝謝觀賞文件輸入輸出調(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ù)*/462019-8-17謝謝觀賞從文件逐一輸出字符intc;/*不能為char類型*/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é)果*/472019-8-17謝謝觀賞字符逐一輸入形成新文件intc;/*也可以是char類型*/FILE*fp;…/*說(shuō)明有關(guān)變量和設(shè)置初值等*/fp=fopen(文件名,”w”);while(還有字符){
…/*生成字符(或字節(jié))存于變量c*/fputc(c,fp);/*將生成的字符輸出*/}fclose(fp);…/*輸出程序結(jié)束報(bào)告*/482019-8-17謝謝觀賞例子將鍵盤(pán)輸入的字符流復(fù)制到指定的文件逐行復(fù)制從鍵盤(pán)輸入字符到指定文件,直至輸入空行結(jié)束492019-8-17謝謝觀賞#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”);}502019-8-17謝謝觀賞提要C程序簡(jiǎn)介函數(shù)基礎(chǔ)知識(shí)正文文件的簡(jiǎn)單用法簡(jiǎn)單程序設(shè)計(jì)實(shí)例512019-8-17【例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è)位置謝謝觀賞522019-8-17#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");}}謝謝觀賞
“%*c”中的*表示輸入寬度由后面的參量值確定532019-8-17【例2】試編制一個(gè)程序輸出以下形式的乘法表。
12345678911224336944812165510152025661218243036771421283542498816243240485664991827364554637281謝謝觀賞542019-8-17#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");}謝謝觀賞552019-8-17【例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)整。謝謝觀賞562019-8-17#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;}謝謝觀賞572019-8-17else{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);}謝謝觀賞582019-8-17【例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ù)。謝謝觀賞592019-8-17謝謝觀賞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;}602019-8-17【例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”);}謝謝觀賞612019-8-17【例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謝謝觀賞622019-8-17求級(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*/}}謝謝觀賞632019-8-17對(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ě)出程序如下:謝謝觀賞642019-8-17#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);}謝謝觀賞652019-8-17【例7】編制從鍵盤(pán)輸入整數(shù)序列,并按輸入順序輸出到指定的文件中的程序。程序循環(huán)地從鍵盤(pán)輸入整數(shù),將整數(shù)輸出到指定的文件中。當(dāng)程序發(fā)現(xiàn)不能從鍵盤(pán)輸入整數(shù)時(shí)結(jié)束循環(huán)。謝謝觀賞662019-8-17#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;}謝謝觀賞/*scanf返回值表示輸入?yún)?shù)的個(gè)數(shù)*/672019-8-17【例8】編制從指定的文件中輸出整數(shù),并按輸出順序輸出到顯示屏上。程序從文件循環(huán)地輸入整數(shù),將整數(shù)輸出到顯示屏。當(dāng)程序發(fā)現(xiàn)不能從文件輸入整數(shù)時(shí)結(jié)束循環(huán)。謝謝觀賞682019-8-17#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;}謝謝觀賞692019-8-17謝謝觀賞【例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{
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 制造業(yè)項(xiàng)目標(biāo)準(zhǔn)合同模板
- 合同制優(yōu)化保獎(jiǎng)服務(wù)套餐(7型)
- 裝修裝飾工程合同(三)
- 綠色通道綠化合同
- 租賃合同和解協(xié)議書(shū)格式示例
- 車輛質(zhì)押借款正式合同
- 公司簽訂安保人員合同范本范例
- 小學(xué)生拓展思維作文課件
- 臨終關(guān)懷服務(wù)的倫理決策案例考核試卷
- 城市配送與物流配送環(huán)節(jié)的風(fēng)險(xiǎn)防范考核試卷
- 部隊(duì)通訊員培訓(xùn)
- 2024-2030年中國(guó)企業(yè)在安哥拉投資建設(shè)化肥廠行業(yè)供需狀況及發(fā)展風(fēng)險(xiǎn)研究報(bào)告版
- 物業(yè)公司水浸、水管爆裂事故應(yīng)急處置預(yù)案
- 第四章第三節(jié)幼兒的親子關(guān)系(課件)-《幼兒心理學(xué)》(人教版第二版)
- 國(guó)企投資管理制度
- 部編版三年級(jí)下冊(cè)語(yǔ)文作業(yè)本參考答案
- SF-T0095-2021人身?yè)p害與疾病因果關(guān)系判定指南
- 2024并網(wǎng)光伏逆變器技術(shù)規(guī)范
- 文言文多文本閱讀:叔向見(jiàn)韓宣子(附答案解析與譯文)
- 工程招投標(biāo)模擬實(shí)訓(xùn)報(bào)告范文2024年
- 系統(tǒng)脫敏治療的長(zhǎng)期療效跟蹤評(píng)估
評(píng)論
0/150
提交評(píng)論