C語言程序設計(第三版)全套教學課件_第1頁
C語言程序設計(第三版)全套教學課件_第2頁
C語言程序設計(第三版)全套教學課件_第3頁
C語言程序設計(第三版)全套教學課件_第4頁
C語言程序設計(第三版)全套教學課件_第5頁
已閱讀5頁,還剩206頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 程序設計語言及其發(fā)展程序設計語言的發(fā)展機器語言匯編語言高級語言CPU指令系統(tǒng),由0、1序列構成的指令碼組成如:10000000 加 10010000 減用助記符號描述的指令系統(tǒng)如 ADD A, B分為解釋類和編譯類1967年 Martin Richards開發(fā)BCPL1970年 Ken Thompson開發(fā)B語言1972年 Dennis Ritchie設計了C語言C標準1980年 Bjarne Stroustrup開發(fā)“帶類的C語言”,最終成為C+語言。1.2 C語言的歷史1978年 The C Programming Language1989-1990年

2、 C89標準1995年 C95標準1999年 C99標準2011年 C11標準(ISO/IEC 9899:2011)1.3 C語言的標準例1.1 輸出字符串#include main() printf(“hello,worldn”);運行結果:Hello,world主函數(shù)字符串包含頭文件1.4 C語言的程序結構庫函數(shù)縮進格式例1.2/*功能:計算兩個數(shù)的和,并輸出*/#include /* 包含頭文件stdio.h */main( )int a, b, sum; /* 定義變量 */a=10; /* 給變量a賦整數(shù)值10 */b=20; /* 給變量b賦整數(shù)值20 */sum=ab; /* 求

3、和 */printf(sum=%dn, sum); /* 輸出sum的值 */運行結果: sum=30注釋語句1.4 C語言的程序結構(續(xù))若輸出1020=30 則程序中的printf語句可改寫為:printf(%d%d=%dn, 10,20,sum);1.4 C語言的程序結構(續(xù))例1.3 輸入兩個數(shù),求和并輸出#include main( )int a, b, sum; /* 定義變量 */scanf(%d, &a); /* 輸入第一個整數(shù) */scanf(%d, &b); /* 輸入第二個整數(shù) */sum=ab; /* 計算和 */ /* 輸出和 */printf(The sum of

4、%d and %d is %d.n, a,b,sum);scanf獲得鍵盤輸入1.4 C語言的程序結構(續(xù))總結:C程序結構特點函數(shù)與主函數(shù)程序由一個或多個函數(shù)組成必須有且只能有一個主函數(shù)main()程序執(zhí)行從main開始,在main中結束程序語句C程序由語句組成用“;”作為語句終止符注釋/* */為注釋,不能嵌套采用縮進格式1.5 C語言程序的運行2.1常量2.2變量2.3運算符與表達式2.4運算符的優(yōu)先級與結合性2.5類型轉換2.1 常量定義:程序運行時其值不能改變的量(即常數(shù))分類:整型常量十進制常量1245 401 -3210 +569 八進制常量01245 0401 -0321001

5、84 想想為什么?十六進制常量 0 x1245 0 x401 -0 xabcd0 x2z12.1 常量浮點型常量十進制小數(shù)形式0.0083 .125 -123. +3.14159 指數(shù)形式表示實型常量1.23e3 12345.6E-2 2.23e1.5 1.23e 想想為什么?單字符常量普通字符常量用單引號括起來 A a轉義字符見書中表2.12.1 常量字符串常量字符串常量是由一對雙引號括起來的字符序列。例如,“Hello !”、“C Language ”h e l l o 0X X 0例 X“X”字符串一般都有一個結束標志0X與“X”是有區(qū)別的例2.1 輸入一個半徑,求圓周長和圓面積#inc

6、lude #define PI 3.14159main()float radius,circumf,area; scanf(“%f”,&radius);circumf2.0*PI*radius; /* 計算周長 */areaPI*radius*radius; /* 計算面積 */printf(circumference%.2f ,area%.2fn, circumf,area);運行結果:1circumference6.28 ,area3.14符號常量PI符號常量定義格式為:#define 2.2 變量概念:其值可以改變的量變量名與變量值變量定義的一般格式: 數(shù)據(jù)類型 變量1,變量2,變量n;

7、變量初始化:定義時賦初值 例: int a,b,c; float data;決定分配字節(jié)數(shù)和數(shù)的表示范圍合法標識符例: int a=2,b,c=4; float data=3.67; char ch=A; int x=1,y=1,z=1;變量的使用:先定義,后使用變量定義位置:一般放在函數(shù)開頭例: int student; student=19; main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%fn”,data);2.2.1 變量名在C語言中,用戶自定義的標識符需要符合以下規(guī)則(1)必須以字母或下劃線(_)開頭,

8、C語言區(qū)分大小寫,ABC,Abc和abc是不相同的。(2)只能由字母、數(shù)字或下劃線組成,不能有空格,小數(shù)點等特殊字符。(3)不能和C中的系統(tǒng)保留的關鍵字重名。autodoubleintStructbreakelselongSwitchcaseenumregistertypedefcharexternreturnunionconstfloatshortunsignedcontinueforsignedvoiddefaultgotosizeofvolatiledoifstaticwhile系統(tǒng)保留的關鍵字2.2.2 變量的類型數(shù)據(jù)長度類型標識符數(shù)值范圍有符號整數(shù) 16位 short int 327

9、6832767 32位 int 21474836482147483647 32位 long int 21474836482147483647 無符號整數(shù) 16位 unsigned short int 065535 32位 unsigned int 04294967295 32位 unsigned long int 04294967295 整型變量例如:int i=0;整型數(shù)據(jù)的長度、類型標識符與數(shù)值范圍2.2.2 變量的類型浮點型變量float:單精度浮點數(shù)double:雙精度浮點數(shù)long double:長精度浮點數(shù)浮點數(shù)的特征類型數(shù)據(jù)長度取值范圍與有效位數(shù)float 32位 約(3.4E-

10、383.4E+38), 6位有效數(shù)字 double64位 約(1.7E-3081.7E+308),16位有效數(shù)字 2.2.2 變量的類型字符型變量用char進行定義,用單引號引起來的單個字符如字符 A、a、0、$ 等#includemain( ) char lowercasea;char uppercaselowercase-32;printf(%c,uppercase);【例2.2】 小寫字母轉換成大寫字母大寫字母的ASCII值比對應的小寫字母小32sizeof運算符運算符sizeof可以測定某種類型的數(shù)據(jù)所占的字節(jié)數(shù)。#includemain( )printf(int: %d bytesn

11、,sizeof(int);printf(double: %d bytesn,sizeof(double);【例2.3】 用sizeof運算符測定所用C系統(tǒng)中int型和double型數(shù)據(jù)所占內(nèi)存空間的字節(jié)數(shù)基本用法是 sizeof(類型名)運行結果:int: 4 bytesdouble: 8 bytes2.2.3 變量的定義及操作int age,reach;定義age、reach為基本int類型變量。unsigned int height,weight;定義height、weight為無符號int類型變量變量的定義先定義,賦值后使用#include main( )int age;printf(%

12、dn,age);age未進行初始化,所以輸出結果是不確定的2.3 運算符與表達式C運算符算術運算符:(+ - * / % + -)關系運算符:( = !=)邏輯運算符:(! & |)位運算符 :( | &)賦值運算符:(= 及其擴展)條件運算符:(?:)逗號運算符:(,)指針運算符:(* &)求字節(jié)數(shù) :(sizeof)強制類型轉換:(類型)分量運算符:(. -)下標運算符:()其它 :(( ) -)算術運算符和表達式基本算術運算符: + - * / %結合方向:從左向右優(yōu)先級: - -* / % - + -說明:“-”可為單目運算符時,右結合性兩整數(shù)相除,結果為整數(shù)%要求兩側均為整型數(shù)據(jù)例

13、5/2 = -5/2.0 =例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2例 5/2 = 2 -5/2.0 = -2.5例 5%2 = 1 -5%2 = -1 1%10 = 1 5%1 = 0 5.5%2 ()關系運算符和表達式關系運算符種類: = !=結合方向:自左向右優(yōu)先級別:=!=優(yōu)先級高優(yōu)先級低例 ca+b /c(a+b) ab!=c /(ab)!=c a=bc /a=(bc /a=(bc)關系表達式的值:是邏輯值“真”或“假”,用1和0表示例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc/表達式值1/表達式值1/表達式值0/d

14、=1/f=0ab!a!ba&ba|b真假真假假假真真邏輯運算符和表達式邏輯運算符種類: ! & |邏輯運算真值表C語言中,運算量: 0表示“假”, 非0表示“真”, 運算結果: 0表示“假”, 1表示“真”,真假假假假假真真假假真真真假真真賦值運算符和表達式簡單賦值運算符符號: =格式: 變量標識符=表達式作用:將一個數(shù)據(jù)(常量或表達式)賦給一個變量復合賦值運算符種類:+= -= *= /= %= = = &= = |=含義: exp1 op= exp2 exp1 = exp1 op exp2a+=3 a=a+3x*=y+8 x=x*(y+8)x%=3 x=x%3例 a=3; d=func()

15、; c=d+2;自增、自減運算符+ -作用:使變量值加1或減1種類:前置 +i, -i (先執(zhí)行i+1或i-1,再使用i值)后置 i+,i- (先使用i值,再執(zhí)行i+1或i-1)例 j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b; /k=4,j=4/k=3,j=4/4/3/c=20,a=4/c=15,a=4條件運算符與表達式一般形式: expr1 ? expr2 : expr3執(zhí)行過程功能:相當于條件語句,但不能取代一般if語句例 if (a

16、b) printf(“%d”,a); else printf(“%d”,b);printf(“%d”,ab?a:b);例 求 a+|b| printf(“a+|b|=%dn”,b0?a+b:a-b);expr1取expr2值取expr3值非0=0條件運算符可嵌套 如 x0?1:(x0?-1:0)逗號運算符和表達式形式:表達式1,表達式2,表達式n結合性:從左向右逗號表達式的值:等于表達式n的值用途:常用于循環(huán)for語句中例如:value(x10,y5,xy); 首先將10賦值給x,然后將5賦值給y,最后將15(即105)賦值給value。2.4 優(yōu)先級與結合性優(yōu)先級用于確定復雜表達式求值時不同

17、運算符的計算順序。結合性用來決定復雜表達式求值時含有同優(yōu)先級運算符的計算順序。左結合表達式3*8/4%4*5等價于(3*8)/4)%4)*5)右結合表達式ab*c5等價于(a(b*(c5)2.5 類型轉換隱式類型轉換顯示類型轉換顯示類型轉換的一般表示形式為:(類型標識符) 表達式 int totalScores500,num6;/* 定義總分totalScores和學生人數(shù)num */float average; /* 定義平均分average */averagetotalScores/num; /* average83.0000 */average(float) totalScores/nu

18、m; /* average83.3333 */隱式類型轉換顯式類型轉換3.1 讀入一個字符3.2 輸出一個字符3.3 格式化輸入3.4 格式化輸出3.5 程序舉例 3.1 讀入一個字符函數(shù)功能從標準輸入設備讀取一個字符函數(shù)的語法格式getchar( );【例3.1】 從鍵盤上輸入一個字符,然后顯示出來。#includemain( )char ch;ch=getchar();printf(%c,ch); 3.2 輸出一個字符函數(shù)功能將字符輸出到標準輸出設備上函數(shù)的語法格式putchar(c );【例3.2】 顯示A。#includemain( )char ch;ch=A;putchar(ch);

19、3.3 格式化輸入格式: scanf(“格式控制串”,地址表)功能:按指定格式從鍵盤讀入數(shù)據(jù),存入地址表指定的 存儲單元中,并按回車鍵結束返值:正常,返回輸入數(shù)據(jù)個數(shù)地址表:變量的地址,常用取地址運算符 &格式字符:d,i,o,x,u,c,s,f,e例 scanf(“%d”,&a); 輸入:10 則 a=10例 scanf(“%4d%2d%2d”,&yy,&mm,&dd); 輸入 19991015 則1999yy, 10 mm, 15 dd例 scanf(“%3d%*4d%f”,&k,&f); 輸入 12345678765.43 則123k, 8765.43f例 scanf(“%2d%*3d%

20、2d”,&a,&b); 輸入 1234567 則12a, 67b例 scanf(“%3c%2c”,&c1,&c2); 輸入 abcde 則ac1, d c2輸入分隔符的指定一般以空格、TAB或回車鍵作為分隔符其它字符做分隔符:格式串中兩個格式符間字符例 scanf(“%d:%d:%d”,&h,&m,&s); 輸入 12:30:45 則12 h, 30 m, 45 s例 scanf(“%d,%d”,&a,&b) 輸入 3,4 則3a, 4 b例 scanf(“a=%d,b=%d,c=%d”,&a,&b,&c); 輸入 a=12,b=24,c=36 輸入數(shù)據(jù)時,遇以下情況認為該數(shù)據(jù)結束:遇空格、T

21、AB、或回車遇寬度結束遇非法輸入 3.4 格式化輸出格式:printf(“格式控制串”,輸出表)功能:按指定格式向顯示器輸出數(shù)據(jù)返值:正常,返回輸出字節(jié)數(shù);出錯,返回EOF(-1)輸出表:要輸出的數(shù)據(jù)(可以沒有,多個時以“,”分隔)格式控制串:包含兩種信息格式說明: %修飾符格式字符 ,用于指定輸出格式普通字符或轉義序列:原樣輸出格式字符d,ix,Xoucse,Efg%格式字符:十六進制無符號整數(shù)不帶符號十進制整數(shù)十進制整數(shù)指數(shù)形式浮點小數(shù)單一字符字符串八進制無符號整數(shù)小數(shù)形式浮點小數(shù)e和f中較短一種百分號本身int a=567;printf ( “%d”,a);int a=255;print

22、f(“%x”,a);int a=65;printf(“%o”,a);int a=567;printf(“%u”,a);char a=65;printf(“%c”,a);printf(“%s”,“ABC”);float a=567.789;printf(“%e”,a);float a=567.789;printf(“%f”,a);float a=567.789;printf(“%g”,a);printf(“%”);567ff101567AABC5.677890e+02567.789000567.789% 3.5 程序舉例- 例3.4#include #define PI 3.1415926mai

23、n( )float r,h,l,s,sq,vq,vz; /*變量定義*/printf(please input r,h:n); /*輸入提示信息*/scanf (%f,%f, &r, &h);/*從鍵盤輸入圓半徑r、圓柱高h*/l=2*PI*r; /*計算圓周長*/s=PI*r*r; /*計算圓面積*/sq=4*PI*r*r; /*計算圓球表面積*/vq=4.0/3.0*PI*r*r*r;/*計算圓球體積*/vz= PI*r*r*h; /*計算圓柱體積*/printf(%6.2fn,l);printf(%6.2fn,s);printf(%6.2fn,sq);printf(%6.2fn,vq);

24、printf(%6.2fn,vz); 3.5 程序舉例-例3.6#include main()int num1,num2,temp;scanf(%d,%d,&num1,&num2);printf(交換前:num1=%d,num2=%dn,num1,num2);/* swap num1 and num2 */temp=num1;num1=num2;num2=temp;printf(交換后:num1=%d,num2=%dn,num1,num2);兩個數(shù)交換的核心語句4.1 選擇結構程序概述4.2 if語句4.3 switch語句選擇結構單分支雙分支if (表達式) 語句多分支if (表達式) 語句

25、else 語句if (表達式1) 語句else if (表達式) 語句else 語句nif 語句的嵌套switch 語句4.1.1 簡單if語句1.語法格式if(條件) 語句2. 說明 (1)執(zhí)行過程: 當條件為“真”時,執(zhí)行語句;為“假”時,跳過語句,而直接執(zhí)行整個if語句后的其它語句。 (2)條件中的結果為邏輯值。 (3)語句如果有多條語句,要用一對花括號“ ”將其括起來,成為一個復合語句。 例4.1#includemain( )float x,y;printf(請輸入數(shù)據(jù):n);scanf(%f,&x);y=x; /* 初始化y值 */if (x0) y=-x*x;printf(f(%.

26、2f)=%.2f,x,y);例4.2#include main( )float a,b,temp;scanf(%f%f,&a,&b);if (ab)temp=a; /* 三條語句,實現(xiàn)a、b變量值交換 */a=b;b=temp;printf(a=%.2f b=%.2fn,a,b);4.1.2 if . else 語句1. 語法格式if (條件) 語句1 else 語句22. 說明(1)執(zhí)行過程:當條件為“真”時,執(zhí)行語句1; 為“假”時,執(zhí)行語句2。 (2)語句1和語句2都可為復合語句。例4.3#includemain( )float weight,pay ;printf(請輸入重量n);sc

27、anf(%f,&weight);if (weightb) max=a; else max=b;printf(%d,max);嵌套if . else 語句在一個if.else語句中又包含一個或多個if.else語句時,稱為嵌套if.else語句。在C語言中允許多層嵌套。例4.4 使用嵌套if語句來選出三個數(shù)字中最大的數(shù),然后再顯示它#includemain( )float a,b,c;printf(“Enter three valuesn”);scanf(“%f %f %f”,&a,&b,&c);printf(“nLargest values is ”);if (ab)if(ac)printf(

28、“%fn”,a);elseprintf(“%fn”,c);elseif(cb)printf(“%fn”,c);elseprintf(“%fn”,b);4.1.4 階梯式if . else 語句利用階梯式if.else可解決多分支的問題。其一般形式如下:if (條件表達式1) 語句序列1else if (條件表達式2) 語句序列2 else if (條件表達式3) 語句序列3 else if(條件表達式4) 語句序列4 . else if(條件表達式n-1) 語句序列n-1 else 語句序列n 如果沒有任何縮進,我們應準確判斷出if和else的配對關系,在下表中同時給出了正確的嵌套形式和錯誤的

29、嵌套形式,結果是不同。在C語言中,一個else語句總是與最近的未終止的if匹配。原型嵌套:正確理解嵌套:錯誤理解 m=0;if(ab)if(ac)m=10;elsem=20;printf(m=%d,m);m=0;if(ab) if(ac)m=10; elsem=20; printf(m=%d,m); m=0;if(ab) if(ac) m=10; else m=20;printf(m=%d,m);當a=2;b=1;c=3;時,結果:m=0當a=2;b=1;c=3;時,結果:m=0當a=2;b=1;c=3;時,結果:m=20當a=2;b=3;c=1;時,結果:m=20當a=2;b=3;c=1;時

30、,結果:m=20當a=2;b=3;c=1;時,結果:m=0當a=1;b=2;c=3;時,結果:m=10當a=1;b=2;c=3;時,結果:m=10當a=1;b=2;c=3;時,結果:m=104.2 switch語句1. 語法格式switch(表達式) case 常量表達式1: 語句序列1; break; case 常量表達式2: 語句序列2; break; case 常量表達式n: 語句序列n; break; default:語句序列 2. 執(zhí)行流程例4.5 根據(jù)輸入的數(shù)據(jù)判斷星期幾,然后再顯示它#include main( )int a;printf(input integer number

31、:n );scanf(%d,&a);switch(a)case 1:printf(Mondayn);case 2:printf(Tudsdtayn);case 3:printf(Wednesdayn);case 4:printf(Thursdayn);case 5:printf(Fridayn);case 6:printf(Saturdayn);case 7:printf(Sundayn);default:printf(error!n);運行結果:input integer number: 3WednesdayThursdayFridaySaturdaySundayerror!3case 3:

32、printf(Wednesdayn);case 4:printf(Thursdayn);case 5:printf(Fridayn);case 6:printf(Saturdayn);case 7:printf(Sundayn);default:printf(error!n);例4.5 根據(jù)輸入的數(shù)據(jù)判斷星期幾,然后再顯示它#include main( )int a;printf(input integer number:n );scanf(%d,&a);switch(a)case 1:printf(Mondayn);break;case 2:printf(Tudsdtayn);break;c

33、ase 3:printf(Wednesdayn);break;case 4:printf(Thursdayn);break;case 5:printf(Fridayn);break;case 6:printf(Saturdayn);break;case 7:printf(Sundayn);break;default:printf(error!n);運行結果:input integer number: 3Wednesday3case 3:printf(Wednesdayn);break跳出5.1 goto語句5.2 while循環(huán)5.3 do-while循環(huán)5.5 break.continue語

34、句5.6 循環(huán)嵌套5.1 goto語句一般形式:語句標號:語句 . goto 語句標號;1. 功能是無條件轉到語句標號處。2. 用途: 與if語句一起構成循環(huán)結構; 從循環(huán)體中跳到循環(huán)體外。3. 因為濫用goto語句會破壞結構化,使流程無規(guī)律,所以應限制使用。除非不得已時(例如能大大提高效率)才使用。說明:語句標號:1.用于定義程序中的某個位置。2.用標識符表示,開頭不能是數(shù)字。如:goto 3t; 錯誤 goto t3; 正確3.只能加在可執(zhí)行語句前面。用if語句和goto語句構成循環(huán) 計算#include main( ) int i,sum=0; i=1;loop: if(i=100) s

35、um+=i; i+; goto loop; printf(%d,sum);sum=sum+1=1sum=sum+2=3sum=sum+3=6sum=sum+4=10sum=sum+100=5050循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體分析:這是一個累加求和的問題 sum=1+2+3+100 5.2 while語句用while語句實現(xiàn)當型循環(huán) 當表達式的值為真(非0)時,執(zhí)行其中的內(nèi)嵌語句(循環(huán)體),然后回過頭來再判斷表達式的值,如此重復;當表達式為假(0)時結束循環(huán)。一般形式:while(表達式) 循環(huán)體語句表達式循環(huán)體假(0)真(非0)執(zhí)行過程:特點:先判斷表達式,后執(zhí)行循環(huán)體。分析:累

36、加求和的問題 s=1+2+3+100s=0s=s+1s=s+2s=s+3和的新值s=s+k和的當前值求和項當前值用while語句計算#include main( ) int k,s; s=0;k=1; while(k=100) s=s+k; k+; printf(“s=%d,s);注意:s、k的初值及位置5.3 do.while語句用do-while語句實現(xiàn)直到型循環(huán) 執(zhí)行循環(huán)體,當表達式的值為真(非0)時,再次執(zhí)行循環(huán)體,如此重復;當表達式為假(0)時結束循環(huán)。一般形式:do 循環(huán)體語句while(表達式); 表達式循環(huán)體假(0)真(非0)執(zhí)行過程:先執(zhí)行循環(huán)體,后判斷表達式。循環(huán)體至少執(zhí)行

37、一次。do-while語句可轉化成while語句?!?”不可省略例 用do-while語句計算#include main( ) int k,s; s=0;k=1; while(k=100) s=s+k; k+; printf(“s=%d,s);#include main( ) int k,s; s=0;k=1; do s= s+k; k+; while(k=100); printf(“s=%d,s);先判后做先做后判5.4 for循環(huán)最簡單的應用形式:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值;) 循環(huán)體語句例如:for(i=1;i=100;i+) sum+=i;一般形式:for(表達式1

38、;表達式2;表達式3;) 循環(huán)體語句 (1) 先求解表達式1。 (2) 求解表達式2,若其值為真(值為非0), 則執(zhí)行for語句中指定的循環(huán)體語句,然后 執(zhí)行下面第(3)步。若為假(值為0),則 結束循環(huán),轉到第(5)步。 (3) 求解表達式3。 (4) 轉回上面第(2)步驟繼續(xù)執(zhí)行。 (5) 循環(huán)結束,執(zhí)行for語句下面的一個語句 執(zhí)行過程:例如:for(i=1;i=100;i+) sum+=i;for(表達式1;表達式2;表達式3;) 循環(huán)體語句例 用for語句計算#include main( ) int k,s; s=0;k=1; while(k=100) s=s+k; k+; prin

39、tf(“s=%d,s);#include main( ) int k,s; s=0;k=1; do s= s+k; k+; while(k=100); printf(“s=%d,s);先判后做先做后判#include main( ) int k,s; s=0; for(k=1;k=100;k+) s=s+k; printf(“s=%d,s);#include main( ) int k,s; s=0; for(k=1;k=100;k+) s=s+k; printf(“s=%d,s);5.5 break語句和continue語句break語句: break;功能:跳出switch結構;在循環(huán)語句

40、中,終止并跳出本層循環(huán)。例 計算r=1到r=10的圓面積,直到面積大于100時停止。#define PI 3.1415main( ) int r;float area; for(r=1;r100) break; printf(r=%d,area=%.2fn,r,area); 運行結果:r=1,area=3.14r=2,area=12.57r=3,area=28.27r=4,area=50.26r=5,area=78.54r=6,area=113.094,退出循環(huán)continue語句: continue;功能:結束本次循環(huán),跳過本層循環(huán)體中尚未執(zhí)行的語句,進行下一次是否執(zhí)行循環(huán)體的判斷。說明:c

41、ontinue僅用于循環(huán)語句中。一般與if一起使用例 把100-200之間不能被3整除的數(shù)輸出 。main( ) int n; for(n=100;n=200;n+) if(n%3=0) continue; printf(“%d ,n); 100110010121011020跳過printf語句說明:continue語句只結束本次循環(huán); break語句是終止本層循環(huán)的執(zhí)行;要從很多重循環(huán)的內(nèi)層跳到最外層,可考慮用goto語句,但應盡量少用。: for() for() for() if() goto end; end:printf(“error”);continue語句和break語句goto的

42、區(qū)別5.6 循環(huán)的嵌套分析:1.每行的起始位置不同,空格數(shù)遞減1。2.每行的字符數(shù)相同。3.用二重循環(huán)實現(xiàn): 外循環(huán)控制輸出行數(shù); 內(nèi)循環(huán)控制輸出的空格數(shù)。main( )int row, col; for(row=1;row=5;row+) for (col=1;col=5-row;col+) printf(“ ”);/內(nèi)循環(huán)體 printf(*n); *6.1 一維數(shù)組6.2 二維數(shù)組6.3 字符數(shù)組與字符串一、數(shù)組的引入為了便于處理一批類型相同的數(shù)據(jù),引入了數(shù)組類型. 假設現(xiàn)在要保存每個學生的成績,那就需要40個變量,但這樣一來輸入、輸出、計算都會變得繁瑣。 在這種情況下,我們可以使用數(shù)組

43、類型,聲明一個含有40個元素的數(shù)組,每個數(shù)組元素存放一個成績,成績的輸入、輸出、計算都可通過循環(huán)來實現(xiàn)。例:某班有40名學生,求該班成績的平均分 #include main( ) int j , sum , s ; float ave ; sum=0; for(j=1; j=40 ; j+) scanf(“%d”,&s); sum=sum+s; ave=sum/40; printf(“ave=%f”,ave);二、數(shù)組的概念 構造數(shù)據(jù)類型之一1.數(shù)組:由具有相同類型的有序 數(shù)據(jù)的集合。用數(shù)組名標識。#include main( ) int j , sum , s40 ; float ave ;

44、 sum=0; for(j=0; j=39 ; j+) scanf(“%d”,&sj); sum=sum+sj; ave=sum/40; printf(“ave=%f”,ave); 2.數(shù)組元素:每一個數(shù)組元素 都是一個變量,為了與一般 的變量相區(qū)別,我們稱數(shù)組 元素為下標變量3.下標變量在數(shù)組中的位置 序號稱下標,c語言中下標 從0開始 6.1 一維數(shù)組 6.1.1一維數(shù)組的定義 定義方式: 數(shù)據(jù)類型 數(shù)組名常量表達式 ; 合法標識符表示元素個數(shù)下標從0開始例 int a10;數(shù)組名表示數(shù)組所在內(nèi)存首地址也是a0的地址,是地址常量 84 : 66 80 95a0a1a2 :a9a6.1.2

45、數(shù)組元素的引用數(shù)組必須先定義,后使用下標可以是常量或整型表達式如: a1 , a2*3只能逐個引用數(shù)組元素,不能一次引用整個數(shù)組下標不要超范圍(越界)區(qū)分:數(shù)組定義:int a10,數(shù)組元素引用 t=a6; 例 int a10; printf(“%d”,a); ()必須 for(j=0;j10;j+) printf(“%dt”,aj); ()引用形式 : 數(shù)組名 下標 例 int data5; data5=10; () /C語言對數(shù)組不作越界檢查,使用時要 注意6.1.3 數(shù)組元素的初始化與賦值在定義數(shù)組時,為數(shù)組元素賦初值(在編譯階段使之得到初值) int a5=1,2,3,4,5;等價于:

46、a0=1; a1=2; a2=3; a3=4; a4=5;說明: 數(shù)組不初始化,其元素值為隨機數(shù) 對static數(shù)組元素不賦初值,系統(tǒng)會自動賦以0值 當全部數(shù)組元素賦初值時,可不指定數(shù)組長度 可以只給部分數(shù)組元素賦初值 一維數(shù)組的賦值是指數(shù)組已經(jīng)定義完畢,對數(shù)組元素作動態(tài)賦值。例如:int a5; /* 定義一維數(shù)組a,每個元素的值是不確定的 */a0=1;a1=2;a2=3; /* 逐個賦值 */3. int a5; a= 1, 2, 3, 4, 5 ; 4. int a10; float i=3; ai=10; 1. char name0; float weight10.3; int ar

47、ray-100; 6.int i, a5; for(i=0;i5;i+) scanf(“%d”,&ai); for(i=0;i5;i+) printf(“%d”, ai); 2. int i=5; int ai= 1, 2, 3, 4, 5; 5. int a5; scanf(“%d”,&a); printf(“%d”, a); 討論:以下幾種用法是否正確?一維數(shù)組的賦值【例6.1】 編程,輸入10個整數(shù),計算最大值并輸出。源程序:#include main( )int i,max,a10;printf(Input 10 numbers:n);for(i=0;i10;i+)scanf(%d,&

48、ai);max=a0;for(i=1;imax)max=ai;printf(Max=%dn,max);控制輸入10個數(shù)據(jù)核心算法語句【例6.2】 用冒泡排序法對N個數(shù)進行排序(從小到大),用6個演示冒泡排序方法: 依次比較相鄰的兩個數(shù),將小數(shù)放前面,大數(shù)放后面.經(jīng)過第1輪(共5次比較與交換)后最大的數(shù)9已“沉底” 。再對余下的前面5個數(shù)進行第二輪比較,次大的數(shù)又被安置。n個數(shù)排序需要進行n-1輪比較,從第1輪到第n-1輪,各輪的比較次數(shù)依次為:n-1次、n-2次 1次,第i輪比較中要進行n-i次兩兩比較。 9 7 2 5 4 1a0a1a2a3a4a5 7 2 5 4 1 92775471 2

49、 5 4 1 7 94515 2 4 1 5 7 9 2 1 4 5 7 91412 9 7 2 5 4 19999972541初始狀態(tài)第1輪第2輪第3輪第4輪第5輪76.2 二維數(shù)組姓名高等數(shù)學大學英語C程序設計王青808286陳丹788980趙樂767281李磊536770羅鵬878291該表共有15個數(shù)值,我們可以把它看作是由5行3列組成的矩陣。在數(shù)學中,我們使用雙下標變量來表示矩陣中的某個值,其中一個變量表示行,另一個變量表示列。在C語言中可以使用二維數(shù)組來定義這樣的表。該表在C中可以這樣來定義:int v53; /* v是二維數(shù)組名稱,5表示行數(shù),3表示列數(shù),int表示元素類型 */

50、6.2.1 二維數(shù)組的定義定義形式 : 類型說明符 數(shù)組名 常量表達式1 常量表達式2 ; 如: int a34 ; 6.2.2 二維數(shù)組的引用 數(shù)組元素的表示形式 : 數(shù)組名 下標 下標 注意 : (1) 每個下標都要用 括起來,如 a 2 1 不能寫成 a 2,1 (2) 下標從0開始,且不要超過定義的范圍6.2.3 二維數(shù)組的初始化與賦值1. 分行初始化 int a34= 1, 2, 3, 4 , 5, 6, 7, 8 , 9, 10, 11, 12 ; 此方法較直觀, 第一對 內(nèi)的數(shù)據(jù)賦給第一行數(shù)組元素, 依次類推 2. 按數(shù)據(jù)的排列順序對數(shù)組元素賦初值 int a34= 1, 2,

51、3, 4, 5, 6, 7, 8, 9, 10, 11, 12; 將數(shù)據(jù)依次賦給元素 a00 , a01 a23 123456789101112注意: 此方法數(shù)據(jù)無明顯的界限, 當數(shù)據(jù)較多時容易出錯3. 對數(shù)組的部分元素賦初值,未賦值元素自動取0 int a34= 1,2 , 3 ,4,5,6 ; int a34= 1,2,3,4,5,6 ;120030004560123456000000 4. 對數(shù)組的全部元素賦初值時可以省略第一維的長度(行下標), 系統(tǒng)會根據(jù)數(shù)據(jù)的個數(shù)和第二維的長度自動求出第一維長度, 但第二維下標不可省. int b 2= 1, 2, 3, 4, 5, 6, 7, 8

52、;數(shù)組a 第一維長度為 3 數(shù)組b 第一維長度為 4 如僅對部分元素賦初值,要想省略數(shù)組的行數(shù),則必須分行賦值。 int a 4= 1, 2 , 0, 3, 4 , 5 ;【例6.3】 求一個44矩陣的主對角線上各元素之和。#include main( )int a44=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;int i,j,sum=0;for(i=0;i4;i+)for(j=0;j4;j+)if(i=j) sum=sum+aij;printf(sum=%d,sum);方陣主對角線上元素的特征是:行標值等于列標值。6.3 字符數(shù)組與字符串一、字符數(shù)組1.

53、定義例 char c10, ch34; 例 char ch5; ch0= H; ch1= e; ch2= l; ch3= l; ch4= o;ch0Hello逐個字符賦值ch1ch2ch3ch4注意 例 char ch5=H,e,l,l,o;ch0Hello逐個字符賦值ch1ch2ch3ch4 例 char ch5=B,o,y;ch0Boy00逐個字符賦值ch1ch2ch3ch4 例 char ch5=“Boy”;ch0Boy00用字符串常量ch1ch2ch3ch4 例 char ch6=“Hello”; char ch6=“Hello”; char ch=“Hello”;用字符串常量ch0H

54、elloch1ch2ch3ch40ch5 例 char diamond5=., .,*,.,*,.,*, *, ., ., . ,*,.,*, .,*,., .,*;二維字符數(shù)組初始化.*00.*.*0*.*.*.*0.*00diamond0diamond1diamond2diamond3diamond4 例 char fruit7=“Apple”,”O(jiān)range”, ”Grape”,”Pear”,”Peach”;二維字符數(shù)組初始化fruit0fruit1fruit2fruit3fruit4Apple00Orange0Grape00Pear000Peach00例 輸出一個字符數(shù)組#includ

55、e main() char c10=I, ,a,m, ,a, ,b,o,y; int i; for(i=0;i10;i+) printf(%c,ci); printf(n);Iamaboy0123456789二、字符串1、字符串存放及其結束標志無字符串變量,用字符數(shù)組處理字符串字符串結束標志:0例 “hello”共5個字符,在內(nèi)存占6個字節(jié) 字符串長度5 h e l l o 0 104 101 108 108 111 0內(nèi)存存放字符ASCII碼等價于:char s1 =C, h, i, n , a ,0 ; char s210= C, h, i, n , a ; char s1 = “Chin

56、a” ; char s210= China ;字符串在字符數(shù)組中的存放s24s25s27s26s28s2s20s22s21s2310個字節(jié) C i n a h0s29 0 0 0 0 0 s35s1s30s32s31s336個字節(jié)s34C i n ah 數(shù)組名:字符數(shù)組(字符串)在內(nèi)存的首地址。 作為字符串進行存儲時,字符串與字符數(shù)組的長度可以不等,系統(tǒng)自動加0為結束標志。ss10s12s11s135個字節(jié)s14C i n ah 0 s35s1s30s32s31s336個字節(jié)s34C i n ah字符串在字符數(shù)組中的存放不等價于: char s 5= C, h, i, n , a ;char

57、s1 = “China” ; 不能寫成: char s15= China ; 用字符串作初值時,數(shù)組的長度應足夠大以便能容納全部字符和0。2、字符串的輸入輸出逐個字符I/O: %c整個字符串I/O: %s例 用%c main() char str5; int i; for(i=0;i5;i+) scanf(“%c”, &stri); for(i=0;i5;i+) printf(“%c”, stri);例 用%s main() char str5; scanf(“%s”, str); printf(“%s”, str);main( ) char a5=H,e,l,l,o; printf(“%s”

58、,a); main( ) char a =“Hello”; printf(“%s”,a);結果:因為沒有0結束符,輸出Hello,后面的字符不確定。結果:Helloprintf的s輸出字符串main() char a=h,e,l,0,l,o,0; printf(%s,a);輸出:hel h e l 0 l o 0數(shù)組中有多個0時,遇第一個結束用“%s”輸出時,遇0結束h e l l o02314main() int i; char a5; scanf(%s,a); for(i=0;i5;i+) printf(%d,ai);運行情況:(1)若輸入 hel , 正常(2)若輸入 hell , 正常

59、(3)若輸入 hello , 用%s 輸出時,會出現(xiàn)問題輸入字符串長度數(shù)組維數(shù)scanf的s輸入字符串 h e l 0 h e l l 0 h e l l oscanf的s輸入字符串#include main() char a15,b5,c5; scanf(%s%s%s,a,b,c); printf(a=%snb=%snc=%sn,a,b,c); scanf(%s,a); printf(a=%sn,a);運行情況:輸入:How are you?輸出:a=How b=are c=you?輸入:How are you?輸出:a=Howscanf中%s輸入時,遇空格或回車結束 H o w 0 a r

60、 e 0 y o u ? 0 3、常用的字符串處理函數(shù)除puts和gets外,包含在頭文件 string.h(1)字符串輸出函數(shù)puts格式:puts(字符數(shù)組)功能:向顯示器輸出字符串(輸出完,換行)說明:字符數(shù)組必須以0結束(2)字符串輸入函數(shù)gets格式:gets(字符數(shù)組)功能:從鍵盤輸入一以回車結束的字符串放入字符數(shù)組中, 并自動加0說明:輸入串長度應小于字符數(shù)組維數(shù)例 #include main( ) char string80; printf(“Input a string:”); gets(string); puts(string); 輸入: How are you?輸出: H

溫馨提示

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

評論

0/150

提交評論