版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C語言編程入門教程,C語言程序設計 Copyer:Vigiking,C語言編程入門教程,第一章 計算機語言與C語言概述,1.1 計算機語言概念 計算機語言定義 計算機能夠識別和接受的語言。 要使計算機按自己的意圖工作,必須使用計算機所能接受、理解和執(zhí)行的指令指揮計算機工作。,C語言編程入門教程,計算機語言的種類 機器語言 低級語言 匯編語言 (面向計算機) BASIC 入門語言 F77 科學計算 高級語言 Foxpro 數據庫管理 (面向問題 ) C 多用途,計算機語言,C語言編程入門教程,機器語言 最早問世,用二進制代碼構成指令。 如: 100000 (+) 110000 (-) 用機器語言
2、編程的缺點: 繁瑣、不直觀、不易調試。 如計算y=2x2+3x-1需要七八條指令。 移植性差。 依賴于計算機。,C語言編程入門教程,匯編語言 用符號構成指令,如:MOV、ADD 用匯編語言編程: 相對直觀,但仍繁瑣,仍是面向計算機的語言。 匯編語言是計算機間接接受的語言,C語言編程入門教程,高級語言 與低級語言相比,有根本性的區(qū)別: 是面向問題的語言。 高級語言的一條指令(語句): y=2*x*x+3*x-1; 對應于:y=2x2+3x-1 y=sin(x); 對應于:y=sinx 用高級語言編程: 直觀、易懂、移植性好(不依賴于具體計算機),C語言編程入門教程,上機運行高級語言程序需經過編譯
3、: 編譯 執(zhí)行 要上機完成一個計算問題,主要的任務就是用高級語言編寫出相應的源程序。即至少要學會一種計算機語言。,高級語言源程序,機器指令 目的程序,結果,編譯程序,C語言編程入門教程,1.2 C語言的特點 集高級語言和低級語言的優(yōu)點于一身: 能實現低級語言的大部分功能(如直接訪問內存物理地址、進行位操作等)。 圖形功能強。 運算符和數據結構豐富。 語法限制不太嚴格,程序設計自由度大。 生成目標代碼質量高,程序執(zhí)行效率高。,C語言編程入門教程,1.3 簡單的C程序介紹 例1: main() 主函數說明 程序框架 printf(“abcdef”); 函數體 語句 程序的功能是輸出字符串:abcd
4、ef,C語言編程入門教程,例2:求兩數之和。 main() int a,b,c; a a=100; b=50; b c=a+b; c printf(“n c=%d”,c); 程序運行結果:c=150,C語言編程入門教程,例3:求兩數中的最大值。 函數類型 函數名 形參 main() int max (int x,int y) int a,b,c; int z; scanf(“%d,%d”, a x b y c z (兩個函數組成),3,5,3,5,5,5,C語言編程入門教程,總結上例可知: (1) C程序由函數構成。 (2) 函數由兩部分組成: 函數說明部分:函數名、函數類型、形參名、形參類型
5、。 函數體:實現函數的具體操作;由語句構成。 (3) 程序總是從main函數開始執(zhí)行。 (4) 書寫格式自由。 (5)語句必須有分號。 :,C語言編程入門教程,第二章 算法 2.1 算法的概念 要利用計算機處理問題,光學習語言的語法規(guī)則還不夠,最重要的是要學會針對各類型的問題,擬定出有效的解題方法和步驟。解題方法和步驟就是算法。,C語言編程入門教程,算法: 為了解決一個問題而采取的有限步驟。 計算機算法: 如何使計算機一步一步地工作的具體過程。,C語言編程入門教程,利用計算機處理問題的步驟: 1)設計好算法算法設計; 2)用計算機語言實現算法程序設計。 算法必須是“有效”的。 算法設計還要充分
6、考慮算法的好壞。 衡量算法好壞的主要標準: 程序簡練。 執(zhí)行速度快。 占空間少。,C語言編程入門教程,例:考慮 的算法。 算法:直接表達。 直接用語句 s=1+2+3+4+5+6+7+8+9+10,當項數較多時該算法不適用,s=i,1,10,C語言編程入門教程,算法:迭代法(累加求和法) s=1+2+3+4+5+6+7+8+9+10 算法步驟: s i 使s=0 + 使i=1 累加器 記數器 s+is i+1i 若i10轉,否則轉 輸出s,0,1,1,2,3,3,6,4,10,5,該算法通用,是好算法,C語言編程入門教程,2.2 算法的表示 算法需要有統(tǒng)一的表示方法 常用的表示方法有: 自然語
7、言 流程圖 結構化流程圖 N-S流程圖.,C語言編程入門教程,1、自然語言 對于計算 s=1+2+3+4+5+6+7+8+9+10 用自然語言表示為: 使s=0 (s為累加器) 使i=1 (i為計數器) s+is (累加求和公式) i+1i (計數器加1) 若i10轉,否則轉 輸出s的值 特點:通俗易懂、文字冗長、含義不大嚴格。,C語言編程入門教程,2、流程圖 用流程圖符號表示算法。 常用的流程圖符號 起止框 輸入輸出框 處理框 流程線 判斷框,C語言編程入門教程,對于計算 s=1+2+3+4+5+6+7+8+9+10 用流程圖表示為:,s+i s,i+1 i,S+i s,S+i s,i10,
8、輸出s,0 s,1 i,直觀形象,易于理解,次序清楚,Y,N,C語言編程入門教程,3、結構化流程圖 傳統(tǒng)的流程圖有一個弊端:對流程線沒有嚴格的限制,對于較復雜的算法可能會變成亂麻一般(BS型算法)。 為克服這一弊端,提出了由三個基本結構組成算法流程圖的思想: 結構化流程圖,C語言編程入門教程,三個基本結構: 順序結構 按固定順序(從上到下或從左到右)執(zhí)行的結構。,A,B,a,b,C語言編程入門教程,選擇結構 根據條件P選擇執(zhí)行哪一個分支。 成立 不成立,p,A,B,a,b,成立,不成立,C語言編程入門教程,例:計算 y= 1/x 當x0時 y= 10000 當x=0時 的算法流程圖圖: 選擇結
9、構,輸入x,X=0?,10000y,1/xy,輸出y,Y,N,C語言編程入門教程,循環(huán)結構 重復執(zhí)行某些操作的結構。 分為兩種: 當型循環(huán)和直到型循環(huán)。 當型循環(huán) 直到型循環(huán),P1,A,A,P2,a,a,b,b,Y,Y,N,N,C語言編程入門教程,可以看出,每個基本結構都只有一個入口和一個出口,因此,用三個基本結構構成的流程圖不會象亂麻一般,用三個基本結構構成的流程圖就成為結構化流程圖,用結構化流程圖描述的算法稱為結構化算法,相應的程序設計就稱為結構化程序設計。,C語言編程入門教程,觀察前例:,0 s,1 i,S+i s,i+1 i,i10,輸出s,順序結構,循環(huán)結構,y,n,C語言編程入門教
10、程,4 N-S流程圖 N-S流程圖的三個基本結構:,A,B,P,成立,不成立,A,B,A,B,當P1,直到P2,順序結構,選擇結構,循環(huán)結構,C語言編程入門教程,例:計算 y= 1/x 當x0時 y= 10000 當x=0時 的N-S流程圖:,輸入x,X=0?,是,否,10000y 1/xy,輸出y,C語言編程入門教程,例: 計算 s=1+2+3+4+5+6+7+8+9+10 的N-S流程圖: i10 直到i10 直到型 當型,0 s,1 i,輸出s,1 i,0 s,s+i s,i+1 i,s+i s,i+1 i,輸出s,C語言編程入門教程,第三章 數據類型、運算符 與 表達式 3.1 C 的
11、數據類型基本類型 (整型、實型、字符型、枚舉型)構造類型 (略)指針類型 (略) 空類型 各類型包含常量與變量,C語言編程入門教程,3.2 常量與變量 常量與符號常量 常量 在程序運行過程中其值保持不變的量。 符號常量 用來代表一個常量的標識符。 #define PI 3.1415926,C語言編程入門教程,例: #define PI 3.1415926 main() float r=2,c; c=2*PI*r; printf(“%f”,c); ,C語言編程入門教程,變量 其值可以改變的量。 變量的三要素: 變量名 每個變量有一個名字,作為識別該變量的標識符。 變量的值 每個變量有一個值,變量
12、的值是隨時可以改變的。,C語言編程入門教程,變量的存儲單元 每個變量占據一個內存單元,用于存放變量的值。 變量名 a 變量值 存儲單元,3,C語言編程入門教程,變量的命名規(guī)則: 由字母、數字和下劃線組成 以字母或下劃線開頭 a、x1、y_2、_b1、_1c 合法 1x、a+2、 不合法 變量必須先定義后使用。 程序中何時使用常量?何時使用變量?,C語言編程入門教程,3.3 整型數據 整型常量 即整常數,c的整常數有三種形式: 十進制整數 與數學中的整數一致,如:100,123,15等。 八進制整數 以0開頭的整數,如:010,07,020等。 十六進制整數 以0 x開頭的整數,如:0 x10,
13、0 xff,0 x2a等。,C語言編程入門教程,整型變量 用于存放整數的變量。 分4種類型: 基本型:int a 16位,可表示的數值范圍:-3276832767 短整型:short int b 16位,可表示的數值范圍:-3276832767 長整型:long int c 32位,數值范圍:-21474836482147483647,C語言編程入門教程,無符號型:加上 unsigned 只存放正數。 如:unsigned int x 變量x為無符號整數,16位全表示數碼, 數值范圍:065535 在程序設計中,如果要使用整型變量,必須首先選擇以上類型符來定義變量,然后才能使用;,C語言編程入
14、門教程,例: main() 定義 int a,b,c; a=100; b=50; 使用 c=a+b; printf(“%d”,c); 一般根據什么原則選擇變量的類型?,C語言編程入門教程,3.4 實型數據 實型常量 可使用兩種形式表示: 小數形式:如 1.23, 3.1415926 15.48 指數形式:如 1e-20 1.23e5,C語言編程入門教程,實型變量 用于存放實數的變量 分單精度和雙精度兩種: float a,b 定義a和b為單精度型變量 32位,7位有效數字,10-381038 double x,y 定義x和y為雙精度型變量 64位,15位有效數字,10-30810308,C語言
15、編程入門教程,例: main() float r,c; double r,c; r=5; c=2*3.1415926*r; printf(“%f”,c); ,C語言編程入門教程,3.5 字符型數據 字符常量 用單引號括起來的一個字符。 a,x,*,1等 除此外,以開頭的字符如n,t等 稱為轉義字符,祥見書表3.3,C語言編程入門教程,字符型變量 用于存放字符的變量。 char c1,c2 定義c1和c2為字符型變量 c1=a; c2=b; 字符賦值 字符型變量存放一個字符,占據一個字節(jié),C語言編程入門教程,字符型數據的存儲形式 存放ASCII碼 不是 而是 如字符a在內存中存放97,b 存放9
16、8。 與整數的存儲形式一致,它們之間可以通用 一個字符數據既可以作字符用,也可以作整數用(取其ASCII代碼)。 如:32+a相當于 32+97 若 int x; char c; 則 x=a; c=97; x=97; c=a; 都允許,a,97,C語言編程入門教程,字符串常量 用雙引號括起來的字符序列。 如:”abcde”,”china” ”a”也屬字符串。 注意”a”與a的區(qū)別。 對于: char c; c=”a”; 用法錯誤,C語言編程入門教程,字符串中每個字符各占一個字節(jié),并且在字符串結尾加上一個結束標記0 如:”china” 在內存中占6個字節(jié)。 c h i n a 0 C語言中專門的
17、字符串變量,可用字符數組存放(以后介紹)。,C語言編程入門教程,3.6 變量賦初值 在定義變量的同時給相應的變量賦初值。 如: int a=3; a float b=5.2; char c=a; int x=y=z=6; 效果: 在給變量分配內存單元的同時在相應的單 元中存放初值。,3,C語言編程入門教程,3.7 各數值型數據間的混合運算 整型、實型、字符型數據間可以進行混合運算,如: 10-a*1.5 運算時,參加運算的兩個數據如果類型不同,則首先將其類型轉換成一致再運算,轉換規(guī)則是: 將優(yōu)先級低的類型轉換到優(yōu)先級高的類型,C語言編程入門教程,數據類型的優(yōu)先級: 高 double float
18、 long unsignde 低 int char,C語言編程入門教程,3.8 算術運算符與算術表達式 基本的算術運算符 + - * / % 算術表達式 用算術運算符將運算對象連接起來的式子 用于表達數學公式的式子 如:2*x+y-1/a 表達式經過運算最終得到一個值: 算術表達式的值,C語言編程入門教程,運算符的優(yōu)先級與結合性 優(yōu)先級: 在對表達式求值時,如果存在多個運算符,則運算的先后次序按運算符的優(yōu)先級別從高到底進行。 運算符的優(yōu)先級關系為: 高:* / % 低:+ - 如:a-2*x 先算 * 2*(a+2) 有括號的情況?,C語言編程入門教程,結合性: 如果在一個運算對象兩邊的運算符
19、的優(yōu)先級相同,則按規(guī)定的“結合方向”處理。 如:a-b+c b與-結合是從左到右,稱“左結合性”。 b與+結合是從右到左,稱“右結合性”。 每個運算符都有相應的優(yōu)先級和結合性。 基本算術運算符都是左結合性。,C語言編程入門教程,計算表達式例: 2+A-1/2.0 1+3/2-1 構造表達式例 2x2+3x-1,a+b a-b,a+b a-b x+y x-y,a+b/a-b ?,(a+b)/(a-b),2*x*x+3*x-1 (*不能省),(a+b)/(a-b)/(x+y)/(x-y),(a+b)/(a-b)/(x+y)/(x-y),(a+b)/(a-b)/(x+y)*(x-y),C語言編程入門
20、教程,強制類型轉換 可以用強制類型轉換運算符將一個表達式的值轉換成所需類型: 如: (int)(x+y) (float)(7%3),C語言編程入門教程,應用舉例: int a=200,b=300,c; c=a*b/100; ? 可知,有自動轉換和強制轉換, 當自動轉換達不到目的時,可用強制轉換。,c=(long)a*b/100;,c=(long)(a*b)/100;,C語言編程入門教程,自增、自減運算符 自增運算符:+ 使變量值加1 自減運算符:- 使變量值減1 兩種用法: +i, -i 先加(減)后用 i+, i- 先用后加(減) 兩種用法對i效果一樣,但表達式的值不同。 例:假設i的原值為
21、5: j=+i; j=? j=i+; j=?,C語言編程入門教程,注意: +和-只能用于變量。 如:3+和(a+1)+ 不合法 +和-為右結合性。 (-i)+ -i+ -(i+) 若i的原值是5,則該表達式的值是多少?,C語言編程入門教程,例:分析執(zhí)行下列語句后的結果: a=5; a b c d b=a+; c=-a-b+; d=(a+)-(+b)+c-;,5,5,6,5,0,6,7,-2,6,-1,C語言編程入門教程,兩種特殊情況: k=(i+)+(i+)+(i+) i+j 是 i+(+j) 還是 (i+)+j ? i+雖然與i=i+1等效,但使用自增自減運算符的代碼優(yōu)化程度好,因而經常使用
22、;但用時需特別小心。,C語言編程入門教程,3.9 賦值運算符和賦值表達式 賦值運算符 “=”稱賦值運算符,其作用是將一個數據賦給一個變量。 如: a=5 不要理解為“等號”。 執(zhí)行賦值運算的結果,是將右邊的數據存入左邊變量所對應的內存單元中。,C語言編程入門教程,賦值規(guī)則 如果賦值運算符兩側的類型不一致,則在賦值時要進行類型轉換,轉換規(guī)則為: 實型整變量 舍去小數部分。 int a=5.5; a中為5。 整型實變量 數值不變,以浮點形式存儲。 字符型整變量 放在整形變量低8位。保持原值不變原則。 int a=A;,C語言編程入門教程,復合賦值運算符 在賦值運算符前加上其它運算符,可以構成復合賦
23、值運算符。 a+=3 a=a+3 b-=x+5 b=b-(x+5) x*=c-6 x=x*(c-6) y/=a*4 y=y/(a*4) k%=b-2 k=k%(b-2) 屬于高效率運算符。,C語言編程入門教程,賦值表達式 主要實現賦值運算的表達式。 一般形式: = 如: a=5 y=2*x+3 a=a+1 不是衡等 作用:將右邊表達式的值賦給左邊的變量。 賦值表達式的值取左邊變量的值。,C語言編程入門教程,賦值表達式右邊的可以是任何表達式,如: a=(b=5) 賦值表達式中包含賦值表達式 賦值運算符的優(yōu)先級低于所有算術運算符,且是右結合性。 a=(b=5) 與 a=b=5 等效。,C語言編程入
24、門教程,例:計算以下表達式的值: a=b=c=5 a=5+(c=6) a=(b=4)+(c=6) a=(b=4.5)+(c=6.5) (a、b、c為整型變量) a+=a-=a*a (設a的原值為3),C語言編程入門教程,賦值表達式是C語言中的一個重要成分,在賦值表達式后加一分號就成為常用的賦值語句。如 y=2*x+1; 賦值表達式作為表達式的一種,可以出現在任何表達式中,如: x+2-(b/3-(a=k-5)+b,C語言編程入門教程,3.10 逗號表達式 逗號也是一種運算符,用它對兩個表達式實現連接運算。 3+5,6+8 稱逗號表達式。 逗號表達式的一般形式: 表達式1,表達式2 取表達式2的
25、值作為整個逗號表達式的值。 如: a=3*5,a*4 逗號表達式的值為:60,C語言編程入門教程,一個逗號表達式又可以與另一個表達式組成一個新的逗號表達式,如: (a=3*5,a*4),a+5 因此,逗號表達式的一般形式可以擴展為: 表達式1,表達式2,表達式3,, 表達式n 取表達式n的值作為整個逗號表達式的值。 逗號運算符的優(yōu)先級最低,且是左結合性。 逗號運算符只起到連接作用,沒有實際操作。,C語言編程入門教程,第四章 最簡單的C程序設計,C 程序最基本的成分是語句 目前我們已掌握的語句: 變量說明語句: int a,b,c; 表達式語句: x+y; 特別地: a=5; 賦值語句,C語言編
26、程入門教程,可以編寫簡單程序如: main() int x,y; x=5; y=2*x*x+3*x-1; 該程序語法上完整,但還缺少輸出。,C語言編程入門教程,數據的輸出 用輸出函數實現,其中的兩種輸出函數: 1.putchar 函數 (字符輸出函數) 用于輸出一個字符。 如: putchar (a); putchar (100); char c=b; putchar (c);,C語言編程入門教程,例:輸出單詞Boy的完整程序: #include “stdio.h” 注意該語句的作用 main() char a, b, c; a=B; b=o; c=y; putchar (a); putcha
27、r (b); putchar (c); ,C語言編程入門教程,2. printf函數(格式輸出函數) 任意類型、任意格式、任意個數。 例如: int a=100,b=56; printf(“a=%d,b=%d”,a,b); 普通字符 格式說明 格式控制 輸出表列 輸出結果:a=100,b=56 “%” 后的字符稱格式字符,不同格式字符對應不同的數據類型。,C語言編程入門教程,d格式符:按整數格式輸出 幾種用法: %d 不指定寬度,按實際寬度輸出 %md 按指定寬度輸出,m為寬度 %ld 用于輸出長整型數,C語言編程入門教程,例: int a=125,b=453; long c=65535; p
28、rintf(“a=%d,b=%5d,c=%ld”,a,b,c); 輸出結果: a=125,b= 453,c=65535,C語言編程入門教程,%ld也可以按指定寬度輸出: printf(“c=%8ld”,c); 輸出結果:c = 65535 注意:格式字符的類型要與對應的輸出對象的類型一致。,C語言編程入門教程,c格式符:用于輸出字符 char c=A; printf(“c=%c,%c”,c,B); 輸出結果:c=A,B 輸出對象既可以是字符變量、字符常量,還可以是整型表達式。,C語言編程入門教程,如: int a=100; char b=A; printf(“n%d,%c”,a,a); pri
29、ntf(“n%c,%d”,b,b); 輸出結果: 100,d A,65,C語言編程入門教程,s格式符:用于輸出字符串 %s 不指定寬度 %-ms 指定寬度,左靠齊 %ms 指定寬度,右靠齊 %m.ns 指定寬度m,只取左端n個字符, 右靠齊 %-m.ns 指定寬度m,只取左端n個字符, 左靠齊,C語言編程入門教程,例: printf(“1:%s”,”abcd”); printf(“2:%8s”,”abcd”); printf(“3:%-8s”,”abcd”); printf(“4:%8.3s”,”abcd”); printf(“5:%-8.3s”,”abcd”); 1:abcd2: abcd3
30、:abcd 4: abc5:abc,C語言編程入門教程,f格式符:按小數形式輸出實數 %f 由系統(tǒng)指定寬度(6位小數) %m.nf 指定寬度m,小數位數n,右靠齊 %-m.nf 指定寬度m,小數位數n,左靠齊 注意:寬度包括符號和小數點。,C語言編程入門教程,例: float a=3.141592654,b=14.326795, c=-125.2468; printf(“na=%f,b=%8.3f,c=%-10.2f”,a,b,c); 輸出結果: a=3.141592,b= 14.326,c=-125.24,C語言編程入門教程,完整前面的程序:,main() int x,y; x=5; y=2
31、*x*x+3*x-1; printf(“n y=%d”,y); ,C語言編程入門教程,程序設計例:,編寫程序計算如圖中的電流I. 假設 U=220,R1=30,R2=60,R3=45,U,I,R1,R2,R3,C語言編程入門教程,算法設計: I=U/R1+U/R2+U/R3 程序設計: main() ,I=U/R1+U/R2+U/R3;,int U=220,R1=30,R2=60,R3=45; float I;,printf(“n I=%f”,I);,C語言編程入門教程,正確的程序: main() int U=220,R1=30,R2=60,R3=45; float I; I=(float)U
32、/R1+(float)U/R2+(float)U/R3; printf(“n I=%f”,I); ,C語言編程入門教程,考慮通用: main() int U,R1,R2,R3; float I; 輸入 U,R1,R2,R3 I=(float)U/R1+(float)U/R2+(float)U/R3; printf(“n I=%f”,I); ,C語言編程入門教程,數據的輸入 getchar函數(字符輸入) #include “stdio.h” main() char c; c=getchar(); 等待鍵盤輸入 putchar(c); ,C語言編程入門教程,scanf 函數(格式輸入),與pri
33、ntf函數相反。 用于輸入若干任意類型的數據。 scanf(“%d%d%d”, 格式控制 地址列表,C語言編程入門教程,scanf(“%d%d%d”, 執(zhí)行此函數時,等待從鍵盤輸入三個整數給a,b,c 若從鍵盤輸入 3 5 8 則系統(tǒng)即從鍵盤緩沖區(qū)取出這三個數分別賦給a,b,c 注意與printf的區(qū)別,注意格式的匹配,C語言編程入門教程,如: scanf(“%3d%2d%4d”,C語言編程入門教程,在鍵盤輸入時,用分隔符把每個數據隔開,標準的分隔符是空格。 如:123 150 23 若想用逗號作分隔符,則: scanf(“%d,%d,%d”, 不要隨便使用普通字符,如使用: scanf(“a
34、=%d,b=%d c=%d”, float I; scanf(“%d%d%d%d”, ,C語言編程入門教程,求三角形面積,#include “math.h” main() float a,b,c,area,s; scanf ( “%f,%f,%f”, 使用數學函數,C語言編程入門教程,使用三角函數,#include “math.h” main() float x, y; scanf ( “%f”, ,C語言編程入門教程,第五章 選擇結構程序設計,對于如下的函數計算,算法上屬于一個選擇結構。 y= 用于實現選擇結構的主要是if語句。,1/x 當x0時,10000 當x=0時,C語言編程入門教程,
35、if語句的最常見形式為: if(關系表達式)語句1; else 語句2; 如: if(x!=0) y=1/x; else y=10000; 其中 x!=0 就是一個關系表達式 != 就是一個關系運算符,C語言編程入門教程,51 關系運算符和關系表達式 1、關系運算符 用于進行比較運算的運算符。共有六種: = = = != 優(yōu)先級與結合性: 前4種大于后兩種。 低于算術運算符而高于賦值運算符。 左結合性。,C語言編程入門教程,2、關系表達式 一般形式: 表達式關系運算符表達式 如:ab a+bb+c 經過關系運算后最終有一個值-關系表達式的值。 關系表達式的值只有 0(假)或1(真),C語言編程
36、入門教程,例:設 a=2, b=4, c=1 計算以下關系表達式的值: ab a+bb+c ab 可以是字符表達式 (x=2)(y=5) 可以是賦值表達式 (a(bc) 甚至可以是關系表達式 ab= =bc,C語言編程入門教程,例:假設 x=3, y=5, z=1, 計算以下關系表達式的值: x+zy xz=xz yxz (x=y-2)x+1,C語言編程入門教程,52 邏輯運算符和邏輯表達式 有時,只用一個簡單的關系表達式無法完整地表達一個條件,如: y= 其中的條件需要用邏輯表達式來表達: x!=0 else y=10000;,C語言編程入門教程, if(表達式1)語句1; else if(
37、表達式2)語句2; else if(表達式3)語句3; else 語句n; if(score=100) printf(“A”); else if(score=90) printf(“B”); else if(score=80) printf(“C”); else if(score=70) printf(“D”); else if(score=60) printf(“E”); else printf(“F”);,C語言編程入門教程,對于:,1/x 當x0時,10000 當x=0時,一般用: if(x!=0) y=1/x; else y=10000;,也可用: y=10000; if(x!=0)
38、y=1/x;,y=,? y=1/x; if(x=0)y=10000,C語言編程入門教程,例:(習題5.5):,x (x1),2x-1 (1x10),3x-11 (x10),y=,C語言編程入門教程,main() float x,y; scanf(“%f”, ,C語言編程入門教程,說明: 語句中的表達式可以是任意表達式: if(x) y=1/x; else y=10000; 一個if結構不可分割: if(x) y=1/x; z=10; else y=10000; 一個分支中包含多個語句時,要用 : if(a0) x=1; y=2; else x=10; y=20;,C語言編程入門教程,分支程序設
39、計舉例(基本技巧和算法) 例:從鍵盤輸入三個整數到變量a,b,c,輸出其中最大的數。 兩種典型算法: 枚舉法(將各種可能性枚舉出來)。 選擇法(先假設后判斷更新)。,C語言編程入門教程,選擇法 main() int a,b,c,max; scanf(“%d,%d,%d”, ,C語言編程入門教程,例:從鍵盤輸入三個整數到變量a,b,c,要求按從大到小的順序輸出。 兩種典型算法: 枚舉法(將各種可能的排列枚舉出來)。 換位法(將a,b,c中的數據換位)。,C語言編程入門教程,換位法 main() int a,b,c,t; scanf(“%d,%d,%d”, ,3,5,8,5,3,8,5,5,3,a
40、,b,c,C語言編程入門教程,2、if語句的嵌套 在if語句中,又包含一個或多個if語句: if(score=80) if(score=90) printf(“A”); else printf(“B”); else if(score=60) printf(“C”); else printf(“D”); 注意else與if的匹配,C語言編程入門教程,3、條件運算符 如果兩個分支的內容都是給同一個變量賦值,則可用簡單的條件運算符處理: if(ab) max=a; else max=b; 可用: max=ab ? a : b; 賦值運算符右邊為一條件表達式。 條件表達式的一般形式: 表達式1 ? 表
41、達式2 : 表達式3,C語言編程入門教程,條件表達式的執(zhí)行過程: ab ? a : b 優(yōu)先級:低于關系運算符,高于賦值運算符。 結合性:右結合性。,表達式1,條件表達式 取表達式3的值,條件表達式 取表達式2的值,非0,0,C語言編程入門教程,例:求a,b,c中的最大值: max= ab ? (ac?a:c) : (bc?b:c) ;,C語言編程入門教程,54 switch語句(多分支) 適用于根據一個表達式的值就可確定走哪個分支的情況。 switch(表達式) 常量表達式1: 語句1 常量表達式2: 語句2 常量表達式n: 語句n default: 語句n+1 ,C語言編程入門教程,例:成
42、績分檔: switch(score/10) case 10: printf(“A”); case 9: printf(“B”); case 8: printf(“C”); case 7: printf(“E”); case 6: printf(“F”); default : printf(“G”); 注:應使用break.,C語言編程入門教程,switch(score/10) case 10: printf(“A”); break; case 9: printf(“B”); break; case 8: printf(“C”); break; case 7: printf(“E”); brea
43、k; case 6: printf(“F”); break; default : printf(“G”); ,C語言編程入門教程,55 程序舉例 (習題5.10) 有4個圓塔,圓心分別為:(2,2),(-2,2),(-2,-2),(2,-2),圓半徑為1。這4個塔的高度為10m,塔以外無建筑物。今輸入任一點的坐標,求該點的建筑高度(塔外的高度為0)。,C語言編程入門教程,算法設計: 條件“在某一圓內” : “在圓1內或在圓2內或在圓3內或在圓4內” 若設變量c1、c2、c3、c4分別代表是否在相應的圓內,則以上條件為: c1|c2|c3|c4,10 在某一圓內,0 在圓外,(x,y),h=,C
44、語言編程入門教程,c1=(x-2)2+(y-2)21 c2=(x+2)2+(y-2)21 c3=(x+2)2+(y+2)21 c4=(x-2)2+(y+2)21,C語言編程入門教程,main() int h,c1,c2,c3,c4; float x,y; scanf(“%f%f”, ,C語言編程入門教程,第六章 循環(huán)控制 61 概述 所謂循環(huán)控制,就是如何實現循環(huán)結構的控制問題。有4種方法: 用goto語句和if構成循環(huán)。 用while語句。 用do-while語句。 用for語句。,C語言編程入門教程,62 用goto語句和if語句構成循環(huán) 例: 對于計算 s=1+2+3+4+5+6+7+8
45、+9+10,0 s,1 i,s+i s,i+1 i,i10,輸出s,y,n,C語言編程入門教程,s=0; i=1; lable:s+=i; i+; if(i=10) goto lable; printf(“%d”,s) ;,語句標號,無條件轉向語句,goto 語句可以構造循環(huán),但不主張用,因為它容易破壞結構化程序設計。,goto 語句可以構造循環(huán), 但不主張用,因為它容易破 壞結構化程序設計。,C語言編程入門教程,63 while語句 while語句是專門用于實現循環(huán)控制的語 句之一。 其一般形式為: while (表達式) 語句 含義:當表達式的值為非0時,執(zhí)行循環(huán)體,否則執(zhí)行后續(xù)語句。,語
46、句關鍵,表達循環(huán)條件的表達式,循環(huán)體,語句關鍵字,C語言編程入門教程,執(zhí)行過程: while (表達式) 語句,表達式,循環(huán)體,0,非0,C語言編程入門教程,i10?,s=0 i=1,s=s+i i=i+1,例:用while語句實現前面算法: main() int i=1,s=0; while(i=10) s=s+i; i+; printf(“n %d”,s); ,注意與if語句的區(qū)別。 循環(huán)體中要有使循環(huán)條件趨于成立的條件,y,n,C語言編程入門教程,while(i=10) s=s+i; i+; 可簡寫為: while(i=10) s+=i+;,C語言編程入門教程,非0(真),0(假),表達
47、式,循環(huán)體,64 do-while語句 do-while語句主要用于實現直到型循環(huán)。 其一般形式為: do 循環(huán)體 while(表達式); 執(zhí)行過程:,C語言編程入門教程,真,s=0 i=1,i10?,s=s+i i=i+1,假,例:用do-while語句實現前面算法: main() int i=1,s=0; do s+=i+; while(i=10); printf(“n%d”,s); 注意與while語句的區(qū)別。,C語言編程入門教程,假,表達式2,求解表達式1,循環(huán)體,求解表達式3,真,65 for 語句 for語句是一種使用最為靈活, 并且是用得最多的循環(huán)控制語句, 其一般形式為: fo
48、r(表達式1;表達式2;表達式3) 循環(huán)體 大體含義: 對于()的情況執(zhí)行循環(huán)體內容。,C語言編程入門教程,例:用for語句實現前面的算法: s=0; for(i=1;i=10;i+) s+=i; 標準形式,表達式1,表達式2,表達式3,循環(huán)體,可以理解: 循環(huán)變量i從初值1開始到終值10,步長為1,重復執(zhí)行循環(huán)體。,C語言編程入門教程,for語句的常見變化: s=0; i=1; for(;i=10;i+)s+=i; s=0; for(i=1;i=10;)s+=i+; s=0;i=1; for(;i=10;)s+=i+;,省略表達式1,省略表達式3,省略表達式1和3,C語言編程入門教程,s=0
49、; i=1; for(;) s+=i+; if(i10) break; s=10;i=10; for(;-i;) s+=i;,省略表達式2,表達式2是任意表達式,C語言編程入門教程,s=0; for(i=1,j=10;ij;i+,j-) s+=i+j; 1 2 3 4 5 6 7 8 9 10 在程序設計中不要過分追求它的多變性,i,j,用逗號表達式,C語言編程入門教程,例:求n! n!=1*2*3(n-1)*n 參照累加求和 main() int i,n=5,s=1; for(i=1;i=n;i+)s*=i; printf(“n s=%d”,s); 注意s的初值。 注意當n較大時的情況。 求
50、和與連乘都是最常用的算法,要熟練掌握。,C語言編程入門教程,例:求自然數1-100中能被3整除的數之和。 main() int i,s=0; printf(“n %d”,s); 求能被3整除但不被7整除的數之和?,for(i=1;i=100;i+) s+=i;,for(i=1;i=100;i+) if(i%3=0)s+=i;,for(i=3;i=100;i+=3) s+=i;,for(i=3;i=100;i+=3) if (i%7)s+=i;,C語言編程入門教程,例:求任意100個數中的最大值。 main() int i,a,max; max=? for(i=1;imax) max=a; pr
51、intf(“n max=%d”,max); 循環(huán)體中沒有引用循環(huán)變量。i的作用? 求任意個數中的最大值?,for(i=1; ;i+),if(a=-9999)break;,max=-32768;,C語言編程入門教程,外重循環(huán),內重循環(huán),執(zhí)行200次,要掌握多重循環(huán)執(zhí)行的全過程,66 循環(huán)的嵌套 循環(huán)體內又包含另一個完整的循環(huán)結構(多重循環(huán))。 for(i=1;i=10;i+) for(j=1;j=20;j+) s+=i+j; ,C語言編程入門教程,以上多重循環(huán)結構可以簡寫為: for(i=1;i=10;i+) for(j=1;j=20;j+) s+=i+j;,C語言編程入門教程,例:找出行號乘以
52、列號等于100的座位。 main() int i,j; for(i=1;i=30;i+) for(j=1;j=20;j+) if(i*j=100) printf(“n%d,%d”,i,j); ,注意循環(huán)的關系,C語言編程入門教程,例:百錢買百雞問題。 給定100塊錢,要求正好買100只雞,已知公雞5元/只,母雞3元/只,小雞1元/3只,問公雞、母雞和小雞應各買多少只? 若考慮用方程組: x+y+z=100 5x+3y+z/3=100 是一多解問題。,C語言編程入門教程,用測試法求解的程序: main() int x,y,z; for(x=1;x=100;x+) for(y=1;y=100;y+
53、) for(z=1;z=100;z+) if(x+y+z=100 ,C語言編程入門教程,程序可進一步簡化為: main() int x,y,z; for(x=1;x=20;x+) for(y=1;y=33;y+) z=100-x-y; if(5*x+3*y+z/3.0=100) printf(“n%d,%d,%d”,x,y,z); ,用測試法求解問題的典型例子,C語言編程入門教程,測試法求解的程序設計有兩個要點: 通過循環(huán)列出所有可能的解。 對所有列出的可能的解進行條件測試。,C語言編程入門教程,例:判斷一個數m是否為素數。 main() int i,m; scanf(“%d”, ,用測試法求
54、解,C語言編程入門教程,例:(習題6.6) 打印出所有的“水仙花數”,所謂“水仙花數”是指一個三位數,其各位數字的立方和等于該數本身。如:153是一水仙花數,因為 153=13+53+33。,C語言編程入門教程,main() int i,j,k,n; for(n=100;n=999;n+) i=? j=? k=? if(i*i*i+j*j*j+k*k*k=n) printf(“n%d”,n); 通過循環(huán)列出n的所有可能的范圍,i=n/100;,k=n%10;,j=n/10%10;,C語言編程入門教程,main() int i,j,k,n; for(i=1;i=9;i+) for(j=0;j=9
55、;j+) for(k=0;k=9;k+) n=i*100+j*10+k; if(i*i*i+j*j*j+k*k*k=n) printf(“n%d”,n); 通過循環(huán)列出i,j,k的所有可能的范圍,C語言編程入門教程,例:(習題6.4),求S=,i! =1!+2!+3!+4!+19!+20!,20,i=1,C語言編程入門教程,main() int i,j; float t,s=0; for(i=1;i=20;i+) s+=?; printf(“n s=%f”,s); 用兩重循環(huán)實現,s+=t;,t=1; for(j=1;j=i;j+) t*=j;,C語言編程入門教程,用遞推法: 遞推公式:ti=ti-1.i,求S=,i! =1!+2!+3!+4!+19!+20!,20,i=1,=1+(i-1)!.i = 1+ti-1.i,20,i=2,20,i=2,C語言編程入門教程,main() int i,j; float t=1,s=t; for(i=2;i=20;i+) t=t*i; s+=t; printf(“n s=%f”,s); ,C語言編程入門教程,例: 遞推公式:,s=,i!,1,1,20,=, + + + + + ,1!
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 茶園互換合同
- 財務合同管理崗位風險
- 貝雷片租賃合同范本
- 保險合同十句話
- 山西省2024八年級物理上冊第六章質量與密度專題訓練12.理解質量和密度課件新版新人教版
- 深圳市中薈高級中學2024-2025學年高三上學期期中考試數學試卷
- 《船用鋼質斜梯》
- 貴州省貴陽市觀觀山湖區(qū)美的中學2024-2025學年九年級上學期11月期中考試化學試題
- 無鹵低煙阻燃電纜料相關項目投資計劃書
- 石英玻璃管(棒)相關行業(yè)投資規(guī)劃報告
- 一例肺癌術后并發(fā)肺栓塞患者的個案護理
- 2022版新課標初中數學《數與代數、圖形與幾何》解讀
- 心房顫動診斷和治療中國指南(2023) 解讀
- 中式面點技藝智慧樹知到期末考試答案2024年
- 期中模擬試卷(試題)2023-2024學年外研版(一起)英語五年級上冊
- 幼兒園主題探究活動
- 唐宋名家詞智慧樹知到期末考試答案2024年
- 2024年4月貴州省高三年級適應性考試歷史試卷
- 臨“震”不慌+守護生命安全-防震減災安全教育原創(chuàng)
- 數字媒體藝術設計大學生職業(yè)生涯規(guī)劃書
- 2023年紹興市嵊州市事業(yè)單位招聘考試真題及答案
評論
0/150
提交評論