C語言程序設(shè)計(jì)課件:程序和流程控制_第1頁
C語言程序設(shè)計(jì)課件:程序和流程控制_第2頁
C語言程序設(shè)計(jì)課件:程序和流程控制_第3頁
C語言程序設(shè)計(jì)課件:程序和流程控制_第4頁
C語言程序設(shè)計(jì)課件:程序和流程控制_第5頁
已閱讀5頁,還剩56頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

C語言程序設(shè)計(jì)程序和流程控制本章問題C語言程序的書寫格式有規(guī)律嗎?設(shè)計(jì)C語言程序應(yīng)從哪些方面思考問題?C語言程序的基本結(jié)構(gòu)有哪些?編寫一些簡單的C語言程序有規(guī)律可循嗎?如何培養(yǎng)嚴(yán)謹(jǐn)?shù)乃季S和良好的習(xí)慣?3.0C語言程序的版式及語句3.1結(jié)構(gòu)化程序設(shè)計(jì)和流程控制3.2if語句3.3switch多分支選擇語句3.4循環(huán)控制3.5輔助控制語句3.6典型程序編寫方法舉例3.7本章小結(jié)3.8目錄content3.1C語言程序的版式及語句

本章主要從編程的思路和理解程序的結(jié)構(gòu)框架出發(fā),來說明程序的構(gòu)架和格式(程序的版式)。

#include<stdio.h>//預(yù)處理voidmain()//函數(shù)定義{inta,b;//變量說明

intsum;scanf("%d%d",&a,&b);//數(shù)據(jù)輸入sum=a+b;//執(zhí)行部分printf("sum=%d",sum);//信息輸出}這是一個(gè)典型的只包含單個(gè)函數(shù)(即main())的程序例3.1求二整數(shù)之和的程序

編程的“七塊”理解法例3.1由七塊組成:(1)注釋部分(2)預(yù)處理塊、全局變量說明、函數(shù)聲明等(3)函數(shù)定義部分(4)變量說明部分(5)數(shù)據(jù)輸入部分(6)執(zhí)行部分(7)信息輸出部分3.1.1求二整數(shù)之和的程序

如例3.1程序的執(zhí)行部分采用函數(shù)調(diào)用則例3.1程序可修改為:輸入:78(CR)運(yùn)行結(jié)果為:sum=15#include<stdio.h>//預(yù)處理intadd(intx,inty);//函數(shù)聲明voidmain()//函數(shù)定義{inta,b;//變量說明

intsum;scanf("%d%d",&a,&b);//數(shù)據(jù)輸入

sum=add(a,b);//執(zhí)行部分

printf("sum=%d",sum);//信息輸出}/*求和函數(shù),輸入?yún)?shù)為二整數(shù),返回值為其和*/intadd(intx,inty)//函數(shù)定義{intz;//變量說明z=x+y;//執(zhí)行部分returnz;//返回結(jié)果}例3.23.1.2C語言的語句

語句是程序的基本元素,程序中的各功能部分都是由一定含義的語句組成的,換句話說,語句是一個(gè)完整程序的基本組成部分。C語句的特點(diǎn)是以分號(hào)為結(jié)束符。

例如:x=10/*不是語句*/y=7;/*分號(hào)結(jié)束構(gòu)成語句*/

根據(jù)語句的作用可以把語句分成說明語句和執(zhí)行語句兩大類。

說明語句

說明語句:用來對(duì)程序中所使用的各種類型變量及屬性進(jìn)行說明,按其所起作用有時(shí)也稱為定義語句。

說明語句的格式為:

<存儲(chǔ)類型>數(shù)據(jù)類型變量名列表;

說明語句也可以初始化,如:

charch=‘H’;

unsignedlongy=356847412L;3.1.2.1

執(zhí)行語句3.1.2.2

執(zhí)行語句一般包含四大類,分別是:表達(dá)式語句(包括空語句)復(fù)合語句流程控制語句輔助控制語句表達(dá)式語句與復(fù)合語句表達(dá)式語句:任何一個(gè)表達(dá)式加上一個(gè)分號(hào)就是一條語句,一般的格式為:表達(dá)式;//表達(dá)式語句

只有分號(hào)而沒有表達(dá)式的語句就叫空語句;空語句格式為:

;//空語句

3.1.2.2復(fù)合語句:將若干語句用括號(hào){}括起來就構(gòu)成了復(fù)合語句,復(fù)合語句在語法上相當(dāng)于一個(gè)語句。復(fù)合語句的一般格式為:

{語句1;

語句2;

……

}

3.2結(jié)構(gòu)化程序設(shè)計(jì)和流程控制本節(jié)包括兩部分的內(nèi)容:結(jié)構(gòu)化程序設(shè)計(jì)和C語言的流程控制語句和輔助控制語句。

任何結(jié)構(gòu)化程序都可以用三種基本結(jié)構(gòu)表示:順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)

順序結(jié)構(gòu)按語句順序依次執(zhí)行3.2.1.1圖3.1順序結(jié)構(gòu)示意圖

選擇結(jié)構(gòu)根據(jù)給定的條件進(jìn)行判斷,由判斷結(jié)果決定執(zhí)行兩支或多支程序段中的一支:3.2.1.2由兩分支選擇結(jié)構(gòu)可以派生出另一種基本結(jié)構(gòu),多分支選擇結(jié)構(gòu)。

循環(huán)結(jié)構(gòu)在給定條件成立的情況下,反復(fù)執(zhí)行某個(gè)程序段。有當(dāng)型循環(huán)結(jié)構(gòu)和直到型循環(huán)結(jié)構(gòu)。3.2.1.3

圖3.3循環(huán)結(jié)構(gòu)示意圖3.2.2C語言的流程控制語句和輔助控制語句

根據(jù)結(jié)構(gòu)化程序結(jié)構(gòu)的基本思想,程序的執(zhí)行過程可以用上述的流程結(jié)構(gòu)和結(jié)構(gòu)的嵌套表示出來,而C語言又為這種流程結(jié)構(gòu)提供了對(duì)應(yīng)的流程控制語句,這樣就能非常方便地將程序的執(zhí)行過程用C語言描述出來,程序執(zhí)行過程的C語言描述就是我們所編寫的程序的主體。

C提供的流程控制語句流程控制語句循環(huán)選擇ifelseswitchforwhiledowhile輔助控制語句控制語句breakcontinuegotoreturn3.2.23.3if語句if-else條件分支語句的標(biāo)準(zhǔn)使用形式,它的流程和語句形式如下:

圖3.5標(biāo)準(zhǔn)if-else的流程和語句

示例:if(a>=0){printf("comeon,baby!");}else{printf("goaway!");}建議結(jié)構(gòu)化語句的執(zhí)行體部分都采用復(fù)合語句。if語句程序注意事項(xiàng)1if后面圓括號(hào)中的表達(dá)式一般是關(guān)系表達(dá)式或邏輯表達(dá)式,它表示分支的條件。在C語言程序中,下面兩種方法經(jīng)常使用:

if(x)等價(jià)于if(x!=0) if(!x)等價(jià)于if(x==0)

如變量x為float等實(shí)型變量,則與零值比較的標(biāo)準(zhǔn)if語句如下:

if(fabs(x)<=1e-6)

3.3.1if語句程序注意事項(xiàng)2程序中有時(shí)會(huì)遇到if/else/return的組合,應(yīng)該將如下不良風(fēng)格的程序:改寫為if(condition){returnx;}else{returny;}或者改寫為return(condition?x:y);if(condition)returnx;returny;3.3.1最簡if語句程序注意事項(xiàng)3if分支是if-else分支的缺省情況,即缺省else時(shí)的條件分支。例如:if(i<100){i++;}3.3.1圖3.6缺省else時(shí)的條件分支的流程和語句3.3.2條件分支嵌套if(表達(dá)式1){

語句1;}elseif(表達(dá)式2)

{

語句2;

}

elseif(…)

else

{

語句n;

}多條件分支下的流程控制表示的流程結(jié)構(gòu)如下:if--elseif示例為了給某班學(xué)生的一次考試成績分等級(jí),其中i表示學(xué)生成績,grade表示等級(jí)。90分以上的為A,70分到90分之間的為B,60分到70分之間的為C,60分以下的得D。

…….

if(i>=90) { grade=‘A’; } elseif(i>=70) { grade=‘B’; } elseif(i>=60) { grade=‘C’; } else { grade=‘D’; }例3.33.4switch——多分支選擇語句

switch也是分支選擇語句,它可以是多分支選擇,而if語句只有兩個(gè)分支可供選擇。switch(表達(dá)式){

case判斷值1:

語句組1;break;case

判斷值2:

語句組2;break;……case

判斷值n:

語句組n;break;default:

語句組n+1;break;}圖3.8switch語句的流程控制switch(key_value){

caseF1:F1功能處理程序;break;caseF2:F2功能處理程序;break;caseF3:F3功能處理程序;break;caseF4:F4功能處理程序;break;caseF5:F5功能處理程序;break;caseF6:F6功能處理程序;break;……default:相應(yīng)處理程序;break;}}

#defineESC0x11b;#defineF10x3b00//F1鍵的鍵值為0x3b00#defineF20x3c00#defineF30x3d00#defineF40x3e00#defineF50x3f00#defineF6….#include<stdio.h>#include<bios.h>voidmain(){unsignedintkey_value;

key_value=bioskey(0);

switch語句示意程序選擇與key_value值相對(duì)應(yīng)的處理程序未找到對(duì)應(yīng)值時(shí),進(jìn)入該處處理程序例3.5編一示意性的菜單處理程序,按下一功能鍵,執(zhí)行響應(yīng)的功能處理。switch語句注意事項(xiàng)

關(guān)于switch語句,注意以下幾點(diǎn):switch()后面圓括號(hào)中的表達(dá)式要求結(jié)果是整數(shù)(整形變量),各個(gè)case的判斷值要求是整型常量。各個(gè)case和default及其下面的語句組的順序是任意的,但各個(gè)case后面的判斷值必須是不同的值。多個(gè)分支語句組的break語句起著退出switch-case結(jié)構(gòu)的作用,若無此語句,程序?qū)㈨樞驁?zhí)行下一個(gè)case語句組。當(dāng)表達(dá)式的結(jié)果值與所有的case的判斷值都不一致時(shí),如果程序中存在default語句,則程序執(zhí)行default部分的語句組;如果程序中沒有default語句,程序則退出switchcase結(jié)構(gòu)。3.4.23.5循環(huán)控制12433.do-while語句4.從一重循環(huán)到多重循環(huán)1.while語句2.for語句12433.do-while語句4.從一重循環(huán)到多重循環(huán)1.while語句2.for語句3.5.1while語句循環(huán)結(jié)構(gòu)是在給定條件時(shí),反復(fù)執(zhí)行某個(gè)程序段,反復(fù)執(zhí)行的程序叫循環(huán)體。C語言有三種循環(huán)流程控制。

while循環(huán),for循環(huán),do-while循環(huán)。while循環(huán)的程序流程和程序形式:圖3.9while語句的流程及語句形式PA假

真while(表達(dá)式){

循環(huán)體語句;}

用while循環(huán)語句編寫一程序求1到100之間所有整數(shù)之和#include<stdio.h>voidmain(){inti;intsum;sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("sum=%d\n",sum);}運(yùn)行結(jié)果sum=5050例3.7當(dāng)i>100時(shí)跳出循環(huán)賦初值

說明1.while循環(huán)的表達(dá)式是循環(huán)進(jìn)行的條件。用作循環(huán)條件的表達(dá)式中一般至少包括一個(gè)能夠改變表達(dá)式的變量,這個(gè)變量稱為循環(huán)變量。2.當(dāng)條件表達(dá)式的值為真(非零)時(shí),執(zhí)行循環(huán)體,為假(等于0)則循環(huán)結(jié)束。3.當(dāng)循環(huán)體不需要實(shí)現(xiàn)任何功能時(shí),可用空語句作為循環(huán)體。

如:while((ch=getchar())!=’A’);4.循環(huán)語句應(yīng)有出口。5.對(duì)于循環(huán)變量的初始化應(yīng)在while()語句之前進(jìn)行。6.while語句中條件表達(dá)式的寫法與前面if語句中條件表達(dá)式的寫法基本相似。例3.73.5.2for語句

for循環(huán)是功能上比while循環(huán)更強(qiáng)的一種循環(huán)結(jié)構(gòu)圖3.10for語句的流程和語句形式3.5.2for語句for循環(huán)通常用于構(gòu)造"初值、終值、步長"型循環(huán),如:for循環(huán)的三個(gè)表達(dá)式起著不同的作用:表達(dá)式1用于進(jìn)入循環(huán)前給某些變量賦初值;表達(dá)式2表明循環(huán)的條件;表達(dá)式3用于循環(huán),依次對(duì)某些變量的值進(jìn)行修改。在for循環(huán)中,表達(dá)式1和表達(dá)式3經(jīng)常是逗號(hào)運(yùn)算表達(dá)式for(i=0;i<100;i+=5){ printf("%d\n",i);}

用for循環(huán)語句編寫一程序求1到100之間所有整數(shù)之和#include<stdio.h>voidmain(){inti;intsum;

for(i=1,sum=0;i<=100;i++){sum+=i;}printf("sum=%d\n",sum);}運(yùn)行結(jié)果sum=5050例3.8表達(dá)式一為逗號(hào)表達(dá)式,賦初值表達(dá)式二:循環(huán)條件表達(dá)式三:循環(huán)步長for語句程序說明表達(dá)式1,表達(dá)式2和表達(dá)式3可以全部或部分省掉,但是分號(hào)不能省,相當(dāng)于永真條件(條件永遠(yuǎn)成立),即for(;;)等同于for(;1;),此種情況下,必須在循環(huán)體中使用break來控制循環(huán)的結(jié)束。循環(huán)體也可以為空語句,如:

for(i=0;i<10000;i++); 或for(i=0;i<10000;i++){}建議for語句的循環(huán)控制變量的取值采用"半開半閉區(qū)間"寫法。例3.83.5.3do-while語句

do-while循環(huán)程序流程和程序形式為:例如:下面的兩個(gè)語句顯示:01234inti=0;do{printf("%3d",i++);}while(i<5);do-while語句說明關(guān)于do-while語句,注意以下幾點(diǎn):do-while循環(huán)體類似于while循環(huán),不同之處是,它們執(zhí)行循環(huán)體與計(jì)算表達(dá)式的先后順序不同。能用while循環(huán)和for循環(huán)描述的程序大多數(shù)情況下都能用do-while循環(huán)描述。能用do-while循環(huán)描述的程序一定能用while循環(huán)和for循環(huán)描述。3.5.3

利用do-while循環(huán)編寫程序

求1到100之間所有整數(shù)之和(類似例3.7和例3.8)#include<stdio.h>voidmain(){inti;intsum;

sum=0;i=1;

do{sum=sum+i;i++;

}while(i<=100);printf("sum=%d\n",sum);}運(yùn)行結(jié)果sum=5050例3.9當(dāng)i>100時(shí)跳出循環(huán)賦初值3.5.4從一重循環(huán)到多重循環(huán)

先考慮while循環(huán),在一重循環(huán)中,while循環(huán)語句的格式如下:當(dāng)循環(huán)體部分的功能無法用順序和選擇結(jié)構(gòu)而必須用循環(huán)結(jié)構(gòu)來實(shí)現(xiàn)時(shí),上述的結(jié)構(gòu)就變成如下的形式:while(條件表達(dá)式){

循環(huán)體部分;}while(條件表達(dá)式1){while(條件表達(dá)式2){

循環(huán)體部分2;}}這種結(jié)構(gòu)的形式就是二重循環(huán),可用來解決比一重循環(huán)更復(fù)雜的問題

多重循環(huán)

在多重循環(huán)中,內(nèi)層循環(huán)可以認(rèn)為是外層循環(huán)的循環(huán)體,依此類推。3.5.4while(…){…while(…){…}…}for(…;…;…){…for(…;…;…){…}…}for(…;…;…){…while(…){…}…}while(…){…for(…;…;…){…}…}1324多重循環(huán)形式

多重循環(huán)的說明注意循環(huán)控制變量賦初值的位置。內(nèi)外循環(huán)變量不應(yīng)該同名。應(yīng)正確地書寫內(nèi)外循環(huán)體,需要在內(nèi)循環(huán)執(zhí)行的所有語句必須用{}括起來組成復(fù)合語句作為內(nèi)層循環(huán)體;屬于外循環(huán)的語句應(yīng)放在內(nèi)層循環(huán)體之外,外循環(huán)之中。不應(yīng)該在循環(huán)中執(zhí)行的操作應(yīng)放在最外層循環(huán)進(jìn)入之前或最外層循環(huán)結(jié)束后。

3.5.4

編程顯示輸出如下所示的三角形的程序

************************************#include<stdio.h>voidmain(){ inti,j; for(i=0;i<6;i++) { printf("\n"); for(j=0;j<5-i;j++) { printf(""); } for(j=0;j<2*i+1;j++) { printf("*"); } }}例3.103.6輔助控制語句1322.continue語句3.goto語句和標(biāo)號(hào)1.break語句3.6.1break語句不能用于循環(huán)體語句和switch語句之外的任何其它語句??梢允沽鞒烫鰏witch結(jié)構(gòu),繼續(xù)執(zhí)行switch下面的語句。可以用來從循環(huán)體內(nèi)跳出循環(huán)體,既結(jié)束當(dāng)前循環(huán),執(zhí)行循環(huán)下面的語句。注意:break語句只能跳出一層循環(huán)。

編一示意性的菜單處理程序,要求按下一功能鍵,執(zhí)行響應(yīng)的功能處理,重復(fù)執(zhí)行直到按ESC鍵退出。

#defineESC0x11b;#defineF10x3b00//F1鍵的鍵值為0x3b00#defineF20x3c00#defineF30x3d00#defineF40x3e00#defineF50x3f00#defineF60x4000…..#include<stdio.h>#include<bios.h>voidmain(){unsignedintkey_value;while(1){key_value=bioskey(0);if(key_value==ESC) break;

switch(key_value){caseF1:F1功能處理程序;break;caseF2:F2功能處理程序;break;caseF3:F3功能處理程序;break;caseF4:F4功能處理程序;break;caseF5:F5功能處理程序;break;caseF6:F6功能處理程序;break;……default:相應(yīng)處理程序;break;}}}例3.12將例3.5進(jìn)行簡單修改得到跳出switch結(jié)構(gòu)跳出while循環(huán)跳出switch結(jié)構(gòu)跳出switch結(jié)構(gòu)跳出switch結(jié)構(gòu)跳出switch結(jié)構(gòu)跳出switch結(jié)構(gòu)跳出switch結(jié)構(gòu)3.6.2continue語句功能:結(jié)束本次循環(huán),即跳過循環(huán)體尚未執(zhí)行的語句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定。注意:continue語句結(jié)束本次循環(huán)。

voidmain(){intn;for(n=0;n<=100;n++){if(n%5!=0) continue;printf("%d\t",n);}}

voidmain(){intn;for(n=0;n<=100;n++){if(n%5==0)

printf("%d\t",n);}}在某些場(chǎng)合使用continue語句可以提高整個(gè)程序的效率程序功能:把0-100之間

能被5整除的數(shù)輸出3.6.2continue和break的區(qū)別continue語句只是結(jié)束本次循環(huán),而不是中止整個(gè)循環(huán),而break語句則是結(jié)束整個(gè)循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立。#include<stdio.h>#include<math.h>#definePI3.1415926voidmain(){doubler,area;while(1){printf("inputtheradius:");scanf("%lf",&r);if(fabs(r)<1e-5)break;elseif(r<0.0){printf("theinputiserror\n");continue;

}

area=PI*r*r;printf("theareais:%lf\n",area);}}確定輸入圓半徑值有意義輸入一個(gè)圓的半徑,輸出圓的面積。現(xiàn)在我們對(duì)這個(gè)程序進(jìn)行改進(jìn),要求:(1).允許反復(fù)的輸入半徑,計(jì)算并顯示圓的面積,直到輸入的半徑是0時(shí)為止(輸入0是終止程序運(yùn)行的信號(hào));(2).對(duì)輸入的半徑進(jìn)行檢查,若發(fā)現(xiàn)是負(fù)數(shù)將提示操作者重新輸入。3.6.3goto語句和標(biāo)號(hào)程序中使用goto語句時(shí)要求和標(biāo)號(hào)配合,一般形式:

goto標(biāo)號(hào);…………

標(biāo)號(hào):語句;

功能:把程序控制轉(zhuǎn)移到標(biāo)號(hào)指定的語句處。既執(zhí)行g(shù)oto語句之后,程序從指定標(biāo)號(hào)處的語句繼續(xù)執(zhí)行。注意:goto語句常用的用法是用它退出多重循環(huán)。!goto語句為非結(jié)構(gòu)化語句,我們一般不提倡使用!3.7典型程序編寫方法舉例

本章我們強(qiáng)調(diào)了程序的風(fēng)格和結(jié)構(gòu)的規(guī)范化,但是當(dāng)我們面對(duì)一個(gè)較為復(fù)雜的編程問題時(shí),是不可能立即編寫出風(fēng)格和結(jié)構(gòu)具佳的程序的,一般的方法是采用自頂向下逐步求精的模塊化,結(jié)構(gòu)化的方法進(jìn)行分析和設(shè)計(jì),把一個(gè)復(fù)雜問題變成若干便于實(shí)現(xiàn)的小問題。本節(jié)將介紹三種處理簡單問題的程序設(shè)計(jì)典型模板。多項(xiàng)式累計(jì)法顯式條件試數(shù)法隱式條件處理法

典型問題1

#include<stdio.h>voidmain(){inti;intsum,t;//sum代表和,t代表某項(xiàng)

sum=0;t=1;for(i=0;i<20;i++){sum+=t;t+=2;}printf("sum=%d",sum);}sum=400將前二十項(xiàng)的值進(jìn)行累加運(yùn)行結(jié)果例3.15求序列:1,3,5,7,9……的前二十項(xiàng)之和。

分析1分析上面的程序我們不難得出該程序的結(jié)構(gòu)大致如下:頭文件部分

voidmain(){

變量說明部分;

初始化(和清零,項(xiàng)變量初始化第一項(xiàng))

循環(huán)(根據(jù)條件決定){

累加一項(xiàng);

根據(jù)本項(xiàng)計(jì)算下一項(xiàng);}

輸出結(jié)果;}請(qǐng)回憶“七塊”理解法,找出對(duì)應(yīng)此結(jié)構(gòu)的位置例3.15#include<stdio.h>voidmain(){inti;longsum,t;//sum代表和,t代表某項(xiàng)

sum=0;t=1;

for(i=1;i<=8;i++){sum+=t;t*=(i+1);}

printf("sum=%ld",sum);}運(yùn)行結(jié)果sum=46233

求序列:1!,2!,3!,4!………..的前八項(xiàng)之和.例3.16計(jì)算下一項(xiàng)階乘的值

分析2比較[例3.15]和[例3.16],區(qū)別僅僅在于以下幾點(diǎn):

(1).變量說明不一樣

(2).循環(huán)的條件不一樣例3.16#include<stdio.h>#include<math.h>voidmain(){ floatsum,a,b;//sum代表和,a為分子,b為分母 sum=0; a=1;//分子賦初值 b=2;//分母賦初值 while(a/b>=1e-6) { sum=sum+a/b;//累加一項(xiàng) a=a+2;//求下一項(xiàng)的分子 b=b*2;//求下一項(xiàng)的分母 }

printf("sum=%f",sum);}運(yùn)行結(jié)果sum=2.999999例3.17求序列:……,所有大于等于0.000001的數(shù)據(jù)項(xiàng)之和,顯示輸出計(jì)算的結(jié)果。浮點(diǎn)數(shù)的舍入誤差造成的現(xiàn)象#include<stdio.h>#include<math.h>voidmain(){ inti; floatx,sum,a,b;//sum代表和,a為分子,b為分母 chars; printf("pleaseinputx:"); scanf("%f",&x); s=1; sum=0; a=x;//分子賦初值 b=1;//分母賦初值 for(i=1;a/b>=1e-6;i++) { sum=sum+s*a/b;//累加一項(xiàng) a=a*x*x;//求下一項(xiàng)的分子 b=b*2*i*(2*i+1);//求下一項(xiàng)的分母 s*=-1;}printf("sum=%f\n",sum);}運(yùn)行結(jié)果pleaseinputx:2sum=0.9092974例3.18計(jì)算,并使最后一項(xiàng)的絕對(duì)值小于為止。

典型問題2—試數(shù)法例3.19

求100-999之間所有的水仙花數(shù),所謂水仙花數(shù)就是說數(shù)的百位、十位和個(gè)位數(shù)的立方和恰好等于它本身。#include<stdio.h>voidmain(){inti,a,b,c;for(i=100;i<=999;i++){a=i/100;//求百位數(shù)

b=(i-a*100)/10;//求十位數(shù)

c=i%10;//求個(gè)位數(shù)

if(a*a*a+b*b*b+c*c*c==i){printf("%6d",i);}}}運(yùn)行結(jié)果1533703714073.7判斷是否為水仙花數(shù)分析程序的結(jié)構(gòu)大致如下:頭文件部分

voidmain(){

變量說明部分;

初始化(可缺省);

循環(huán)(根據(jù)條件決定){

先期處理(可缺省);

根據(jù)條件判斷輸出所得結(jié)果(也可能是包含循環(huán)的程序結(jié)構(gòu));}}這種循環(huán)條件加判斷的編程方法我們這里把它叫做試數(shù)法。例3.19題目:

小學(xué)生的加法算式

abc

+cba1333a,b,c為一位數(shù),試編程求所有可能a,b,c的值#include<stdio.h>voidmain(){inti;inta,b,c;for(i=100;i<=999;i++){a=i/100;b=(i-a*100)/10;c=i%10;

if(1333==a*100+b*10+c+c*100+b*10+a){printf("a=%db=%dc=%d\n",a,b,c);}}}a=4,b=1,c=9a=5,b=1,c=8a=6,b=1,c=7a=7,b=1,c=6a=8,b=1,c=5a=9,b=1,c=4運(yùn)行結(jié)果例3.20求已知兩個(gè)正整數(shù)的最大公約數(shù)。#include<stdio.h>voidmain(){inti;inta,b;printf("pleaseinputa,b:");scanf("%d%d",&a,&b);for(i=a<b?a:b;i>0;i--)//i初值為a,b中的較小值

{if(a%i==0&&b%i==0){printf("themax=%d",i);break;}}}pleaseinputa,b:64themax=2運(yùn)行結(jié)果例3.21將例3.21與例3.20進(jìn)行比較

題目:百錢百雞問題,用100元錢買100只雞,其中母雞每只3元,公雞每只2元,小雞1元3只,且每種雞至少買一只,試編一程序列出所有可能的購買方案。#include<stdio.h>voidmain(){inta,b,c;//a,b,c分別代表母雞,公雞和小雞數(shù)

for(a=1;a<=98;a++){for(b=1;b<=98;b++){for(c=1;c<=98;c++){if((a+b+c==100)&&(a*3+b*2+c/3==100)&&(c%3==0))printf(“母雞數(shù):%d公雞數(shù):%d小雞數(shù):%d\n",a,b,c);}}}}母雞數(shù):5公雞數(shù):32小雞數(shù):63母雞數(shù):10公雞數(shù):24小雞數(shù):66母雞數(shù):15公雞數(shù):16小雞數(shù):69母雞數(shù):20公雞數(shù):8小雞數(shù):72運(yùn)行結(jié)果例3.22例3.25:

編一程序?qū)崿F(xiàn)一個(gè)最簡單的計(jì)算器的功能,如輸入3+5回車顯示3+5=8;輸錯(cuò)就退出(輸入的不是加減乘除的運(yùn)算就算錯(cuò))#include<stdio.h>#include<math.h>voidmain(){floata,b,s;charop;while(1){scanf("%f%c%f",&a,&op,&b);if((op!='+')&&(op!='-')&&(op!='*')\&&(op!='/'))break;switch(op){case'+': printf("%f+%f=%f",a,b,a+b);break;case'-':printf("%f-%f=%f",a,b,a-b);break;case'*':

printf("%f*%f=%f",a,b,a*b);

break;case'/':

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論