第3章 C語言程序的控制結(jié)構(gòu)(1)_第1頁
第3章 C語言程序的控制結(jié)構(gòu)(1)_第2頁
第3章 C語言程序的控制結(jié)構(gòu)(1)_第3頁
第3章 C語言程序的控制結(jié)構(gòu)(1)_第4頁
第3章 C語言程序的控制結(jié)構(gòu)(1)_第5頁
已閱讀5頁,還剩94頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第3章章 C語言程序的控制結(jié)構(gòu)語言程序的控制結(jié)構(gòu)3.1 算法算法 3.2 C語句的分類語句的分類3.3 輸入和輸出語句輸入和輸出語句3.4 順序程序控制結(jié)構(gòu)順序程序控制結(jié)構(gòu)3.5 選擇程序控制結(jié)構(gòu)選擇程序控制結(jié)構(gòu)本章導(dǎo)讀本章包括知識點:算法的描述方法數(shù)據(jù)的輸入輸出函數(shù)調(diào)用格式if語句及switch語句的使用3種循環(huán)結(jié)構(gòu)break、continue和goto語句的作用常用算法:如遞推法、窮舉法等C程序的基本風(fēng)格3.1 算法算法 3.1.1 3.1.1 算法的概念算法的概念3.1.2 3.1.2 算法的表示方法算法的表示方法3.1.1 算法的概念算法的概念著名的計算機科學(xué)家沃思(著名的計算機科學(xué)

2、家沃思(Nikiklaus Wirth)曾經(jīng)提)曾經(jīng)提出過:出過: 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)+ +算法算法=程序程序數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)(data structure):即對數(shù)據(jù)的描述和組織):即對數(shù)據(jù)的描述和組織形式。形式。算法算法(algorithm):對操作或行為的描述,即操作步):對操作或行為的描述,即操作步驟。驟。廣義地說,算法就是做某一件事的步驟或程序。廣義地說,算法就是做某一件事的步驟或程序。 計算機解題的算法大致包括這兩大類算法計算機解題的算法大致包括這兩大類算法: 非數(shù)值運算算法和數(shù)值運算算法非數(shù)值運算算法和數(shù)值運算算法。算法特性算法特性 :有窮性有窮性。算法的步驟必須是有限的,每個步驟

3、都在有限的。算法的步驟必須是有限的,每個步驟都在有限的時間內(nèi)做完,執(zhí)行有限個步驟后終止。時間內(nèi)做完,執(zhí)行有限個步驟后終止。確定性確定性。算法中每一步驟都必須有明確定義,不允許有模。算法中每一步驟都必須有明確定義,不允許有模棱兩可的解釋,不允許有多義性。例如:棱兩可的解釋,不允許有多義性。例如:“如果成績大于等如果成績大于等于于9090分,則輸出分,則輸出A A;如果成績小于等于;如果成績小于等于9090分,則輸出分,則輸出B B”,當(dāng),當(dāng)成績?yōu)槌煽優(yōu)?090分時,既會輸出分時,既會輸出A A,又會輸出,又會輸出B B,這就產(chǎn)生了不確,這就產(chǎn)生了不確定性。定性。有效性有效性。算法的每一步操作都應(yīng)

4、該能有效執(zhí)行。如一個數(shù)。算法的每一步操作都應(yīng)該能有效執(zhí)行。如一個數(shù)被被0 0除就是無效不可行的,應(yīng)避免。除就是無效不可行的,應(yīng)避免。算法特性算法特性 沒有輸入或有多個輸入沒有輸入或有多個輸入。例如:求。例如:求1+2+3+100時,不需要輸入任何信息就時,不需要輸入任何信息就能求出結(jié)果能求出結(jié)果,如例如例1.4求已知兩數(shù)之和;而要求已知兩數(shù)之和;而要求求1+2+3+n時,必須從鍵盤輸入時,必須從鍵盤輸入n的值,的值,才能求出結(jié)果。才能求出結(jié)果。有一個或多個輸出有一個或多個輸出。算法的目的是為了求。算法的目的是為了求解,解,“解解”就是算法的輸出。沒有輸出的就是算法的輸出。沒有輸出的算法是沒有意

5、義的。算法是沒有意義的。3.1.2 算法的表示方法算法的表示方法 常用方法有:常用方法有:自然語言、傳統(tǒng)流程圖、自然語言、傳統(tǒng)流程圖、NS流程圖、偽代碼流程圖、偽代碼等等 1用自然語言表示算法用自然語言表示算法自然語言就是人們?nèi)粘J褂玫恼Z言,可以是漢語、自然語言就是人們?nèi)粘J褂玫恼Z言,可以是漢語、英語或其他語言。用自然語言表示算法,通俗易懂英語或其他語言。用自然語言表示算法,通俗易懂,但文字冗長,在表達上不夠嚴格,引起理解上的,但文字冗長,在表達上不夠嚴格,引起理解上的歧義性,不易轉(zhuǎn)化為程序,描述復(fù)雜的算法不很方歧義性,不易轉(zhuǎn)化為程序,描述復(fù)雜的算法不很方便。因此,除了很簡單的問題外,便。因此

6、,除了很簡單的問題外,一般不用自然語一般不用自然語言描述算法言描述算法。 用自然語言表示的求用自然語言表示的求1+2+3+6的算法如下:的算法如下:算法算法1:S1:計算:計算1+2得到得到3;S2:將第一步中的運算結(jié)果:將第一步中的運算結(jié)果3與與3相加得到相加得到6;S3:將第二步中的運算結(jié)果:將第二步中的運算結(jié)果6與與4相加得到相加得到10;S4:將第三步中的運算結(jié)果:將第三步中的運算結(jié)果10與與5相加得到相加得到15;S5:將第四步中的運算結(jié)果:將第四步中的運算結(jié)果15與與6相加得到相加得到21。用自然語言描述用自然語言描述1+2+3+10000的算法,適合嗎?的算法,適合嗎?算法算法2

7、:S1:定義循環(huán)變量:定義循環(huán)變量i=1,用于保存和的變量用于保存和的變量s,并置初值,并置初值為為0;S2:判斷:判斷i的值是否小于等于的值是否小于等于6,若是則執(zhí)行,若是則執(zhí)行S3,否則,否則跳轉(zhuǎn)到跳轉(zhuǎn)到S4執(zhí)行;執(zhí)行;S3:將:將i的值累加到的值累加到s,然后變量,然后變量i自身加自身加1,轉(zhuǎn)到,轉(zhuǎn)到S2執(zhí)執(zhí)行;行;S4:輸出:輸出s的值。的值。算法算法1是最原始的方法,最為繁瑣,步驟較多,當(dāng)加數(shù)是最原始的方法,最為繁瑣,步驟較多,當(dāng)加數(shù)較大時,比如較大時,比如1+2+3+10000,再用這種方法是行,再用這種方法是行不通的;算法不通的;算法2是比較簡單的算法,且易于在計算機是比較簡單的

8、算法,且易于在計算機上執(zhí)行操作。上執(zhí)行操作。2用傳統(tǒng)流程圖表示算法用傳統(tǒng)流程圖表示算法流程圖是一個描述程序的控制流程和指令執(zhí)行情況的流程圖是一個描述程序的控制流程和指令執(zhí)行情況的有向圖,用流程圖表示算法,直觀形象,易于理解。有向圖,用流程圖表示算法,直觀形象,易于理解。美國國家標準化協(xié)會(美國國家標準化協(xié)會(ANSI)規(guī)定了一些)規(guī)定了一些常常用符號用符號如圖所示如圖所示 用傳統(tǒng)流程圖描述計用傳統(tǒng)流程圖描述計算算1+2+3+6的算法的算法 3用用NS結(jié)構(gòu)化流程圖表示算法結(jié)構(gòu)化流程圖表示算法19731973年美國學(xué)者年美國學(xué)者I.NassiI.Nassi和和B.SchneidermanB.Sch

9、neiderman提出了一種提出了一種新型流程圖新型流程圖NSNS結(jié)構(gòu)化流程結(jié)構(gòu)化流程圖,這種流程圖一方面圖,這種流程圖一方面取消取消了帶箭頭了帶箭頭的流程線,這樣算的流程線,這樣算法被迫只能從上到下順序執(zhí)法被迫只能從上到下順序執(zhí)行,避免了算法流程的任意行,避免了算法流程的任意轉(zhuǎn)向,適于結(jié)構(gòu)化程序設(shè)計;轉(zhuǎn)向,適于結(jié)構(gòu)化程序設(shè)計;另一方面,這種流程圖另一方面,這種流程圖節(jié)省節(jié)省篇幅篇幅,因而很受歡迎。,因而很受歡迎。用用NS流程圖描述的計算流程圖描述的計算1+2+3+6的算法的算法 4用偽代碼表示算法 偽代碼使用介于自然語偽代碼使用介于自然語言和計算機語言之間言和計算機語言之間的文字和符號來描述

10、的文字和符號來描述算法。它使用起來靈算法。它使用起來靈活,活,無固定格式和規(guī)無固定格式和規(guī)范,無范,無圖形符號圖形符號,只要寫出來自己或別只要寫出來自己或別人能看懂就行,由于人能看懂就行,由于它與計算機語言比較它與計算機語言比較接近,便于向計算機接近,便于向計算機語言算法(即程序)語言算法(即程序)過渡。過渡。用偽代碼描述的用偽代碼描述的1+2+3+6算法算法如下:如下:begin /*算法開始算法開始*/1=i0=swhile i6 s+i=s i+1=i print send /*算法結(jié)束算法結(jié)束*/在程序設(shè)計中讀在程序設(shè)計中讀者可根據(jù)需要和者可根據(jù)需要和習(xí)慣任意選用。習(xí)慣任意選用。 3.

11、2 C語句的分類C語言的語句可分為語言的語句可分為5大類:大類:l控制語句控制語句l函數(shù)調(diào)用語句函數(shù)調(diào)用語句l表達式語句表達式語句l復(fù)合語句復(fù)合語句l空語句空語句1控制語句控制語句控制語句用來實現(xiàn)對程序流程的選擇、循環(huán)、轉(zhuǎn)向控制語句用來實現(xiàn)對程序流程的選擇、循環(huán)、轉(zhuǎn)向和返回等進行控制。和返回等進行控制。C語言中共有語言中共有9種控制語句,種控制語句,包括包括12個關(guān)鍵字,可以分為以下幾類:個關(guān)鍵字,可以分為以下幾類:l選擇語句選擇語句:ifelse和和switch(包括(包括case 和和default)。)。l循環(huán)語句循環(huán)語句:for、while和和dowhile。l轉(zhuǎn)向語句轉(zhuǎn)向語句:con

12、tinue、break和和goto。l返回語句返回語句:return。本章的本章的3.5、3.6和和3.7中將陸續(xù)介紹這些控制語句。中將陸續(xù)介紹這些控制語句。2函數(shù)調(diào)用語句函數(shù)調(diào)用語句函數(shù)調(diào)用語句是由一個函數(shù)調(diào)用加一個分號構(gòu)成的語句。它的一般形式是: 函數(shù)名(實參表)函數(shù)名(實參表);例如:例如:printf(“This is a C Program”); /*用于輸出雙引號中的字符串*/c=getchar(); /*用于從鍵盤讀入一個字符*/m=max(a,b,c); /*用于求取a、b、c三者之間的最大值并將結(jié)果賦給m*/3表達式語句表達式語句由一個表達式加上一個分號構(gòu)成。由一個表達式加上

13、一個分號構(gòu)成。如:如:A+; x=1; p+=q*4+5; y=42?6:1; 用一對花括號,把若干條語句括起來,用一對花括號,把若干條語句括起來,就形成了一條復(fù)合語句。形式如下:就形成了一條復(fù)合語句。形式如下:4復(fù)合語句復(fù)合語句復(fù)合語句的形式為:復(fù)合語句的形式為: 語句語句1;語句;語句2;語句語句n;例如:例如:z=x+y; z+; u=z/100; printf(“%f”,u); 花括號中的語句,可以是簡單語句、空語句、復(fù)合語花括號中的語句,可以是簡單語句、空語句、復(fù)合語句、流程控制語句,所有這些語句括在一起,在語法上看句、流程控制語句,所有這些語句括在一起,在語法上看成是一條語句,執(zhí)行

14、時順序執(zhí)行花括號中的每條語句。復(fù)成是一條語句,執(zhí)行時順序執(zhí)行花括號中的每條語句。復(fù)合語句多用于流程控制語句中。合語句多用于流程控制語句中。5空語句空語句僅僅以分號僅僅以分號“;”作為標識。作為標識。空語句的形式為:空語句的形式為: ;/*空語句空語句*/空語句本身沒有實際功能,只是表示什么操作都不空語句本身沒有實際功能,只是表示什么操作都不做。設(shè)置空語句的目的,一是在未完成的程序設(shè)計做。設(shè)置空語句的目的,一是在未完成的程序設(shè)計模塊中,暫時放一條空語句,留待以后對模塊逐步模塊中,暫時放一條空語句,留待以后對模塊逐步求精實現(xiàn)時再增加語句;二是實現(xiàn)空循環(huán)等待;三求精實現(xiàn)時再增加語句;二是實現(xiàn)空循環(huán)等

15、待;三是實現(xiàn)跳轉(zhuǎn)目標點等。是實現(xiàn)跳轉(zhuǎn)目標點等。例如:例如:int max(int a, int b) /*求兩個整數(shù)的最大值求兩個整數(shù)的最大值*/ ; / /* *此處的空語句表示在以后添此處的空語句表示在以后添加內(nèi)容加內(nèi)容,保證當(dāng)前的程序正常運行保證當(dāng)前的程序正常運行* */ /例如:例如:實現(xiàn)空循環(huán)實現(xiàn)空循環(huán)while( getchar()!=n); /*此語句表示只要從鍵盤此語句表示只要從鍵盤輸入的字符不是回車鍵則重新輸入輸入的字符不是回車鍵則重新輸入*/例如:例如:實現(xiàn)跳轉(zhuǎn)到目標點實現(xiàn)跳轉(zhuǎn)到目標點int i=0, sum=0;ex: ;sum+=i+;if( x100 ) goto e

16、x;空語句出現(xiàn)的位置是有限制的。預(yù)處理空語句出現(xiàn)的位置是有限制的。預(yù)處理命令、函數(shù)頭和花括號命令、函數(shù)頭和花括號“”之后都不之后都不允許出現(xiàn)空語句。允許出現(xiàn)空語句。注意注意3.3 輸入和輸出語句3.3.1 字符的輸入和輸出字符的輸入和輸出3.3.2 格式化輸入和輸出格式化輸入和輸出 C語言不提供輸入和輸出語句,輸入和輸出語言不提供輸入和輸出語句,輸入和輸出通過調(diào)用通過調(diào)用C的標準庫函數(shù)來實現(xiàn)。的標準庫函數(shù)來實現(xiàn)。C的標準函數(shù)庫的標準函數(shù)庫中提供許多用于標準輸入和輸出的庫函數(shù)(附錄中提供許多用于標準輸入和輸出的庫函數(shù)(附錄D),使用這些標準輸入和輸出庫函數(shù)時,要用),使用這些標準輸入和輸出庫函數(shù)

17、時,要用預(yù)編譯命令預(yù)編譯命令“#include”將有關(guān)的將有關(guān)的“頭文件頭文件”包括包括到用戶源文件中。到用戶源文件中。在調(diào)用標準輸入輸出庫函數(shù)時,在調(diào)用標準輸入輸出庫函數(shù)時,文件開頭應(yīng)有以下預(yù)編譯命令:文件開頭應(yīng)有以下預(yù)編譯命令: # include 或或 # include “stdio.h”其中,其中,h為為head之意,之意,std為為standard之意,之意,i為為input之意,之意,o為為output之意。之意。3.3.1 字符的輸入和輸出l計算機的控制臺是鍵盤和顯示器,從控制臺輸入和輸出字符的最簡單的函數(shù)是getchar()和putchar()。 1 1getchargetc

18、har函數(shù)函數(shù)使用格式使用格式:變量變量getchar( );功能:從鍵盤讀入一個字符,返回該字符功能:從鍵盤讀入一個字符,返回該字符的的ASCII值,可以將該結(jié)果賦值給字符變值,可以將該結(jié)果賦值給字符變量或整型變量,并自動將用戶擊鍵結(jié)果量或整型變量,并自動將用戶擊鍵結(jié)果回顯到屏幕上。回顯到屏幕上。2putchar函數(shù)函數(shù)使用格式使用格式:putchar(變量);(變量);功能:把字符寫到屏幕的當(dāng)前光標位置。功能:把字符寫到屏幕的當(dāng)前光標位置。例例3.1演示如何使用演示如何使用getchar()和和putchar()函數(shù)。函數(shù)。#include main( ) char c; c=getcha

19、r( ); /*從鍵盤讀入一個字符,按回車鍵從鍵盤讀入一個字符,按回車鍵結(jié)束輸入,該字符被存入變量結(jié)束輸入,該字符被存入變量c*/ putchar(c); getchar函數(shù)無參數(shù),它從標準輸入設(shè)備(鍵盤)上函數(shù)無參數(shù),它從標準輸入設(shè)備(鍵盤)上讀入一個字符,直到輸入回車鍵才結(jié)束,回車前的讀入一個字符,直到輸入回車鍵才結(jié)束,回車前的所有輸入字符都會逐個顯示在屏幕上。函數(shù)值為從所有輸入字符都會逐個顯示在屏幕上。函數(shù)值為從輸入設(shè)備輸入的第輸入設(shè)備輸入的第1個字符,空格、回車和個字符,空格、回車和Tab都能都能被讀入。被讀入。putchar函數(shù)的參數(shù)是待輸出的字符,這個字符可以函數(shù)的參數(shù)是待輸出的字

20、符,這個字符可以是可打印字符,也可以是轉(zhuǎn)義字符。是可打印字符,也可以是轉(zhuǎn)義字符。例如:例如:putchar(x42); /*輸出字母輸出字母B*/ putchar(0 x42); /*直接用直接用ASCII碼值輸出字母碼值輸出字母B*/ 注意注意3.3.2 格式化輸入和輸出l前面的前面的getchar和和putchar函數(shù)形式簡單,函數(shù)形式簡單,使用方便,但只能輸入輸出一個字符,且使用方便,但只能輸入輸出一個字符,且不能定制輸入輸出格式。格式化輸入輸出不能定制輸入輸出格式。格式化輸入輸出函數(shù)既能輸入輸出各種類型的數(shù)據(jù),又能函數(shù)既能輸入輸出各種類型的數(shù)據(jù),又能定制輸入輸出格式。定制輸入輸出格式。

21、 例例3.2從屏幕上輸出一個整數(shù)。從屏幕上輸出一個整數(shù)。#include main() int a,b; a=10; b=20; printf(output a and b:); /*輸出雙引號中的字符串輸出雙引號中的字符串*/ printf(a=%d ,b=%dn,a,b); /*輸出輸出a和和b的值的值*/輸出結(jié)果是:輸出結(jié)果是:output a and b:a=10,b=201printf函數(shù)函數(shù)l格式:格式: printf(格式控制字符串);(格式控制字符串);或或 printf(格式控制字符串(格式控制字符串 ,輸出表列);,輸出表列);l功能:向計算機系統(tǒng)默認的輸出設(shè)備輸出若功能:

22、向計算機系統(tǒng)默認的輸出設(shè)備輸出若干個任意類型的數(shù)據(jù)。干個任意類型的數(shù)據(jù)。例如:格式轉(zhuǎn)換說明符例如:格式轉(zhuǎn)換說明符printf(a=%d ,b=%dn,a,b);一般情況下,格式控制字符串包括兩種數(shù)據(jù),一種是一般情況下,格式控制字符串包括兩種數(shù)據(jù),一種是普通字符普通字符,這些字符在輸出時,這些字符在輸出時照原樣輸出照原樣輸出;另一種是;另一種是格式轉(zhuǎn)換說明符格式轉(zhuǎn)換說明符,用于控制要輸出的內(nèi)容,用于控制要輸出的內(nèi)容以何種方式以何種方式進行輸出顯示進行輸出顯示,格式轉(zhuǎn)換說明符由,格式轉(zhuǎn)換說明符由“%”開始開始,并以,并以一個格式字符結(jié)束。一個格式字符結(jié)束。 普通字符輸出表列普通字符輸出表列表31p

23、rintf函數(shù)的格式轉(zhuǎn)換說明符字符字符含義含義示例示例輸出結(jié)果輸出結(jié)果d(或(或i)十進制整數(shù)十進制整數(shù)int a=65;printf(“%d”,a);65u十進制無符號整數(shù)十進制無符號整數(shù)int a=65000;printf(“%u”,a);65000o八進制無符號整數(shù)八進制無符號整數(shù)int a=65;printf(“%o”,a);101x(或(或X)十六進制無符號整數(shù)十六進制無符號整數(shù)int a=65;printf(“%x”,a);41c單一字符單一字符int a=65;printf(“%c”,a);As字符串字符串printf(“%s”,”Hello”);Hellof小數(shù)形式的浮點小數(shù)小

24、數(shù)形式的浮點小數(shù)printf(“%f”,314.56);314.560000e(或(或E)指數(shù)形式的浮點小數(shù)指數(shù)形式的浮點小數(shù)printf(“%e”,314.56);3.145600e+002g(或(或G)e和和f中較短的一種中較短的一種printf(“%g”,314.56);314.56%百分號本身百分號本身printf(“%”);%說明:說明:“輸出表列輸出表列”是需要輸出的一些數(shù)據(jù)。是需要輸出的一些數(shù)據(jù)。可以是表達式,各可以是表達式,各個數(shù)據(jù)之間用逗號隔開。個數(shù)據(jù)之間用逗號隔開。 以下的以下的printf函數(shù)都是合法的:函數(shù)都是合法的:printf(I am a student.n);p

25、rintf(%d,3+2); 注意:注意: 輸出數(shù)據(jù)的輸出數(shù)據(jù)的數(shù)據(jù)類型數(shù)據(jù)類型與與格式轉(zhuǎn)換說明符格式轉(zhuǎn)換說明符必須必須順序匹順序匹配配,否則會引起輸出錯誤。,否則會引起輸出錯誤。如:如: printf(%d,314.56);printf( %d,%f,3.89 , 6); 錯誤錯誤!一般情況下,格式轉(zhuǎn)換說明符與輸出項個數(shù)相同。一般情況下,格式轉(zhuǎn)換說明符與輸出項個數(shù)相同。如果格式轉(zhuǎn)換說明符的個數(shù)如果格式轉(zhuǎn)換說明符的個數(shù)大于大于輸出項的個數(shù),則多余的格輸出項的個數(shù),則多余的格式將式將輸出不定值輸出不定值。如果格式轉(zhuǎn)換說明符的個數(shù)。如果格式轉(zhuǎn)換說明符的個數(shù)小于小于輸出項輸出項的個數(shù),則的個數(shù),則多

26、余的輸出項不輸出。多余的輸出項不輸出。例例3.3 有以下程序有以下程序#include main() int a666 , b=888; printf( %dn , a,b);程序的輸出結(jié)果是()。程序的輸出結(jié)果是()。A)錯誤信息)錯誤信息B)666C)888D)666,888思考:如果將輸出思考:如果將輸出語句改為語句改為 printf(“ %d,%dn”, a); 輸出結(jié)果會怎樣?輸出結(jié)果會怎樣?格式轉(zhuǎn)換說明符的完整形式如下:% - 0 m.n l或或h 格式字符格式字符修飾字符修飾字符含義含義英文字母英文字母l修飾修飾d,u,o,x時,用于輸出時,用于輸出long型數(shù)據(jù)型數(shù)據(jù)修飾修飾f

27、,e,g時,用于輸出時,用于輸出long double型數(shù)據(jù)型數(shù)據(jù)英文字母英文字母h修飾修飾d,o,x時,用于輸出時,用于輸出short型數(shù)據(jù)型數(shù)據(jù)最小域?qū)捵钚∮驅(qū)抦指定輸出項輸出時所占列數(shù),數(shù)據(jù)長度指定輸出項輸出時所占列數(shù),數(shù)據(jù)長度m,左邊補空格;否則按實,左邊補空格;否則按實際寬度輸出際寬度輸出顯示精度顯示精度.n對于實數(shù),指定小數(shù)位數(shù)(四舍五入)對于實數(shù),指定小數(shù)位數(shù)(四舍五入)對于字符串,指定從字符串左側(cè)開始截取的子串字符個數(shù)對于字符串,指定從字符串左側(cè)開始截取的子串字符個數(shù)輸出數(shù)據(jù)在域內(nèi)左對齊(默認右對齊)輸出數(shù)據(jù)在域內(nèi)左對齊(默認右對齊)指定在有符號數(shù)的正數(shù)前加正號()指定在有符號

28、數(shù)的正數(shù)前加正號()0輸出數(shù)值時,指定在左邊不使用的空位置自動填輸出數(shù)值時,指定在左邊不使用的空位置自動填0在八進制和十六進制數(shù)前顯示前導(dǎo)符在八進制和十六進制數(shù)前顯示前導(dǎo)符0,0 x例例3.4 printf函數(shù)修飾符的使用。函數(shù)修飾符的使用。#include main() int a=123; float y=456.78; char ch=A; char s=Programing; /*s為字符數(shù)組為字符數(shù)組*/ printf(%7d,%-4d,%04dn,a,a,a); printf(%f,%8f,%8.1f,%.2f,%.2en,y,y,y,y,y); printf(%3cn,ch);

29、printf(%sn%12sn%8.5sn%2.5sn%.3sn,s,s,s,s,s); 程序輸出結(jié)果程序輸出結(jié)果 說明:在說明:在Visual C+中,調(diào)用中,調(diào)用printf函數(shù)時,函數(shù)時,float類型類型的參數(shù)是先轉(zhuǎn)化為的參數(shù)是先轉(zhuǎn)化為double類型再傳遞的,所以類型再傳遞的,所以%f可以可以輸出輸出float和和double兩種類型的數(shù)據(jù),兩種類型的數(shù)據(jù),不必用不必用%lf輸出輸出double類型的數(shù)據(jù)類型的數(shù)據(jù)。2scanf函數(shù)函數(shù)格式格式:scanf(格式控制字符串(格式控制字符串, 地址表列);地址表列);功能:從標準輸入設(shè)備(鍵盤)輸入若干個任功能:從標準輸入設(shè)備(鍵盤)輸

30、入若干個任意類型的數(shù)據(jù)。意類型的數(shù)據(jù)。例如:例如:scanf(%d,%f”, &a,&b); 地址表列地址表列格式控制字符串格式控制字符串 分隔符分隔符表33scanf函數(shù)的格式轉(zhuǎn)換說明符字符字符含義含義d或或i輸入十進制整數(shù)輸入十進制整數(shù)u輸入無符號十進制整數(shù)輸入無符號十進制整數(shù)o輸入八進制整數(shù)輸入八進制整數(shù)x輸入十六進制整數(shù)輸入十六進制整數(shù)c輸入一個字符,空白字符(包括空格、回車、制輸入一個字符,空白字符(包括空格、回車、制表符)也作為有效字符輸入表符)也作為有效字符輸入S輸入字符串,遇到第一個空白字符(包括空格、輸入字符串,遇到第一個空白字符(包括空格、回車、制表符)時結(jié)

31、束回車、制表符)時結(jié)束f或或e輸入實數(shù),以小數(shù)或指數(shù)形式輸入均可輸入實數(shù),以小數(shù)或指數(shù)形式輸入均可%輸入一個輸入一個%地址表列地址表列是由若干變量的地址組成的列表,是由若干變量的地址組成的列表,參數(shù)之間用逗號隔開。函數(shù)參數(shù)之間用逗號隔開。函數(shù)scanf要求必須指要求必須指定定用來接收數(shù)據(jù)的地址用來接收數(shù)據(jù)的地址,否則,雖然編譯程,否則,雖然編譯程序不會出錯,但會導(dǎo)致數(shù)據(jù)不能正確地讀入序不會出錯,但會導(dǎo)致數(shù)據(jù)不能正確地讀入指定的內(nèi)存單元。對普通變量而言,可以在指定的內(nèi)存單元。對普通變量而言,可以在變量前使用變量前使用“”符號符號,用于取變量的地址,用于取變量的地址,而對于指針變量而言,直接使用指

32、針變量名而對于指針變量而言,直接使用指針變量名稱即可。稱即可。表表34scanf函數(shù)的修飾符函數(shù)的修飾符修飾字符修飾字符含義含義英文字母英文字母l修飾修飾d,i,u,o,x時,用于輸入時,用于輸入long型數(shù)據(jù)型數(shù)據(jù)修飾修飾f,e時,用于輸入時,用于輸入 double型數(shù)據(jù)型數(shù)據(jù)英文字母英文字母h修飾修飾d,i,o,x時,用于輸入時,用于輸入short型數(shù)據(jù)型數(shù)據(jù)域?qū)捰驅(qū)抦指定輸入數(shù)據(jù)的寬度(列數(shù)),系統(tǒng)自動按此寬度截指定輸入數(shù)據(jù)的寬度(列數(shù)),系統(tǒng)自動按此寬度截取所需數(shù)據(jù)取所需數(shù)據(jù)忽略輸入修飾符忽略輸入修飾符*抑制符,表示對應(yīng)的輸入項在讀入后不賦給相應(yīng)的變抑制符,表示對應(yīng)的輸入項在讀入后不賦

33、給相應(yīng)的變量量注:注:scanf函數(shù)沒有精度函數(shù)沒有精度.n修飾符,即用修飾符,即用scanf函數(shù)輸函數(shù)輸入實型數(shù)據(jù)時不能規(guī)定精度。入實型數(shù)據(jù)時不能規(guī)定精度。輸入數(shù)據(jù)的輸入數(shù)據(jù)的分隔符分隔符的指定:的指定:一般以一般以空格、空格、TAB或回車符或回車符作為分隔符(在格式作為分隔符(在格式控制符之間為空格、控制符之間為空格、TAB或無任何符號時);如:或無任何符號時);如:#include main()int a,b;scanf(%d%d,&a,&b);printf(a=%d,b=%d,a,b); 如要使如要使a為為12,b為為3,可用上述,可用上述3種分隔符中的任意種分隔符中的

34、任意一種進行輸入一種進行輸入 -演示演示其他字符作為分隔符其他字符作為分隔符:格式控制字符串中兩個格式:格式控制字符串中兩個格式控制符之間的字符為上述三種字符以外的字符時,控制符之間的字符為上述三種字符以外的字符時,輸入數(shù)據(jù)時要輸入數(shù)據(jù)時要原樣輸入原樣輸入。如果輸入語句如果輸入語句“scanf(“%d,%d”,&a,&b);”,要想在,要想在輸入數(shù)據(jù)后使輸入數(shù)據(jù)后使a=3,b=4,則應(yīng)輸入,則應(yīng)輸入“3,4”。此處用,。此處用,作為分隔符。作為分隔符。如果輸入語句為如果輸入語句為“scanf(%d%d,&a,&b);”(兩個(兩個%d之間有兩個空格),之間有兩個

35、空格), 輸入時應(yīng)在輸入時應(yīng)在3和和4間有兩個間有兩個以上空格。以上空格。l如果輸入語句為如果輸入語句為“scanf(a=%d,b=%d,&a,&b);”,應(yīng)輸入,應(yīng)輸入“a=3,b=4”。l如果輸入語句為如果輸入語句為“scanf(%d:%d:%d,&a,&b,&c);”,應(yīng)輸,應(yīng)輸入入“3 4 5”。在用。在用%c格式輸入字符時格式輸入字符時,空空格字符和格字符和“轉(zhuǎn)義字符轉(zhuǎn)義字符”都作為有效字符輸入。都作為有效字符輸入。l如果輸入語句為如果輸入語句為“scanf(”%c%c%c“,&c1,&c2,&c3);”, 若若輸入輸入

36、“a-b-c”,字符,字符a賦給賦給c1,-賦給賦給c2,字,字符符b賦給賦給c3。 要想要想c1、c2、c3分別為分別為a、b、c,該怎樣輸入?,該怎樣輸入?見下一頁l#include lmain()lchar c1,c2,c3;lscanf(%c%c%c,&c1,&c2,&c3);lprintf(c1=%c,c2=%c,c3=%c,c1,c2,c3);ll輸入輸入abc再回車再回車格式輸入輸出的使用格式輸入輸出的使用l#includelmain()llchar c1,c2;lscanf(%3c%2c,&c1,&c2);lprintf(c1=%c,c2

37、=%cn,c1,c2);ll#includelmain()llchar c1,c2;lscanf(“%*c%3c%2c,&c1,&c2);lprintf(c1=%c,c2=%cn,c1,c2);l格式輸入輸出的使用格式輸入輸出的使用l#includelmain()llint a;lchar c1,c2;lscanf(“%d”,&a); /m是數(shù)組名,表示地址是數(shù)組名,表示地址lscanf(%*c%3c%2c,&c1,&c2);/用用*跳過上一個跳過上一個scanf輸入的輸入的回車字符回車字符l printf(a=%dn,a);lprintf(c1=%c,

38、c2=%cn,c1,c2);l例例3.5格式輸入輸出的使用。格式輸入輸出的使用。#include main()int a,b,k;float s,f;char c1,c2,m10;scanf(%d,%d,%f,%s,&a,&b,&s,m); /*m是數(shù)組名是數(shù)組名,表表示地址示地址*/scanf(%3d%*4d%f,&k,&f);scanf(“%*c%3c%2c”,&c1,&c2);/用用*跳過上一個跳過上一個scanf輸輸入的回車字符入的回車字符 printf(a=%d,b=%d,s=%f,m=%sn,a,b,s,m);printf(k

39、=%d,f=%f,c1=%c,c2=%cn,k,f,c1,c2);程序運行時的輸入輸出結(jié)果程序運行時的輸入輸出結(jié)果 注意注意從鍵盤輸入數(shù)據(jù)的個數(shù)應(yīng)該與函數(shù)中輸入表列的項數(shù)相同,從鍵盤輸入數(shù)據(jù)的個數(shù)應(yīng)該與函數(shù)中輸入表列的項數(shù)相同,當(dāng)兩者不相同時作如下處理:當(dāng)兩者不相同時作如下處理:如果輸入數(shù)據(jù)個數(shù)如果輸入數(shù)據(jù)個數(shù)少于少于scanf函數(shù)要求的個數(shù)時,函數(shù)將函數(shù)要求的個數(shù)時,函數(shù)將等待輸?shù)却斎肴耄钡綕M足要求或遇到非法字符為止。,直到滿足要求或遇到非法字符為止。如果輸入數(shù)據(jù)個數(shù)如果輸入數(shù)據(jù)個數(shù)多于多于scanf函數(shù)要求的個數(shù)時,多余的數(shù)據(jù)將函數(shù)要求的個數(shù)時,多余的數(shù)據(jù)將留在緩沖區(qū)留在緩沖區(qū)作為下一

40、次輸入操作的輸入數(shù)據(jù)。作為下一次輸入操作的輸入數(shù)據(jù)。在輸入數(shù)據(jù)時,遇到在輸入數(shù)據(jù)時,遇到以下情況以下情況時時認為該數(shù)據(jù)結(jié)束認為該數(shù)據(jù)結(jié)束。l遇到遇到空格空格,或按,或按回車鍵回車鍵或按或按TAB鍵;鍵;l按按指定的寬度結(jié)束指定的寬度結(jié)束,如,如“%3d”,只取,只取3列;列;l遇到非法輸入遇到非法輸入。3.4 順序程序控制結(jié)構(gòu)順序程序控制結(jié)構(gòu)l順序結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計的三種基本結(jié)順序結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計的三種基本結(jié)構(gòu)中最簡單的一種程序組織結(jié)構(gòu),其特點構(gòu)中最簡單的一種程序組織結(jié)構(gòu),其特點是完全按照語句出現(xiàn)的是完全按照語句出現(xiàn)的先后順序依次執(zhí)行先后順序依次執(zhí)行。 BAAB(a)傳統(tǒng)流程圖)傳統(tǒng)流程

41、圖 (b)NS流程圖流程圖 程序自上而下執(zhí)行,先執(zhí)行程序自上而下執(zhí)行,先執(zhí)行A A塊,再執(zhí)行塊,再執(zhí)行B B塊。塊。 順序結(jié)構(gòu)的程序主要由順序結(jié)構(gòu)的程序主要由4部分部分組成:組成:變量說明部分。變量說明部分。數(shù)據(jù)輸入部分。數(shù)據(jù)輸入部分。運算部分。運算部分。運算結(jié)果輸出部分。運算結(jié)果輸出部分。例例3.6將任意小寫字母轉(zhuǎn)換為將任意小寫字母轉(zhuǎn)換為對應(yīng)的大寫字母并輸出。對應(yīng)的大寫字母并輸出。#include main()char c;c=getchar();c=c-32;putchar(c);程序運行時,若輸入:程序運行時,若輸入:h 則輸出:則輸出:H思考:如何判斷輸入的字符思考:如何判斷輸入的字符

42、是否為小寫字母?(將在是否為小寫字母?(將在3.5中講解)中講解)例例3.7從鍵盤輸入兩個變量的值,交換這兩從鍵盤輸入兩個變量的值,交換這兩個變量的值,并輸出。個變量的值,并輸出。l分析分析:假如我們將輸入的兩個變量定義為:假如我們將輸入的兩個變量定義為x和和y,如果通過如果通過“x=y ; y=x;”來實現(xiàn)交換,則當(dāng)執(zhí)行來實現(xiàn)交換,則當(dāng)執(zhí)行“x=y ;”時,將時,將y的值復(fù)制給的值復(fù)制給x,此時,此時x和和y的值相的值相等,等,x原來的值丟失,再執(zhí)行原來的值丟失,再執(zhí)行“y=x;”時,將新的時,將新的x值復(fù)制給值復(fù)制給y,結(jié)果,結(jié)果x和和y的值相等,都為原來的值相等,都為原來y的的值。為了不

43、使值。為了不使x原來的值丟失,必須在執(zhí)行原來的值丟失,必須在執(zhí)行“x=y ;”之前,先把之前,先把x的值放到一個臨時變量的值放到一個臨時變量(temp)中保存起來,在執(zhí)行了)中保存起來,在執(zhí)行了“x=y;后后”,再,再把保存在臨時變量中的值賦給把保存在臨時變量中的值賦給y(通過(通過“y=temp;”來實現(xiàn))。來實現(xiàn))。如果有紅、黃、綠三種顏色的籃子,其中紅色籃子裝蘋果,綠色籃子裝香蕉,想要交換這兩個籃子的水果,使得紅色籃子裝香蕉,綠色籃子裝蘋果,怎么辦?程序代碼:程序代碼:#include main()int x,y,temp;scanf(%d,%d,&x,&y);print

44、f(Before change:x=%d y=%dn,x,y);temp=x;x=y;y=temp;printf(after change:x=%d y=%dn,x,y);思考:如果不用臨時變量,能否使兩個變量得到交換呢?思考:如果不用臨時變量,能否使兩個變量得到交換呢?例例3.8從鍵盤任意輸入一個三位數(shù),要求輸從鍵盤任意輸入一個三位數(shù),要求輸出這個數(shù)的逆序數(shù)。如:輸入出這個數(shù)的逆序數(shù)。如:輸入123,輸出,輸出321。l分析分析:要輸出逆序數(shù),則要將原數(shù)的個位、:要輸出逆序數(shù),則要將原數(shù)的個位、十位和百位數(shù)分離出來,再用十位和百位數(shù)分離出來,再用“個位個位*100+十位十位*10+百位百位”

45、求出逆序數(shù)。個位數(shù)字可求出逆序數(shù)。個位數(shù)字可用對用對10求余得到,如求余得到,如123%103;最高位;最高位百位數(shù)字可用對百位數(shù)字可用對100整除得到,如整除得到,如123/1001;中間位的數(shù)字既可通過將其變換為最;中間位的數(shù)字既可通過將其變換為最高位再整除的方法得到,如(高位再整除的方法得到,如(1231*100)/102;也可通過將其變換為最低位再求;也可通過將其變換為最低位再求余得到,如(余得到,如(123/10)%10=2。 靈活應(yīng)用/10和%10程序源代碼如下:程序源代碼如下:#include main()int x,y,b0,b1,b2; /*變量聲明變量聲明*/printf(

46、Please enter an integer x:); /*提示用戶輸入一提示用戶輸入一個整數(shù)個整數(shù)*/scanf(%d,&x); /*輸入一個整數(shù)輸入一個整數(shù)*/b0=x%10; /*求最低位求最低位*/b1=(x/10)%10; /*求中間位求中間位*/b2=x/100; /*求最高位求最高位*/y=b0*100+b1*10+b2; /*求逆序數(shù)求逆序數(shù)*/printf(y=%dn,y); /*輸出逆序數(shù)輸出逆序數(shù)*/程序的運行結(jié)果如下:程序的運行結(jié)果如下:Please enter an integer x:123 y=321思考:是否還有其他方法分離個位、十位和百位數(shù)?思考:是

47、否還有其他方法分離個位、十位和百位數(shù)?3.5 選擇程序控制結(jié)構(gòu)l對于要先做判斷再選擇的問題就要使用選對于要先做判斷再選擇的問題就要使用選擇結(jié)構(gòu)(也稱為分支結(jié)構(gòu))。選擇結(jié)構(gòu)的擇結(jié)構(gòu)(也稱為分支結(jié)構(gòu))。選擇結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴格按照語句出現(xiàn)的物理順序。不是嚴格按照語句出現(xiàn)的物理順序。 如:在數(shù)學(xué)中,要計算如:在數(shù)學(xué)中,要計算x x的絕對值,根據(jù)絕對值定義,的絕對值,根據(jù)絕對值定義,當(dāng)當(dāng)x=0 x=0時,其絕對值為時,其絕對值為x x,而,而x0 x0時其絕對值是為時其絕對值是為- -x x。 選擇結(jié)構(gòu)分支條件通常用選擇結(jié)構(gòu)分支條件通常

48、用關(guān)系表達式關(guān)系表達式或或邏輯表達式邏輯表達式來表示,實來表示,實現(xiàn)程序流程的語句由現(xiàn)程序流程的語句由C C語言的語言的ifif語句語句或或switchswitch語句語句來完成來完成 圖圖38 選擇結(jié)構(gòu)流程圖選擇結(jié)構(gòu)流程圖圖圖3 38 8表示,當(dāng)條件表示,當(dāng)條件P P為真(成立)時執(zhí)行為真(成立)時執(zhí)行A A框,否則框,否則執(zhí)行執(zhí)行B B框。無論框。無論P P是否成立,只能執(zhí)行是否成立,只能執(zhí)行A A框或框或B B框之一,框之一,不可能既執(zhí)行不可能既執(zhí)行A A框又執(zhí)行框又執(zhí)行B B框。無論走哪條路徑,在執(zhí)框。無論走哪條路徑,在執(zhí)行行A A框或框或B B框之后,都脫離本選擇結(jié)構(gòu)。框之后,都脫離

49、本選擇結(jié)構(gòu)。3.5.1 if語句1單分支結(jié)構(gòu)單分支結(jié)構(gòu)2雙分支結(jié)構(gòu)雙分支結(jié)構(gòu)3多分支結(jié)構(gòu)多分支結(jié)構(gòu)1單分支結(jié)構(gòu)單分支結(jié)構(gòu)if形式:形式: if(表達式)語句(表達式)語句S圖圖39單分支結(jié)構(gòu)的流程圖單分支結(jié)構(gòu)的流程圖l執(zhí)行過程執(zhí)行過程:系統(tǒng)首先:系統(tǒng)首先計算表達式的值,如計算表達式的值,如果表達式結(jié)果不為果表達式結(jié)果不為0,則執(zhí)行語句則執(zhí)行語句S,否則,否則跳過語句跳過語句S,繼續(xù)執(zhí),繼續(xù)執(zhí)行其后的其他語句。行其后的其他語句。l說明說明:l“if if”是是C C語言的關(guān)語言的關(guān)鍵字;鍵字;“表達式表達式”可以可以任意合法的任意合法的C C語言表達語言表達式,可以是關(guān)系表達式式,可以是關(guān)系表達

50、式或邏輯表達式,也可以或邏輯表達式,也可以是任意的數(shù)值類型(包是任意的數(shù)值類型(包括整型、實型、字符型括整型、實型、字符型等);表達式兩側(cè)的括等);表達式兩側(cè)的括號不能省略。號不能省略。l語句語句S S可以是一條語可以是一條語句,也可以是任意合法句,也可以是任意合法的復(fù)合語句,其位置比的復(fù)合語句,其位置比較靈活,可以直接出現(xiàn)較靈活,可以直接出現(xiàn)在在if if同一行的后面,也同一行的后面,也可以出現(xiàn)在可以出現(xiàn)在if if的下一行的下一行。 ifif(表達式)語句(表達式)語句S S例例3.9 寫出以下程序執(zhí)行后的輸出結(jié)果寫出以下程序執(zhí)行后的輸出結(jié)果#include main( ) int a=4

51、, b=3, c=5, t=0; if (ab) t=a; a=b; b=t; if (ac) t=a; a=c; c=t; printf ( %d %d %dn , a, b, c);輸出結(jié)果為:輸出結(jié)果為:5 0 3 和if的控制語句l分析分析:程序第一行在定義:程序第一行在定義a、b、c、t四個四個變量的同時進行了初始化。接下來第一個變量的同時進行了初始化。接下來第一個if語句的表達式語句的表達式ab為假(為假(0),),if其后的語其后的語句句“t=a;”不執(zhí)行,值得注意的是不執(zhí)行,值得注意的是“a=b; b=t;”不屬于不屬于if的語句,將被執(zhí)行,執(zhí)行后的語句,將被執(zhí)行,執(zhí)行后a值為

52、值為3,b值為值為0;然后第二個;然后第二個if語句的表達語句的表達式式ac為真,則執(zhí)行語句為真,則執(zhí)行語句“t=a;”,t值變?yōu)橹底優(yōu)?,接著執(zhí)行,接著執(zhí)行“a=c;”,a值變?yōu)橹底優(yōu)?,再接著,再接著執(zhí)行執(zhí)行“c=t;”,c值變?yōu)橹底優(yōu)?;因此,輸出結(jié)果;因此,輸出結(jié)果為:為:5 0 3。例例3.10計算并輸出一個整數(shù)的絕計算并輸出一個整數(shù)的絕對值。對值。分析分析:計算一個整數(shù)的絕對值的關(guān)鍵就是判斷該數(shù):計算一個整數(shù)的絕對值的關(guān)鍵就是判斷該數(shù)是否小于是否小于0。#include main()int x,y;scanf(%d,&x); /*輸入一個整數(shù)輸入一個整數(shù)*/y=x; /*x

53、大于等于大于等于0時時,y=x*/if(x0)y=-x; /*若若xb) max =a;else max=b;將例將例3.10用雙分支結(jié)構(gòu)實現(xiàn),程序代碼如下:用雙分支結(jié)構(gòu)實現(xiàn),程序代碼如下:#include main() int x,y; scanf(%d,&x); /*輸入一個整數(shù)輸入一個整數(shù)*/ if(x0) y=-x; /*若若x0成立成立,y=-x,否則否則y=x*/ else y=x; printf(y=%dn,y);例例3.11從鍵盤讀入一個字符,以從鍵盤讀入一個字符,以與原來不同的形式進行輸出。與原來不同的形式進行輸出。l分析分析:該題的意圖是實現(xiàn)英文字符的輸入:該題的意

54、圖是實現(xiàn)英文字符的輸入輸出,所謂與與原來不同的形式是指原來輸出,所謂與與原來不同的形式是指原來輸入的是小寫字母,則轉(zhuǎn)換為對應(yīng)的大寫輸入的是小寫字母,則轉(zhuǎn)換為對應(yīng)的大寫字母并輸出;原來輸入的是大寫字母則轉(zhuǎn)字母并輸出;原來輸入的是大寫字母則轉(zhuǎn)換為對應(yīng)的小寫字母并輸出。換為對應(yīng)的小寫字母并輸出。 程序?qū)崿F(xiàn)的步驟是程序?qū)崿F(xiàn)的步驟是:從鍵盤輸入一個英文字符;從鍵盤輸入一個英文字符;判斷該英文字符的大小寫,并轉(zhuǎn)換成對應(yīng)的字母;判斷該英文字符的大小寫,并轉(zhuǎn)換成對應(yīng)的字母;輸出轉(zhuǎn)換后的英文字符。輸出轉(zhuǎn)換后的英文字符。l該題的關(guān)鍵問題是怎樣將判斷字符的大小寫狀態(tài)該題的關(guān)鍵問題是怎樣將判斷字符的大小寫狀態(tài)和實現(xiàn)轉(zhuǎn)

55、換。有和實現(xiàn)轉(zhuǎn)換。有兩種方式兩種方式實現(xiàn):實現(xiàn):一種是根據(jù)一種是根據(jù)ASCII碼進行判斷和轉(zhuǎn)換碼進行判斷和轉(zhuǎn)換,小寫字母比對應(yīng)的大,小寫字母比對應(yīng)的大寫字母的寫字母的ASCII碼大碼大32。另一種方式是利用字符另一種方式是利用字符處理函數(shù)處理函數(shù)isupper(ch)判斷判斷ch是否為大寫字母是否為大寫字母,是則返回是則返回1,否則返回,否則返回0;islower(ch)函數(shù)判斷函數(shù)判斷ch是否為小寫字母,是則返回是否為小寫字母,是則返回1,否則返回,否則返回0;toupper(ch)函數(shù)將函數(shù)將ch轉(zhuǎn)換為大寫,轉(zhuǎn)換為大寫,tolower(ch)函數(shù)將函數(shù)將ch轉(zhuǎn)換為小寫。注意,使用這四個函數(shù)

56、需轉(zhuǎn)換為小寫。注意,使用這四個函數(shù)需要包含頭文件要包含頭文件ctype.h。 用第一種方式實現(xiàn)的程序如下:用第一種方式實現(xiàn)的程序如下:#include main() char ch; ch=getchar(); /*從鍵盤輸入一個英文字符從鍵盤輸入一個英文字符*/ if(ch=a&ch=z) /*判斷判斷ch是否為小寫字母是否為小寫字母*/ ch=ch-32; /*ch為小寫字母,將其轉(zhuǎn)換為大寫為小寫字母,將其轉(zhuǎn)換為大寫*/ else ch=ch+32; /*ch為大寫字母,將其轉(zhuǎn)換為小寫為大寫字母,將其轉(zhuǎn)換為小寫*/ putchar(ch); /*輸出輸出ch*/運行時,輸入:運行時

57、,輸入:a 輸出:輸出:A思考:用字符處理函數(shù)怎樣實現(xiàn)程序?思考:用字符處理函數(shù)怎樣實現(xiàn)程序?3多分支結(jié)構(gòu)多分支結(jié)構(gòu)if-else-if形式:形式:if(表達式(表達式1)語句)語句S1else if(表達式(表達式2)語句)語句S2else if(表達式(表達式n)語句)語句Snelse語句語句Sn+1l執(zhí)行過程執(zhí)行過程:if-else-if結(jié)構(gòu)結(jié)構(gòu)實際上是由多個實際上是由多個if-else結(jié)結(jié)構(gòu)組合而成的,系統(tǒng)首先構(gòu)組合而成的,系統(tǒng)首先計算表達式計算表達式1,其值為真,其值為真(不為(不為0)時,執(zhí)行語句)時,執(zhí)行語句S1;否則,計算表達式;否則,計算表達式2,其值為真(不為其值為真(不為

58、0)時,執(zhí))時,執(zhí)行語句行語句S2;如果如果if 后的后的所有表達式都不為真,則所有表達式都不為真,則執(zhí)行語句執(zhí)行語句Sn+1,并結(jié)束整,并結(jié)束整個分支結(jié)構(gòu)。選擇結(jié)構(gòu)執(zhí)個分支結(jié)構(gòu)。選擇結(jié)構(gòu)執(zhí)行完成后繼續(xù)執(zhí)行其后的行完成后繼續(xù)執(zhí)行其后的其他語句。其他語句。else是對哪個是對哪個if的否定,的否定,else if中的中的if是對哪個范圍的劃是對哪個范圍的劃分分借助數(shù)軸來理解借助數(shù)軸來理解圖圖3 311 11 雙分支結(jié)構(gòu)的流程圖雙分支結(jié)構(gòu)的流程圖例例3.12從鍵盤輸入從鍵盤輸入x的值,并通過的值,并通過如下的數(shù)學(xué)關(guān)系式求出相應(yīng)的如下的數(shù)學(xué)關(guān)系式求出相應(yīng)的y值。值。010001xxxy分析分析:該題

59、的意圖是根據(jù)輸入的:該題的意圖是根據(jù)輸入的x值,判斷值,判斷x所屬的所屬的區(qū)間,求出區(qū)間,求出y值并輸出。程序?qū)崿F(xiàn)的步驟是:值并輸出。程序?qū)崿F(xiàn)的步驟是:從鍵盤輸入一個數(shù);從鍵盤輸入一個數(shù);判斷判斷x所屬的區(qū)間,求出所屬的區(qū)間,求出y值;值;輸出結(jié)果。輸出結(jié)果。#include main( ) int x, y; scanf (%d,&x) ; if (x0) y= -1; else if (x=0) y=0; else y=1; printf (y=%dn , y);注意注意:在表示相等條:在表示相等條件時,必須用件時,必須用“=”,不能用,不能用“” 例例3.13根據(jù)輸入的成績等級打

60、印出評語,根據(jù)輸入的成績等級打印出評語,等級與評語的對應(yīng)關(guān)系如下表:等級與評語的對應(yīng)關(guān)系如下表:等級等級評語評語4Excellent3Good2Average1Poor0Failing分析分析:該題通過輸入成績的:該題通過輸入成績的等級(等級(0 04 4級),轉(zhuǎn)換為對級),轉(zhuǎn)換為對應(yīng)的評語,是典型的多分支應(yīng)的評語,是典型的多分支結(jié)構(gòu),可以用結(jié)構(gòu),可以用if-else-ifif-else-if結(jié)構(gòu)實結(jié)構(gòu)實現(xiàn)。具體實現(xiàn)步驟為:現(xiàn)。具體實現(xiàn)步驟為:輸入成績等級的數(shù)字;輸入成績等級的數(shù)字;對輸入的數(shù)字進行判斷,對輸入的數(shù)字進行判斷,得到對應(yīng)的評語;得到對應(yīng)的評語;輸出結(jié)果。輸出結(jié)果。#include main()int grade;printf(Please input grade:);scanf(%d,&grade);if(grade=4)printf(Excellent);else if(grade=3)printf(Good);else if(grade=2)printf(Average);els

溫馨提示

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

評論

0/150

提交評論