




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、整理文檔第一章程序設(shè)計和C語言1.1 .什么是計算機(jī)程序程產(chǎn):一組計算機(jī)能識別和執(zhí)行的 指令。只要讓計算機(jī)執(zhí)行這個程序,計算機(jī)就會自動地、有條不紊地 進(jìn)行工作計算機(jī)的一切操作都是由 程序控制的,離開程序,計算機(jī)將一事無成。1.2 什么是計算機(jī)語言計算機(jī)語言:人和計算機(jī)交流信息的、計算機(jī)和人都能識別的語言。計算機(jī)語言發(fā)展階段:機(jī)器語言(由。和1組成的指令)符號語言(用英文字母和數(shù)字表示指令)高級語言(接近于人的自然語言和數(shù)學(xué)語言)面向過程的語言(非結(jié)構(gòu)化的語言、結(jié)構(gòu)化語言);面向?qū)ο蟮恼Z言1.3 C語言的發(fā)展及其特點(diǎn)C語言是一種用途廣泛、功能強(qiáng)大、使用靈活的過程性編程語言,既可用于編寫應(yīng)用軟件,
2、又能用于編寫系統(tǒng)軟 件。因此C語言問世以后得到迅速推廣。C語言主要特點(diǎn):語言簡潔、緊湊,使用方便、靈活。 (只有37個關(guān)鍵字、9種控制語句;程序書寫形式自由,源程序短)運(yùn)算符豐富。(34種運(yùn)算符;把括號、賦值、強(qiáng)制類型轉(zhuǎn)換等都作為運(yùn)算符處理;表達(dá)式類型多樣化)數(shù)據(jù)類型豐富。(包括:整型、浮點(diǎn)型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型;C99又?jǐn)U充了復(fù)數(shù)浮點(diǎn)類型、超長整型、布爾類型;指針類型數(shù)據(jù),能用來實現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的運(yùn)算。)具有結(jié)構(gòu)化的控制語句。(女口 ifelse語句、while語句、dowhile語句、switch 語句、for語句用函數(shù)作為程序的模塊單位,便于實現(xiàn)程序
3、的模塊化;C語言是完全模塊化和結(jié)構(gòu)化的語言)語法限制不太嚴(yán)格,程序設(shè)計自由度大。(對數(shù)組下標(biāo)越界不做檢查;對變量的類型使用比較靈活,例如,整型量與字符型數(shù)據(jù)可以通用;C語言允許程序編寫者有較大的自由度,因此放寬了語法檢查)允許直接訪問物理地址,能進(jìn)行位操作,可以直接對硬件進(jìn)行操作。(C語言具有高級語言的功能和低級語言的許多功能,可用來編寫系統(tǒng)軟件;這種雙重性,使它既是成功的系統(tǒng)描述語言,又是通用的程序設(shè)計語言)用C語言編寫的程序可移植性好。(C的編譯系統(tǒng)簡潔,很容易移植到新系統(tǒng);在新系統(tǒng)上運(yùn)行時,可直接編譯“標(biāo)準(zhǔn)鏈接庫”中的大部分功能,不需要修改源代碼;幾乎所有計算機(jī)系統(tǒng)都可以使用C語言)生成
4、目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。1.4.1 最簡單的C語言程序舉例C語言允許用兩種注釋方式:單行注釋,可單獨(dú)占一行,可出現(xiàn)在一行中其他內(nèi)容的右側(cè)。/*/ :塊式注釋,可包含多行。1.4.2 C語言程序的結(jié)構(gòu)C語言程序的結(jié)構(gòu)特點(diǎn):1、一個程序由一個或多個源程序文件組成(小程序往往只包括一個源程序文件.一個源程序文件中可以包括三個部分:預(yù)處理指令、全局聲明、函數(shù)定義。)2、函數(shù)是C程序的主要組成部分(一個 C程序是由一個或多個函數(shù)組成的;必須包含一個main函數(shù)(只能有一個);每個函數(shù)都用來實現(xiàn)一個或幾個特定功能; 被調(diào)用的函數(shù)可以是庫函數(shù), 也可以是自己編制設(shè)計的函數(shù)。)3、一個函數(shù)包括兩個部分
5、(函數(shù)首部、函數(shù)體(聲明部分、執(zhí)行部分)4、程序總是從 main 函數(shù)開始執(zhí)行5、C程序?qū)τ嬎銠C(jī)的操作由C語句完成(C程序書寫格式是比較自由的:一行內(nèi)可以寫幾個語句;一個語句可以分寫在多行上。)6、數(shù)據(jù)聲明和語句最后必須有分號7、C語言本身不提供輸入輸出語句8、程序應(yīng)當(dāng)包含注釋, 增加可讀性1.6程序設(shè)計的任務(wù)1.問題分析 2.設(shè)計算法 3.編寫程序4.對源程序進(jìn)行編輯、編譯和連接5.運(yùn)行程序,分析結(jié) 6.編寫程序文檔第二章算法一一程序的靈魂一個程序主要包括以下兩方面的信息:(1)對數(shù)據(jù)的描述。 在程序中要指定用到哪些數(shù)據(jù)以及這些數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,這就是數(shù)據(jù)結(jié)構(gòu)。(2)對操作的描述。
6、即要求計算機(jī)進(jìn)行操作的步驟,也就是算法。數(shù)據(jù)是操作的對象,操作的目的是對數(shù)據(jù)進(jìn)行加工處理,以得到期望的結(jié)果。著名計算機(jī)科學(xué)家沃思(Nikiklaus Wirth)提出一個公式: 算法+數(shù)據(jù)Z勾=程序一個程序除了算法和數(shù)據(jù)結(jié)構(gòu)這主要要素外,還應(yīng)當(dāng)采用結(jié)構(gòu)化程序設(shè)計方法進(jìn)行程序設(shè)計,并且用某一種計算 機(jī)語日表不。算法、數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計方法和語言工具是一個程序設(shè)計人員應(yīng)具備的知識。2.1什么是算法廣義地說,為解決一個問題而采取的方法和步驟,就稱為“算法”。計算機(jī)算法可分為兩大類別:數(shù)值運(yùn)算算法(目的是求數(shù)值解);非數(shù)值運(yùn)算算法(包括面十分廣泛,常見的是用于事務(wù)管理領(lǐng)域)1.1.1 的特性一個有效算
7、法應(yīng)該具有以下特點(diǎn):(1)有窮性。一個算法應(yīng)包含有限的操作步驟,而不能是無限的。(2)確定性。算法中的每一個步驟都應(yīng)當(dāng)是確定的,而不應(yīng)當(dāng)是含糊的、模棱兩可的。(3)有零個或多個輸入。所謂輸入是指在執(zhí)行算法時需要從外界取得必要的信息。(4)有一個或多個輸出。算法的目的是為了求解,“解” 就是輸出。沒有輸出的算法是沒有意義的。(5)有效性。算法中的每一個步驟都應(yīng)當(dāng)能有效地執(zhí)行,并得到確定的結(jié)果。流程圖是表示算法的較好的工具。1111工2 3 499 1002.4.3 三種基本結(jié)構(gòu)和改進(jìn)的流程圖三種基本結(jié)構(gòu):(1)順序結(jié)構(gòu) (2)選擇結(jié)構(gòu)(3)循環(huán)結(jié)構(gòu) 當(dāng)型循環(huán)結(jié)構(gòu) 直到型循環(huán)結(jié)構(gòu)2.4.5 用偽代
8、碼表示算法偽代碼是用介于自然語言和計算機(jī)語言之間的文字和符號來描述算法。用偽代碼寫算法并無固定的、嚴(yán)格的語法 規(guī)則,可以用英文,也可以中英文混用。2.4.6 用計算機(jī)語言表不算法要完成一項工作,包括 設(shè)計算法和實現(xiàn)算法兩個部分。設(shè)計算法的目的是為了實現(xiàn)算法。例2.19將例2.17表示的算法(求多項式的值)用C語言表示。#include <stdio.h> int main() int sign=1;double deno = 2.0,sum = 1.0, term;while (deno <= 100) sign = -sign;term = sign/deno;5c ( f
9、 32 )9 ''sum = sum+term;deno = deno+1;printf ("%fn",sum);return%; 9( f 32)2.5結(jié)構(gòu)化程序設(shè)計方法采取以下方法保證得到結(jié)構(gòu)化的程序:(1)自頂向下;(2)逐步細(xì)化;(3)模塊化設(shè)計;(4)結(jié)構(gòu)化編碼。第三章最簡單的C程序設(shè)計3.1順序程序設(shè)計舉例例3.1有人用溫度計測量出用華氏法表示的溫度(如F,今要求把它轉(zhuǎn)換為以攝氏法表示的溫度(如C)。解題思路:找到二者間的轉(zhuǎn)換公式f代表華氏溫度,c代表攝氏溫度輸入f的值算法:輸出£的值(N-S 圖)#include <stdio.
10、h>int main ()float f,c;f=64.0;c=(5.0/9)*(f-32);printf("f=%fnc=%fn",f,c);定義f和c為單精度浮點(diǎn)型變量指定f的值計算c的值輸出f和c的值return 0;例3.2計算存款利息。有1000元,想存一年。有三種方法可選:(1)活期,年利率為r1 (2)一年期定期,年利率為r2 (3)存兩次半年定期,年利率為r3 ,請分別計算出一年后按三種方法所得到的本息和。解題思路:確定計算本息和的公式。從數(shù)學(xué)知識可知:若存款額為算法:p1=p0(1+r1); 一年期定期存款,一年后本息和為:年后本息和為:p3=p0
11、(1+r3/2 ) (1+r3/2 )入ptTriqa的值計算pl po(l>rl)計甘 pN p«(l i r2)±152=網(wǎng)1* )(1+ )希山pl中之事3p0 ,則:活期存款一年后本息和為:p2=p0(1+r2);兩次半年定期存款,-#include <stdio.h>int main ()float p0=1000, r1=0.0036,r2=0.0225,r3=0.0198, p1, p2, p3;pl = p0 * (1 +r1);p2 = p0 * (1 +r2);p3 = p0 * (1 +r3/2) * (1+ r3/2);printf
12、( " %fn%fn%fn ” ,p1, p2, p3);return 0; 3.2.1常量與變量1 .常量:在程序運(yùn)行過程中,其值不能被改變的量。 整型常量:如1000 , 12345, 0,-345;實型常量:十進(jìn)制小數(shù)形式:如0.34-56.790.0,指數(shù)形式:如12.34e3 (代表12.34103);字符常量:如?,轉(zhuǎn)義字符:如'n 字符串常量:如“boy";符號常量:#define PI3.14162 .變量:在程序運(yùn)行期間,變量的值是可以改變的。變量必須 先定義,后使用,定義變量時指定該變量的 名字和 類型。變量名 和變量值是兩個不同的概念,變量名實
13、際上是以一個名字代表的一個存儲地址。從變量中取值,實際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)。3 .常變量:const int a=3;4 .標(biāo)識符:一個對象的名字。C語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線3種字符組成,且 第一個字符必須為字母或下劃線合法的標(biāo)識符:如 sum , average, _total, Class, day, BASIC, li_ling不合法的標(biāo)識符:M.D.John , ¥ 123, 3 33 , 3D64 , a>b5 .2.2數(shù)據(jù)類型所謂類型,就是對數(shù)據(jù)分配存儲單元的安排,包括存儲單元的長度 (占多少字節(jié))以及數(shù)據(jù)的存儲形式
14、。不同的類 型分配不同的長度和存儲形式。C語言允許使用的數(shù)據(jù)類型:整型類型:基本整型(int型):占2個或4個字節(jié)短整型(short int) : VC+6.0 中占2個字節(jié)長整型(long int) : VC+6.0 中占4個字節(jié)"基本類型雙長整型(long long int) : C99新增的字符型 布爾型浮點(diǎn)類型(單精度浮點(diǎn)型、雙精度浮點(diǎn)型、復(fù)數(shù)浮點(diǎn)型)I枚舉類型 空類型 派生類型(指針類型、數(shù)組類型、結(jié)構(gòu)體類型、共用體類型、函數(shù)類型)3.2.3整型數(shù)據(jù)整型變量的符號屬性:整型變量的值的范圍包括負(fù)數(shù)到正數(shù);可以將變量定義為“無符號”類型; 擴(kuò)充的整形類型:有符號基本整型sign
15、ed int;無符號基本整型unsigned int;有符號短整型signed short int;整理文檔無符號短整型unsigned short int;有符號長整型signed long int;無符號長整型unsigned long int有符號雙長整型signed long long int;無符號雙長整型unsigned long long int3.2.3 字符數(shù)據(jù)類型字符是按其代碼(整數(shù))形式存儲的,C99 把字符型數(shù)據(jù)作為整數(shù)類型的一種。1 .字符與字符代碼:大多數(shù)系統(tǒng)采用ASCII 字符集字母: A Z , a z數(shù)字:09專門符號:29 個: ! ”# &( )
16、*等空格符:空格、水平制表符、換行等不能顯示的字符:空(null) 字符(以0 表示)、警告(以 a 表示)、退格(以b 表示)、回車(以r 表示)等字符 1 和整數(shù) 1 是不同的概念:字符 1 只是代表一個形狀為1 的符號,在需要時按原樣輸出,在內(nèi)存中以 ASCII 碼形式存儲,占1個字節(jié) 0 0 1 1 0 0 0 1;整數(shù) 1 是以整數(shù)存儲方式(二進(jìn)制補(bǔ)碼方式)存儲的,占2 個或 4 個字節(jié) 0 0 0 0 0 0 0 0 |0 0 0 0 0 0 0 12 . 字符變量: 用類型符char 定義字符變量3.2.5 浮點(diǎn)型數(shù)據(jù)浮點(diǎn)型數(shù)據(jù)是用來表示具有小數(shù)點(diǎn)的實數(shù)。float 型(單精度浮
17、點(diǎn)型):編譯系統(tǒng)為float 型變量分配4 個字節(jié);數(shù)值以規(guī)范化的二進(jìn)制數(shù)指數(shù)形式存放。double 型 (雙精度浮點(diǎn)型):編譯系統(tǒng)為double 型變量分配8 個字節(jié);15 位有效數(shù)字long double( 長雙精度) 型3.2.6 怎樣確定常量的類型字符常量:由單撇號括起來的單個字符或轉(zhuǎn)義字符。整型常量:不帶小數(shù)點(diǎn)的數(shù)值。系統(tǒng)根據(jù)數(shù)值的大小確定int 型還是 long 型等。浮點(diǎn)型常量:凡以小數(shù)形式或指數(shù)形式出現(xiàn)的實數(shù)。C 編譯系統(tǒng)把浮點(diǎn)型常量都按雙精度處理;分配8 個字節(jié)3.2.7 運(yùn)算符和表達(dá)式3.2.8 、算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級與結(jié)合性:用算術(shù)運(yùn)算符和括號將運(yùn)算對象(也稱操作數(shù)
18、)連接起來的、符合C語法規(guī)則的式子,稱為C算術(shù)表達(dá)式運(yùn)算對象包括常量、變量、函數(shù)等C語言規(guī)定了運(yùn)算符的優(yōu)先級和結(jié)合性4、不同類型數(shù)據(jù)間的混合運(yùn)算:( 1 ) + 、 - 、 *、 / 運(yùn)算的兩個數(shù)中有一個數(shù)為float 或 double 型,結(jié)果是double 型。系統(tǒng)將float 型數(shù)據(jù)都先轉(zhuǎn)換為 double 型,然后進(jìn)行運(yùn)算( 2 )如果int 型與 float 或 double 型數(shù)據(jù)進(jìn)行運(yùn)算,先把int 型和 float 型數(shù)據(jù)轉(zhuǎn)換為double 型,然后進(jìn)行運(yùn)算,結(jié)果是double 型( 3 )字符型數(shù)據(jù)與整型數(shù)據(jù)進(jìn)行運(yùn)算,就是把字符的ASCII 代碼與整型數(shù)據(jù)進(jìn)行運(yùn)算例 3.3
19、給定一個大寫字母,要求用小寫字母輸出。#include <stdio.h> int main ( )char c1,c2;c1= A ;c2=c1+32;printf("%cn",c2);printf( ” %dn ” ,c2);return 0; 5 、強(qiáng)制類型轉(zhuǎn)換運(yùn)算符強(qiáng)制類型轉(zhuǎn)換運(yùn)算符的一般形式為:(類型名)(表達(dá)式)(double)a(將a轉(zhuǎn)換成 double 類型)(int) (x+y) (將 x+y 的值轉(zhuǎn)換成int 型)(float)(5%3) (將 5%3 的值轉(zhuǎn)換成float 型)有兩種類型轉(zhuǎn)換:系統(tǒng)自動進(jìn)行的類型轉(zhuǎn)換;強(qiáng)制類型轉(zhuǎn)換3.3.1
20、C 語句的作用與分類C語句分為以下5類:(1)控制語句:if、switch 、for、while、do while、continue 、break、return 、goto 等(2) 函數(shù)調(diào)用語句(3) 表達(dá)式語句(4)空語句(5)復(fù)合語句在 C 程序中,最常用的語句是:賦值語句;輸入輸出語句。其中最基本的是賦值語句。例 3.4 給出三角形的三邊長,求三角形面積。#include <stdio.h>#include <math.h> int main ( ) double a,b,c,s,area;a=3.67;b=5.43;c=6.21;s=(a+b+c)/2;are
21、a=sqrt(s*(s-a)*(s-b)*(s-c);printf("a=%ftb=%ft%fn",a,b,c);printf("area=%fn",area); return 0;3.4.1 數(shù)據(jù)的輸入輸出舉例例3.5求ax2 + bx + c = 0 方程的根。a、b、c由鍵盤輸入,設(shè) b2 -4ac > 0#include <stdio.h>#include <math.h> int main ( )double a,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&
22、;a,&b,&c);disc=b*b-4*a*c;p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf("x1=%7.2fnx2=%7.2fn",x1,x2);return 0;3.4.2 有關(guān)數(shù)據(jù)輸入輸出的概念幾乎每一個C 程序都包含輸入輸出,輸入輸出是程序中最基本的操作之一。(1) 所謂輸入輸出是以計算機(jī)主機(jī)為主體而言的:從計算機(jī)向輸出設(shè)備(如顯示器、打印機(jī)等)輸出數(shù)據(jù)稱為輸出從輸入設(shè)備(如鍵盤、磁盤、光盤、掃描儀等)向計算機(jī)輸入數(shù)據(jù)稱為輸入(2) C語言本身不提供輸入輸出語句,輸入和輸出操作是由
23、C標(biāo)準(zhǔn)函數(shù)庫中的函數(shù)來實現(xiàn)的。printf和scanf不是C語言的關(guān)鍵字,而只是庫函數(shù)的名字(3)在使用輸入輸出函數(shù)時,要在程序文件的開頭用預(yù)編譯指令#include <stdio.h>或#所加3" stdio.h "3.4.3 用 printf 函數(shù)輸出數(shù)據(jù)在 C 程序中用來實現(xiàn)輸出和輸入的,主要是printf 函數(shù)和 scanf 函數(shù)。這兩個函數(shù)是格式輸入輸出函數(shù),用這兩個函數(shù)時,必須指定格式。1 . printf 函數(shù)的一般格式,printf (格式控制,輸出表列)例如:printf( ” i=%d,c=%cn” ,i,c);2 .常用格式字符:d格式符:
24、用來輸出一個有符號的十進(jìn)制整數(shù)。可以在格式聲明中指定輸出數(shù)據(jù)的域?qū)抪rintf( ” %5d%5dn ” ,12,-345) ; %d 輸出 int 型數(shù)據(jù);%ld 輸出 long 型數(shù)據(jù)。c 格式符。用來輸出一個字符,char ch= ' a' printf( " %c" ,ch);或 printf( " %5c ” ,ch)s格式符。用來輸出一個字符串,printf (“ s"," CHINA ”);f 格式符。用來輸出實數(shù),以小數(shù)形式輸出。不指定數(shù)據(jù)寬度和小數(shù)位數(shù),用 f;指定數(shù)據(jù)寬度和小數(shù)位數(shù)。用 m.nf ;輸出的數(shù)據(jù)
25、向左對齊,用 -m.nfe格式符。指定以指數(shù)形式輸出實數(shù)。e, VC+給出小數(shù)位數(shù)為6位,指數(shù)部分占5歹U,小數(shù)點(diǎn)前必須有而且只有1 位非零數(shù)字。printf( ” %e” ,123.456) ;輸出:1.234560e+002 。 %m.ne , printf( ” %13.2e ” ,123.456); 輸出:1.23e+002(前面有 4 個空格 )3.4.4 用 scanf 函數(shù)輸入數(shù)據(jù)1. scanf 函數(shù)的一般形式:scanf (格式控制,地址表列)2. scanf 函數(shù)中的格式聲明:與 printf 函數(shù)中的格式聲明相似;以開始,以一個格式字符結(jié)束,中間可以插入附加的字符,sca
26、nf("a=%f,b=%f,c=%f",&a,&b,&c);3. 使用 scanf 函數(shù)時應(yīng)注意的問題3.4.5 字符數(shù)據(jù)的輸入輸出1. 用 putchar 函數(shù)輸出一個字符,從計算機(jī)向顯示器輸出一個字符,putchar 函數(shù)的一般形式為:putchar(c)例 3.8 先后輸出BOY 三個字符。#include <stdio.h>int main ( ) char a='B',b='O',c='Y'putchar(a);putchar(b);putchar(c);putchar ('
27、;n');return 0;2. 用 getchar 函數(shù)輸入一個字符,向計算機(jī)輸入一個字符,getchar 函數(shù)的一般形式為:getchar( )例 3.9 從鍵盤輸入BOY 三個字符,然后把它們輸出到屏幕。#include <stdio.h> int main ( ) char a,b,c;a=getchar(); b=getchar(); c=getchar();putchar(a); putchar(b); putchar(c);putchar('n');return 0;第四章 選擇結(jié)構(gòu)程序設(shè)計4.1 選擇結(jié)構(gòu)和條件判斷C 語言有兩種選擇語句:(1
28、)if 語句,實現(xiàn)兩個分支的選擇結(jié)構(gòu);(2)switch 語句,實現(xiàn)多分支的選擇結(jié)構(gòu)例 4.1 在例 3.5 的基礎(chǔ)上對程序進(jìn)行改進(jìn)。題目要求是求ax2 + bx + c = 0 方程的根。由鍵盤輸入a,b,c。假設(shè)a,b,c的值任意,并不保證b2 - 4ac > 0。需要在程序中進(jìn)行判別,如果b2 - 4ac> 0 ,就計算并輸出方程的兩個實根,否則就輸出“方程無實根”的信息。#include <stdio.h>#include <math.h>int main ( )double a,b,c,disc,x1,x2,p,q;scanf("%lf%
29、lf%lf",&a,&b,&c);disc=b*b-4*a*c;if (disc<0)printf( “ has not real rootsn ” );else p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf( “ real roots:nx1=%7.2fnx2=%7.2fn” ,x1,x2);return 0;4.2.1 用 if 語句處理選擇結(jié)構(gòu)舉例 4.2 輸入兩個實數(shù),按代數(shù)值由小到大的順序輸出這兩個數(shù)。#include <stdio.h>int main() float
30、 a,b,t;scanf("%f,%f",&a,&b);if(a>b) t=a;a=b;b=t;printf("%5.2f,%5.2fn",a,b);return 0;例4.3輸入3個數(shù)a , b , c,要求按由小到大的順序輸出。#include <stdio.h>int main() float a,b,c,t;scanf("%f,%f,%f",&a,&b,&c); if(a>b) t=a; a=b; b=t; if(a>c)t=a;a=c;c=t;if(b&g
31、t;c)t=b;b=c;c=t;printf("%5.2f,%5.2f,%5.2fn",a,b,c);return 0;整理文檔4.2.2 if語句的一般形式if (表達(dá)式)語句1else 語句 2 最常用的3種if語句形式:1. if (表達(dá)式)語句1(沒有else子句)2. if (表達(dá)式)語句1else 語句2(有else子句)3. if (表達(dá)式1 ) 語句1else if (表達(dá)式2)else if (表達(dá)式3)else if (表達(dá)式m)else 語句 m+1語句2語句3語句m(在else部分又嵌套了多層的if語句)說明:(1)整個if語句可寫在多行上,也可寫在
32、一行上,但都是一個整體,屬于同一個語句;(2) “語句1”“語句 m”是if中的內(nèi)嵌語句,內(nèi)嵌語句也可以是一個if語句;(3) “語句1”“語句 m”可以是簡單的語句,也可以是復(fù)合語句。4.3.1 關(guān)系運(yùn)算符及其優(yōu)先次序關(guān)系運(yùn)算符:用來對兩個數(shù)值進(jìn)行比較的比較運(yùn)算符C語言提供6種關(guān)系運(yùn)算符:V(小于) <=(小于或等于)大于)>=大于或等于)【優(yōu)先級相同(高)】=(等于)!=(不等于)【優(yōu)先級相同(低)關(guān)系、算術(shù)、賦值運(yùn)算符的優(yōu)先級:算數(shù)運(yùn)算符> 關(guān)系運(yùn)算符 > 賦值運(yùn)算符4.3.2 關(guān)系表達(dá)式關(guān)系表達(dá)式的值是一個邏輯值,即“真”關(guān)系表達(dá)式:用關(guān)系運(yùn)算符將兩個數(shù)值或數(shù)值
33、表達(dá)式連接起來的式子;或“假”;在C的邏輯運(yùn)算中,以“ 1 ”代表“真”1.1.1 邏輯運(yùn)算符及其優(yōu)先次序3種邏輯運(yùn)算符:&& (邏輯與)| (邏輯或)?。ㄟ壿嫹牵?amp;&和|是雙目(元)運(yùn)算符!是一目(元)運(yùn)算符邏輯表達(dá)式(用邏輯運(yùn)算符將關(guān)系表達(dá)式或其他邏輯量連接起來的式子)邏輯運(yùn)算的真值表ab! a!ba && ba|b-I-真假假真真真假假真假真假真1真假假真假假真真假假邏輯運(yùn)算符的優(yōu)先次序:! 一 && - |與其他運(yùn)算符的優(yōu)先次序:賦值運(yùn)算符< &&和| < 關(guān)系運(yùn)算符 算數(shù)運(yùn)算符 <!1.
34、1.2 邏輯表達(dá)式邏輯表達(dá)式的值應(yīng)該是邏輯量“真”或“假”編譯系統(tǒng)在表示邏輯運(yùn)算結(jié)果時,以數(shù)值 1代表“真”,以0代表“假”但在判斷一個量是否為“真”時,以0代表“假”,以非0代表“真”注意:將一個非零的數(shù)值認(rèn)作為“真”修改后的邏輯運(yùn)算真值表ab! a!ba && ba|bHKoHKo0011HKo00101假1001假011001.1.3 邏輯型變量這是C99所增加的一種數(shù)據(jù)類型,可以將關(guān)系運(yùn)算和邏輯運(yùn)算的結(jié)果存到一個邏輯型變量中,以便于分析和運(yùn) 算4.5 條件運(yùn)算符和條件表達(dá)式有一種if語句,當(dāng)被判別的表達(dá)式的值為“真”或“假” 時,都執(zhí)行一個賦值語句且向同一個變量賦值如:
35、if (a>b)max=a;elsemax=b;條件運(yùn)算符的執(zhí)行順序:求解表達(dá)式1;若為非0 (真)則求解表達(dá)式 2,此時表達(dá)式2的值就作為整個條件表達(dá)式的值;若表達(dá)式1的值為0 (假),則求解表達(dá)式3,表達(dá)式3的值就是整個條件表達(dá)式的值條件運(yùn)算符優(yōu)先于賦值運(yùn)算符;條件運(yùn)算符的結(jié)合方向為“自右至左”。例4.4輸入一個字符,判別它是否大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。#include <stdio.h>int main() char ch; scanf("%c",&ch); ch=(ch>='
36、;A' && ch<='Z ' )?(ch+32):ch; printf("%cn",ch);return 0; 4.6 選擇結(jié)構(gòu)的嵌套在if語句中又包含一個或多個if語句稱為if語句的嵌套。一般形式:if( )else總是與它上面最 if ()if()語句1else 語句2近的未配對的if配對 if ()語句1if ()語句1 內(nèi)嵌ifelse內(nèi)嵌 if if()語句3else語句2限定了內(nèi)嵌if范圍else 語句4-1(x < 0 )例4.5有,函數(shù):y = w0(x = 0 )編一程序,輸入一個 x值,要求輸出相應(yīng)的
37、 y值。、1(x > 0 )解題思路:方法1 (1)先后用3個獨(dú)立的if語句處理:輸入 xscanf("%d",&x);若 x < 0, 則 y =-1if(x<0)y = -1 ;若 x = 0,則 y = 0if(x=0) y = 0 ;若 x > 0, 則 y = 1if(x>0)y = 1 ;輸出 x 和 yprintf("x=%d,y=%dn",x,y);方法2 (2)用一個嵌套的if語句處理:輸入 xscanf("%d",&x);若 x < 0,貝U y = -1if(x
38、<0)y=-1 ;否則else若 x = 0, 則 y = 0if(x=0) y=0 ;否則 y = 1else y=1 ;輸出 x 和 yprintf("x=%d,y=%dn",x,y);4.7用switch語句實現(xiàn)多分支選擇結(jié)構(gòu)例 4.6、例 4.7switch語句的作用是根據(jù)表達(dá)式的值,使流程跳轉(zhuǎn)到不同的語句.switch語句的一般形式4.8選擇結(jié)構(gòu)程序綜合舉例例4.8寫一程序,判斷某一年是否閏年。#include <stdio.h>int main() int year,leap;printf("enter year:"); s
39、canf("%d",&year);if (year%4=0)if(year%100=0)if(year%400=0) leap=1;else leap=0;else leap=1;else leap=0;if (leap) printf("%d is ",year);else printf("%d is not ",year);printf("a leap year.n");return 0;例4.9求ax2 + bx + c = 0方程的解。#include <stdio.h>#include
40、 <math.h>int main()double a,b,c,disc,x1,x2,realpart,imagpart;scanf("%lf,%lf,%lf",&a,&b,&c);printf("The equation ");if(fabs(a)<=1e-6)printf("is not a quadraticn");elsedisc=b*b-4*a*c;if(fabs(disc)<=1e-6)printf("has two equal roots:%8.4fn"
41、,-b/(2*a);elseif(disc>1e-6)x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);printf("has distinct real roots:%8/fand %8.4fn",x1,x2);else realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf(" has complex roots:n");printf("%8.4f+%8.4fin”,realpart,imagpart);標(biāo)準(zhǔn)如下:s < 250沒有折扣
42、250<s < 5002 %折扣500<s < 10005 %折扣1000<s < 20008 %折扣2000<s < 300010 %折扣3000& s15 %折扣p printf(“freight=%10.2fn,f);printf("%8.4f-%8.4fin",realpart,imagpart);return 0;例4.10運(yùn)輸公司對用戶計算運(yùn)輸費(fèi)用。路程 (s km )越遠(yuǎn),每噸千米運(yùn)費(fèi)越低。#include <stdio.h> int main()int c,s;float p,w,d,f;p
43、rintf("please enter price,weight,discount:");scanf("%f,%f,%d",&p,&w,&s);if(s>=3000)c=12;elsec=s/250;f = p * w * s * (1 - d / 100);return 0; 第五章循環(huán)結(jié)構(gòu)程序設(shè)計三種基本結(jié)構(gòu),它們大多數(shù)的應(yīng)用程序都會包含循環(huán)結(jié)構(gòu)。循環(huán)結(jié)構(gòu)和順序結(jié)構(gòu)、選擇結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計的 是各種復(fù)雜程序的基本構(gòu)造單元。5.2用while語句實現(xiàn)循環(huán) while 語句的一般形式如下:while ( 表達(dá)式) 語句 循
44、環(huán)體I“真”時執(zhí)行循環(huán)體語句“假”時不執(zhí)行while循環(huán)的特點(diǎn)是:先判斷條件表達(dá)式,后執(zhí)行循環(huán)體語句。例 5.1 求 1+2+3+ +100 ,即100#include <stdio.h> nn 1int main()int i=1,sum=0;while (i<=100) sum=sum+i;i+;printf("sum=%dn",sum);return 0;5.3用dowhile語句實現(xiàn)循環(huán)do語句while (表達(dá)式);do-while 語句的特點(diǎn):先無條件地執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。一般形式為:例 5.2 用 do - while 語句
45、求:1+2+3+ +100#include <stdio.h> int main() int i=1,sum=0;dosum=sum+i;i+;while(i<=100);printf("sum=%dn",sum);return 0;當(dāng)while后的表達(dá)式的第一次的值為“真”時,兩種循環(huán)得到的結(jié)果相同;否則不相同。例5.3 while 和do-while 循環(huán)的比較。int i,sum=0;printf( “i=?” );scanf( "d",&i);while(i<=10)sum=sum+i;i+;printf( &qu
46、ot;sum=%dn",sum);5.4 用for語句實現(xiàn)循環(huán)int i,sum=0;printf( “i=?” );scanf( "d",&i);dosum=sum+i;i+;while(i<=10);printf( " sum=%dn",sum);for語句不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,還可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況。整理文檔for語句的執(zhí)行過程:(1)先求解表達(dá)式1(2)求解表達(dá)式2,若其值為真,執(zhí)行循環(huán)體,然后執(zhí)行下面第(3)步。若為假,則結(jié)束循環(huán),轉(zhuǎn)到第(5)步(3)求解表達(dá)式3(4)轉(zhuǎn)回上面步
47、驟(2)繼續(xù)執(zhí)行(5)循環(huán)結(jié)束,執(zhí)行for語句下面的一個語句5.5 循環(huán)的嵌套一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。3種循環(huán)(while循環(huán)、dowhile循環(huán)和for循環(huán))可以互相嵌套。5.7 用break語句提前終止循環(huán)break語句可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語句例5.4在全系1000學(xué)生中,征集慈善募捐,當(dāng)總數(shù)達(dá)到10萬元時就結(jié)束,統(tǒng)計此時捐款的人數(shù),以及平均每人捐款的數(shù)目。#include <stdio.h> #define SUM 100000 int main()5.7.
48、1 float amount,aver,total; int i;for (i=1,total=0;i<=1000;i+) printf("please enter amount:");scanf("%f",&amount);total= total+amount;if (total>=SUM) break;aver=total / i ; printf( "num=%dnaver=%10.2fn ” ,i,aver);5.7.2 用 continue 語句提前結(jié)束本次循環(huán)有時不希望終止整個循環(huán)的操作,而只希望提前結(jié)束本次循
49、環(huán),而接著執(zhí)行下次循環(huán)。這時可以用continue 語句。例5.5要求出100200之間的不能被3整除的數(shù)。for(n=100;n<=200;n+) if (n%3=0)continue;printf("%d ",n);5.7.3 break 語句和 continue 語句的區(qū)別continue 語句只結(jié)束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行break 語句結(jié)束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立例 5.6 輸出以下4*5 的矩陣。123452468 10369 121548 1216 20#include <stdio.h>int main() i
50、nt i,j,n=0;for (i=1;i<=4;i+)控制輸出 4 行for (j=1;j<=5;j+,n+)控制每行中輸出5 個數(shù)據(jù) if (n%5=0) printf (“ n ” );printf ("%dt",i*j);printf("n");整理文檔10 -6為止(該項1。從第3個數(shù)return 0;5.8 循環(huán)程序舉例例5.7用 /4 = 1-1/3+1/5-1/7+''''''公式求的近似值,直到發(fā)現(xiàn)某一項的絕對值小于不累方t加)。#include <stdio.h>
51、#include <math.h>int main() int sign=1; double pi=0,n=1,term=1;while(fabs(term)>=1e-6) pi=pi+term;n=n+2;sign=-sign;term=sign/n;pi=pi*4;printf("pi=%10.8fn",pi);return 0;例5.8求費(fèi)波那西(Fibonacci)數(shù)列白前40個數(shù)。這個數(shù)列有如下特點(diǎn):第 1、2兩個數(shù)為1、 開始,該數(shù)是其前面兩個數(shù)之和。即 :F"< Fi =1(n=1 )F2 =1(n=2 )Fn =Fn-1 +
52、 Fn-2(n>3)整理文檔這是一個有趣的古典數(shù)學(xué)問題:有一對兔子,從出生后第3 個月起每個月都生一對兔子。小兔子長到第3 個月后每個月又生一對兔子。假設(shè)所有兔子都不死,問每個月的兔子總數(shù)為多少?#include <stdio.h>int main() int f1=1,f2=1,f3; int i;printf("%12dn%12dn",f1,f2);for(i=1; i<=38; i+) f3=f1+f2;printf("%12dn",f3);f1=f2;f2=f3;return 0;#include <stdio.h&
53、gt;int main() int f1=1,f2=1; int i;for(i=1; i<=20; i+) printf("%12d %12d ",f1,f2)if(i%2=0) printf("n");f1=f1+f2;f2=f2+f1;return 0;例 5.9 輸入一個大于3 的整數(shù) n ,判定它是否素數(shù)(prime ,又稱質(zhì)數(shù))。#include <stdio.h>int main() int n,i;printf( “ n=?");scanf("%d",&n);for (i=2;i&l
54、t;=n-1;i+)if(n%i=0) break;if(i<n) printf("%d is notn",n);else printf("%d isn",n);例5.10求100200間的全部素數(shù)for(n=101;n<=200;n=n+2) k=sqrt(n);for (i=2;i<=k;i+)if (n%i=0) break;if (i>=k+1) printf("%d ",n);m=m+1;if(m%10=0) printf( “ n ” );例 5.11 譯密碼。為使電文保密,往往按一定規(guī)律將其轉(zhuǎn)換成
55、密碼,收報人再按約定的規(guī)律將其譯回原文。解題思路:問題的關(guān)鍵有兩個:c 的值;若 c 的值改變?yōu)锳 的 ASCII(1) 決定哪些字符不需要改變,哪些字符需要改變,如果需要改變,應(yīng)改為哪個字符處理的方法是:輸入一個字符給字符變量c,先判定它是否字母(包括大小寫),若不是字母,不改變是字母,則還要檢查它是否W 到Z 的范圍內(nèi)(包括大小寫字母)。如不在此范圍內(nèi),則使變量其后第4個字母。如果在W至Z'的范圍內(nèi),則應(yīng)將它轉(zhuǎn)換為AD(或ad)之一的字母。(2) 怎樣使 c 改變?yōu)樗付ǖ淖帜??辦法是改變它的ASCII 值例如字符變量c 的原值是大寫字母A , 想使 c 的值改變?yōu)镋 , 只需執(zhí)行
56、“ c=c+4 ” 即可, 因為值為 65 ,而 E 的 ASCII 值為 69,二者相差4char c;c=getchar();while(c!= n ) if(c>= a&& c<= z ) | (c>= A&&c<= Z ) if(c>='W' && c<='Z' | c>='w' && c<='z')c=c-22;else c=c+4;printf("%c",c);c=getchar();ch
57、ar c;while(c=getchar()!= 'n ') if(c>= 'A' && c<='Z')|(c>='a' && c<='z')c=c+4;if(c>= 'Z' && c<='Z' +4 | c> 'z')c=c-26;printf("%c",c);第六章利用數(shù)組處理批量數(shù)據(jù)數(shù)組是一組 有序數(shù)據(jù)的集合。數(shù)組中各數(shù)據(jù)的排列是有一定規(guī)律的,下標(biāo)代表數(shù)據(jù)在數(shù)組中的序號。用一個 數(shù)組 名和下標(biāo)惟一確定數(shù)組中的元素。數(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高效團(tuán)隊合作策略研討會策劃案
- 9《從軍行》教學(xué)設(shè)計-2023-2024學(xué)年五年級下冊語文統(tǒng)編版
- 2024-2025學(xué)年新教材高中生物 第一章 走近細(xì)胞 第1節(jié) 細(xì)胞是生命活動的基本單位(1)教學(xué)實錄 新人教版必修1
- 三農(nóng)信息服務(wù)平臺實施方案
- 延續(xù)性護(hù)理干預(yù)在肺癌化療患者中的應(yīng)用效果觀察
- 8 同學(xué)相伴 教學(xué)設(shè)計-2024-2025學(xué)年道德與法治三年級上冊統(tǒng)編版
- 三農(nóng)集體經(jīng)濟(jì)發(fā)展策略研究
- DB3709-T 023-2023 公建民營養(yǎng)老機(jī)構(gòu)績效評價規(guī)范
- 2023七年級數(shù)學(xué)下冊 第一章 整式的乘除6 完全平方公式第1課時 完全平方公式的認(rèn)識教學(xué)實錄 (新版)北師大版
- 4《梅花魂》教學(xué)設(shè)計-2023-2024學(xué)年五年級下冊語文統(tǒng)編版
- 水利網(wǎng)絡(luò)與信息安全體系建設(shè)基本技術(shù)要求
- 大健康馬術(shù)俱樂部項目運(yùn)營方案
- 藥品2023年江蘇職教高考文化綜合理論試卷
- 小學(xué)數(shù)學(xué)“小組合作學(xué)習(xí)”
- 服裝立體裁剪課件
- 基于單片機(jī)的智能感應(yīng)監(jiān)控系統(tǒng)的設(shè)計
- 學(xué)校勞動教育安全應(yīng)急預(yù)案
- 醫(yī)院安全風(fēng)險分級管控清單
- 應(yīng)急救援協(xié)會成立籌備申請書
- 快速康復(fù)外科理念eras與圍手術(shù)期護(hù)理課件
- 最全實驗室安全專項培訓(xùn)
評論
0/150
提交評論