第2章用C語言編寫程序第6章數據類型和表達式_第1頁
第2章用C語言編寫程序第6章數據類型和表達式_第2頁
第2章用C語言編寫程序第6章數據類型和表達式_第3頁
第2章用C語言編寫程序第6章數據類型和表達式_第4頁
已閱讀5頁,還剩72頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第第2 2章章 用用C C語言編寫程序語言編寫程序第第6 6章章 數據類型和表達式數據類型和表達式6.1 6.1 基本數據類型基本數據類型C語言中的數據類型語言中的數據類型: 數據結構數據結構數據在計算機中的存儲形式數據在計算機中的存儲形式 )( 空類型指針類型共用體類型結構體類型數組類型構造類型枚舉類型雙精度型單精度型浮點型實型字符型整型基本類型數據類型變量和數據類型變量和數據類型三種基本數據類型:三種基本數據類型:整型、實型和字符型整型、實型和字符型u 在程序運行的過程中,其值可以改變的量稱為變量在程序運行的過程中,其值可以改變的量稱為變量u 變量必須變量必須 “先定義、后使用先定義、后使

2、用”u 變量定義的一般形式是:變量定義的一般形式是: 類型名類型名 變量名表變量名表例如例如: (參見教材(參見教材p19) int a, b, sum; /*定義定義a,b為整型變量為整型變量*/ float r, a; /*定義定義r,a為實型變量為實型變量*/ char c; /*定義定義c為字符變量為字符變量*/#include /*求面積求面積*/void main( ) float r,a; printf(“輸入圓半徑:輸入圓半徑:”); scanf(“%f”,&r); a=3.14*r*r; printf(“圓面積圓面積=%fn”,a);#include /*求兩個數之和求兩個數

3、之和*/void main( ) int a,b,sum; a = 123; b = 456; sum = a + b; printf( sum is %dn, sum ); 變量賦初值變量賦初值(P20P20)變量賦值的方式分為兩種:變量初始化變量賦值的方式分為兩種:變量初始化 1、先說明,再賦值。如:、先說明,再賦值。如: int a,b; a=10; b=20; 2、說明變量的同時賦值。這稱為變量的、說明變量的同時賦值。這稱為變量的初始化初始化 int a=10,b=10; float f=3.56; (等價于(等價于 float f; f=3.56;) int a=3,b=3,c=3;

4、 (對對a、b、c都進行初始化都進行初始化) int a,b,c=5; (只對變量只對變量C進行初始化進行初始化) int a=b=c=3; () char c=a;格式化輸出函數(格式化輸出函數(p21p21)printf函數函數(格式輸出函數格式輸出函數) 是系統提供的庫函數,在系統文件是系統提供的庫函數,在系統文件stdio.h中聲明中聲明 printf函數的一般格式如下,函數的一般格式如下,格式:格式:printf(printf(“格式控制字符串格式控制字符串”,輸出參數,輸出參數1,1, , ,輸出參數輸出參數n)n)功能:按指定格式向功能:按指定格式向顯示器顯示器輸出數據輸出數據l

5、格式控制串格式控制串 是用雙引號括起來的字符串,用于指定輸出格式。是用雙引號括起來的字符串,用于指定輸出格式。 格式格式說明總是由說明總是由“%”字符開始,如:整型用字符開始,如:整型用%d, 實型用實型用%f等。等。l輸出參數輸出參數 可以是變量或表達式,可以是變量或表達式, 要輸出的數據多個時以要輸出的數據多個時以“,”分隔分隔#includevoid main( ) int a,b,sum; a = 123; b = 456; sum = a + b; printf( sum is %dn, sum ); 格式化輸出函數(格式化輸出函數(p21p21)printf函數函數(格式輸出函數格

6、式輸出函數) 輸出參數必須和格式控制字符串中的格式控制說明的輸出參數必須和格式控制字符串中的格式控制說明的類型、個數以及位置一一對應(輸出多個參數時)類型、個數以及位置一一對應(輸出多個參數時) 普通字符:輸出時要原樣輸出普通字符:輸出時要原樣輸出#includevoid main( ) int a,b,sum; a = 123; b = 456; sum = a + b; printf( “a=%d,b=%d,sum=%dn, a,b,sum ); 格式化輸入函數(格式化輸入函數(p25p25)scanf函數函數(格式輸入函數格式輸入函數) 是系統提供的庫函數,在系統文件是系統提供的庫函數,

7、在系統文件stdio.h中聲明中聲明 scanf函數的一般格式如下:函數的一般格式如下:格式:格式:scanfscanf( (“格式控制字符串格式控制字符串”,輸入參數,輸入參數1,1, , ,輸入參數輸入參數n)n)功能:按指定格式從鍵盤讀入數據,存入地址表指定的功能:按指定格式從鍵盤讀入數據,存入地址表指定的存儲單元中存儲單元中, ,并按回車鍵結束并按回車鍵結束l格式控制串格式控制串 是用雙引號括起來的字符串,用于指定輸入格式。是用雙引號括起來的字符串,用于指定輸入格式。 格式格式說明也是由說明也是由“%”字符開始,如:整型用字符開始,如:整型用%d, 實型用實型用%f等。等。l輸入表列輸

8、入表列 輸入參數是變量地址,變量名前加地址符輸入參數是變量地址,變量名前加地址符&#includevoid main( ) float r,a; printf(“輸入圓半徑:輸入圓半徑:”); scanf(“%f”,&r); a=3.14*r*r; printf(“圓面積圓面積=%.2fn”,a);格式化輸入函數(格式化輸入函數(p25p25)scanf函數函數(格式輸入函數格式輸入函數) 輸入參數必須和格式控制字符串中的格式控制說明輸入參數必須和格式控制字符串中的格式控制說明的類型、個數以及位置一一對應(輸入多個參數時)的類型、個數以及位置一一對應(輸入多個參數時) 普通字符:在輸入時要原樣

9、輸入普通字符:在輸入時要原樣輸入#includevoid main( ) int a,b,sum; printf(“輸入輸入a,b:”); scanf(“%d,%d”,&a,&b); sum = a + b; printf( “a=%d,b=%d,sum=%dn, a,b,sum ); scanf(“%d,%d”,&a,&b); scanf(“%d%d”,&a,&b); scanf(“a=%d,b=%d”,&a,&b); 課程回顧課程回顧三種基本數據類型:三種基本數據類型:整型、實型和字符型整型、實型和字符型 定義形式定義形式: int a, b, sum; /*定義定義a,b為整型變量為整型

10、變量*/ float r, a; /*定義定義r,a為實型變量為實型變量*/ char c; /*定義定義c為字符變量為字符變量*/ printf函數函數(格式輸出函數格式輸出函數) printf(“sum=%d”,sum); scanf函數函數(格式輸入函數格式輸入函數) scanf(“%f”,&r);#includevoid main( ) int a,b,sum; printf(“輸入輸入a,b:”); scanf(“%d,%d”,&a,&b); sum = a + b; printf( “a=%d,b=%d,sum=%dn, a,b,sum ); 常用數學庫函數(常用數學庫函數(p25

11、) C語言處理系統提供了許多事先編輯好的函數,語言處理系統提供了許多事先編輯好的函數,供用戶在編程時調用,這些函數稱為庫函數。調用供用戶在編程時調用,這些函數稱為庫函數。調用庫函數一定要用庫函數一定要用include命令將相應的頭文件包含命令將相應的頭文件包含到源程序中到源程序中 輸入輸入/ /輸出函數:輸出函數:#includestdio.h#include 數學處理函數:數學處理函數: #includemath.h#include u常用的數學庫函數:常用的數學庫函數:平方根函數:平方根函數:sqrt(x)絕對值函數:絕對值函數:fabs(x)冪函數:冪函數: pow(x,n)指數函數:指

12、數函數: exp(x)對數函數:對數函數: log(x)#includevoid main( ) int a,b,sum; a = 123; b = 456; sum = a + b; printf( sum is %dn, sum ); 6.2 6.2 常量和變量常量和變量 (P96)(P96)6.2.1 常量和符號常量常量和符號常量常量常量 在程序運行的過程中,其值不能改變的量稱為常量在程序運行的過程中,其值不能改變的量稱為常量 常量又分為不同的類型:常量又分為不同的類型:如:如:45,6,-34,-6為為整型整型常量;常量; 5.6,7.9,-7.78,2.0為為實型實型常量;常量; a

13、,b,d為為字符型字符型常量;常量;6.2 6.2 常量和變量常量和變量 (P96)(P96)6.2.1 常量和符號常量常量和符號常量符號常量符號常量 用一個標識符代表一個常量用一個標識符代表一個常量 如:如:#define PI 3.1415926標識符:標識符:用來標識變量名、常數名、數組名、函用來標識變量名、常數名、數組名、函數名、文件名等的有效字符序列。數名、文件名等的有效字符序列。例例6-1:計算球的表面積和體積:計算球的表面積和體積(符號常量的使用)(符號常量的使用)# include # define PI 3.1416void main( ) double r,s,v; pri

14、ntf(“input r: ”); scanf(“%lf”,&r); s=4.0*PI*r*r; v=4.0/3.0*PI*r*r*r; printf(“s=%f,v=%f,s,v);符號常量不能改變,符號常量不能改變,即不能被重新賦值。即不能被重新賦值。符號常量名習慣上用符號常量名習慣上用大寫大寫 ,變量名用小寫,變量名用小寫,以示區別。以示區別。在程序中不要太多使用常量,應盡量使用變量和符號常量在程序中不要太多使用常量,應盡量使用變量和符號常量5.1.2 5.1.2 基本基本數據類型數據類型整型整型有符號整型有符號整型 無符號整型無符號整型 數據長度數據長度int unsigned int

15、 16或或32位位short int unsigned short int 16位位long int unsigned long int 32位位實型(浮點型)實型(浮點型)單精度浮點型單精度浮點型 float 32位位雙精度浮點型雙精度浮點型 double 64位位字符型字符型char 8位位基本基本數據類型數據類型整型整型整型數據類型:整型數據類型:int擴展的整數類型:擴展的整數類型:有符號整型有符號整型(正數或負數正數或負數) 無符號整型無符號整型int unsigned intshort int unsigned short intlong int unsigned long int

16、類型名類型名 數據長度數據長度 取值范圍取值范圍int 32位位 -2147483648 2147483647 -231 231-1short 16位位 -32768 32767 -215 215-1long 32位位 -2147483648 2147483647 -231 231-1unsigned 32位位 0 4294967295 0 232-1unsigned short 16位位 0 65535 0 216-1unsigned long 32位位 0 4294967295 0 232-16.3 6.3 數據的輸入和輸出數據的輸入和輸出 (P100)(P100)6.3.1 整型數據的輸

17、入和輸出整型數據的輸入和輸出 調用調用scanf()函數函數和和printf()函數函數輸入和輸出時,應根據數輸入和輸出時,應根據數據類型使用相應的格式控制說明,并且可以加據類型使用相應的格式控制說明,并且可以加寬度限定詞寬度限定詞%md或者或者%-md,指定整型數據的輸出寬度。,指定整型數據的輸出寬度。 %d,按照整數的實際長度輸出。前面講過!,按照整數的實際長度輸出。前面講過! %md,m為指定的輸出字段的寬度。如果數據的位數小于為指定的輸出字段的寬度。如果數據的位數小于m,則左端補以空格(右對齊);如果大于,則左端補以空格(右對齊);如果大于m,則按照實際位數,則按照實際位數輸出。輸出。

18、(此格式用來對齊輸出的數據)(此格式用來對齊輸出的數據) 若若a=123; d=12345; 則:則: printf(“%4d,%4d”,a,b); 輸出:輸出: 123,12345 ( 代表空格)代表空格) %ld,輸出長整型數據。,輸出長整型數據。如:如:long a=135790; printf(“%ld”,a);xt1-2基本基本數據類型數據類型實型實型實型(浮點型)數據實型(浮點型)數據單精度浮點型單精度浮點型 float雙精度浮點型雙精度浮點型 double 存儲存儲 數據精度數據精度 取值范圍取值范圍 (有效數字有效數字)float 4字節字節 七七/八位八位 (10-38 10

19、38)double 8字節字節 十六位十六位 (10308 10308 )6.3 6.3 數據的輸入和輸出數據的輸入和輸出 (P100)(P100)6.3.2 實型數據的輸入和輸出實型數據的輸入和輸出 用來輸出實數,以小數形式輸出。有以下幾用來輸出實數,以小數形式輸出。有以下幾種用法種用法 %f,不指定字段寬度,由系統自動指定,不指定字段寬度,由系統自動指定,使整數部使整數部分全部輸出,并輸出分全部輸出,并輸出6位小數。位小數。注意注意:并非全部數據都是:并非全部數據都是有效數字,單精度實數的有效位數一般為有效數字,單精度實數的有效位數一般為7位,雙位,雙 精度有精度有效位數為效位數為16位。

20、位。%m.nf,指定輸出數據共占,指定輸出數據共占m列,其中有列,其中有n位小數。如果位小數。如果數值長度小于數值長度小于m,則左補空格。,則左補空格。%-m.nf與與%m.nf基本相同,只是輸出的數值向左端靠,基本相同,只是輸出的數值向左端靠,右端補空格右端補空格輸出如下:輸出如下:123.456001*123.456001*123.46*123.46 *123.46例例4.8 輸出實數時指定小數位輸出實數時指定小數位#inclucevoid main() float f=123.456; printf(“%f *%10f *%10.2f*%.2f*%-10.2fn”,f,f,f,f,f);

21、xt1-1共共10位位,小數占小數占2位位,小數點占小數點占1位位實型數據輸出示例實型數據輸出示例# include int main(void) double d = 3.1415926; printf(%f, %en, d, d); printf(%5.3f, %5.2f, %.2fn, d, d, d); 一共一共5位,小數位,小數3位,小數點一位位,小數點一位lxt23-pingguo基本基本數據類型數據類型字符型字符型字符具有數值特征:字符具有數值特征: 字符型數據在內存中占用一個字節,用于存儲它的字符型數據在內存中占用一個字節,用于存儲它的ASCIIASCII碼。可以用字符常量或相

22、應的碼??梢杂米址A炕蛳鄳腁SCIIASCII碼表示字符碼表示字符 A A 65 65 (ASCII (ASCII碼碼) ) 0100 00010100 0001( (二進制二進制) ) 字符變量的定義形式如下:字符變量的定義形式如下: char c1,c2;char c1,c2;可以用下面的語句對可以用下面的語句對c1c1、c2c2賦值:賦值: c1=A; c1=A; /把字符常量把字符常量A A賦值給字符變量賦值給字符變量c1c1 c2=b; c2=b; 字符型變量的等價關系字符型變量的等價關系 char c;char c; c = A; c = A; 等價于等價于 c = 65;c

23、= 65;字符型常量字符型常量字符常量字符常量a A 9 + $ ASCII字符集(附錄字符集(附錄2)列出所有可用的字符(列出所有可用的字符(256個)個)每個字符:惟一的次序值(每個字符:惟一的次序值( ASCII 碼)碼)0-9 升序排列升序排列A-Za-z字符的數值特征字符的數值特征字符字符ASCII 碼碼對字符進行運算對字符進行運算 對字符的對字符的ASCII 碼進行運算碼進行運算例如:例如:A 的的 ASCII 碼碼 65則:則:A+1=66,對應字符,對應字符 B轉轉義義字字符符反斜杠后跟一個字符或數字反斜杠后跟一個字符或數字字符常量,代表一個字符字符常量,代表一個字符 n 10

24、1 x41 A %所有字符都可以用轉義字符表示所有字符都可以用轉義字符表示6.3.3 6.3.3 字符型數據輸入輸出字符型數據輸入輸出字符型數據的格式控制說明是字符型數據的格式控制說明是%c使用使用scanf() 和和 printf()函數,輸入輸出一個字符函數,輸入輸出一個字符char ch;scanf(%c, &ch);printf(%c, ch);使用使用getchar() 和和 putchar()函數,輸入輸出一個字符函數,輸入輸出一個字符char ch;ch = getchar( );putchar(ch); 例例 向字符變量賦以整數向字符變量賦以整數.#include void m

25、ain() char c1,c2; c1=97; c2=98; printf(%c %cn,c1,c2); printf(%d %dn,c1,c2);運行結果為:運行結果為:a b97 98 一個字符型數據既一個字符型數據既可以以字符形式輸可以以字符形式輸出,也可以以整數出,也可以以整數形式輸出形式輸出可以改為這兩句:可以改為這兩句:c1=a;c2=b; 例例 大小寫字母的轉換大小寫字母的轉換#include void main( ) char c1,c2; c1=a; c2=b; c1=c1-32; c2=c2-32; printf(“%c %cn”,c1,c2);運行結果為:運行結果為:A

26、 B小寫字母在小寫字母在ASCII碼表中排在大寫字碼表中排在大寫字母的后面,每個小母的后面,每個小寫字母比其相應的寫字母比其相應的大寫字母的大寫字母的ASCII碼大碼大32例例6-3(2) 6-3(2) 輸入輸出字符示例輸入輸出字符示例# include void main( ) char ch1, ch2, ch3; scanf(%c%c%c, &ch1, &ch2, &ch3); printf(%c%c%c%c%c, ch1, #, ch2, #, ch3);AbCA#b#CA bCA# #b例例6-3(1) 6-3(1) 輸入輸出字符示例輸入輸出字符示例# include void ma

27、in( ) char ch1, ch2; ch1=getchar(); ch2=getchar(); putchar(ch1); putchar(#); putchar(ch2);AbA#b例例6-4 6-4 輸出字符型數據輸出字符型數據# include void main( ) char ch = b; printf(%c, %dn, b, b); printf(%c, %dn, 98, 98); printf(%c, %dn, 97, b-1); printf(%c, %dn, ch - a + A, ch - a + A ); b的的ASCII碼碼98b, 98b, 98a, 97B,

28、 666.4.1 6.4.1 自動類型轉換(非賦值運算)自動類型轉換(非賦值運算)整型、整型、浮點浮點型型(單、雙精度單、雙精度)、字符型數據間可以混合運算、字符型數據間可以混合運算在運算時,不同類型的數據要先轉換成同一類型在運算時,不同類型的數據要先轉換成同一類型(系統自動完(系統自動完成)成),然后進行運算。轉換的規則如下圖所示:,然后進行運算。轉換的規則如下圖所示:根據數據類根據數據類型的優先級別來確定。型的優先級別來確定。高高 double float long unsigned 低低 int char,short運算時數據向最高級別轉換運算時數據向最高級別轉換設設 int i; fl

29、oat f; double d; long e; 則式子則式子 10+a+i*f-d/e 的結果為的結果為double型型5.4.2 5.4.2 強制類型轉換強制類型轉換強制類型轉換運算符強制類型轉換運算符類型轉換運算符類型轉換運算符: (類型名類型名)轉換形式轉換形式:(類型名類型名) 表達式表達式如:如:(double)a /* 將將a的值轉換成的值轉換成double類型類型 */ (int)(x+y) /* 將將x+y的值轉換成整型的值轉換成整型 */ (float)(5%3) /* 將將5%3的值轉換成的值轉換成float型型 */在強制類型轉換時,得到一個所需類型的中間變量,原來在強

30、制類型轉換時,得到一個所需類型的中間變量,原來變量的類型未發生變化。變量的類型未發生變化。 例如例如 (int)x 而不要寫成而不要寫成 int(x)例例 float a; int cfloat a; int c; a=3.34;a=3.34; c=(int)a+2; c=(int)a+2; 結果是結果是5 5總結:類型轉換有兩種:總結:類型轉換有兩種:1、自動類型轉換、自動類型轉換 2、強制類型轉換、強制類型轉換表達式:由運算符和運算對象(操作數)組成的有表達式:由運算符和運算對象(操作數)組成的有意義的運算式子,它的值和類型由參加運算的運意義的運算式子,它的值和類型由參加運算的運算符和運算

31、對象決定。算符和運算對象決定。運算符:具有運算功能的符號運算符:具有運算功能的符號運算對象:常量、變量和函數等表達式運算對象:常量、變量和函數等表達式算術表達式、賦值表達式、關系表達式、邏輯表達算術表達式、賦值表達式、關系表達式、邏輯表達式、條件表達式和逗號表達式等式、條件表達式和逗號表達式等 6.5 6.5 表達式表達式 6.5.1 6.5.1 算術表達式算術運算符算術表達式算術運算符單目單目 + - + -雙目雙目 + - * / %注意注意/ 整數除整數,得整數整數除整數,得整數1/4 = 0,10/3 = 3% 模模(求余求余): 針對整型數據針對整型數據5%6 = 5,9%4 = 1

32、,100%4 = 0+ 和和 u單目運算符,單目運算符, +10 和和 10u雙目運算符,雙目運算符, x+10 和和 y 10 雙目運算符兩側操作數的類型要相同,否則,自動類型雙目運算符兩側操作數的類型要相同,否則,自動類型轉換后,再運算。轉換后,再運算。自增運算符自增運算符+和自減運算符和自減運算符- -自增、自減運算符自增、自減運算符+ - + - (單目運算)(單目運算)作用:使變量值加作用:使變量值加1 1或減或減1 1。如:。如:+I +I 等價于等價于 i=i+1i=i+1兩種形式:兩種形式:u 前置前置 +i,-i (+i,-i (先先使使i i值值+1+1或或-1-1,再使用

33、再使用i i值)值)u 后置后置 i+,i- (i+,i- (先使用先使用i i值值, , 再再使使i i值值+1+1或或-1-1)例例 i=3; k=+i; i=3; k=+i; i=3; k=i+; i=3; k=i+; a=3; b=5; c=(+a) a=3; b=5; c=(+a)* *b; b; a=3; b=5; c=(a+) a=3; b=5; c=(a+)* *b; b; /i=4,k=/i=4,k=4 4 /i=4,k=/i=4,k=3 3 /a=4,c=2/a=4,c=20 0 /a=4,c=1/a=4,c=15 5注意:前置和后置的區別,注意:前置和后置的區別,i值有不

34、同嗎?值有不同嗎?/*使用循環方式求使用循環方式求1-100的和(累加)的和(累加)*/#includevoid main() int i,sum; sum=0; i=1; while(i=100) sum=sum+i; i+; printf(和為和為: %dn,sum); 改成下列形式行不?改成下列形式行不?+i;自增運算符自增運算符+和自減運算符和自減運算符- -int n;n+ +n n- -n (只適合變量運算)(只適合變量運算)使變量的值增使變量的值增1或減或減1+n n+ n = n + 1-n n- n = n - 1取變量的值作為表達式的值取變量的值作為表達式的值+n:n =

35、n + 1;??;取n值作為表達式值作為表達式 +n 的值的值n+:?。喝值作為表達式值作為表達式 n+ 的值;的值;n = n + 1算術運算符的優先級和結合性算術運算符的優先級和結合性單目單目 + - + -雙目雙目 * / %雙目雙目 + -高高低低從右向左從右向左-5 + 3%2 = (-5) + (3%2) = -43 * 5 % 3 = (3*5) % 3 = 0-i+ -(i+)6.5.2 6.5.2 賦值賦值表達式表達式1. 1. 賦值運算符賦值運算符賦值符號:賦值符號:= = 2. 2. 賦值表達式賦值表達式變量標識符變量標識符= =表達式表達式 x = 3*4;作用:將一個

36、數據(常量或表達式)賦給一個變量作用:將一個數據(常量或表達式)賦給一個變量賦值時將表達式的類型轉換成變量的類型再賦值。賦值時將表達式的類型轉換成變量的類型再賦值。 優先級較低,結合性從右向左優先級較低,結合性從右向左 x = y = 3例例 float a; int cfloat a; int c; a=3;a=3; c=a+2; c=a+2;例例 3=x-23=x-2* *y; y; ( ) a+b=3; a+b=3; ( )x = (y = 3)6.5.2 6.5.2 賦值賦值表達式表達式3. 3. 復合賦值運算符復合賦值運算符u在等號之前加上其它運算符,可以構成復合的運算符在等號之前加

37、上其它運算符,可以構成復合的運算符u形式:形式:運算符運算符=u種類:種類:+= -= += -= * *= /= %= /= %= u實例:實例:a+=3a+=3a=a+3a=a+3x x* *=y+8=y+8x=xx=x* *(y+8)(y+8)x%=3x%=3x=x%3x=x%3例例: a=b=c=5: a=b=c=5 a=5+(c=6) a=5+(c=6) a=(b=4)+(c=6) a=(b=4)+(c=6) printf(“%d”,a=b); printf(“%d”,a=b);/表達式值為表達式值為5 5,a,b,ca,b,c值為值為5 5/表達式值表達式值1111,c=6,a=1

38、1c=6,a=11/表達式值表達式值1010,a=10,b=4,c=6a=10,b=4,c=6/完成賦值和輸出雙重功能完成賦值和輸出雙重功能賦值表達式賦值表達式例例: : 賦值表達式的復合運算賦值表達式的復合運算 若若a=12 則則a+=a- =a*a a=a-a*a=-132 a=a+(-132)=-2646.5.6 6.5.6 逗號表達式逗號表達式(P114)(P114)逗號運算符和表達式逗號運算符和表達式形式:形式:表達式表達式1,表達式表達式2,表達式表達式n結合性結合性: 從左向右從左向右優先級優先級: 15逗號表達式逗號表達式的值:等于的值:等于“表達式表達式n”的值的值用途:用途

39、:常用于循環常用于循環for語句中語句中例例 a=3*5, a*4例例 x=(a=3, 6*3) x=a=3, 6*a例例 已有已有a=1;b=2;c=3; printf(“%d,%d,%d”,(a,b,c),b,c); /表達式值表達式值60, a=15 /賦值表達式,表達式值賦值表達式,表達式值18,x=18/逗號表達式逗號表達式,表達式值表達式值18,x=3 /3,2,3int a, b, c;a=2, b=3, c=a+b(a=2), (b=3), (c=a+b);加法:加法:0100累加和累加和sum = 0;for(i = 0; i = 100; i+) sum = sum + i

40、;逗號逗號表達式的用途表達式的用途for(i =0, sum = 0; i = 100; i+) sum = sum + i;for(i = 0, sum = 0; i = 100; i+) sum += i; 復合賦值表達式復合賦值表達式x=3, 表達式表達式y值?值?y= (x+) + (+x) + (x+) 實例實例y= ( a=3, b=a+, a/2 ) a值值,b值值,y值?值? 先計算所有的前置增量操作先計算所有的前置增量操作: x=4計算表達式值計算表達式值: y=12再計算所有的后置增量操作再計算所有的后置增量操作: x=5, x=6x=3, 表達式表達式y值?值?y= (+

41、x) + (+x) + (+x) 先前置先前置: x=4, x=5, x=6計算表達式值計算表達式值: y=18a=3; b=3, a=4; a/2計算表達式值計算表達式值: y=2C C語言程序是結構化的程序語言程序是結構化的程序C語言程序由三種基本結構組成語言程序由三種基本結構組成順序結構:順序結構:a=3; b=5; c=a+b;選擇結構選擇結構: if else , switch 循環結構循環結構: for , while 順序結構程序與選擇結構程序順序結構程序與選擇結構程序順序結構程序順序結構程序選擇結構程序選擇結構程序/*求兩個數的和求兩個數的和*/#include void ma

42、in( ) int a, b, c; scanf( “%d, %d”, &a, &b ); c = a+ b; printf( “c = %d n”, c ); /*求兩個數的最大值求兩個數的最大值*/#include void main( ) int a, b, max; scanf( “%d, %d”, &a, &b ); if ( a b ) max = a; else max= b; printf( “max = %d n”, max );程序順序執行,且每條語句都程序順序執行,且每條語句都執行一次執行一次根據條件,只執行滿足條件的語句。根據條件,只執行滿足條件的語句。某些語句可能執行

43、不到。某些語句可能執行不到。循環結構程序循環結構程序循環結構程序循環結構程序#include void main( ) int a, b, sum; scanf( “%d, %d”, &a, &b ); sum = a+ b; printf( “sum = %d n”,sum); /*求求0100累加和累加和*/#include void main( ) int i, sum=0; for ( i=0; i=100; i+) sum=sum+i; printf( “sum = %d n”, sum );在給定條件成立時,反復執行某程序段(循環體語在給定條件成立時,反復執行某程序段(循環體語句)

44、,直到條件不成立時,結束循環句),直到條件不成立時,結束循環例例2-5 2-5 程序程序p26p26例例2-5: 計算銀行存款利息計算銀行存款利息 # include # include void main( ) int money, year; double rate, sum; printf(請輸入存款金額請輸入存款金額: ); scanf(%d,&money); printf(請輸入存款年限請輸入存款年限: ); scanf(%d,&year); printf(請輸入存款利率請輸入存款利率: ); scanf(%lf,&rate); sum=money*pow(1+rate),year)

45、; printf(到期本息合計到期本息合計: %.2fn,sum); printf(n);scanf(%d,%d,%lf, &money, &year, &rate);順序結構程序設計舉例順序結構程序設計舉例例例 說明程序設計的步驟與注意事項說明程序設計的步驟與注意事項#include #include void main() int a,b,c; a=5;b=7; float x,y,z; c=a*b; z=sqrt(x+y); scanf(%f,%f,&x,&y); printf(“%d,%dn,c);printf(“x=%f,y=%f,z=%fn,x,y,z);順序結構程序設計舉例順序結

46、構程序設計舉例a=5;b=7;float x,y,z;scanf(%f,%f,&x,&y);z=sqrt(x+y); printf(“%dn,c);程序中有幾處錯誤?程序中有幾處錯誤?#include #include void main() float a,b,c,s,area; printf(“請輸入三角形的三個邊長:請輸入三角形的三個邊長:”); scanf(%f,%f,%f,&a,&b,&c); s=1.0/2*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c); printf(a=%7.2f, b=%7.2f, c=%7.2f, s=%7.2fn,a,b,c

47、,s); printf(“三角形面積三角形面積=%7.2fn,area);例輸入三角形邊長,求面積例輸入三角形邊長,求面積輸入:3,4,6輸出:a=3.00, b=4.00, c=6.00, s=6.50area=5.33)()()()(21csbsassareacbas輸入數據輸出數據分析分析: a,b,c:表示三角形的三邊。表示三角形的三邊。 s:中間變量。中間變量。 s=1/2*(a+b+c) area:三角形面積。三角形面積。 以上變量均為實型。以上變量均為實型。變量定義文件包含預處理命令s=1/2*(a+b+c)s=(a+b+c) /2 設置幾個變量?變量類型是什么?設置幾個變量?變

48、量類型是什么?選擇結構程序選擇結構程序/*求兩個數的最大值求兩個數的最大值*/#include void main( ) int a, b, max; scanf( “%d, %d”, &a, &b ); if ( a b ) max = a; else max= b; printf( “max = %d n”, max );根據條件,只執行滿足根據條件,只執行滿足條件的語句。某些語句條件的語句。某些語句可能執行不到??赡軋绦胁坏?。6.5.3 6.5.3 關系表達式關系運算符關系表達式關系運算符比較兩個操作數,比較的結果:真比較兩個操作數,比較的結果:真 假假x y x y x = y x !

49、= y優先級優先級 算術運算符算術運算符 = = != 賦值運算符賦值運算符左結合左結合a b = cd = a bch a + 1 d = a + b c3 = x b)= cd = (a b)ch (a + 1)d = (a + b) c)(3 = x) b = cd = a bch a + 1d = a + b cb - 1 = a != c3 = x b) max=a ; else max=b ;其中:其中:“ab”是關系表達式,是關系表達式,“”關系運算符關系運算符如果如果a=5,b=3,滿足條件,滿足條件ab,則執行語句,則執行語句 max=a;如果如果a=2,b=3,不滿足條件,

50、不滿足條件ab,則執行語句,則執行語句max=b;2.2.3 if-else2.2.3 if-else/*求兩個數的最大值求兩個數的最大值*/#include void main( ) int a, b, max; scanf( “%d, %d”, &a, &b ); if ( a b ) max = a; else max= b; printf( “max = %d n”, max );2.3.1 2.3.1 程序解析程序解析例例2-4 分段計算水費分段計算水費要解決的問題:要解決的問題:輸入輸入x計算分段函數計算分段函數輸出輸出y,并保留,并保留2位小數位小數 415( )32.510.5

51、15xxyf xxx2.3.3 if - else2.3.3 if - else語句語句if (表達式表達式) 語句語句1else 語句語句2if (x 15) else y = 2.5 * x - 10.5;y = 4 * x / 3;2.3.1 2.3.1 程序解析求分段函數程序解析求分段函數 /*例例2-4 居民用水居民用水*/#include void main ( ) double x, y; printf(Enter x (x=0):n); /* 輸入提示輸入提示 */ scanf(%lf, &x); /* 調用調用scanf函數輸入數據函數輸入數據 */ if (x =0):9.

52、5f(9.500000)=12.67Enter x (x=0):15f(15.000000)=20.00Enter x (x=0):21.3f(21.300000)=42.75軟件測試的基本思想軟件測試的基本思想 p24p24軟件測試軟件測試精心設計一批測試用例精心設計一批測試用例 輸入數據,預期輸出結果輸入數據,預期輸出結果 ,然后分,然后分別用這些測試用例運行程序,看程序的實際運行結果與預別用這些測試用例運行程序,看程序的實際運行結果與預期輸出結果是否一致。期輸出結果是否一致。input x:2.5f(2.50)=0.4input x:0f(0.00)=0.0if(x != 0) y =

53、1/x;else y = 0;if(x =0):9.5f(9.500000)=12.67Enter x (x=0):15f(15.000000)=20.00Enter x (x=0):21.3f(21.300000)=42.756.5.5 6.5.5 條件表達式條件表達式p113p113y = (x0) ? x+2 : x*x;if ( x0 ) y=x+2;else y=x*x; x+2 x0y = x2 xb) ? a : b;if ( ab ) z = a;else z = b;問題:編程序求問題:編程序求1+2+100之和之和分析:分析: 1、設一個變量、設一個變量sum存放和,并初始

54、化為存放和,并初始化為0; 2、設置變量、設置變量i, 讓其從讓其從1100,將這,將這100個數一個一個加到個數一個一個加到sum中,中,加加100次,而且每次都做同樣的操作:次,而且每次都做同樣的操作: sum=sum+i;i+;(i從從1增加到增加到100) 3、當、當i增加到增加到101時,停止計算;最后時,停止計算;最后sum中的值就為所求的值中的值就為所求的值 順序結構和選擇結構程序是每條語句最多執行一次,順序結構和選擇結構程序是每條語句最多執行一次,不能解決這個問題,因此要用到循環結構不能解決這個問題,因此要用到循環結構 循環結構是用于處理大量的有規律的重復操作循環結構是用于處理

55、大量的有規律的重復操作sum=1+2+100;分析:分析:sum=0 i=1sum=sum+1=1sum=sum+2=1+2=3sum=sum+3=3+3=6sum=sum+4=6+4=10sum=sum+100=4950+100=5050u一般形式:一般形式:for ( 表達式表達式1 ; 表達式表達式2 ; 表達式表達式3 ) 循環體語句循環體語句u執行流程:執行流程:表達式表達式2循環體語句循環體語句假假(0)真真(非非0)for表達式表達式1表達式表達式32.4.2 for2.4.2 for語句循環語句語句循環語句1.1.先求解表達式先求解表達式1 1,只執,只執行一次行一次2.2.判

56、斷表達式判斷表達式2 2,若其值,若其值為真為真( (非非0)0),則執行循,則執行循環體語句,并接著執環體語句,并接著執行表達式行表達式3 3;若為假;若為假(0)(0),則結束循環,執,則結束循環,執行行forfor語句下面一條語語句下面一條語句句sum=0;for (i=1;i=100;i+) sum=sum+i;實現實現C語句的重復執行語句的重復執行此處無此處無分號分號;uforfor語句一般應用形式語句一般應用形式:for( 循環變量賦初值循環變量賦初值; 循環條件循環條件; 循環變量增值循環變量增值) 循環體語句循環體語句 #include void main() int i,su

57、m=0; for(i=1;i=100;i+) sum+=i; printf(%d,sum);for (表達式表達式1;表達式;表達式2;表達式;表達式3) 求求 1+2+100抽取具有共性的算式:抽取具有共性的算式:sum = sum + i sum初值為初值為0,該算式重復,該算式重復100次,次,i從從1變到變到100設設i為循環變量,則:為循環變量,則:指定循環起點的表達式指定循環起點的表達式1:i = 1給出循環條件的表達式給出循環條件的表達式2:i = 100設置循環步長的表達式設置循環步長的表達式3:i+循環體語句:循環體語句:sum = sum + i;for(i=1; i=10

58、0; i+)sum =sum+i;2.4.3 2.4.3 指定次數的循環程序設計指定次數的循環程序設計/*計算計算1 + 2 + 3 + + 100 */#include void main ( ) int i, sum; sum = 0; /* 置累加和置累加和sum的初值為的初值為0 */ for ( i = 1; i = 100; i+ ) /* 循環重復循環重復100次次 */ sum = sum + i; /* 反復累加反復累加 */ printf( “sum = %dn”, sum); /* 輸出累加和輸出累加和 */源程序求源程序求 1+2+1+2+100+100sum=5050

59、for(i=1,sum=0; i=100; i+) sum=sum+i;例例2-7: 計算計算1 + 2 + 3 + + n #include void main ( ) int i, sum; printf (“Enter n: ”); scanf (“%d”,&n); sum = 0; /* 置累加和置累加和sum的初值為的初值為0 */ for ( i = 1; i = 100; i+ ) /* 循環重復循環重復100次次 */ sum = sum + i; /* 反復累加反復累加 */ printf( “sum = %dn”, sum); /* 輸出累加和輸出累加和 */擴展程序擴展程

60、序: 求求1+2+n的和的和作業題作業題2-2. 編寫程序編寫程序: 從鍵盤上輸入攝氏溫度,輸出對應的華氏溫從鍵盤上輸入攝氏溫度,輸出對應的華氏溫度。度。2-5. 編寫程序編寫程序: 從鍵盤輸入兩個整數,交換這兩個變量的值從鍵盤輸入兩個整數,交換這兩個變量的值并輸出結果。并輸出結果。 提示:設置中間變量,用于交換數據。提示:設置中間變量,用于交換數據。2-7. 編寫程序編寫程序: 將一個小于將一個小于256的十進制數正整數轉換成的十進制數正整數轉換成3位八進制數。位八進制數。 (選做選做) 提示:采用提示:采用“除除8取余數取余數”的方法,將十進制數除以的方法,將十進制數除以8得得到商和余數,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論