C語言程序設(shè)計項目式教程:模塊化程序設(shè)計_第1頁
C語言程序設(shè)計項目式教程:模塊化程序設(shè)計_第2頁
C語言程序設(shè)計項目式教程:模塊化程序設(shè)計_第3頁
C語言程序設(shè)計項目式教程:模塊化程序設(shè)計_第4頁
C語言程序設(shè)計項目式教程:模塊化程序設(shè)計_第5頁
已閱讀5頁,還剩130頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

模塊化程序設(shè)計C語言程序設(shè)計任務(wù)驅(qū)動式教程特別提示程序宏觀框架結(jié)構(gòu)程序的構(gòu)成程序開發(fā)過程程序開發(fā)環(huán)境目錄導(dǎo)學(xué)可采用“組裝”的辦法來簡化程序設(shè)計。根據(jù)需要選取配件組裝成成品——這就是“模塊化”程序設(shè)計思路。C程序是有稱之為“函數(shù)’的配件組成。什么是“函數(shù)’呢?函數(shù)的概述任務(wù)一一個龐大的main()函數(shù)會帶來如下問題:①不可能穩(wěn)定可靠。②不可能精煉高效。③不可能與時俱進。④不可能控制精度。C語言為程序的結(jié)構(gòu)提供了有力武器:函數(shù)函數(shù)的概述任務(wù)一解決的方法:用模塊化程序設(shè)計的思路函數(shù)就是功能每一個函數(shù)用來實現(xiàn)一個特定的功能函數(shù)的名字應(yīng)反映其代表的功能在設(shè)計一個較大的程序時,往往把它分為若干個程序模塊,每一個模塊包括一個或多個函數(shù),每個函數(shù)實現(xiàn)一個特定的功能C程序可由一個主函數(shù)和若干個其他函數(shù)構(gòu)成主函數(shù)調(diào)用其他函數(shù),其他函數(shù)也可以互相調(diào)用同一個函數(shù)可以被一個或多個函數(shù)調(diào)用任意多次函數(shù)的概述任務(wù)一任務(wù)一函數(shù)的概述打印輸出如下所示超市購物小票的票頭。#include<stdio.h>voidprint_welcome();//聲明print_welcome函數(shù)voidprint_star(intn);

//聲明print_star函數(shù)voidmain(){

print_welcome();

//調(diào)用自定義函數(shù)

print_star(30); }voidprint_welcome()//定義print_welcome函數(shù){

printf("\n某某超市歡迎您\n");}//定義print_star函數(shù),n為'*'號的數(shù)量void

print_star(intn){int

i;for(i=0;i<n;i++)putchar('*');}任務(wù)一函數(shù)的概述-幾點說明通過引例可得:⑴一個程序由一個或多個程序模塊組成。這樣便于分工合作,提高效率。⑵一個源程序文件由一個或多個函數(shù)組成。C程序的執(zhí)行從主函數(shù)main開始。⑶被調(diào)用的函數(shù)分為兩類:庫函數(shù)和用戶自定義函數(shù)。⑷從函數(shù)的外觀形式看,函數(shù)分為有參函數(shù)和無參函數(shù)兩類。任務(wù)一函數(shù)的概述-幾點說明對于庫函數(shù),程序設(shè)計者只需用#include指令把有關(guān)的頭文件包含到本文件模塊中即可。程序設(shè)計者需要在程序中自己定義想用的而庫函數(shù)并沒有提供的函數(shù)。(1)庫函數(shù)查看“附錄

常用的ANSIC標(biāo)準(zhǔn)庫函數(shù)”。使用庫函數(shù)要添加函數(shù)所在的頭文件,例如:#include<stdio.h>#include<math.h>(2)自定義函數(shù)你可以按照自己的意愿編寫自己的函數(shù),完成特定的功能。本章重點介紹自定義函數(shù)。技能實訓(xùn)1、編程實現(xiàn):輸出以下的結(jié)果,用函數(shù)調(diào)用實現(xiàn)。******************

Howdoyoudo!

******************解題思路:在輸出的文字上下分別有一行“*”號,顯然不必重復(fù)寫這段代碼,用一個函數(shù)print_star來實現(xiàn)輸出一行“*”號的功能。再寫一個print_message函數(shù)來輸出中間一行文字信息用主函數(shù)分別調(diào)用這兩個函數(shù)。練一練函數(shù)的概述任務(wù)一任務(wù)一函數(shù)的概述

#include<stdio.h>intmain(){voidprint_star();voidprint_message();

print_star();print_message();

print_star();return0;}voidprint_star(){printf(“******************\n”);}voidprint_message(){printf(“Howdoyoudo!\n”);}輸出16個*輸出一行文字聲明函數(shù)定義函數(shù)學(xué)習(xí)總結(jié)答一答【問題1】一個龐大的main()函數(shù)會帶來哪些不良問題?【問題2】被調(diào)用的函數(shù)分為哪兩類呢?任務(wù)一函數(shù)的概述感謝觀看!模塊化程序設(shè)計C語言程序設(shè)計任務(wù)驅(qū)動式教程特別提示程序宏觀框架結(jié)構(gòu)程序的構(gòu)成程序開發(fā)過程程序開發(fā)環(huán)境目錄導(dǎo)學(xué)“函數(shù)’是怎么定義的呢?函數(shù)的基本使用

任務(wù)二與變量“先定義,后使用”的使用規(guī)則相同,函數(shù)的使用也必須遵循“先定義,后調(diào)用”的原則。函數(shù)的定義是指對函數(shù)功能的確定,包括指定函數(shù)名、函數(shù)值的類型、形參及其類型、函數(shù)體等。函數(shù)由函數(shù)頭和函數(shù)體兩部分組成。函數(shù)頭又由返回值類型、函數(shù)名和形式參數(shù)表組成。返回值類型可以是某個數(shù)據(jù)類型;函數(shù)名是用戶為函數(shù)起的名字,用來唯一標(biāo)識一個函數(shù);形式參數(shù)表可以有零個或多個變量,在進行函數(shù)調(diào)用時,實際參數(shù)將被復(fù)制到這些變量中。函數(shù)體則是函數(shù)實現(xiàn)自身功能的一組語句。函數(shù)的基本使用

任務(wù)二對于一個函數(shù),應(yīng)包括以下內(nèi)容:(1)函數(shù)返回值類型:表示該函數(shù)返回值的類型,可以是int、float、char或其他標(biāo)準(zhǔn)的預(yù)定義類型,也可以是用戶自定義的類型,甚至是無值型void(即函數(shù)不返回任何值),若省略,系統(tǒng)將自動賦予函數(shù)的類型為int型。(2)函數(shù)名:函數(shù)標(biāo)志符,命名規(guī)則與變量相同。(3)函數(shù)參數(shù):代表函數(shù)的自變量,形式參數(shù)和實際參數(shù)之間必須用逗號隔開。參數(shù)表或形式參數(shù)說明表外加了一對方括號,表示函數(shù)的參數(shù)可有可無,是任選的。(4)函數(shù)功能/函數(shù)體:函數(shù)體必須起始于左括號,結(jié)束于右括號。其中給出的是實現(xiàn)函數(shù)功能的語句列表。函數(shù)的基本使用-函數(shù)定義任務(wù)二函數(shù)首部

1.定義無參函數(shù)定義形式:類型名

函數(shù)名(void){聲明部分語句部分

類型名

函數(shù)名(){聲明部分語句部分

函數(shù)體函數(shù)首部函數(shù)體函數(shù)名后面括號內(nèi)的void表示“空”,即函數(shù)沒有參數(shù)。無參函數(shù)的“類型說明符”指定函數(shù)返回值的類型,可以是任何有效類型。省略“類型說明符”時,系統(tǒng)默認(rèn)的函數(shù)返回值類型為int型。當(dāng)函數(shù)只完成特定操作而不需返回函數(shù)值時,可用類型名void函數(shù)的基本使用-函數(shù)定義任務(wù)二函數(shù)返回值類型函數(shù)名(形式參數(shù)列表){

函數(shù)體;

}定義形式2.定義有參函數(shù)有參函數(shù)在函數(shù)名后的括號內(nèi)必須有形式參數(shù)(簡稱“形參”)表,用于調(diào)用函數(shù)和被調(diào)函數(shù)之間的數(shù)據(jù)傳遞,故必須對其進行類型說明,這由形式參數(shù)聲明部分完成。一般情況下,函數(shù)中需要多少個原始數(shù)據(jù),函數(shù)的形參表中就應(yīng)有多少個形參,每個形參存放一個數(shù)據(jù),形參之間用逗號隔開。函數(shù)的基本使用-函數(shù)定義任務(wù)二函數(shù)返回值類型函數(shù)名(

){}定義形式3.定義空函數(shù)作用:先用空函數(shù)占一個位置,以后逐步擴充。好處:程序結(jié)構(gòu)清楚,可讀性好,以后擴充新功能方便,對程序結(jié)構(gòu)影響不大。函數(shù)的基本使用-函數(shù)定義示例任務(wù)二函數(shù)首部包括函數(shù)返回值類型、函數(shù)名、形式參數(shù);函數(shù)體實現(xiàn)函數(shù)功能。

任何自定義函數(shù)都是由函數(shù)首部、函數(shù)體兩部分組成。函數(shù)的基本使用-函數(shù)定義示例任務(wù)二自定義函數(shù)sum,計算1+2+3+……+n的和。int

sum(int

n){

inti,s;

for(i=0;i<=n;i++)

s+=i;return

s;}▲函數(shù)返回值為int?!瘮?shù)名為sum?!螀?個int型n?!瘮?shù)類型int應(yīng)與returns;中變量s類型一致。函數(shù)的基本使用-函數(shù)定義示例任務(wù)二#include<stdio.h>intsum(intn);intmain(){intn,x;printf("輸入n:"); scanf("%d",&n);x=sum(n); printf("1+2+3+...+n=%d\n",x); return0;}intsum(intn){inti,s=0;for(i=0;i<=n;i++)s+=i;returns;}自定義函數(shù)sum,計算1+2+3+……+n的和。函數(shù)的基本使用-函數(shù)定義示例任務(wù)二自定義函數(shù)string_len,計算一個字符串的長度。▲函數(shù)返回值為int?!瘮?shù)名為string_len?!螀⑹?個一維字符數(shù)組。▲函數(shù)類型int應(yīng)與returni;中變量i類型一致。intstring_len(charstr[]){ inti=0;

while(str[i]!='\0') i++;

returni;}【注意】當(dāng)一維數(shù)組作為函數(shù)形參時,允許不給出數(shù)組的長度。函數(shù)的基本使用-函數(shù)定義說明任務(wù)二⑴函數(shù)的第一行稱為函數(shù)首部。

包括函數(shù)返回值類型、函數(shù)名和形參列表等信息。intcom(intx,inty)//函數(shù)首部{

if(x>y)

return

x;

else

return

y;}函數(shù)返回值類型函數(shù)名形式參數(shù)列表⑵大括號“{}”中的語句稱為函數(shù)體,實現(xiàn)函數(shù)功能。函數(shù)體函數(shù)的基本使用-函數(shù)定義說明任務(wù)二⑶函數(shù)無返回值,則為void類型。

函數(shù)有返回值,則函數(shù)體中應(yīng)有一條return語句。voidprint_welcome() { printf("\n

歡迎進入...\n");}floatsum(floatx,flaoty){

floats; s=x+y;

returns;}技能實訓(xùn)1、自定義函數(shù)even,其功能為判斷一個整數(shù)是否為偶數(shù),如果是偶數(shù),則返回值為1,否則返回值為0。⑴函數(shù)返回值為int。⑵函數(shù)名為even。⑶形參的類型為1個int型。練一練函數(shù)的基本使用-函數(shù)定義任務(wù)一#include<stdio.h>inteven(intn){if(n%2==0)return1;elsereturn0;}intmain(){intn;printf("pleaseinputanumber:\n");scanf("%d",&n);if(even(n))printf("1\n");elseprintf("0\n");return0;}#include<stdio.h>voidsort(intn){if(n%2==0)printf("thenumberisdouble\n");elseprintf("thenumberisodd\n");}intmain(){intn;printf("pleaseinputanumber:\n");scanf("%d",&n);sort(n);return0;}學(xué)習(xí)總結(jié)答一答【問題1】函數(shù)定義的語法格式?【問題2】函數(shù)的組成部分?【問題3】函數(shù)的分類?任務(wù)一函數(shù)的基本使用-函數(shù)定義感謝觀看!模塊化程序設(shè)計C語言程序設(shè)計任務(wù)驅(qū)動式教程特別提示程序宏觀框架結(jié)構(gòu)程序的構(gòu)成程序開發(fā)過程程序開發(fā)環(huán)境目錄導(dǎo)學(xué)----Printf是未聲明標(biāo)識符?如何消除錯誤導(dǎo)學(xué)----錯誤消除C語言要求,在程序中用到的所有函數(shù),必須“先定義,后使用”函數(shù)聲明的作用、方法和位置。

函數(shù)的基本使用-函數(shù)聲明任務(wù)二函數(shù)聲明作用:⑵編譯系統(tǒng)對程序進行編譯時,檢查被調(diào)用函數(shù)是否正確存在。⑴將函數(shù)信息(函數(shù)類型、函數(shù)名、函數(shù)參數(shù)的個數(shù)與類型)通知編譯系統(tǒng)。函數(shù)的基本使用-函數(shù)聲明任務(wù)二

在源程序的開始位置將庫函數(shù)對應(yīng)的頭文件進行包含即可。標(biāo)準(zhǔn)庫函數(shù)頭文件#include"stdio.h"voidmain(){

int

x;scanf("%d",&x);......}

只需將函數(shù)首部取出來,再加一個“;”即可。自定義函數(shù)聲明#include"stdio.h"int

sum(intn);voidmain(){......}intsum(intn){

……}庫函數(shù)聲明自定義函數(shù)聲明函數(shù)的基本使用-函數(shù)聲明任務(wù)二【聲明位置】#include"stdio.h"int

sum(intn);voidmain(){

int

x=100,s;s=sum(x);......}intsum(intn){

……}⑴函數(shù)聲明寫在主調(diào)函數(shù)的外部▲main()函數(shù)是主調(diào)函數(shù)▲函數(shù)聲明為全局聲明▲可被聲明語句之后的所有函數(shù)調(diào)用intsum(int);等價于

函數(shù)聲明中形參變量名可省略,而只寫形參類型。函數(shù)的基本使用-函數(shù)聲明任務(wù)二【聲明位置】⑵函數(shù)聲明寫在主調(diào)函數(shù)的說明語句中▲只能被main調(diào)用,其他函數(shù)不能調(diào)用▲函數(shù)聲明為局部聲明#include"stdio.h"void

main(){

intsum(int

);int

x=100,s;s=sum(x);......}intsum(intn){

……}函數(shù)的基本使用-函數(shù)聲明任務(wù)二C語言規(guī)定以下幾種情況,可以不在主調(diào)函數(shù)中對被調(diào)函數(shù)進行聲明:▲如果函數(shù)的返回值為整型或字符型,可以不必進行聲明?!绻徽{(diào)函數(shù)寫在主調(diào)函數(shù)的前面,可以不必進行聲明?!绻谒泻瘮?shù)定義之前,在源程序文件的開頭,即在函數(shù)的外部已經(jīng)對函數(shù)進行了聲明,則在各個調(diào)用函數(shù)中不必再對所調(diào)用的函數(shù)進行聲明。函數(shù)的基本使用-函數(shù)聲明任務(wù)二▲通過自定義函數(shù),求任意兩個整數(shù)的和。#include<stdio.h>intmain(){inta,b;

printf("inputtwointegers:");

scanf("%d,%d",&a,&b);

printf("Thesumof%dand%dis%d\n",a,b,sum(a,b)); /*調(diào)用函數(shù)*/

return0;}intsum(inta,intb) /*函數(shù)定義*/{

return(a+b); /*返回a+b的值*/}學(xué)習(xí)總結(jié)答一答【問題1】函數(shù)聲明作用?【問題2】簡要說明不同的函數(shù)的聲明位置?任務(wù)二程序宏觀框架結(jié)構(gòu)感謝觀看!模塊化程序設(shè)計C語言程序設(shè)計任務(wù)驅(qū)動式教程特別提示程序宏觀框架結(jié)構(gòu)程序的構(gòu)成程序開發(fā)過程程序開發(fā)環(huán)境目錄導(dǎo)學(xué)這些函數(shù)呢C語言程序有函數(shù)構(gòu)成,函數(shù)包括庫函數(shù)和自定義函數(shù)。?如何調(diào)用調(diào)用這些函數(shù)呢函數(shù)的基本使用-函數(shù)調(diào)用的形式任務(wù)二#include"stdio.h"intsum(intx,inty){

returnx+y;}voidmain(){

intsum(int,int);

inta=100,b=210,s; s=sum(a,b); ......}函數(shù)聲明

函數(shù)聲明和函數(shù)定義的最終目的是為了使用這些函數(shù)。使用函數(shù)的過程就稱為函數(shù)的調(diào)用。函數(shù)定義函數(shù)調(diào)用函數(shù)的基本使用-函數(shù)調(diào)用的形式任務(wù)二變量必須先定義,后使用。函數(shù)也必須先定義,后調(diào)用。函數(shù)調(diào)用的一般形式:

函數(shù)名(實參1,實參2,…);【說明】函數(shù)定義時,圓括號內(nèi)的參數(shù)稱為形參。函數(shù)調(diào)用時,圓括號內(nèi)的參數(shù)稱為實參。實參與形參的個數(shù)應(yīng)相等,類型應(yīng)一致,順序應(yīng)對應(yīng)。如果調(diào)用無參函數(shù),則“實際參數(shù)表列”可以沒有,但括號不能省略。函數(shù)的基本使用-函數(shù)調(diào)用的形式任務(wù)二按函數(shù)調(diào)用在程序中出現(xiàn)的形式和位置來分,可以有以下3種函數(shù)調(diào)用方式:1.函數(shù)調(diào)用語句把函數(shù)調(diào)用單獨作為一個語句如printf_star();這時不要求函數(shù)帶回值,只要求函數(shù)完成一定的操作2.函數(shù)表達式函數(shù)調(diào)用出現(xiàn)在另一個表達式中如c=max(a,b);這時要求函數(shù)帶回一個確定的值以參加表達式的運算函數(shù)調(diào)用的形式:函數(shù)的基本使用-函數(shù)調(diào)用的形式任務(wù)二3.函數(shù)參數(shù)函數(shù)調(diào)用作為另一函數(shù)調(diào)用時的實參如m=max(a,max(b,c));其中max(b,c)是一次函數(shù)調(diào)用,它的值作為max另一次調(diào)用的實參函數(shù)調(diào)用的形式:函數(shù)的基本使用-函數(shù)調(diào)用的形式任務(wù)二函數(shù)名(形式參數(shù)列表)voidprint_welcome() {printf("\n歡迎進入...\n");}voidmain(){

int

sum(int,int);

int

a=100,b=210,s;print_welcome();s=sum(a,b);......}調(diào)用無參函數(shù),實參為空?!菊{(diào)用形式】函數(shù)的基本使用-函數(shù)調(diào)用的形式任務(wù)二例如:intsum(intx,inty){

return

x+y;}voidmain(){

int

sum(int,int);

inta=100,b=210,s;print_welcome();s=sum(a,b); ......}調(diào)用有參函數(shù),在()內(nèi)寫出實參,各實參之間用逗號隔開,實參與形參一

一對應(yīng)。函數(shù)的基本使用-函數(shù)調(diào)用的形式任務(wù)二#include"stdio.h"voidprint_welcome() {…….}intsum(intx,inty){……}voidmain(){intsum(int,int);

inta=100,b=210,s;print_welcome();s=sum(a,b);......}函數(shù)無返回值,函數(shù)調(diào)用單獨作為一個語句函數(shù)有返回值,函數(shù)調(diào)用通常出現(xiàn)在表達式中函數(shù)的基本使用-函數(shù)調(diào)用的形式任務(wù)二例如:intsum(intx,inty){

return

x+y;}voidmain(){

int

sum(int,int);

inta=100,b=210,s;print_welcome();s=sum(a,b); ......}調(diào)用有參函數(shù),在()內(nèi)寫出實參,各實參之間用逗號隔開,實參與形參一

一對應(yīng)。函數(shù)的基本使用-函數(shù)調(diào)用的形式任務(wù)二編寫一個函數(shù),選出能被3整除且至少一位是5的兩位數(shù),用主函數(shù)調(diào)用這個函數(shù),并輸出所有這樣的兩位。#include<stdio.h>intmain(){intfunc(inta);intr,i;for(i=10;i<100;i++){r=func(i);if(r!=0)printf("%3d",r); } printf("\n");return0;}intfunc(inta){if(a%3==0&&(a%10==5||a/10==5))return(a);else return(0);}學(xué)習(xí)總結(jié)答一答【問題1】函數(shù)調(diào)用的一般形式是怎么樣的?【問題2】按函數(shù)調(diào)用在程序中出現(xiàn)的形式和位置來分,可以有哪幾種函數(shù)調(diào)用方式?任務(wù)二函數(shù)的基本使用-函數(shù)調(diào)用的形式感謝觀看!模塊化程序設(shè)計C語言程序設(shè)計任務(wù)驅(qū)動式教程特別提示程序宏觀框架結(jié)構(gòu)程序的構(gòu)成程序開發(fā)過程程序開發(fā)環(huán)境目錄導(dǎo)學(xué)這些函數(shù)呢?調(diào)用函數(shù)的時候,參數(shù)之間值是如何傳遞的呢函數(shù)的基本使用-函數(shù)調(diào)用值的傳遞任務(wù)二1.形式參數(shù)和實際參數(shù)在調(diào)用有參函數(shù)時,主調(diào)函數(shù)和被調(diào)用函數(shù)之間有數(shù)據(jù)傳遞關(guān)系自定義函數(shù)時函數(shù)名后面的變量名稱為“形式參數(shù)”(簡稱“形參”)主調(diào)函數(shù)中調(diào)用一個函數(shù)時,函數(shù)名后面參數(shù)稱為“實際參數(shù)”(簡稱“實參”)實際參數(shù)可以是常量、變量或表達式2.實參和形參間的數(shù)據(jù)傳遞在調(diào)用函數(shù)過程中,系統(tǒng)會把實參的值傳遞給被調(diào)用函數(shù)的形參或者說,形參從實參得到一個值該值在函數(shù)調(diào)用期間有效,可以參加被調(diào)函數(shù)中的運算函數(shù)的基本使用-函數(shù)調(diào)用值的傳遞任務(wù)二例:

輸入兩個整數(shù),要求輸出其中值較大者。要求用函數(shù)來找到大數(shù)。解題思路:(1)函數(shù)名應(yīng)是見名知意,今定名為max(2)由于給定的兩個數(shù)是整數(shù),返回主調(diào)函數(shù)的值(即較大數(shù))應(yīng)該是整型(3)max函數(shù)應(yīng)當(dāng)有兩個參數(shù),以便從主函數(shù)接收兩個整數(shù),因此參數(shù)的類型應(yīng)當(dāng)是整型函數(shù)的基本使用-函數(shù)調(diào)用值的傳遞任務(wù)二先編寫max函數(shù):intmax(intx,inty){

intz;

z=x>y?x:y;

return(z);}在max函數(shù)上面,再編寫主函數(shù)#include<stdio.h>intmain(){intmax(intx,inty);inta,b,c;printf(“twointegernumbers:");scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“maxis%d\n”,c);}實參可以是常量、變量或表達式函數(shù)的基本使用-函數(shù)調(diào)用值的傳遞任務(wù)二

c=max(a,b);(main函數(shù))intmax(intx,inty)(max函數(shù)){intz;z=x>y?x:y;return(z);}函數(shù)的基本使用-函數(shù)調(diào)用值的傳遞任務(wù)二在定義函數(shù)中指定的形參,在未出現(xiàn)函數(shù)調(diào)用時,它們并不占內(nèi)存中的存儲單元。在發(fā)生函數(shù)調(diào)用時,函數(shù)max的形參被臨時分配內(nèi)存單元。2a3bxy23實參形參函數(shù)的基本使用-函數(shù)調(diào)用值的傳遞任務(wù)二調(diào)用結(jié)束,形參單元被釋放實參單元仍保留并維持原值,沒有改變?nèi)绻趫?zhí)行一個被調(diào)用函數(shù)時,形參的值發(fā)生改變,不會改變主調(diào)函數(shù)的實參的值2a3bxy23實參形參學(xué)習(xí)總結(jié)答一答【問題1】什么是形式參數(shù)和實際參數(shù)?【問題2】實參和形參間的數(shù)據(jù)是如何傳遞的?任務(wù)二函數(shù)調(diào)用值的傳遞感謝觀看!模塊化程序設(shè)計C語言程序設(shè)計任務(wù)驅(qū)動式教程特別提示程序宏觀框架結(jié)構(gòu)程序的構(gòu)成程序開發(fā)過程程序開發(fā)環(huán)境目錄導(dǎo)學(xué)這些函數(shù)呢通常,希望通過函數(shù)調(diào)用使主調(diào)函數(shù)能得到一個確定的值,那么這個值是多少呢?該如何判斷呢??函數(shù)的基本使用-函數(shù)的返回值任務(wù)二通常,希望通過函數(shù)調(diào)用使主調(diào)函數(shù)能得到一個確定的值,這就是函數(shù)值(函數(shù)的返回值)。1、函數(shù)的返回值是通過函數(shù)中的return語句獲得的。一個函數(shù)中可以有一個以上的return語句,執(zhí)行到哪一個return語句,哪一個就起作用。return語句后面的括號可以不要。2、函數(shù)值的類型。應(yīng)當(dāng)在定義函數(shù)時指定函數(shù)值的類型。3、在定義函數(shù)時指定的函數(shù)類型一般應(yīng)該和return語句中的表達式類型一致。如果函數(shù)值的類型和return語句中表達式的值不一致,則以函數(shù)類型為準(zhǔn)。函數(shù)的基本使用-函數(shù)的返回值任務(wù)二將前面我們學(xué)習(xí)過的:輸入兩個整數(shù),要求輸出其中值較大者的程序稍作改動,將在max函數(shù)中定義的變量z改為float型。函數(shù)返回值的類型與指定的函數(shù)類型不同,分析其處理方法。解題思路:如果函數(shù)返回值的類型與指定的函數(shù)類型不同,按照賦值規(guī)則處理。#include<stdio.h>intmain(){intmax(floatx,floaty);floata,b;intc;scanf("%f,%f,",&a,&b);c=max(a,b);printf("maxis%d\n",c);return0;}intmax(floatx,floaty){floatz;z=x>y?x:y;return(z);}1.52.62.62變?yōu)?函數(shù)的基本使用-函數(shù)原型任務(wù)二對被調(diào)用函數(shù)的聲明和函數(shù)原型在一個函數(shù)中調(diào)用另一個函數(shù)需要具備如下條件:(1)被調(diào)用函數(shù)必須是已經(jīng)定義的函數(shù)(是庫函數(shù)或用戶自己定義的函數(shù))。(2)如果使用庫函數(shù),應(yīng)該在本文件開頭加相應(yīng)的#include指令。(3)如果使用自己定義的函數(shù),而該函數(shù)的位置在調(diào)用它的函數(shù)后面,應(yīng)該聲明。函數(shù)的基本使用-函數(shù)原型任務(wù)二例:

輸入兩個實數(shù),用一個函數(shù)求出它們之和。解題思路:用add函數(shù)實現(xiàn)。首先要定義add函數(shù),它為float型,它應(yīng)有兩個參數(shù),也應(yīng)為float型。特別要注意的是:要對add函數(shù)進行聲明。分別編寫add函數(shù)和main函數(shù),它們組成一個源程序文件main函數(shù)的位置在add函數(shù)之前在main函數(shù)中對add函數(shù)進行聲明函數(shù)的基本使用-函數(shù)原型任務(wù)二#include<stdio.h>intmain(){floatadd(floatx,floaty);floata,b,c;printf("Pleaseenteraandb:");scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f\n",c);return0;}floatadd(floatx,floaty){floatz;z=x+y;return(z);}求兩個實數(shù)之和,函數(shù)值也是實型對add函數(shù)聲明定義add函數(shù)調(diào)用add函數(shù)只差一個分號函數(shù)的基本使用-函數(shù)原型任務(wù)二函數(shù)原型的一般形式有兩種:如floatadd(floatx,floaty);floatadd(float,float);原型說明可以放在文件的開頭,這時所有函數(shù)都可以使用此函數(shù)學(xué)習(xí)總結(jié)答一答【問題1】什么是函數(shù)返回值?函數(shù)的返回值是怎樣獲得的?【問題2】在一個函數(shù)中調(diào)用另一個函數(shù)需要具備什么條件?任務(wù)二函數(shù)的返回值感謝觀看!模塊化程序設(shè)計C語言程序設(shè)計任務(wù)驅(qū)動式教程特別提示程序宏觀框架結(jié)構(gòu)程序的構(gòu)成程序開發(fā)過程程序開發(fā)環(huán)境目錄導(dǎo)學(xué)這些函數(shù)呢C語言的函數(shù)定義是互相平行、獨立的,即函數(shù)不能嵌套定義,但可以嵌套調(diào)用函數(shù)。?如何嵌套調(diào)用函數(shù)呢函數(shù)的基本使用-函數(shù)的嵌套調(diào)用任務(wù)二一個函數(shù)在被調(diào)用的過程中可以調(diào)用其他函數(shù),這就是函數(shù)的嵌套調(diào)用。下圖給出了函數(shù)的兩層嵌套調(diào)用示意圖,sum函數(shù)在被main函數(shù)調(diào)用的過程中又調(diào)用了fac函數(shù),其執(zhí)行順序如下圖中的①~⑨。main函數(shù)①調(diào)用a函數(shù)⑨結(jié)束a函數(shù)③調(diào)用b函數(shù)⑦②⑧b函數(shù)⑤④⑥函數(shù)的基本使用-函數(shù)的嵌套調(diào)用任務(wù)二例:

輸入4個整數(shù),找出其中最大的數(shù)。用函數(shù)的嵌套調(diào)用來處理。解題思路:main中調(diào)用max4函數(shù),找4個數(shù)中最大者max4中再調(diào)用max2,找兩個數(shù)中的大者max4中多次調(diào)用max2,可找4個數(shù)中的大者,然后把它作為函數(shù)值返回main函數(shù)main函數(shù)中輸出結(jié)果函數(shù)的基本使用-函數(shù)的嵌套調(diào)用任務(wù)二#include<stdio.h>intmain(){intmax4(inta,intb,intc,intd);//對max4函數(shù)聲明inta,b,c,d,max;printf(“4intergernumbers:");scanf("%d%d%d%d",&a,&b,&c,&d);//輸入4個整數(shù)max=max4(a,b,c,d);//調(diào)用后肯定是4個數(shù)中最大者printf("max=%d\n",max);//輸出最大者return0;}▲主函數(shù):函數(shù)的基本使用-函數(shù)的嵌套調(diào)用任務(wù)二▲max4函數(shù)intmax4(inta,intb,intc,intd){intmax2(inta,intb);//對max2函數(shù)聲明intm;m=max2(a,b);//a,b中較大者m=max2(m,c);

//a,b,c中最大者m=max2(m,d);//a,b,c,d中最大者return(m);}▲max2函數(shù)intmax2(inta,intb)//a,b中較大者

{if(a>=b)returna;elsereturnb;}技能實訓(xùn)練一練技能實訓(xùn)任務(wù)二編程實現(xiàn):自定義函數(shù)string_len,其功能為計算一個字符串的長度。#include<stdio.h>#defineN100intstring_len(char[]);

//函數(shù)聲明voidmain(){

char

s[N];

int

len;

printf("請輸入一個字符串:");

gets(s);

len=string_len(s);

//函數(shù)調(diào)用

printf("字符串長度為:%d.\n",len);}intstring_len(charstr[])//函數(shù)定義{

int

i=0;while(str[i]!='\0')

i++;

returni;}輸入:Hello!6學(xué)習(xí)總結(jié)答一答【問題1】什么是函數(shù)的嵌套調(diào)用?任務(wù)一函數(shù)的嵌套調(diào)用感謝觀看!模塊化程序設(shè)計C語言程序設(shè)計任務(wù)驅(qū)動式教程特別提示程序宏觀框架結(jié)構(gòu)程序的構(gòu)成程序開發(fā)過程程序開發(fā)環(huán)境目錄導(dǎo)學(xué)這些函數(shù)呢?什么是帶參宏定義帶參宏定義任務(wù)三在C語言中,公式型函數(shù)還有另一種簡單的實現(xiàn)方式,即使用帶參宏定義。#definePI3.14用符號PI代表常量3.14,這是無參數(shù)宏定義。#defineL(r)2*PI*r參數(shù)r為圓的半徑,這是帶參數(shù)宏定義。也是公式型函數(shù)的另外一種簡單的實現(xiàn)方式帶參宏定義-定義形式任務(wù)三#define宏名(形參列表)字符串⑴宏名一般用大寫字母表示。⑵兩個以上的形參之間用逗號隔開,形參不分配內(nèi)存單元。宏名形參之間用逗號隔開#define

MAX(x,y)x>y?x:y#define

MAX(x,y)x>y?x:y【形式】【說明】帶參宏定義-定義形式任務(wù)三⑶字符串中要用到形參列表中的各個形參。兩個形參都要用到#define

MAX(x,y)x>y?x:y⑷宏定義不是語句,行未不加;號。#define

MAX(x,y)x>y?x:y行末無;號【說明】帶參宏定義-調(diào)用任務(wù)三宏名(實參列表)

;⑴宏調(diào)用中的實參是有具體值的常量、變量或表達式,實參的數(shù)量要與形參對應(yīng)。c=MAX(3,9);c=MAX(a,b);c=MAX(a+10,b);實參是常量實參是變量實參是表達式【形式】【說明】帶參宏定義-調(diào)用任務(wù)三⑵宏調(diào)用時,對實參表達式不作任何計算,而是直接用實參原樣代替形參,即“先原樣替換,然后再計算”。#include"stdio.h"#defineT(y)y*yvoidmain(){

inta,b; scanf("%d",&a); b=T(a+1); printf("%d\n",b);}輸入:37#include"stdio.h"#defineT(y)(y)*(y)voidmain(){

inta,b; scanf("%d",&a); b=T(a+1); printf("%d\n",b);}輸入:316b=3+1*3+1b=(3+1)*(3+1)【說明】帶參宏定義任務(wù)三用帶參宏定義的方式,輸出兩個整數(shù)中的較大數(shù)?!緫?yīng)用】#include<stdio.h>#defineMAX(x,y)x>y?x:yvoidmain(){inta,b,c;printf("輸入a、b:");

scanf("%d%d",&a,&b);c=MAX(a,b);printf("較大數(shù)是:%d\n",c);}技能實訓(xùn)練一練技能實訓(xùn)任務(wù)二1、用帶參數(shù)的宏定義表示圓的面積。【分析】⑴利用無參宏定義,定義PI為3.14。⑵利用帶參宏定義,定義R(r)為PI*r*r。⑶輸出保留2位小數(shù)。學(xué)習(xí)總結(jié)答一答任務(wù)三帶參宏定義1、什么是帶參數(shù)宏定義?2、帶參宏定義的定義形式是怎樣的?3、帶參宏定義如何調(diào)用?感謝觀看!模塊化程序設(shè)計C語言程序設(shè)計任務(wù)驅(qū)動式教程特別提示程序宏觀框架結(jié)構(gòu)程序的構(gòu)成程序開發(fā)過程程序開發(fā)環(huán)境目錄導(dǎo)學(xué)這些函數(shù)呢一個自定義函數(shù),可以調(diào)用自己嗎?。?函數(shù)遞歸調(diào)用任務(wù)四在調(diào)用一個函數(shù)的過程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。C語言的特點之一就在于允許函數(shù)的遞歸調(diào)用。函數(shù)的遞歸調(diào)用是函數(shù)嵌套調(diào)用的一種特殊形式?!咀⒁狻克心苡眠f歸方法解決的問題都可以用非遞歸方法來實現(xiàn)。采用遞歸方式的優(yōu)點:算法簡單、容易實現(xiàn),代碼簡潔。采用遞歸方式的缺點:程序的運行效率低。函數(shù)遞歸調(diào)用任務(wù)四函數(shù)遞歸調(diào)用分為直接調(diào)用和間接調(diào)用:f函數(shù)調(diào)用f函數(shù)f2函數(shù)調(diào)用f1函數(shù)f1函數(shù)調(diào)用f2函數(shù)直接調(diào)用本函數(shù)間接調(diào)用本函數(shù)函數(shù)遞歸調(diào)用任務(wù)四實現(xiàn)遞歸分為以下兩個階段:(1)遞推階段。將原問題不斷分解為新的子問題,不斷推進直到已知條件,即遞歸結(jié)束條件。(2)回歸階段。從已知條件除法,按遞推的逆過程逐一求值回歸,直到遞推的開始處結(jié)束回歸階段。通用的遞歸函數(shù)體的形式表示如下:if(遞歸終止條件成立)return遞歸公式的初值;elsereturn遞歸函數(shù)調(diào)用返回的結(jié)果值;函數(shù)遞歸調(diào)用任務(wù)四⑴建立遞歸關(guān)系。利用遞歸調(diào)用解決問題需要兩步:⑵找出遞歸調(diào)用的終止條件。利用遞歸方法:計算:⑴遞歸關(guān)系:n!=n*(n-1)!⑵遞歸調(diào)用的終止條件:n=1或n=0時,n!=1,即:

1!=1,

0!=1。

【步驟】【示例】函數(shù)遞歸調(diào)用任務(wù)四解題思路:求n!可以用遞推方法:即從1開始,乘2,再乘3……一直乘到n。遞推法的特點是從一個已知的事實(如1!=1)出發(fā),按一定規(guī)律推出下一個事實(如2!=1!*2),再從這個新的已知的事實出發(fā),再向下推出一個新的事實(3!=3*2!)。n!=n*(n-1)!。函數(shù)遞歸調(diào)用任務(wù)四#include"stdio.h"int

f(int

n){

if(n==1||n==0)

return1;

else

returnn*fac(n-1);}voidmain(){

intn,m;printf("請輸入一個非負(fù)整數(shù):");scanf("%d",&n);m=f(n);printf("%d!=%d\n",n,m);}以n=5為例說明f(5)=5*f(4)f(1)=1f(4)=4*f(3)f(3)=3*f(2)f(2)=2*f(1)f(2)=2f(3)=6f(4)=24f(5)=120輸入:515調(diào)

程程

回返函數(shù)遞歸調(diào)用任務(wù)四自定義函數(shù)sum實現(xiàn)自然數(shù)求和。intsum(intn){

inti,s=0;

for(i=1;i<=n;i++) s+=i;

returns;}⑴自然數(shù)求和是一個等差數(shù)列求和。⑵數(shù)列求和過程:前n項和等于前n-1項的和加上n,求和過程可描述為:遞歸關(guān)系【分析】函數(shù)遞歸調(diào)用任務(wù)四intsum(intn){

if(n==1)

return

1;

else

return

sum(n-1)+n;}⑴若n=1,則sum(1)=1,返回1;⑵若n>1,則sum(n)=sum(n-1)+n,返回sum(n-1)+n。函數(shù)遞歸調(diào)用這樣的函數(shù)調(diào)用由公式得:重新描述sum函數(shù):函數(shù)遞歸調(diào)用任務(wù)四調(diào)

程自定義函數(shù)sum實現(xiàn)自然數(shù)求和。#include"stdio.h"int

sum(intn){if(n==1)

return

1;

else

return

sum(n-1)+n;}voidmain(){

int

x;scanf("%d",&x);printf("%d\n",sum(x));}sum(5)=sum(4)+5sum(4)=sum(3)+4sum(3)=sum(2)+3sum(2)=sum(1)+2sum(1)=1sum(2)=3sum(3)=6sum(4)=10sum(5)=15以n=5為例說明程

回返輸入:515技能實訓(xùn)1、有5個學(xué)生坐在一起:問第5個學(xué)生多少歲?他說比第4個學(xué)生大2歲問第4個學(xué)生歲數(shù),他說比第3個學(xué)生大2歲問第3個學(xué)生,又說比第2個學(xué)生大2歲問第2個學(xué)生,說比第1個學(xué)生大2歲最后問第1個學(xué)生,他說是10歲請問第5個學(xué)生多大解題思路:要求第5個年齡,就必須先知道第4個年齡要求第4個年齡必須先知道第3個年齡第3個年齡又取決于第2個年齡第2個年齡取決于第1個年齡每個學(xué)生年齡都比其前1個學(xué)生的年齡大2練一練技能實訓(xùn)任務(wù)二技能實訓(xùn)任務(wù)二解題思路:age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10age(2)=12age(3)=14age(4)=16

回溯階段

遞推階段age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10age(2)=12age(3)=14age(4)=16age(5)=18

回溯階段

遞推階段結(jié)束遞歸的條件#include<stdio.h>intmain(){intage(intn);printf("NO.5,age:%d\n",age(5));return0;}

intage(intn){intc;if(n==1)c=10;elsec=age(n-1)+2;return(c);}age(5)輸出age(5)mainc=age(4)+2age函數(shù)n=5c=age(3)+2age函數(shù)n=4c=age(1)+2age函數(shù)n=2c=age(2)+2age函數(shù)n=3c=10age函數(shù)n=1age(1)=10age(2)=12age(3)=14age(4)=16age(5)=1818學(xué)習(xí)總結(jié)答一答【問題1】簡要說明采用遞歸方式的優(yōu)點和缺點?【問題2】簡要說明實現(xiàn)遞歸調(diào)用的兩個階段?任務(wù)四函數(shù)遞歸調(diào)用感謝觀看!模塊化程序設(shè)計C語言程序設(shè)計任務(wù)驅(qū)動式教程特別提示程序宏觀框架結(jié)構(gòu)程序的構(gòu)成程序開發(fā)過程程序開發(fā)環(huán)境目錄導(dǎo)學(xué)這些函數(shù)呢C語言中的變量有作用范圍嗎??作用域及存儲類型任務(wù)五函數(shù)的作用域是指可使用該函數(shù)的程序范圍。函數(shù)的存儲類型有static和extern兩種,在函數(shù)定義時進行說明。有存儲類

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論