C語(yǔ)言程序設(shè)計(jì) 第3版 課件 丁紅 第6、7章 結(jié)構(gòu)化程序設(shè)計(jì)、模塊化程序設(shè)計(jì)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì) 第3版 課件 丁紅 第6、7章 結(jié)構(gòu)化程序設(shè)計(jì)、模塊化程序設(shè)計(jì)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì) 第3版 課件 丁紅 第6、7章 結(jié)構(gòu)化程序設(shè)計(jì)、模塊化程序設(shè)計(jì)_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì) 第3版 課件 丁紅 第6、7章 結(jié)構(gòu)化程序設(shè)計(jì)、模塊化程序設(shè)計(jì)_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì) 第3版 課件 丁紅 第6、7章 結(jié)構(gòu)化程序設(shè)計(jì)、模塊化程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩104頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

6.1、順序結(jié)構(gòu)程序設(shè)計(jì)實(shí)例導(dǎo)入:

編寫一個(gè)程序,實(shí)現(xiàn)這樣的功能:要求從鍵盤輸入任一八進(jìn)制數(shù)字,可以實(shí)現(xiàn)將該數(shù)字轉(zhuǎn)換為十進(jìn)制數(shù)字,比如當(dāng)輸入八進(jìn)制4520時(shí),輸出4520所對(duì)應(yīng)的十進(jìn)制數(shù)2384。第六章結(jié)構(gòu)化程序設(shè)計(jì)(4520)8=4*8*8*8+5*8*8+2*80+解析:4520/10004520%1000/1004520%100/10千位數(shù)4:百位數(shù)5:十位數(shù)2:個(gè)位數(shù)0:4520%10求一個(gè)四位八進(jìn)制數(shù)o_number所對(duì)應(yīng)的十進(jìn)制d_number,則需先求出o_number的千位、百位、十位、個(gè)位數(shù),假如分別用a、b、c、d表示。a=o_number/1000;b=o_number%1000/100;c=o_number%100/10;d=o_number%10;d_number=a*8*8*8+b*8*8+c*8+d;算法描述1、定義變量into_number1,d_number2,a,b,c,d;2、輸入o_number1Lscanf(“%d”,&number);3、求出a、b、c、d:a=o_number/1000;b=o_number%1000/100;c=o_number%100/10;d=o_number%10;4、求出d_number2

:d_number=a*8*8*8+b*8*8+c*8+d;5、輸出d_number2

:printf(“%d”,d_number);完整的程序main(){into_number,d_number,a,b,c,d;

scanf("%d",&o_number);a=o_number/1000;b=o_number%1000/100;c=o_number%100/10;d=o_number%10;d_number=a*8*8*8+b*8*8+c*8+d;

printf(“O:%d,D:%d",o_number,d_number);}printf(“pleaseinputaoctalnumber:\n”);getch();實(shí)訓(xùn)編寫一個(gè)體重測(cè)量?jī)x:要求從鍵盤輸入身高和體重后,能夠計(jì)算出體重指數(shù)。體重指數(shù)=體重(kg)/(身高)2;算法描述:1、定義3個(gè)變量:floatindex,weight,height;2、輸入體重:scanf(“%f”,&weight);3、輸入身高:scanf(“%f”,&height);4、計(jì)算指數(shù):index=weight/(height*height);5、輸出指數(shù):printf(“%f”,index);完整程序main(){floatweight,height,index;

scanf("%f",&weight);

scanf("%f",&height);index=weight/(height*height);

printf("Theindexofyourweightis:%f",index);}printf(“\npleaseinputyourweight:");printf(“\npleaseinputyourheight:");getch();總結(jié):1、順序結(jié)構(gòu)是最簡(jiǎn)單的一種結(jié)構(gòu),它按照操作執(zhí)行的先后順序來編寫程序。2、編程應(yīng)該遵循:先根據(jù)功能要求設(shè)計(jì)出算法(用自然語(yǔ)言描述或用流程圖描述),然后再根據(jù)算法編寫程序。3、程序應(yīng)該結(jié)構(gòu)清晰、界面美觀、容易操作

編寫一個(gè)體重測(cè)量?jī)x:要求從鍵盤輸入身高和體重后,能夠計(jì)算出體重指數(shù)。

體重指數(shù)=體重(kg)/(身高)2;要求實(shí)現(xiàn)這樣的判斷:如果體重指數(shù)<25,屬于正常;

否則屬于肥胖.實(shí)訓(xùn):體重測(cè)量?jī)x改進(jìn)版16.2、選擇結(jié)構(gòu)程序設(shè)計(jì)如果index<25,輸出“Youareright!”否則輸出“Youarefat!”main(){floatweight,height,index;

scanf("%f",&weight);

scanf("%f",&height);index=weight/(height*height);

printf("Theindexofyourweightis:%f",index);

}printf(“\npleaseinputyourweight:");printf(“\npleaseinputyourheight:");if(index<25)printf(“Youareright!”);elseprintf(“Youarefat!”);一、if語(yǔ)句的使用1、if語(yǔ)句的標(biāo)準(zhǔn)形式if(表達(dá)式)語(yǔ)句1else語(yǔ)句2表達(dá)式語(yǔ)句1語(yǔ)句2例:如果工資salary大于1600元,則多余部分按15%征稅,否則按5%征稅.If(salary>1600)revenue=(salary-1600)*0.15;elserevenue=(salary-1600)*0.05;YN

從鍵盤輸入一個(gè)數(shù),求出該數(shù)絕對(duì)值所對(duì)應(yīng)的開方開始定義變量a,b,c輸入aa>=0b=ab=-ac=sqrt(b)輸出c結(jié)束YN算法1實(shí)訓(xùn)#include"math.h"main(){floata,b,c;printf("\npleaseinputanumber:\n");scanf("%f",&a);

if(a>=0)b=a;elseb=-a;c=sqrt(b);printf("Thesqrtof%fis%f\n",a,c);getch();}程序1開始定義變量a,b,c輸入aa<=0b=ab=-ac=sqrt(b)輸出c結(jié)束N算法2Y程序2#include"math.h"main(){floata,b,c;printf("\npleaseinputanumber:\n");scanf("%f",&a);b=a;

if(a<=0)b=-a;c=sqrt(b);printf(“Thesqrtof%fis%f\n",a,c);getch();}2、if語(yǔ)句最簡(jiǎn)單的形式if(表達(dá)式)語(yǔ)句表達(dá)式語(yǔ)句1NYmain(){inta,b,max;scanf(“%d%d”,&a,&b);max=a;if(b>max)max=b;printf(“max=%d”,max);}思考:當(dāng)輸入45和32時(shí),下面這個(gè)程序的輸出結(jié)果是什么?體重測(cè)量?jī)x改進(jìn)版2編寫一個(gè)體重測(cè)量?jī)x:要求從鍵盤輸入身高和體重后,能夠計(jì)算出體重指數(shù)。

體重指數(shù)=體重(kg)/(身高)2;要求實(shí)現(xiàn)這樣的判斷:

偏瘦:體重指數(shù)<18

正常:18<=體重指數(shù)<25;

微胖:25<=體重指數(shù)<30;

較胖:30<=體重指數(shù)<35;

肥胖:35<=體重指數(shù)<40;

很胖:體重指數(shù)>=40;

如果體重指數(shù)小于18,偏瘦否則如果體重指數(shù)小于25,標(biāo)準(zhǔn)

否則如果體重指數(shù)小于30,微胖

否則如果體重指數(shù)小于35,較胖

否則如果體重指數(shù)小于40,肥胖

否則很胖3、if語(yǔ)句的第三種形式if(表達(dá)式1)語(yǔ)句1elseif(表達(dá)式2)語(yǔ)句2elseif(表達(dá)式3)語(yǔ)句3

elseif(表達(dá)式4)語(yǔ)句4else表達(dá)式5

表達(dá)式1語(yǔ)句1YN表達(dá)式2語(yǔ)句2YN表達(dá)式3Y語(yǔ)句3N表達(dá)式4Y語(yǔ)句4N語(yǔ)句5從鍵盤輸入一個(gè)學(xué)生的分?jǐn)?shù),要求實(shí)現(xiàn)這樣的判斷功能:如果分?jǐn)?shù)大于100,輸出”Inputerror!”如果分?jǐn)?shù)介于100到90之間,輸出”VeryGood!”如果分?jǐn)?shù)介于80到90只,輸出”Good!”如果分?jǐn)?shù)介于70到80之間,輸出”Middle”如果分?jǐn)?shù)介于60到70之間,輸出”Pass”如果分?jǐn)?shù)小于60,輸出”NoPass!”實(shí)訓(xùn)算法1描述1、定義一個(gè)變量score;2、輸入score的值;3、如果score>100,輸出“Inputerror!”4、否則如果score>=90,輸出“VeryGood!”5、否則如果score>=80,輸出“Good!”6、否則如果score>=70,輸出“Middle!”7、否則如果score>=60,輸出“Pass!”8、否則輸出“NoPass!”9、否則輸出“Inputerror!main(){floatscore;printf("pleaseinputanumber:\n");scanf("%f",&score);

if(score>100)printf("Inputerror!");elseif(score>=90)printf("verygood!");elseif(score>=80)printf("good!"); elseif(score>=70)printf("middle!"); elseif(score>=60)printf("pass!"); elseprintf("nopass!"); getch();}elseif(score>=0)printf(“Nopass!”);elseprintf(“Inputerror!”);}總結(jié)if語(yǔ)句的三種基本形式if(表達(dá)式)語(yǔ)句1else語(yǔ)句21、最基本的形式2、最簡(jiǎn)單的形式if(表達(dá)式)語(yǔ)句3、層次形式if(表達(dá)式1)語(yǔ)句1elseif(表達(dá)式2)語(yǔ)句2elseif(表達(dá)式3)語(yǔ)句3

elseif(表達(dá)式4)語(yǔ)句4else表達(dá)式5

實(shí)訓(xùn)假如從鍵盤輸入67,下面這個(gè)程序的結(jié)果是什么,如果輸入89,90,101呢?main(){floatscore;scanf("%f",&score);if(score>=60)if(score>=90)printf("A");elseprintf("B");elseif(score>=0)printf("C");elseprintf("Inputerror!");}二、if語(yǔ)句的嵌套if(表達(dá)式1)if(表達(dá)式2)語(yǔ)句1else語(yǔ)句2elseif(表達(dá)式3)語(yǔ)句3else語(yǔ)句4一般使用形式假如從鍵盤輸入5,下面程序的輸出結(jié)果是什么?main(){intx,y;scanf("%d",&x);if(x>=0)if(x>10)y=x*x-5;elseif(x>5)y=x*x*x+2; elsey=x;elseif(x<-10)y=x*x+5;elsey=x*x+11;printf("%d",y);}思考題某單位的工資是這樣計(jì)算的:

工資=基本工資+工齡工資;工齡為1年:工齡工資=基本工資*0.1;工齡為2—3年:工齡工資=基本工資*0.25;工齡為4—5年:工齡工資=基本工資*0.5;工齡為6—8年:工齡工資=基本工資*0.8;工齡大于8年的:工齡工資=基本工資*工齡*0.1;基本工資為1500元。要求從鍵盤輸入教師的工齡,可以根據(jù)工齡計(jì)算該教師的基本工資。使用if語(yǔ)句來編寫如下的程序:實(shí)訓(xùn)算法描述:1、定義兩個(gè)實(shí)型變量:工資salary、工齡工資a_salary;定義一個(gè)整型變量:工齡age;2、輸入工齡age;3、如果age==1;a_salary=1500*0.1;4、如果2<=age<=3;a_salary=1500*0.25;5、如果4<=age<=5;a_salary=1500*0.5;6、如果6<=age<=8;a_salary=1500*0.8;7、如果8<=age;a_salary=1500*age*0.1;8、salary=1500+a_salary;9、輸出salary;main(){floatsalary,a_salary;intage;scanf("%d",&age);if(age==1)a_salary=1500*0.1;elseif(age>=2&&age<=3)a_salary=1500*0.25;elseif(age>=4&&age<=5)a_salary=1500*0.5; elseif(age>=6&&age<=8)a_salary=1500*0.8; elseif(age>8)a_salary=1500*age*0.1;salary=1500+a_salary;printf("%.1f",salary);}main(){floatsalary,a_salary;intage;scanf("%d“,&age);

switch(age){case1:a_salary=1500*0.1;break;case2:a_salary=1500*0.25;break;case3:a_salary=1500*0.25;break;case4:a_salary=1500*0.5;break;case5:a_salary=1500*0.5;break;case6:a_salary=1500*0.8;break;case7:a_salary=1500*0.8;break;case8:a_salary=1500*0.8;break;default:a_salary=1500*age*0.1;}salary=1500+a_salary;printf("salary:%.1f",salary);}復(fù)習(xí)判斷一個(gè)學(xué)生成績(jī)的“優(yōu)、良、中、差”:假如從鍵盤輸入的字母是‘A’,輸出評(píng)語(yǔ)“YouareExcellent!”;如果輸入‘B’,輸出評(píng)語(yǔ)“Youarewell!”;如果輸入‘C’,輸出評(píng)語(yǔ)“Youarepassing!”;如果輸入‘D’,輸出評(píng)語(yǔ)“Youarenotpassing!”。如果輸入的不是這四個(gè)字母,則出現(xiàn)提示“Inputerror!”請(qǐng)編寫一個(gè)程序,實(shí)現(xiàn)該判斷功能。1、定義一個(gè)字符型變量score;2、輸入字符score;3、如果score==‘A’,輸出“Excellent!”4、如果score==‘B’,輸出“well!”5、如果score==‘C’,輸出“pass!”6、如果score==‘D’,輸出“Notpass!”7、如果以上都不是,則輸出“Inputerror!”算法描述If語(yǔ)句實(shí)現(xiàn)main(){charscore;scanf(“%c”,&score);if(score==‘A’)printf(“excellent!”);elseif(score==‘B)printf(“well!”);elseif(score==‘C’)printf(“pass!”);elseif(score==‘D’)printf(“Nopass”);elseprintf(“Inputerror!”);}switch語(yǔ)句實(shí)現(xiàn)main(){charscore;scanf(“%c”,&score);switch(score){case‘A’:printf(“Excellent!”);case‘B’:printf(“Well!”);case‘C’:printf(“Pass!”);case‘D’:printf(“Nopass!”);default:printf(“Inputerror!”);}}break;break;break;break;三、switch語(yǔ)句的使用switch(表達(dá)式)

{case常量表達(dá)式:語(yǔ)句1case常量表達(dá)式:語(yǔ)句2……case常量表達(dá)式:語(yǔ)句ndefault:語(yǔ)句n+1}四、條件運(yùn)算符的使用程序段1if(a>b)max=a;elsemax=b;max=(a>b)

?a:

b一般使用形式:

表達(dá)式1?表達(dá)式2:表達(dá)式3程序段2if(x>=0)y=x;elsey=-X;y=(X>=0)?x:-x;優(yōu)先級(jí)僅僅比賦值運(yùn)算符和逗號(hào)運(yùn)算符高,自右至左的結(jié)合性.

某企業(yè)發(fā)放的年終獎(jiǎng)金根據(jù)職工該年的積分計(jì)算。積分等于或低于0分的,獎(jiǎng)金為0;積分在1到19分之間的,獎(jiǎng)金為積分?jǐn)?shù)乘以100;積分在20到29之間的,獎(jiǎng)金為積分?jǐn)?shù)乘以150;積分在30到39之間的,獎(jiǎng)金為積分?jǐn)?shù)乘以200;積分在40到49分之間的,獎(jiǎng)金為積分?jǐn)?shù)乘以250;積分在50分以上的,獎(jiǎng)金都為積分?jǐn)?shù)乘以300。編寫一程序,從鍵盤輸入積分?jǐn)?shù),可以求出該職工的年終獎(jiǎng)。分別用if和switch語(yǔ)句來實(shí)現(xiàn)綜合實(shí)訓(xùn)6.3、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)所謂循環(huán),就是對(duì)一段程序重復(fù)執(zhí)行多次循環(huán)體語(yǔ)句:程序中需要被重復(fù)執(zhí)行的部分循環(huán)的初始條件:循環(huán)的執(zhí)行條件:i=0;i<50;實(shí)現(xiàn)循環(huán)的三種方法:while語(yǔ)句do_while語(yǔ)句for語(yǔ)句while語(yǔ)句while語(yǔ)句的一般形式:while(循環(huán)的執(zhí)行條件){循環(huán)體語(yǔ)句

}條件循環(huán)體YNprintf("pleaseinputthescoreofexam:");scanf("%f",&E_score);printf("\npleaseinputthescoreofperformance:");scanf("%f",&P_score);printf("\npleaseinputthescoreof:");scanf("%f",&M_score);F_score=E_score*0.4+P_score*0.3+M_score*0.3;printf("%.1f",F_score);while(i<50)

{

}i=0;i=i+1;main(){floatE_score,P_score,M_score,F_score;int}do_while語(yǔ)句do_while語(yǔ)句的一般形式是:do{

循環(huán)體語(yǔ)句

}while(循環(huán)的執(zhí)行條件);條件循環(huán)體YNIf(number%i==0)printf(“%6d”,i);while(i<sqrt(number));i=2;i=i+1;{}main(){intnumber,i;scanf(“%d”,&number);}#include”math.h”dofor語(yǔ)句for語(yǔ)句的一般形式是:for(循環(huán)變量初始值;循環(huán)的條件;循環(huán)變量變化)

循環(huán)體語(yǔ)句main(){intnumber,i;scanf(“%d”,&number);for(i=2;i<sqrt(number);i++)if(number%i==0)printf(“%6d”,i);}#include”math.h”循環(huán)變量賦初始值循環(huán)條件循環(huán)體語(yǔ)句循環(huán)變量變化YNfor(循環(huán)變量初始值;循環(huán)的條件;循環(huán)變量變化)

循環(huán)體語(yǔ)句綜合實(shí)訓(xùn)編寫一個(gè)程序,輸出1到200間所有可以被18整除的數(shù)。1、如果1%18==0,輸出1;2、如果2%18==0,輸出2;3、如果3%18==0,輸出3;4、如果4%18==0,輸出4;5、如果5%18==0,輸出5;200、如果200%18==0,輸出200;If(i%18==0)printf(“%d”,i);i=1;i<=200;i++for(

)inti;main(){}變形1:If(i%18==0)printf(“%d”,i);i<=200;i++for(

;

)inti;main(){}i=1;結(jié)論1:表達(dá)式1可以省略,但是分號(hào)不能省.If(i%18==0)printf(“%d”,i);i=1;i++for(

;

)inti;main(){}變形2:{If(i>200)break;}結(jié)論2:表達(dá)式2也可以省略,如果省略,分號(hào)不能省,而且需要在循環(huán)體中加使循環(huán)能夠結(jié)束的語(yǔ)句If(i%18==0)printf(“%d”,i);i=1;i<=200;for(

)inti;main(){變形3:}{i++;}結(jié)論3:表達(dá)式3也可以省略,如果省略,分號(hào)不能省,應(yīng)該在循環(huán)體中加入使循環(huán)趨于結(jié)束的語(yǔ)句If(i%18==0)printf(“%d”,i);i=1;i++;for(;;;)inti;main(){}If(i>200)break;{}變形4:結(jié)論4:三個(gè)表達(dá)式都可以省略,但是分號(hào)不能省.循環(huán)結(jié)構(gòu)程序設(shè)計(jì)復(fù)習(xí)和訓(xùn)練實(shí)例2:

百錢百雞實(shí)例1:

兔子繁殖問題兔子繁殖問題題目:一個(gè)飼養(yǎng)場(chǎng)引進(jìn)一對(duì)剛出生的新品種兔子,這對(duì)兔子從出生的第三個(gè)月開始,每月新生一對(duì)兔子,新生的兔子也如此繁殖。如果所有的兔子都不死去,問到第三年末,該飼養(yǎng)場(chǎng)共有兔子多少對(duì)?

解析1123581321f1f22、printf(“%d%d”,f1,f2);f13、f1=f1+f2;f2f2=f1+f2;4、printf(“%d%d”,f1,f2);f15、f1=f1+f2;f2f2=f1+f2;循環(huán)體迭代:

不斷以新值代替舊值的操作Fibonacci數(shù)列1、f1=1;f2=1;printf(“%ld,%ld”,f1,f2);f1=f1+f2;f2=f1+f2;while(i<=18)i=1;i=i+1;f1=1;f2=1;inti;longf1,f2;main()/*循環(huán)控制變量初始化*//*循環(huán)條件*//*循環(huán)體*/do……while實(shí)現(xiàn)main(){inti;longf1,f2;f1=1;f2=1;i=1;do{printf("%ld,%ld",f1,f2);f1=f1+f2;f2=f1+f2;i=i+1;}while(i<=18);}/*循環(huán)控制變量初始化*//*循環(huán)條件*//*循環(huán)體*/for實(shí)現(xiàn)main(){inti;longf1,f2;f1=1;f2=1;for(i=1;i<=18;i++){printf("%ld,%ld,",f1,f2);f1=f1+f2;f2=f1+f2;}}/*循環(huán)體*/小結(jié):三種循環(huán)的比較3種循環(huán)都可以用來處理同一個(gè)問題While和do……while循環(huán),只在while后面指定循環(huán)條件,在循環(huán)體中應(yīng)包含使循環(huán)趨于結(jié)束的語(yǔ)句(如i++或i=i+1等).而for在表達(dá)式3中包含了使循環(huán)趨于結(jié)束的語(yǔ)句.在while和do……while循環(huán)中,循環(huán)變量的初始化應(yīng)在while和do……while之前完成,而在for循環(huán)中,表達(dá)式1實(shí)現(xiàn)該功能.返回百錢百雞問題求解編程

我國(guó)古代數(shù)學(xué)家張丘建在《算經(jīng)》中出了一道題“雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?”。用x表示雞翁,y表示雞母,z表示雞雛。解析:x+y+z=1005x+3y+z/3=100x=0;y=0;z=0:if(x+y+z==100&&15*x+9*y+z==300)輸出xyzz=1:if(x+y+z==100&&15*x+9*y+z==300)輸出xyzz=2:z=100;y=1;y=2;y=3;y=100;x=1;x=2;x=3;x=100;窮舉:

對(duì)所有可能的情況進(jìn)行逐一檢驗(yàn),從而找到符合條件的解.main(){intx,y,z;for(x=0;x<=100;x++)for(y=0;y<=100;y++)for(z=0;z<=100;z++)if(x+y+z==100&&15*x+9*y+z==300)printf("公雞:%d,母雞:%d,小雞:%d\n",x,y,z);}程序循環(huán)的嵌套:指的是在一個(gè)循環(huán)體內(nèi)還包含一個(gè)完成的循環(huán)結(jié)構(gòu).三種循環(huán)結(jié)構(gòu)可以自身嵌套,也可以相互嵌套小結(jié):關(guān)于循環(huán)嵌套問題返回思考與拓展:1.輸入一個(gè)任意整數(shù),輸出該整數(shù)各位上的數(shù)字之和。比如輸入1871,輸出17;輸出142,輸出7。2.輸入一個(gè)十進(jìn)制整數(shù),輸出其對(duì)應(yīng)的二進(jìn)制。第七章模塊化程序設(shè)計(jì)模塊:一個(gè)具有獨(dú)立功能的程序段模塊化程序設(shè)計(jì):按適當(dāng)?shù)脑瓌t把一個(gè)情況復(fù)雜、規(guī)模較大的程序系統(tǒng)劃分為一個(gè)個(gè)較小的、功能相關(guān)而又相對(duì)獨(dú)立的模塊,這樣的程序設(shè)計(jì)方法稱為模塊化程序設(shè)計(jì)。模塊化程序設(shè)計(jì)的優(yōu)點(diǎn)復(fù)雜系統(tǒng)化大為小,化繁為簡(jiǎn)便于維護(hù)提高系統(tǒng)設(shè)計(jì)效率(便于多人并行開發(fā))在C語(yǔ)言中模塊是由函數(shù)來實(shí)現(xiàn)的。main(){longs;inta,b;scanf("%d%d",&a,&b);s=power(a,b);printf("%ld",s);}longpower(x,y)intx,y;{longsum=1;inti;for(i=0;i<y;i++)sum=sum*x;return(sum);}/*函數(shù)power*//*調(diào)用函數(shù)power*/一、關(guān)于函數(shù)的幾個(gè)概念函數(shù):能夠完成一定功能的程序段函數(shù)的調(diào)用:函數(shù)的使用主調(diào)函數(shù):調(diào)用其他函數(shù)的函數(shù)被調(diào)函數(shù):被其他函數(shù)調(diào)用的函數(shù)程序的執(zhí)行總是從main函數(shù)開始,和函數(shù)的位置無關(guān).7.1函數(shù)二、函數(shù)的分類1、從用戶使用的角度來劃分用戶自定義函數(shù)

系統(tǒng)函數(shù)

clrscr()sin()cos()sqrt()putpixel()2、從函數(shù)的形式來劃分無參函數(shù)

有參函數(shù)

三、函數(shù)的定義1、無參函數(shù)的定義常見的系統(tǒng)無參函數(shù)有:getch();clrscr();exit();無參函數(shù)定義的一般形式為:類型標(biāo)志符函數(shù)名(){聲明部分;執(zhí)行部分;}實(shí)訓(xùn)定義一個(gè)函數(shù)line,能夠用來繪制一條直線。voidline(){inti,driver=VGA;intmode=VGAHI;initgraph(&driver,&mode,"");for(i=0;i<=100;i++)putpixel(i,100,1);}2、有參函數(shù)的定義有參函數(shù)定義的一般形式為:類型標(biāo)志符函數(shù)名(形式參數(shù)表列){聲明部分;執(zhí)行部分;}常見的系統(tǒng)有參函數(shù)有:sin(),cos().Sqrt(),setcolor();putpixel()實(shí)訓(xùn)定義一個(gè)函數(shù)line,能夠用來繪制一條從指定端點(diǎn)出發(fā)的定長(zhǎng)直線。。#include"stdio.h"#include"graphics.h"voidline(x,y,l,z)intx,y,l,z;{inti,driver=VGA;intmode=VGAHI;initgraph(&driver,&mode,"");for(i=x;i<=l;i++)putpixel(i,y,z);

綜合實(shí)訓(xùn)編寫一個(gè)程序,能夠?qū)崿F(xiàn)當(dāng)從鍵盤輸入x和y時(shí),求出xy的結(jié)果。xy=x*x*x*x*x*x*x……*x解析:y個(gè)x1、定義變量s、x、y、i;3、變量初始化:s=1;i=0;2、輸入x和y;4、當(dāng)i<y時(shí)s=s*x;i=i+1;5、輸出s;longs,x,y;inti;scanf(“%ld%ld”,&x,&y);s=1;i=0;while(i<y){s=s*x;i=i+1;}printf(“%ld”,s);main(){}main(){longs,x,y;inti;scanf("%ld%ld",&x,&y);s=1;i=0;while(i<y){s=s*x;i=i+1;}printf("%ld“,s);}_x001A_power(longx,longy)longs;inti;main(){longa,b;a=234;b=456;power(a,b);}power(234,456);power(a+2,b*2);}超鏈接超鏈接四、函數(shù)的參數(shù)1、形式參數(shù)(形參)被調(diào)函數(shù)中的參數(shù)2、實(shí)際參數(shù)(實(shí)參)主調(diào)函數(shù)傳送給被調(diào)函數(shù)的實(shí)際參數(shù)小結(jié):形式參數(shù)和實(shí)際參數(shù)之間的關(guān)系形參沒有固定的值,在實(shí)際運(yùn)算時(shí),形參接收來自實(shí)參的值進(jìn)行運(yùn)算處理.實(shí)參和形參在進(jìn)行值傳遞時(shí)是一一對(duì)應(yīng)關(guān)系,所以其個(gè)數(shù)應(yīng)該相同,對(duì)應(yīng)的類型也應(yīng)該相同形式參數(shù)和實(shí)際參數(shù)之間的值傳遞是單向傳遞只有子函數(shù)被調(diào)用時(shí),才為形參分配內(nèi)存單元,用完即釋放.實(shí)參不但可以是變量,也可以是常量,還可以是表達(dá)式,但是一定要有確定的值.五、函數(shù)的返回值1、return的作用將被調(diào)函數(shù)中得到的結(jié)果帶回到主調(diào)函數(shù)中.2、return的使用return表達(dá)式;3、返回值的類型和函數(shù)類型一致;如果不一致,以函數(shù)類型為準(zhǔn)如果函數(shù)沒有類型,則用void表示無類型六、函數(shù)的調(diào)用1、無參函數(shù)的調(diào)用一般形式:函數(shù)名();例clrscr();getch();2、有參函數(shù)的調(diào)用一般形式:函數(shù)名(實(shí)參表列);sum=power(34,4)+power(3,98);例七、函數(shù)的聲明1、使用輸入輸出函數(shù)getchar()putchar()時(shí)#include”stdio.h”2、使用數(shù)學(xué)函數(shù)sin()cos()sqrt()等時(shí)#include”math.h”3、使用繪圖函數(shù)putpixel()arc()circle()等時(shí)#include”graphics.h”4、那么自定義函數(shù)該如何聲明呢?小結(jié):1、所謂聲明,就是把函數(shù)的類型、函數(shù)的名字、函數(shù)形參的類型及個(gè)數(shù)、順序通知編譯系統(tǒng),便于在調(diào)用時(shí)進(jìn)行檢查。又稱函數(shù)原型2、函數(shù)的聲明也可以不寫形參的名字,只寫出類型即可3、函數(shù)原型的一般形式:函數(shù)類型函數(shù)名(參數(shù)類型1,參數(shù)類型2…,參數(shù)類型n);

八、函數(shù)使用實(shí)訓(xùn)實(shí)例1:編寫程序可以實(shí)現(xiàn)求x的正弦值、余弦值、正切值、余切值。要求界面如下:**********************************

1:sin()

2:cos()

3:tan()

4:ctan()**********************************請(qǐng)選擇您要進(jìn)行的計(jì)算:printf("***************************\n");printf("1:sin()2:cos()\n");printf("3:tan()4:ctan()\n");printf("***************************\n");printf("請(qǐng)選擇你要進(jìn)行何種計(jì)算:\n");scanf(“%d”,&s);printf(“請(qǐng)輸入您要計(jì)算的數(shù)字:\n");scanf(“%f”,&x);switch(s){case1:result=sin(x);break;case2:result=cos(x);break;case3:result=tan(x);break;case4:result=1/tan(x);break;default:printf(“Inputerror!”);}printf(“result=%f”,result);}實(shí)例2編寫一函數(shù),求n!解析:0!=11!=12!=1*2=1!*23!=1*2*3=2!*34!=1*2*3*4=3!*4……n!=(n-1)!*n1(n=0,1)n!=n*(n-1)!(n>1)longf(intn){longs;if(n==0||n==1)s=1;elses=f(n-1)*n;return(s);}main(){intn;longy;printf(“pleaseinputanumber:\n”);scanf(“%d”,&n);y=f(n);printf(“%d!=%ld\n”,n,y);}結(jié)論:在調(diào)用一個(gè)函數(shù)的過程中,又出現(xiàn)直接或間接調(diào)用該函數(shù)本身,稱為遞歸調(diào)用。7.2變量的作用域根據(jù)變量的作用域劃分局部變量全局變量作用域:

變量在什么范圍內(nèi)有效在函數(shù)內(nèi)定義,只在本函數(shù)范圍內(nèi)有效的變量在函數(shù)外定義,并不從屬于某個(gè)函數(shù),可以被文件中的其他函數(shù)使用。一、局部變量實(shí)例1:下面這個(gè)程序有錯(cuò)嗎?如果沒錯(cuò),當(dāng)輸入12,34,56時(shí),輸出是什么;如果有錯(cuò),為什么呢?main(){inta,b,c;scanf("%d,%d,%d",&a,&b,&c);if(b<a){intt;t=b;b=a;a=t;}if(c<a){t=c;c=a;a=t;}printf("%d",a);}_x001A_二、全局變量實(shí)例2:下面這個(gè)程序的輸出結(jié)果是什么?進(jìn)入程序intmax;max_min(inta,intb){intmin;max=min=a;if(b>max)max=b;if(b<min)min=b;return(min);}main(){intm,n,minmize;m=520;n=888;minmize=max_min(m,n);printf(“max=%d,min=%d",max,minmize);}_x001A_maxmnminmizeabmin520888520888520520888520關(guān)于全局變量的總結(jié)當(dāng)在函數(shù)外定義了一個(gè)全局變量后,定義點(diǎn)之后的函數(shù)都可以使用該變量.當(dāng)全局變量的值在一個(gè)函數(shù)中改變后,另一個(gè)函數(shù)使用的就是改變后的值.從定義開始到程序結(jié)束,全局變量自始至終占用存儲(chǔ)空間.全局變量的使用使函數(shù)間的聯(lián)系加強(qiáng),與程序設(shè)計(jì)”低耦合”的原則相違背,所以很少使用.inta=5;main(){inta=3,b=4,sum;sum=a+b;printf(“%d”,sum);}思考

總結(jié):在局部變量的范圍內(nèi),局部變量將起作用,外部變量將被屏蔽掉而失去作用。intmax,min;max_min(intn1,intn2,intn3){intmax;if(n2>n1){max=n2;min=n1;}else{max=n1;min=n2;}if(n3>max)max=n3;if(n3<min)min=n3;}main(){intnum1,num2,num3;scanf("%d%d%d",&num1,&num2,&num3);max_min(num1,num2,num3);printf("max=%d,min=%d",max,min);}7.3變量的存儲(chǔ)類別根據(jù)變量的存儲(chǔ)類別劃分靜態(tài)存儲(chǔ)方式動(dòng)態(tài)存儲(chǔ)方式在整個(gè)程序運(yùn)行期間分配固定的存儲(chǔ)單元,直到整個(gè)程序運(yùn)行結(jié)束后才釋放變量的存儲(chǔ)單元在程序運(yùn)行期間根據(jù)需要?jiǎng)討B(tài)的分配存儲(chǔ)空間,使用完即釋放。全局變量屬于靜態(tài)存儲(chǔ)方式,而局部變量一般屬于動(dòng)態(tài)存儲(chǔ)方式。一、動(dòng)態(tài)存儲(chǔ)方式的聲明1、用auto聲明動(dòng)態(tài)局部變量例:autointa;將變量a定義為整型局部自動(dòng)變量特點(diǎn):函數(shù)調(diào)用結(jié)束,該種變量即被釋放,屬于動(dòng)態(tài)存儲(chǔ)方式。inta;2、用register聲明寄存器變量例:registerinta;將變量a定義為整型寄存器變量特點(diǎn):加快運(yùn)算速度,函數(shù)運(yùn)行完即消失、使用有限二、靜態(tài)存儲(chǔ)方式的聲明1、用static聲明靜態(tài)局部變量intincent(intx){inty,z;y=0;y=y+1;z=x+y;return(z);}main(){inti;for(i=0;i<5;i++)printf(“%d”,incent(i));}例intincent(intx){intz;staticinty=0;y=y+1;z=x+y;return(z);}main(){inti;for(i=0;i<5;i++)printf(“%d”,incent(i));}思考:比較兩種程序結(jié)果的不同。靜態(tài)局部變量的特點(diǎn):(1)靜態(tài)局部變量每次函數(shù)調(diào)用結(jié)束后能夠保留調(diào)用結(jié)束后的值不變,留待下一次調(diào)用。(2)靜態(tài)局部變量只限于被本函數(shù)使用,不能被其他函數(shù)使用(3)靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)類別,在整個(gè)程序運(yùn)行期間都不釋放;而動(dòng)態(tài)存儲(chǔ)變量屬于動(dòng)態(tài)存儲(chǔ)類別,函數(shù)調(diào)用結(jié)束即釋放。(4)在定義靜態(tài)局部變量時(shí),如果不賦初值,系統(tǒng)自動(dòng)賦值為0或空字符(對(duì)字符型變量);而相應(yīng)的情況下,系統(tǒng)會(huì)給其賦一個(gè)不確定的值。2、用static聲明外部變量

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論