計算機C語言編程【課件】_第1頁
計算機C語言編程【課件】_第2頁
計算機C語言編程【課件】_第3頁
計算機C語言編程【課件】_第4頁
計算機C語言編程【課件】_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第二講結(jié)構(gòu)化程序設(shè)計開發(fā)方法順序程序設(shè)計分支結(jié)構(gòu)程序設(shè)計循環(huán)程序設(shè)計/循環(huán)控制課程目錄第二講結(jié)構(gòu)化程序設(shè)計開發(fā)方法本講目錄一、C程序結(jié)構(gòu)·每一個源文件由預(yù)編譯命令和若干函數(shù)組成(對每個文件分別編譯,然后連接)·一般地,一個C程序可由多個源文件組成·每一個函數(shù)由說明部分和語句部分組成4.1C程序結(jié)構(gòu)和語句課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄C程序源程序文件1源程序文件i源程序文件n預(yù)編譯命令函數(shù)1函數(shù)n說明部分執(zhí)行部分(語句)………一、C程序結(jié)構(gòu)課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄二、C程序語句表達式語句控制語句復(fù)合語句終止程序運行語句課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄函數(shù)調(diào)用語句:

如:printf("…");賦值語句:

如:i=i+1;i++;x+y;空語句:

如:;任何事情都不做。用來做被轉(zhuǎn)向點,或循環(huán)語句中的循環(huán)體。1.表達式語句課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄2.控制語句––改變語句的執(zhí)行順序①if()~else~②for()~③while()~④do~while()⑤continue⑥break⑦switch⑧goto⑨returnswitch(多分支選擇)(條件語句)(循環(huán)語句)(循環(huán)語句)(循環(huán)語句)(結(jié)束本次循環(huán)語句)(中止執(zhí)行switch或循環(huán)語句)(多分支選擇語句)(轉(zhuǎn)向語句)(從函數(shù)返回語句)()表示條件,~表示語句課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄用{}括起來的一系列語句。如:if(a>b){ z=x+y; t=z/100; printf("%f",t);}3.復(fù)合語句(語句體)

復(fù)合語句中最后一個語句的分號不能忽略不寫。 C語言允許一行寫幾個語句,也允許一個語句拆開寫在幾行上,書寫格式無固定要求。課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄4.終止程序運行語句exit(整數(shù));課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄return整數(shù);

賦值語句是由賦值表達式加上一個分號構(gòu)成。5.2賦值語句 C語言中的賦值號“=”是一個運算符,在其他大多數(shù)語言中賦值號不是運算符。

多數(shù)高級語言沒有“賦值表達式”一概念。 作為賦值表達式可以包括在其他表達式之中。

例如:

if((a=b)>0)t=a;課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄 if后面的(

)內(nèi)是一個條件,如:

if(x>0)…

在x的位置上換上一個賦值表達式“a=b”,其作用是:先進行賦值運算(將b的值賦給a),然后判斷a是否大于0,如大于0,執(zhí)行t=a。在if語句中的“a=b”不是賦值語句而是賦值表達式,這樣寫是合法的。

如果寫成if((a=b;)>0)t=a;就錯了。 在if的條件中不能包含賦值語句。由此可以看到,c把賦值語句和賦值表達式區(qū)別開來,增加了表達式的種類,使表達式的應(yīng)用幾乎“無孔不入”,能實現(xiàn)其他語言中難以實現(xiàn)的功能.課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄printf()和scanf()是C語言中使用得最多的一種輸出函數(shù),它可按指定的格式輸出和輸入多個不同類型的數(shù)據(jù)。4.5

格式式輸入輸出函數(shù)上機實習課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄例2.1

最簡單的C程序,這也是世界上第一個C程序。/*exam21.c*//*最簡單的C程序*/#include<stdio.h>main(){ printf(“Hello,world!”);}頭文件主函數(shù)例----頭文件與主函數(shù)課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄例2.2

已知圓的半徑為R(R是一個可變的量),求圓的面積和周長,用計算機求解,程序如下/*exam22.c*//*計算圓的面積和周長*/#include<stdio.h>main(){floatr,area,s;

scanf(“%f“,&r);area=3.14*r*r;s=2*3.14*r;

printf(“面積=%f,周長=%f”,area,s);}1、注釋2、數(shù)據(jù)說明3、數(shù)據(jù)輸入4、數(shù)據(jù)處理5、結(jié)果輸出課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄例2.3

已知平行四邊形的長為50,寬為10,計算平行四邊形的面積和周長。程序如下://exam23.c//計算平行四邊形的面積和周長#include<stdio.h>main(){floata,b;a=10.0;b=5.0;

printf(“AREA=%f”,a*b);}程序課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄例2.4

以我國1992年工業(yè)產(chǎn)值為100,如果以9%的年增長率增長計算到2000年時的工業(yè)產(chǎn)值。1算法分析:對此問題,要找出問題的數(shù)學模型。設(shè)r為年增長率,n為年數(shù),v為第n年的總產(chǎn)值。則有v=100*(1+r)n2數(shù)據(jù)結(jié)構(gòu)根據(jù)算法分析,至少要用到這么幾個量,年增長率、年數(shù)、第n年的總產(chǎn)值。而這幾個量中,年增長率肯定是小數(shù)(浮點)型數(shù)據(jù),年數(shù)是整數(shù)(整型),總產(chǎn)值不會是整數(shù),應(yīng)為浮點數(shù)。這些數(shù)據(jù)都要放在相應(yīng)的變量中,并要進行相應(yīng)的數(shù)據(jù)說明。課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄//exam24.c//計算到2000年的工業(yè)產(chǎn)值#include<stdio.h>main(){intn;floatrate,value;n=2000-1992;rate=0.09;value=100*pow(1+rate,n);printf(“2000年的產(chǎn)值為%f:”,value);}pow為求冪的函數(shù)格式

pow(底,指數(shù))底,指數(shù)均為浮點數(shù)。自動類型轉(zhuǎn)換3源程序代碼課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄

此例中,只能算到2000年,且年增長率為9%時的工業(yè)產(chǎn)值。如果將工業(yè)產(chǎn)值改為10%,或者要算到其它年份,必須要修改源程序,使用不便。方法2:用scanf函數(shù)重新編寫程序。//exam24.c//計算到2000年的工業(yè)產(chǎn)值#include<stdio.h>main(){intn,year;floatvalue,rate;printf(“請輸入年份和年增長率”);scanf(“%d,%f”,&year,&rate);n=year-1992;value=100*pow(1+rate,n);printf(“按給定利率到指定年份的產(chǎn)值為%f”,value);}課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄例2.5

雞兔同籠,已知雞兔總頭數(shù)為H(Heads),總數(shù)為F(Feet),問雞兔各有多少只?1算法分析:(1)建立數(shù)學模型設(shè)雞為x只,兔為y只,由題意有:

x+y=h......(1)

2*x+4*y=f......(2)(2)求解方程,找出x,y的具體求解公式:以下用消元法找出方程的解課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄(2)式-2×(1)式注意:計算機不會自己建數(shù)學模型,也不會自己解方程!2×y=f-2×hy=(f-2×h)/24×(1)式-(2)式2×X=4×H-FX=(4×H-F)/22數(shù)據(jù)結(jié)構(gòu)程序中要用到不同的數(shù)據(jù),存放頭、腳數(shù)量的變量,存放方程解(雞、兔數(shù)量)的變量,存放方程判別式的變量等。對于頭、腳的數(shù)量,肯定是整型變量,方程的解理論上講是整型,但在求解方程時要進行運算,為了避免發(fā)生錯誤,最好是用浮點數(shù)據(jù)。課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄3偽代碼(由于此問題比較簡單,也可直接編寫程序)。說明變量x,y,f,h輸入數(shù)據(jù)f,h計算x,y打印結(jié)果偽代碼是一種程序設(shè)計工具,介于程序語言與自然語言之間,偽代碼不能被計算機編譯,但它很容易翻譯成高級語言.課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄//exam25.c#include<stdio.h>main(){floatx,y;intf,h;

printf(“InputthenumbersofHeadsandFeet”);

scanf(“%d,%d”,&f,&h);x=(4.0*h-f)/2.0;y=(f-2.0*h)/2.0;printf(“Heads=%d;Feet=%d”,h,f);printf(“Chicken=%d,rabbits=%d”,x,y);}4源程序代碼說明輸入數(shù)據(jù)的內(nèi)容課程目錄第4講最簡單的c程序設(shè)計—順序程序設(shè)計本講目錄問題:1、從鍵盤輸入一個數(shù),如果該數(shù)為正,打印,

否則不打??;2、將考試成績不及格的學生名單打印出來;3、解一元二次方程,求出相應(yīng)的實根或復(fù)根。

對于上述或類似問題,需要進行某種判斷,并根據(jù)不同情況進行不同的處理,怎樣進行程序設(shè)計?第五講分支結(jié)構(gòu)程序設(shè)計課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄解決辦法:1、引入新的程序結(jié)構(gòu),分支結(jié)構(gòu),有時也稱判斷結(jié)構(gòu)或選擇結(jié)構(gòu)。2、為了和分支結(jié)構(gòu)相配合,同時還要引入邏輯表達式的概念。3、有三種形式可進行分支結(jié)構(gòu)的程序設(shè)計A、if結(jié)構(gòu)B、多重選擇結(jié)構(gòu)(switch語句)C、無條件轉(zhuǎn)移結(jié)構(gòu)(goto語句)課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄if語句關(guān)系表達式和邏輯表達式if語句的變形及嵌套多重選擇語句(switch語句)無條件轉(zhuǎn)移語句(goto語句)本講小結(jié)本講內(nèi)容課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄的根1、算法分析:2、數(shù)據(jù)結(jié)構(gòu):由于問題簡單,只需用到一些單精度實數(shù)例5.1求一元二次方程課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄3、偽代碼輸入方程系數(shù)a,b,c計算判別式d=b*b-4*a*cif判別式大于等于0then{

計算兩個實根定位輸出光標打印結(jié)果}else{

計算實部計算虛部定位輸出光標打印結(jié)果}endprogram課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄

#include<math.h>#include<stdio.h>main(){

floata,b,d,c,x1,x2,p,q;printf(“輸入方程系數(shù):”);

scanf(“%f,%f,%f”,&a,&b,&c);d=b*b-4*a*c;

if(d>=0){x1=((-b+sqrt(d))/(2*a);x2=((-b-sqrt(d))/(2*a);printf(“x1=%f,x2=%f\n”,x1,x2);

else{p=-b/(2*a);q=sqrt(-d)/(2*a);

printf(“x1=%f+i%f,x2=%f-i%f\n”,p,q,p,q);}}求平方根的函數(shù)4、源程序清單課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄例5.2

商店售貨,按購買貨物款的多少分別給予不同的優(yōu)惠折扣,編程計算實際應(yīng)付貨款。購貨不足250元,沒有折扣;購貨250元(含250元,下同),不足500元,減價5%;購貨500元,不足1000元,減價7.5%;購貨1000元,不足2000元,減價10%;購貨2000元及以上,減價15%;1、算法分析:設(shè)購物款為M,折扣為D,則D可表示為:

D=0(M〈250)

D=0.05(250≦M<500)D=0.075(500≦M<1000)D=0.1(1000≦M<2000)D=0.15(2000≦M)課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄2、源程序清單//exam42.c#include<stdio.h>main(){floatm,d,t;

printf(“請輸入購物金額:”);scanf(“%f”,&m);

if(m<250)d=0;if(m>=250&&m<500)d=0.05;if(m>=500&&m<1000)d=0.075;if(m>=1000&&m<2000)d=0.1;if(m>=2000)d=0.15;

t=m*(1-d),//計算應(yīng)付款

printf(“實際應(yīng)付款:%f”,t);}輸入購物款:249實際應(yīng)付款:249輸入購物款:500實際應(yīng)付款:462.5課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄例5.3

購物折扣程序的另一個寫法改寫后,程序更清晰,執(zhí)行時間更省。//exam42.c#include<stdio.h>main(){floatm,d,t;

printf(“請輸入購物金額:”);

scanf(“%f”,&m);if(m<250)d=0;

elseif(m>=250&&m<500)d=0.05;elseif(m>=500&&m<1000)d=0.075;elseif(m>=1000&&m<2000)d=0.1;

else

d=0.15;t=m*(1-d),//應(yīng)付款

printf(“實際應(yīng)付款:%f”,t);}課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄例5.4

從鍵盤輸入一字符,如果為Y,則打印是,為N,打印否,其它字符,打印輸入錯誤。//exam54.c#include<stdio.h>main(){chara;printf(“輸入一個字符:”);a=getchar();if(a==‘Y’||a==‘N’){

if(a==‘Y’)printf(“是”);

elseprintf(“否”);}elseprintf(“輸入數(shù)據(jù)不合要求”);}演示顯示程序課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄#include<stdio.h>main(){intx,y,z;printf(“Iputx,y,z:”);scanf(“%d,%d,%d”,&x,&y,&z);

if(x>0){

if(y>0)if(z>0)printf(“所有數(shù)據(jù)大于零!”);elseprintf(“只有X,Y大于零!”);}

elseif(x==0){if(y==0)if(z==0)printf(“所有數(shù)據(jù)都為零!”);elseprintf(“只有X,Y等于零!”);}elseprintf(“X小于零!”);}例5.5

演示

嵌套不能太深,一般以三層為限,嵌套太深,容易出錯。嵌套演示程序課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄#include<stdio.h>main(){intx,y,z;printf(“Iputx,y,z:”);scanf(“%d,%d,%d”,&x,&y,&z);if(x>0&&y>0&&z>0)

printf(“所有數(shù)據(jù)大于零!”);elseif(x>0&&y>0)printf(“只有X,Y大于零!”);elseif(x==0&&y==0&&z==0)printf(“所有數(shù)據(jù)都為零!”);elseif(x==0&&y==0)printf(“只有X,Y等于零!”);else//(x<0)printf(“X小于零!”);}利用邏輯表達式將例4.5改寫,改寫后程序的結(jié)構(gòu)要清晰得多。演示課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄例5.6

將輸入的字母轉(zhuǎn)化為小寫字母。1算法分析

在計算機中,處理英文字母,其實是處理它的ASCII碼值。將大寫字母變成小寫字母,就是將大寫字母的ASCII碼值變?yōu)橄鄳?yīng)的小寫字母的ASCII碼值。

大寫字母的ASCII值比小寫字母的ASCII值小32,故將相應(yīng)字母的ASCII值加32就變成了小寫字母。

程序設(shè)計時,要注意如果輸入的不是大寫的字母,則不用轉(zhuǎn)換。課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄main(){charch;scanf(“%c”,&ch);if(ch>=‘A’&&ch<=‘Z’)ch=ch+32;printf(“%c”,ch);}2源程序代碼之一課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄main(){charch;scanf(“%c”,&ch);ch=(ch>=‘A’&&ch<=‘Z’)?(ch+32):ch;printf(“%c”,ch);}注意:1條件運算符優(yōu)先于賦值運算符,低于關(guān)系運算符;

2條件運算符的結(jié)合方向為“自右至左”

a>b?a:c>d?c:da>b?a:(c>d?c:d)此處使用了條件運算符3源程序代碼之二課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄#include<stdio.h>main(){inti;

printf(“輸入數(shù)字1-7:”);

scanf(“%d”,&i);

if(i==1)printf(“TodayisMonday!\n”);elseif(i==2)printf(“TodayisTuesday!\n”);elseif(i==3)printf(“TodayisWednesday!\n”);elseif(i==4)printf(“TodayisThursday!\n”);elseif(i==5)printf(“TodayisFriday!\n”);elseif(i==6)printf(“TodayisSaturday!\n”);elseprintf(“TodayisSunday!\n”);}例5.7

輸入星期中的某一天,顯示對應(yīng)的英文此例似顯復(fù)雜,是否有更好的辦法?課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄main(){inti;printf(“輸入數(shù)字1-7:”);scanf(“%d”,&i);switch(i){case1:printf(“TodayisMonday!”);case2:printf(“TodayisTuesday!”);case3:printf(“TodayisWednesday!”);case4:printf(“TodayisThursday!”);case5:printf(“TodayisFriday!”);case6:printf(“TodayisSaturday!”);default:printf(“TodayisSunday!”);}}例5.8用switch

語句重寫打印星期程序。main(){intI;printf(“輸入數(shù)字1-7:”);scanf(“%d”,&i);if(i==1)printf(“TodayisMonday!”);elseif(i==2)printf(“TodayisTuesday!”);elseif(i=3)printf(“TodayisWednesday!”);elseif(i==4)printf(“TodayisThursday!”);elseif(i==5)printf(“TodayisFriday!”);elseif(i==6)printf(“TodayisSaturday!”);elseprintf(“TodayisSunday!”);}課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄要有break才等價例5.9

用switch語句重寫例4.4的程序main(){chara;printf(“輸入一個字符:”);

a=getchar();

if(a==‘Y’||a==‘N’)if(a==‘Y’)printf(“是\n”);else

printf(“否\n”);elseprintf(“字符不合要求!\n”);}顯然,改寫后的程序更清晰,更簡短。main(){chara;printf(“輸入字符:”);a=getchar();

switch(a){case‘Y’:

printf(“是\n”);

break;case‘N’:

printf(“否\n”);break;default:

printf(“字符不合要求!\n”);

}}課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄例5.10

在屏幕上顯示菜單分析:程序首先在屏幕上將功能顯示出來,用戶根據(jù)需要選擇相應(yīng)的功能,程序根據(jù)用戶的選擇執(zhí)行相應(yīng)的程序段。對于這類程序,往往是用戶輸入一個英文字母,然后程序根據(jù)字母來斷別程序該執(zhí)行什么程序段,故一般用switch語句比較方便。課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄2源程序清單switch(a){case'i':printf(“調(diào)用輸入模塊!”);break;case'o':printf(“調(diào)用輸出模塊!”);break;case'l':printf(“調(diào)用查找模塊!”);break;case‘q':printf(“調(diào)用退出模塊!”);break;

}}main(){intchara;printf(“請選擇:”);

printf(“輸入i”);printf(“輸出o”);printf(“找出最長的單詞l”);printf(“退出q”);a=getchar();執(zhí)行選項時,要調(diào)用相應(yīng)的模塊(程序段)。由于現(xiàn)在還沒有相應(yīng)的程序,暫用一條打印語句代替。以后會用相應(yīng)程序代替課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄例5.11

統(tǒng)計某班級中計算機課程中考試成績高于80分的人數(shù)。假設(shè)學生人數(shù)為10main(){inti,fs,j=0;Loop:scanf(“%d”,&fs);j++;//統(tǒng)計已讀入的數(shù)據(jù)個數(shù)

if(fs>80){i++;printf(“%d,%d”,i,fs);}if(j<10)//當數(shù)據(jù)沒讀完時,繼續(xù)

gotoLoop;}課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄1、分支結(jié)構(gòu):改變程序的執(zhí)行流程,或有選擇地執(zhí)行程序;2、if~else和switch是結(jié)構(gòu)化語句,而goto語句不是;3、塊if語句可以取代所有的分支結(jié)構(gòu),而多重分支結(jié)構(gòu)不可;4、塊if語句中的條件可以是復(fù)雜邏輯表達式,而多重分支中的條件只能是簡單表達式;5、塊if與goto語句結(jié)合,可以構(gòu)造任何復(fù)雜的循環(huán),但用專門的循環(huán)語句更方便。本講小結(jié)課程目錄第5講分支結(jié)構(gòu)程序設(shè)計本講目錄在許多問題中需要用到循環(huán)控制。循環(huán)是指對同一個程序段重復(fù)執(zhí)行若干次。被重復(fù)執(zhí)行的部分(由若干語句組成)稱為循環(huán)體。幾乎所有實用程序都包括循環(huán)。循環(huán)結(jié)構(gòu)又稱重復(fù)結(jié)構(gòu),它是結(jié)構(gòu)化程序設(shè)計的基本結(jié)構(gòu)之一。本講主要內(nèi)容:

goto循環(huán)語句

while循環(huán)語句

do~while循環(huán)語句

for循環(huán)語句

循環(huán)嵌套及注意的問題

程序的流程圖第六講循環(huán)控制課程目錄第6講循環(huán)控制本講目錄例6.1

查找某班級中計算機課程中考試是否有成績高于95分的人。1算法分析

此題的算法比較簡單,將該班計算機課程的考試成績輸入計算機,每輸入一個成績,就與95進行比較,如果有大于95的成績,程序結(jié)束。但在輸入和比較時,要有一種結(jié)構(gòu),使得計算機能不停地執(zhí)行輸入和比較,當某種條件(如找到了大于95分的成績,或者所有的成績都已輸入完)滿足,則結(jié)束程序。2數(shù)據(jù)結(jié)構(gòu)

數(shù)據(jù)結(jié)構(gòu)也很簡單,用一個變量存放輸入的數(shù)據(jù),還要用一個變量記錄輸入數(shù)據(jù)的個數(shù),如果輸入的數(shù)據(jù)完成時,則該變量就等于輸入的數(shù)據(jù)的最大個數(shù)。Goto例課程目錄第6講循環(huán)控制本講目錄說明整型變量fs,i;

輸入成績fs;

記錄輸入成績的個數(shù)(i=i+1);

iffs>95或者輸入數(shù)據(jù)完成(i>某值){

退出輸入;

elsego輸入成績行;}if(fs>95)

打印字符串“找到了!”

else

打印字符串“沒找到!”結(jié)束程序3程序偽代碼課程目錄第6講循環(huán)控制本講目錄main(){intfs,i;i=0;Loop1:scanf(“%d”,&fs);i=i+1;if(fs>95||i>=10)

gotoloop2;else

gotoloop1;loop2:if(fs>95)printf(“FIND!”);elseprintf(“DONOTFIND!”);}4源程序代碼之一構(gòu)成循環(huán)退出循環(huán)標號標號課程目錄第6講循環(huán)控制本講目錄5源程序代碼之二#include<stdio.h>main(){intfs,i=1;printf("\n請輸入第%d個數(shù)據(jù):",i);scanf("%d",&fs);

while(fs<=95&&i<10){ printf("請輸入第%d個數(shù)據(jù):",i+1);scanf("%d",&fs);i++;}if(fs>95)printf("\n找到啦!\n");elseprintf("\n沒找到!\n");}注意輸入提示W(wǎng)hile例1循環(huán)體課程目錄第6講循環(huán)控制本講目錄例6.2

將輸入的正文復(fù)制到輸出,每次一個字符.1算法分析

本題的含義是每次從鍵盤上輸入一個字符,然后將該字符在屏幕上輸出。因為是正文,故其結(jié)束的標志為ctrl+z

要使用字符函數(shù)來接受從鍵盤輸入的字符,一般用getchar函數(shù)。課程目錄第6講循環(huán)控制本講目錄2源程序代碼

#include<stdio.h>

intmain(void){

charc;

printf(“inputatextendofctrl+z\n”);

c=getchar();

while(c!=EOF){

putchar(c);

c=getchar();

}

}

在頭文件中定義的常數(shù)(-1)While例2循環(huán)體注意輸入提示按ctrl+z鍵結(jié)束輸入輸入一個字符輸出一個字符課程目錄第6講循環(huán)控制本講目錄#include<stdio.h>intmain(void){ charc;

printf("inputatext\n");

while((c=getchar())!=EOF)putchar(c);}例6.3

請閱讀下面的程序,說明程序的功能。該程序與上面的程序功能一樣,只不過將字符輸入語句放入循環(huán)判斷條件中。在頭文件中定義的常數(shù)(-1)ctrl+z鍵結(jié)束輸入循環(huán)注意輸入提示按輸入一個字符輸出一個字符課程目錄第6講循環(huán)控制本講目錄例6.4

比較兩種循環(huán)的用法。從鍵盤輸入一個字符Y或N,直到輸入正確為止。1算法分析在程序中,經(jīng)常會遇到要求用戶輸入Y或N,以確定某種狀態(tài)。為防止用戶在無意中碰到鍵盤而輸入錯誤的字符,程序?qū)τ脩糨斎氲牟缓弦蟮淖址雎裕⒁笥脩糁匦螺斎?。為了做到上述要求,程序?qū)斎氲淖址M行判斷,如果不合要求,則將輸入的字符忽略,并等待用戶重新輸入。顯然,要做到這一點,須用一個循環(huán)程序,當輸入正確時,循環(huán)結(jié)束。設(shè)輸入變量為c,則循環(huán)控制條件為!(c==‘Y’||c==‘N’)或者(c!=‘Y’&&c!=‘N’)課程目錄第6講循環(huán)控制本講目錄2源代碼比較格式1:

c=getchar();

while(c!=’Y’&&c!=’N’){printf("answerisYorN“);c=getchar();}格式2:

do{printf(”EnterYorN“);c=getchar();}while(c!=’Y’&&c!=’N’);顯然,格式

2更方便!do例課程目錄第6講循環(huán)控制本講目錄#include<stdio.h>main(){intfs,i=1;

do{ printf("請輸入第%d個數(shù)據(jù):",i);scanf("%d",&fs);i++;}while(fs<=95&&i<10);if(fs>95)printf("\n找到啦!\n");elseprintf("\n沒找到!\n");}例6.5

將例6.1用新的do~while語句重寫查找某班級考試結(jié)果是否有高于95分的成績。do例循環(huán)體課程目錄第6講循環(huán)控制本講目錄例6.5

統(tǒng)計某班級中計算機課程中考試成績高于80分的人數(shù),現(xiàn)用for循環(huán)語句重寫該程序。

main(){intfs,sum,j;sum=0;

for(j=1;j<=10;j++){scanf(“%d”,&fs);if(fs>80){sum=sum+1;printf(“sum=%d\n“,sum);}}}給循環(huán)變量j賦初值1循環(huán)變量j加1循環(huán)控制條件for例循環(huán)體課程目錄第6講循環(huán)控制本講目錄例6.6

求數(shù)列

的和。1、分析:該數(shù)列中每一項的分母都有規(guī)律,后一項為前一項加5,分母的通式為:

An=An-1+5,A1=1或:

程序課程目錄第6講循環(huán)控制本講目錄//exam63.c#include<stdio.h>main(){ inti; floatsum=0;

for(i=0;i<=100;i++) { sum=sum+1.0/(1+i*5); } printf("%f",sum);}給循環(huán)變量i賦初值1循環(huán)變量i

加1循環(huán)控制條件循環(huán)for例課程目錄第6講循環(huán)控制本講目錄例6.7求的近似值,精確到公式為:

此類問題相對簡單,但要注意累加變量和通項的初值。

該問題中,累加變量sum的初值為0,通項term的初值為1。課程目錄第6講循環(huán)控制本講目錄#include<stdio.h>#include<math.h>main(){ doublepi,term,sum; inti; sum=0.0; term=1.0;

for(i=1;term>0.00000000000001;i++){ term=1.0/(i*i); sum=sum+term; } pi=sqrt(sum*6); printf("%f\n",pi);}兩個相乘,其值會溢出,故得不到想要的結(jié)果循環(huán)for例課程目錄第6講循環(huán)控制本講目錄例6.8分別統(tǒng)計某班學生各科成績中高于80分的人數(shù)。學生人數(shù)為30人,課程為:數(shù)學、語文、英語、物理、生物。intn,i;n=0;for(i=1;i<=30;i++){ //對學生人數(shù)循環(huán)

scanf(“%d”,&fs);if(fs>=80)n=n+1;//累加大于80分的人數(shù)}printf("n=%d“,n);

先看統(tǒng)計數(shù)學成績循環(huán)for例課程目錄第6講循環(huán)控制本講目錄

統(tǒng)計五門課程,只需將統(tǒng)計一門課程的程序用不同的數(shù)據(jù)執(zhí)行5次,這可用一個循環(huán)實現(xiàn)。//統(tǒng)計某一門課程

n=0;for(i=0;i<3;i++){scanf(“%d”,fs);if(fs>=80)n=n+1;}printf("n=%d“,n);for(j=0;j<5;j++){//對課程循環(huán)

}統(tǒng)計每門課程的成績!//統(tǒng)計一門課程

n=0;for(i=0;i<3;i++){scanf(“%d”,fs);if(fs>=80)n=n+1;}printf("n=%d“,n);

這里,用到了二重循環(huán)。外循環(huán)內(nèi)循環(huán)for例課程目錄第6講循環(huán)控制本講目錄例6.9求自然對數(shù)的底e,取前n項的和。1算法分析此題有兩種算法:一種是直接求通項,則先求n!,然后求1/n!,這種方法比較簡單。求n階乘的程序段為f=1;for(j=1;j<=n;j++)f=f*j;課程目錄第6講循環(huán)控制本講目錄,則有設(shè)通項為由于數(shù)列的第一項不能用通項表示,故將其直接放入累加變量中。程序片段為第二種求通項的公式e=1.0;a=1;for(m=1;m<=n;m++){a=a*(1/m);e=e+a;}課程目錄第6講循環(huán)控制本講目錄//利用雙重循環(huán)計算main(){inti,j,n;floate,f;printf(“PleaseinputN:”);scanf(“%d”,&n);e=1.0;for(i=1;i<=n;i++){f=1;for(j=1;j<=i;j++)f=f*j;e=e+1/f;}printf(“e=%f”,e);}//利用單重循環(huán)計算main(){inti,n;floate,f;printf(“PleaseinputN:”);scanf(“%d”,&n);e=1.0;f=1;for(i=1;i<=n;i++){f=f*(1/i);e=e+f;}printf(“e=%f”,e);}2源代碼課程目錄第6講循環(huán)控制本講目錄例6.10

從鍵盤上輸入字符并按行顯示,遇到Esc鍵結(jié)束,要求只顯示輸出內(nèi)容。在每行前顯示字符串“TheLineNo.isn”,n為1,2,3,1算法分析此題要求從鍵盤上輸入字符并按行顯示,初一看,只要用行輸入語句就行。但仔細分析后會發(fā)現(xiàn),用行輸入語句不行。如用gets或scanf語句,則輸入的內(nèi)容會在屏幕上回顯(即輸入的內(nèi)容顯示在屏幕上),其次,這兩個語句都不能單獨捕捉到Esc鍵。因此,只能用單個字符輸入的函數(shù),但要求不要回顯,getchar函數(shù)也不行,但推測是與getchar相類似的函數(shù)。故可先調(diào)出getchar的幫助,然后看SeeAlso。課程目錄第6講循環(huán)控制本講目錄既然是按行顯示,用字符輸入函數(shù),每輸入一個字符,立刻在屏幕上顯示出來。當接受到換行符時,轉(zhuǎn)入下一行。因此,對每一行的輸入,要用一個循環(huán),循環(huán)的控制條件就是輸入的字符不為換行符。當輸入為換行符時,循環(huán)從頭開始。程序的結(jié)束是以接受到Esc鍵為標志的,故而要在行輸入的外面再增加一個循環(huán),此循環(huán)的結(jié)束條件是輸入的字符為Esc鍵。行輸入的程序片段為printf("\nTheLineNo.is%d",i);do{printf("%c",c);c=getch();}while(c!=13&&c!=27);13return鍵ASCII碼27Esc鍵ASCII碼getch不回顯輸入字符函數(shù)課程目錄第6講循環(huán)控制本講目錄#include<stdio.h>#include<conio.h>intmain(void){inti=0;charc='\0';while(c!=27){c='\0';i++;printf("\nTheLineNo.is%d",i);do{printf("%c",c); c=getch();}while(c!=13&&c!=27);}printf("\nTheend\n");}從鍵盤上輸入一個字符,不回顯Esc鍵的ASCII碼值回車符的ASCII碼值2源程序代碼

課程目錄第6講循環(huán)控制本講目錄例6.11

輸入一個算式,模擬袖珍計算機的加、減、乘、除四則運算。例如:輸入10.8+0.13*100計算結(jié)果為:1093.000000假定計算時不考慮運算符的優(yōu)先級,也不允許有(),而是按照運算符出現(xiàn)的先后順序執(zhí)行運算。sunhui:此例也沒講。課程目錄第6講循環(huán)控制本講目錄main(void){doublex,y;charop;inx:printf("inputarithmeticexpression:\n");scanf("%lf",&x);while((op=getchar())!='\n'){iny:scanf("%lf",&y); switch(op){ case'+':x+=y;break; case'-':x-=y;break; case'*':x*=y;break; case'/': if(y)x/=y; else{printf("divisioniszero,inputyagain\n"); gotoiny; } break;default:printf("illegaloperator,inputagain\n"); gotoinx; }}printf("%8.4f\n",x);}課程目錄第6講循環(huán)控制本講目錄開始

輸入系數(shù)a,b,cd>=0例6.12:用流程圖描述求解一元二次方程的根x1=(-b+sqrt(d))/2x2=(-b-sqrt(d))/2輸出x1,x2p=-b/2q=sqrt(-d)/2輸出x1,x2結(jié)束TF課程目錄第6講循環(huán)控制本講目錄d=b*b-4*a*c例6.13

輸入一段C語言程序(一個正文),按原來格式復(fù)制到輸出,復(fù)制過程中刪除輸入程序中所有的注釋。此處注釋專指“/**/”的注釋。1算法分析程序先要輸入,在C語言中,當從鍵盤輸入時,先將輸入數(shù)據(jù)放入鍵盤緩沖區(qū)中,當接受到回車符后,程序才開始從鍵盤緩沖區(qū)中讀數(shù)據(jù)。分析之前,首先,弄明白問題的意思。程序要求輸入一段程序(C語言),并將輸入的程序在屏幕上輸出。在輸出時將程序中的注釋(/**/)過濾,既不輸出注釋。課程目錄第6講循環(huán)控制本講目錄輸出時要將注釋過濾掉,首先要判別什么內(nèi)容是注釋內(nèi)容。例:while(a>b){/*whilea>b*/printf(“*/”);}字符的類型,僅從字符本身是無法區(qū)分的。如上面的串中,字符串while可能是普通字符串,也可能是注釋字符串。同樣,對“*/”字符,與/*配對是注釋字符,否則就是普通字符。因此,需要一個類型標志

state。因此,字符的類型標志可取為:普通字符(COPY)、注釋開始(START)、注釋字符(COMMENT)、注釋結(jié)束(END)。因此,在C程序中,從注釋的角度來看,字符共有四種,普通字符、注釋開始字符、注釋結(jié)束字符及注釋字符。while(a>b){printf(“*/”);}

為普通字符,whilea>b

為注釋字符,/**/為注釋標志字符。課程目錄第6講循環(huán)控制本講目錄參照下例開始程序設(shè)計。開始時,state置普通字符狀態(tài)。在普通字符狀態(tài),如果輸入字符不是‘/’,則將字符原樣輸出,如果輸入字符為‘/’,在開始注釋狀態(tài),如果輸入字符為‘*’,while(a>b)/*whilea>b*/printf(“*/”);

則可能開始注釋,將state設(shè)為注釋狀態(tài),字符‘/’

不輸出;課程目錄第6講循環(huán)控制本講目錄參照下例開始程序設(shè)計。開始時,state

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論