C語言強化訓練(第一、二部分)ppt課件_第1頁
C語言強化訓練(第一、二部分)ppt課件_第2頁
C語言強化訓練(第一、二部分)ppt課件_第3頁
C語言強化訓練(第一、二部分)ppt課件_第4頁
C語言強化訓練(第一、二部分)ppt課件_第5頁
已閱讀5頁,還剩132頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C言語強化訓練第一部分 語法與語義第二部分 程序構(gòu)造方法C+言語程序設(shè)計強化訓練目的:加強程序設(shè)計根底知識掌握與C言語根本編程才干的培育。包括根本語法、數(shù)據(jù)構(gòu)造和根本算法。 內(nèi)容重點突出,注重適用的原那么。關(guān)于計算機根底部分:計算機根底涉及范圍廣,第一靠平常的積累;第二關(guān)注計算機領(lǐng)域的新開展和我國在計算機方面的新成就。關(guān)于C言語學習方法: 學習計算機言語的目的是為了程序設(shè)計,因此計算機言語的學習不僅僅是掌握知識,更注重于運用才干的培育,因此學習過程中,應從兩方面著手:掌握知識:熟記相關(guān)的語法、語義;運用才干培育:程序設(shè)計方式、方法的學習;經(jīng)過實驗、總結(jié),把知識轉(zhuǎn)變?yōu)檫\用才干。C言語難點:C言語

2、是眾多計算機高級言語中最難學的言語之一。 C言語有很強的特性,數(shù)據(jù)類型豐富,語法語義變化繁多、既嚴謹又靈敏。要消化這些,需求投入大量的時間和精神。學習C言語,一方面學生缺乏這方面的學習閱歷,對于這門全新、枯燥、龐大的課程,心有余而力缺乏。 更重要的是經(jīng)過一段時間學習缺乏應有的自信心。學習計算機言語時的思想:學習計算機言語的思想是一種自頂向下的思想方式,可用八個字來描畫:自頂而下,逐漸細化。也就是從宏觀到微觀,從整體到部分。這種思想符合我們大學計算機的教學。這種思想強調(diào)的是“綱舉目張,強調(diào)的是分層次思索。關(guān)于該講義內(nèi)容闡明:該講義的大部分例題來自C言語等級考試真題。但也有部分標題來自其他言語等級

3、考試真題或自擬的標題。第一部分 語法與語義一、C言語最根本部分1. 保管字與標識符 標識符是指常量、變量、語句標號以及用戶自定義函數(shù)的稱號。作為標識符必需滿足以下規(guī)那么:標識符必需由字母、下劃線或數(shù)字(09)組成;標識符的第一個字符可以是字母(az, AZ)或下劃線(_);保管字不能作標識符。 第一部分 語法與語義 特別提示:C言語是一種大小寫敏感的言語。 如:Test、test是2個不同的標識符。 例:以下選項中,_B_是C言語關(guān)鍵字。 A. printf B. include C. fun D. default第一部分 語法與語義2. 常量整數(shù):留意八和十六進制數(shù);實數(shù):用指數(shù)方式表示小數(shù)

4、時,方冪e(或E)前后必需是數(shù)字,e的前面可以是整數(shù)也可以是小數(shù),但e后面只能為13位整數(shù)。如:1.24e3、-4.3e-2是合法的實數(shù)。但1.3e、e2、1.2e3.1等是不合法的實數(shù)。 第一部分 語法與語義字符數(shù):字符常量是用單引號括起來的一個字符,如e、E;或“開場,后跟一個字符或一個整型常量字符的ASCII碼值的方法來表示另一個字符。 如:0、n、20等。 字符串常量:用一對雙引號將0個或假設(shè)干個字符括起來。留意中間0字符、字符串長度和占用內(nèi)存字節(jié)數(shù)。 如:1231230abc 第一部分 語法與語義符號常量: #define a 10 const int b=20; 字符常量是用單引號

5、括起來的一個字符,如e、E;或“開場,后跟一個字符或一個整型常量字符的ASCII碼值的方法來表示另一個字符。符號常量在程序中不能被改動。第一部分 語法與語義 例:1. 設(shè)有定義和聲明如下: #define d 2 int x=5;float y=383; char c=d; 以下表達式中有語法錯誤的選項是 D 。 Ax+ By+ Cc+ Dd+ 2. 以下語句中有語法錯誤的選項是 A 。 Aprintf(%d“,0e); Bprintf(%f“,0e2); Cprintf(%d,0 x2);Dprintf(%s,“0 x2);第一部分 語法與語義3.表達式算術(shù)運算符與表達式 運算符有:+、-、

6、*、/、%。 特別關(guān)注:/和%運算。 對于除法運算,假設(shè)運算符兩邊的操作數(shù)都是整數(shù),其運算結(jié)果也是整數(shù),即兩數(shù)整除;假設(shè)兩個操作符中有一個是實數(shù),其運算結(jié)果就是實數(shù)。 4/5 運算結(jié)果為0 4.0/5或4.0/5或4.0/5.0運算結(jié)果為0.8 5/4 運算結(jié)果為1 5.0/4或5/4.0運算結(jié)果為1.25。第一部分 語法與語義 例:1. 知有聲明“int a=3,b=4,c;,那么執(zhí)行語句“c=1/2*(a+b);后,c的值為_A_。 A. 0 B. 3 C. 3.5 D. 4 2. 以下雙目運算符中要求兩個操作數(shù)均為整型的運算符是_D_ 。 A| B& C D第一部分 語法與語義關(guān)

7、系運算符與表達式 運算符有:、=、=、=、!=。 特別關(guān)注:1. 把=了解=或把=寫成=。重點在上機改錯題。 2. 留意類似式子:設(shè)有定義 int x=3;計算5x10的值。 例:int k=0;while(k=1)k+;問while的循環(huán)次數(shù)。第一部分 語法與語義邏輯運算符與表達式 運算符有:!、&、|。 特別關(guān)注:邏輯表達式優(yōu)化所帶來的影響(也稱副作用)。 例:知有聲明“int a=12,b=15,c;,那么執(zhí)行表達式“c=(a|(b-=a)后,變量b和c的值分別為_b=15,c=1_。 第一部分 語法與語義賦值運算符與表達式 運算符有:=和與算術(shù)、位的復合賦值。 特別關(guān)注:多重賦

8、值的實現(xiàn)方式。 例:知有聲明“int n;float x,y;,那么執(zhí)行語句“y=n=x=3.89;后,Y的值為_。 A3 B3.0 C3.89 D4.0第一部分 語法與語義 賦值運算符左邊必需是內(nèi)存中一個可以訪問且可以合法修正的對象,可以是變量名、援用名、數(shù)組的元素、指針變量所指向的合法空間,而不能是常量或表達式。 看下面的賦值運算:3.1415926=pi; x+y=z;const int N=30;N=40;第一部分 語法與語義逗號運算符與表達式 逗號也稱順序求值表達式,最后一個表達式的值作為整個逗號表達式的結(jié)果。 例:設(shè)有語句: int i=1,s=1; for(;s+i6,i=5;i

9、+)s+=i; 以下for循環(huán)語句的循環(huán)次數(shù)為_。 位運算符第一部分 語法與語義類型轉(zhuǎn)換-自動類型轉(zhuǎn)換 類型轉(zhuǎn)換有自動類型轉(zhuǎn)換和強迫類型轉(zhuǎn)換。 關(guān)注轉(zhuǎn)換原那么。 例:1. 假設(shè)有聲明“float y=3.14619;int x;,那么計算表達式“x=y*100+0.5,y=x/100.0后y的值是 。 2. 知有聲明“char ch=g;,那么表達式ch=ch-a+A的值為字符_的編碼。 第一部分 語法與語義類型轉(zhuǎn)換-強迫類型轉(zhuǎn)換 例:設(shè)有聲明“int a=3,b=4;float x=4.5,y=3.5;,那么表達式“(float)(a+b)/2+(int)x(int)y的值是 。 第一部分

10、語法與語義+與- 特別關(guān)注:前置與后置的問題,圓括號不能改動后置的問題。 例:有如下程序段: int a5=1,3,5,7,9,*p=a; printf(%dn,*(p+); 那么執(zhí)行的結(jié)果是_。 第一部分 語法與語義二、輸入/輸出 輸入和輸出是計算機言語的重要組成部分。 常用輸入/輸出函數(shù)putchar():把變量中的一個字符常量輸出到顯示器屏幕上;getchar():從鍵盤上輸入一字符常量,此常量是該函數(shù)的值;printf():把各類數(shù)據(jù),加以格式控制輸出到顯示器屏幕上;scanf():從鍵盤上輸入各類數(shù)據(jù),并存放到程序變量中;puts():把一個字符串常量輸出到顯示器屏幕上;gets()

11、:從鍵盤上輸入一個字符串常量并放到程序的數(shù)組中。第一部分 語法與語義l最常用的最常用的“格式控制字符串闡明如下。格式控制字符串闡明如下。 (1)(1)%d%d:是按十進制整型數(shù)據(jù)格式輸出,數(shù)據(jù):是按十進制整型數(shù)據(jù)格式輸出,數(shù)據(jù)長度為實踐長度。長度為實踐長度。% %與與d d之間可以加正數(shù)之間可以加正數(shù)m m,控制,控制輸出寬度。輸出寬度。l(2)(2)%s%s:控制輸出一個字符串。:控制輸出一個字符串。 l(3)(3)%f%f:按小數(shù)方式輸出十進制實數(shù)包括:按小數(shù)方式輸出十進制實數(shù)包括單、雙精度,實數(shù)的整數(shù)部分全部輸出,并單、雙精度,實數(shù)的整數(shù)部分全部輸出,并輸出輸出6 6位小數(shù)。位小數(shù)。“%

12、m.nf“%m.nf表示輸出實數(shù)共占表示輸出實數(shù)共占m m個個字符位置,其中字符位置,其中n n位小數(shù),多余位左端補空格。位小數(shù),多余位左端補空格。 第一部分 語法與語義本卷須知:本卷須知:(1) (1) 掌握常用的一些格式控制字符;掌握常用的一些格式控制字符;(2)(2)格式闡明中格式闡明中% %與后面格式符之間不能有空格,與后面格式符之間不能有空格,除了除了X X,E E,G G格式符外,其他格式符必需用小寫格式符外,其他格式符必需用小寫字母。字母。(3) (3) 假設(shè)要輸出假設(shè)要輸出% %可在格式控制字符串中運用兩可在格式控制字符串中運用兩個延續(xù)的個延續(xù)的% %。例如:。例如:print

13、f(“%d%nprintf(“%d%n,5);5);輸出結(jié)果:輸出結(jié)果:5%5%第一部分 語法與語義第一部分 語法與語義三、三、C言語程序構(gòu)造言語程序構(gòu)造1. 程序的三種根本構(gòu)造程序的三種根本構(gòu)造順序構(gòu)造:是指程序按照語句在程序的先后順順序構(gòu)造:是指程序按照語句在程序的先后順序逐句運轉(zhuǎn)。沒有分支、跳轉(zhuǎn)。序逐句運轉(zhuǎn)。沒有分支、跳轉(zhuǎn)。 分支分支(或選擇或選擇)構(gòu)造:是指程序根據(jù)不同的條件構(gòu)造:是指程序根據(jù)不同的條件執(zhí)行不同的分支的語句,如執(zhí)行不同的分支的語句,如C言語中的言語中的if、switch語句、條件運算符語句。語句、條件運算符語句。 循環(huán)構(gòu)造:是指程序在滿足一定的條件下循環(huán)循環(huán)構(gòu)造:是指程

14、序在滿足一定的條件下循環(huán)執(zhí)行的相關(guān)語句,如執(zhí)行的相關(guān)語句,如C言語中的言語中的while、do while、for語句。語句。 由這由這3種根本構(gòu)造可以組成任何復雜邏輯的程種根本構(gòu)造可以組成任何復雜邏輯的程序。序。第一部分 語法與語義2. C言語的語句有以下六大類言語的語句有以下六大類:闡明語句:在闡明語句:在C+中,實現(xiàn)對數(shù)據(jù)構(gòu)造的定義中,實現(xiàn)對數(shù)據(jù)構(gòu)造的定義和描畫、對變量的定義性闡明的語句被稱為闡和描畫、對變量的定義性闡明的語句被稱為闡明語句。如:明語句。如:int a;表達式語句:在合法的表達式后面加上分號,表達式語句:在合法的表達式后面加上分號,即構(gòu)成了表達式語句。即構(gòu)成了表達式語句。

15、a=10;控制語句:控制改動程序運轉(zhuǎn)順序的語句被稱控制語句:控制改動程序運轉(zhuǎn)順序的語句被稱為控制語句。包括:選擇語句、循環(huán)語句、流為控制語句。包括:選擇語句、循環(huán)語句、流程跳轉(zhuǎn)語句等。如:程跳轉(zhuǎn)語句等。如:break;第一部分 語法與語義l函數(shù)調(diào)用語句:在函數(shù)的調(diào)用后面加上分號,函數(shù)調(diào)用語句:在函數(shù)的調(diào)用后面加上分號,即構(gòu)成函數(shù)調(diào)用語句。如:即構(gòu)成函數(shù)調(diào)用語句。如:about();l空語句:只需一個分號組成的語句稱為空語空語句:只需一個分號組成的語句稱為空語句,它不做任何操作。句,它不做任何操作。l復合語句:當用將假設(shè)干條語句括起來,復合語句:當用將假設(shè)干條語句括起來,C+將其作為一條語句進展

16、處置,被稱為復合將其作為一條語句進展處置,被稱為復合語句。語句。第一部分 語法與語義3. C言語程序組成言語程序組成 任何一個復雜的任何一個復雜的C言語程序是由一個言語程序是由一個main()函數(shù)和假設(shè)干個用戶自定義函數(shù)組成的。函數(shù)和假設(shè)干個用戶自定義函數(shù)組成的。main()函數(shù)是整個程序執(zhí)行時的入口,必需有函數(shù)是整個程序執(zhí)行時的入口,必需有且只能有一個,可放在程序的任何地方。且只能有一個,可放在程序的任何地方。4. 簡單的設(shè)計方法簡單的設(shè)計方法第一部分 語法與語義例:例:C言語規(guī)定,在一個源程序中言語規(guī)定,在一個源程序中main函數(shù)的函數(shù)的位置位置_。 A. 必需在最開場必需在最開場 B.

17、必需在最后必需在最后 C. 必需在預處置命令的后面必需在預處置命令的后面 D. 可以在其他函數(shù)之前或之后可以在其他函數(shù)之前或之后第一部分 語法與語義四、流程控制語句四、流程控制語句 C言語流程控制語句有:言語流程控制語句有:選擇語句:選擇語句:if語句、語句、switch語句、條件運算符語句、條件運算符語句;語句;循環(huán)語句:循環(huán)語句:while語句、語句、do_while語句、語句、for語語句;句;控制語句:控制語句:break語句、語句、continue語句。語句。第一部分 語法與語義1.條件語句單分支的if語句 if (表達式) 語句 if后面的表達式普通是一個邏輯表達式,假設(shè)表達式的計

18、算結(jié)果為邏輯真(非0),那么執(zhí)行語句;反之,那么不執(zhí)行這個語句。【提示】:if后面只能跟一條語句,假設(shè)if后面需求跟多條語句,那么需用“將其變成一條復合語句。 留意:條件和循環(huán)構(gòu)造中要留意=和=混淆。第一部分 語法與語義雙分支的if語句 if (表達式) 語句1 else 語句2 這種if 語句格式的含義是:假設(shè)if后面的表達式求值結(jié)果為非0,那么執(zhí)行語句1,否那么執(zhí)行語句2。同樣要求語句1和語句2是一條語句。第一部分 語法與語義if語句的嵌套 if條件語句嵌套時,else語句總是與最近的、同一塊內(nèi)的,沒有與else配對的if語句配對。例: if() if() else ()例:1. 以下程序

19、段的輸出結(jié)果是_x=20,y=0_。 int x=10,y=20,t=0; if(x=y)t=x;x=y;y=t; printf(“%dt%dn,x,y);2. 以下程序段的輸出結(jié)果是_yes_。 int a=1,b=3,c=5; if(c=a+b)cout“yes else cout“no;第一部分 語法與語義2.開關(guān)語句(switch) switch語句也稱開關(guān)語句、多重選擇語句。普通用于“根據(jù)一個量的多種不同取值實現(xiàn)程序的執(zhí)行流程的多個分支。用switch語句可以防止if-else多層嵌套呵斥的書寫錯誤,方便程序閱讀。 留意:語句格式、語法和break語句的作用。第一部分 語法與語義 【

20、提示】:a.各個case包括default分支出現(xiàn)的次序可以恣意; b. case分支是開關(guān)語句的入口,其后面的語句序列可以是一條語句,也可以是多條語句。 c. break語句是可選的,當所執(zhí)行的case分支沒有break,那么繼續(xù)往下執(zhí)行其他分支的語句序列,直到遇到break語句或switch語句的關(guān)括號“為止。 d. case后的常量表達式需為整型常量,取值可為整型、字符型或枚舉型。第一部分 語法與語義例:執(zhí)行語句序列int n;scanf(“%d,&n);switch(n)case 1:case 2: printf(“1);case 3:case 4: rintf(“2); br

21、eak;default: rintf(“3);時,假設(shè)鍵盤輸入1,那么屏幕顯示BA)1 B)2 C)3 D)12第一部分 語法與語義3.循環(huán)構(gòu)造語句 C言語循環(huán)構(gòu)造語句有:while()、dowhile()、和for()三種循環(huán)語句。第一部分 語法與語義while循環(huán)語句while語句格式為:while (表達式) 語句 其中,表達式可以是恣意合法的表達式,是循環(huán)的控制條件,語句是反復執(zhí)行的循環(huán)體,可以是C言語的一條語句,也可以是C言語的一條復合語句。 while語句的執(zhí)行過程是:先判別表達式的值,假設(shè)表達式的值為邏輯真非0,那么進入循環(huán)執(zhí)行循環(huán)體,然后自動回到循環(huán)控制條件的判別點,計算表達式

22、的值,并反復以上的過程,直到表達式的值為假或為0為止。第一部分 語法與語義學習循環(huán)的方式方法:循環(huán)的三個要素:尋覓反復執(zhí)行部分;循環(huán)的條件;進入循環(huán)前的初始化。第一部分 語法與語義do while 循環(huán)語句do while語句的格式為:do 語句while (表達式) do while循環(huán)的執(zhí)行過程是先執(zhí)行循環(huán)體語句,后判別循環(huán)條件表達式的值。表達式的值為真,繼續(xù)執(zhí)行循環(huán),表達式的值為假,那么終了循環(huán)。因此,do_while循環(huán)保證了循環(huán)體語句至少執(zhí)行一次。第一部分 語法與語義for循環(huán)語句for循環(huán)語句的格式為:for (表達式1;表達式2;表達式3) 語句 其中表達式1稱為循環(huán)初值表達式,

23、表達式2稱為控制表達式循環(huán)終值表達式,表達式3稱為增量表達式,語句序列為恣意合法的一條C言語語句或復合語句?!咎崾尽浚篺or語句中3個表達式都可以省略,但兩個分號不能省略。表達式1可以放在for語句之前,表達式3可以放在循環(huán)體中。表達式2也可省略。假設(shè)表達式2省略,表示循環(huán)條件恒成立。第一部分 語法與語義例:1. 以下關(guān)于“for(e1;e2;e3)s1;的描畫中不正確的選項是_B_。 A存在“for(;)s1;的情況 B表達式e1和e3可為空,但e2不能為空 C表達式e2的值可增可減 D循環(huán)體e1可以為空,但分號(;)必需有 2. 以下循環(huán)語句的循環(huán)體的執(zhí)行次數(shù)為_無限次_。 for(int

24、 s=0,j=1;j=10;s+=j);j+; 3.循環(huán)語句:“for(int x=0,y=0;y!=100|x10;)x+;, 執(zhí)行的循環(huán)次數(shù)是_A_。 A. 無限次 B. 10 C. 11 D. 100第一部分 語法與語義4. 分析程序的運轉(zhuǎn)結(jié)果: #include void main(void) int n=0,m=0; for(int i=0;i3;i+)for(int j=0;j=i)n+;m+; printf(“%dn%dn,n,m); 第一部分 語法與語義break語句 在switch語句中,break語句終止當前所在的case語句表,從而也就終止了整個switch語句。 在循環(huán)

25、語句中,break語句可以提早終了該語句所在的循環(huán)。在嵌套循環(huán)中,break終止的是其所在的循環(huán)語句,而并非終止一切的循環(huán)。第一部分 語法與語義continue 語句 continue語句用來終止本次循環(huán)。當程序執(zhí)行到continue語句時,將跳過其后尚未執(zhí)行的循環(huán)體語句,開場下一次循環(huán),并根據(jù)循環(huán)控制條件決議能否再次執(zhí)行循環(huán)。 在循環(huán)語句的循環(huán)體中假設(shè)執(zhí)行到continue語句,那么跳過循環(huán)體中continue語句的后續(xù)語句,將控制轉(zhuǎn)移到下一輪循環(huán)。第一部分 語法與語義例:1. 有如下程序段:int sum=0,i;for(i=1;i10;i+) if(i%3=0)break;sum+=i;

26、 printf(“sum=%dn,sum);把break改為continue分析結(jié)果。第一部分 語法與語義2. 以下程序運轉(zhuǎn)后的輸出結(jié)果是_。#includevoid main() int k=4,n=0; for(;nk;) n+; if(n%3!=0)continue; k-; coutk,n; 第一部分 語法與語義3.在給定范圍內(nèi)查找k使得用公式k2+k+17生成的整數(shù)滿足以下條件:該數(shù)的十進制表示中低3位數(shù)字一樣,去掉低3位后的整數(shù)是回文數(shù)。例如,當k=461時用公式生成的整數(shù)是212999,該數(shù)滿足所給條件。第一部分 語法與語義 五、數(shù)組 在構(gòu)造化程序設(shè)計中,數(shù)組是組織數(shù)據(jù)的最重要、

27、最有效手段。很多算法和編程技巧都是建立在數(shù)組的根底之上的。 數(shù)組是有序的一樣類型數(shù)據(jù)的集合。數(shù)組的特征是:數(shù)組名;數(shù)組類型也就是數(shù)組各元素的類型;維數(shù)(即標識數(shù)組元素所需的下標個數(shù));數(shù)組大小(即可包容數(shù)組元素的個數(shù))。第一部分 語法與語義1. 一維數(shù)組一維數(shù)組的定義與初始化 一維數(shù)組也稱向量,它是由具有一個下標的數(shù)組元素組成的數(shù)組,它的定義方式為: ; 數(shù)組定義時,闡明數(shù)組大小的表達式必需是常量表達式。數(shù)組定義時,沒有初始化時,靜態(tài)或全局數(shù)組為0,其他的是不確定的值。當只對部分元素初始化時,其他元素為0。初始化時,初始化值個數(shù)不能多于數(shù)組元素個數(shù)。第一部分 語法與語義 例:1. 以下數(shù)組定義

28、中錯誤的選項是_D_。 A. int a12=1;B.int a22=1,2; Cint a33; Dint a43; 2. 以下數(shù)組定義中正確的選項是_C_。 A. int n=10;int an; B. int a(10); C. const int n=10;int an; D. int n;scanf(“%d,&n);int an;第一部分 語法與語義 例:3. 以下數(shù)組定義中錯誤的選項是_C_。 A. int a4=0,1,2,3; B. int a=0,1,2,3,4; Cint a4=0,1,2,3,4; Dint a4=0;第一部分 語法與語義一維數(shù)組的援用 援用數(shù)組元

29、素的語法格式為: 其中,是非負的整型表達式,也就是數(shù)組的下標,數(shù)組下標是用來指定所要訪問的數(shù)組中的元素的位置。提示:數(shù)組下標范圍是從0開場的到數(shù)組的大小-1。 如:int a10;那么數(shù)組下標范圍是09。 數(shù)值數(shù)組不能整體輸入/輸出,也不能整體援用,包括數(shù)組之間的賦值。第一部分 語法與語義2. 二維數(shù)組二維數(shù)組的定義與初始化 二維數(shù)組對應數(shù)學中的行列式或矩陣。定義二維數(shù)組的普通格式為: ; 二維數(shù)組中的每個元素要用兩個下標來表示,規(guī)定表示為二維數(shù)組的行下標的大小,表示為二維數(shù)組的列下標的大小。 第一部分 語法與語義二維數(shù)組元素的表示方法為: ;提示:兩個下標的取值范圍都從0開場。在C言語中,二

30、維數(shù)組在計算機中的存儲順序是按行順序存儲的,即先存儲第1行元素,然后再存儲第2行元素,依次類推。 第一部分 語法與語義例:1.對二維數(shù)組a進展正確初始化的是 D 。Aint a23=1,2,3,4,5,6;Bint a3=1,2,3,4,5,6;Cint a2=1,2,3,4,5,6;Dint a2=1,2,3,4;2. 設(shè)int b5=1,2,3,4,5,6,7;,那么元素b12的值是A。A. 0 B. 2 C. 6 D. 7第一部分 語法與語義3.數(shù)組運用-排序和查找 排序和查找是建立在數(shù)組根底上的最重要的算法。排序的算法很多,最根本而常用的算法是選擇排序法和冒泡排序法。 查找是在排序的根

31、底上進展的。根本的查找方法有順序查找和折半查找兩種方法。 【例】 :在一個有10個元素的數(shù)組a中找出值最大的元素及其位置。分析:這里采用“打擂臺算法。1、設(shè)置一個擂臺(變量max),先將一個數(shù)(通常是a0)放在擂臺上(max=a0);2、用下一元素(a1)與擂臺上的數(shù)(max)進展比較,大者留臺上。3、將第三個元素(a2)再與臺上的數(shù)比較,同樣是大者留臺上。4、如此比下去直到一切的數(shù)(a1a9)都上臺比過為止。最后留在臺上的就是大者。#includevoid main() int i,j,max,a10=6,9,8,5,2,4,7,3,1,0; max=a0; j=0;/將a0放在擂臺上for

32、(i=1;imax) /假設(shè)擂臺max上的數(shù)字小 max=ai; /就將ai留在擂臺上j=i; /記錄擂臺上數(shù)在數(shù)組中的位置 printf(max=%d ,其位置為: %dn,max,j); 【例】用冒泡排序法對n個整數(shù)進展升序排序。 留意:元素的序號從0開場,程序如下: for (i=0; ii; j-) if (ajaj-1) t=aj; aj=aj-1; aj-1=t; #includevoid main()int a10=12,5,34,26,18,8,4,22,9,15; int n=10,i,j,t; for (i=0; ii; j-) if (ajaj-1) t=aj;aj=aj

33、-1;aj-1=t; for (i=0; in-1; i+)printf(“%dt,ai); printf(“n);【例】用選擇排序法對10個整數(shù)進展升序排序。 #includevoid main() int a10=12,5,34,26,18,8,4,22,9,15; int n=10,i,j,t; for (i=0; in-1; i+)for (j=i+1;jaj) t=ai;ai=aj;aj=t; for (i=0; in-1; i+)printf(“%dt,ai); printf(“n);【例】用順序查找法在數(shù)組中查找指定的元素。#includevoid main() int a10=

34、12,5,34,26,18,8,4,22,9,15; int x,i,n=10; scanf(“x=%d,&x); for (i=0; in; i+) if (ai=x)break; if(i=n) printf(“%d不在數(shù)組中!n,x); else printf(%d其位置為: %dn,x,i);【例】在具有10個元素的數(shù)組中,用二分查找法(也稱折半查找法)在數(shù)組中查找指定的元素。 分析:二分法查找要求數(shù)組元素是有序的。 二分法查找根本思緒是(以升序為例):在一個區(qū)間l,r中計算中點位置m=(l+r)/2,假設(shè)am就是要查找的x,那么查找勝利!#includevoid main()

35、 int y10=5,7,8,14,25,36,44,50,69,80;int i,n,m,x;scanf(“輸入要查找的數(shù):%d,&x);n=0;m=9; i=(n+m)/2;while(n=m&yi!=x) if(yix) m=i-1; i=(n+m)/2; if(yi!=x) printf(No found!n“);else printf(“數(shù)%d在數(shù)組的第%d個數(shù)!n“,x,i);第一部分 語法與語義4.字符數(shù)組 字符數(shù)組可以整個字符串一次輸入/輸出運用數(shù)組名,但在運用數(shù)組名整體一次輸出時,留意字符串終了符0。 在實踐操作時,要特別留意字符串中有無字符本義序列。第一部分

36、 語法與語義例:1.以下程序運轉(zhuǎn)后的輸出結(jié)果是_7,2_。main() char a7=“a00a00;int i,j; i=sizeof(a);j=strlen(a); printf(“%d %d,i,j);char a=“a1231230ef;第一部分 語法與語義2.在自動類型數(shù)組初始化時,假設(shè)初始化的元素比數(shù)組的元素少,那么其他元素初始化為: ;“int a3=3;那么a2 ;“int a3=1,3,5,7;那么會 ;“int a3;那么a2的值 。3.設(shè)有以下語句序列: 。 int x;scanf(“%d,&x); float z,yx=1,2,3,4,5,6,7,8; /A

37、z=y3; /B A.z的值為4 B.z的值為3 C.B行語句錯 D. A行語句錯第一部分 語法與語義4.要定義數(shù)組A,使得其中每個元素的數(shù)據(jù)依次為:3、9、4、8、0、0、0,錯誤的定義語句是:A. int A=3,9,4,8,0,0,0; B. int A7=3,9,4,8,0,0,0; C. int A=3,9,4,8; D. int A7=3,9,4,8;第一部分 語法與語義六、函數(shù)1. 函數(shù)的根本知識(1).函數(shù)定義 函數(shù)定義時,有前往值要留意函數(shù)的前往值類型與return語句后的表達式類型相一致,函數(shù)沒有前往值時void,那么用 return ;語句。 函數(shù)可以嵌套調(diào)用,但不可以嵌

38、套定義。在一個函數(shù)的函數(shù)體中定義另一個函數(shù)是非法的。第一部分 語法與語義(2).函數(shù)調(diào)用 調(diào)用函數(shù)時,實參和形參要求一一對應。 函數(shù)調(diào)用有兩種:作為表達式的函數(shù)調(diào)用和函數(shù)調(diào)用語句。對于沒有前往值的函數(shù)調(diào)用只能經(jīng)過函數(shù)調(diào)用語句實現(xiàn)。(3).函數(shù)調(diào)用參數(shù)傳送 參數(shù)傳送有三種:值傳送、地址傳送和援用傳送。第一部分 語法與語義(4).作用域難點與存儲類 在C+中,作用域共分為五類:塊作用域;文件作用域;函數(shù)原型作用域;函數(shù)作用域;類作用域。 部分變量:在一個函數(shù)內(nèi)部定義的變量或在一個塊中定義的變量稱為部分變量。 全局變量:在函數(shù)外定義的變量或用extern闡明的變量稱為全局變量。全局變量的作用域稱為文

39、件作用域,即在整個文件中都可以訪問。第一部分 語法與語義(1)設(shè)有函數(shù)定義調(diào)用語句“f(e1,e2),(e3,e4,e5);,那么實參個數(shù)是 A 。 (A) 2 (B) 3 (C) 4 (D) 5 (2)以下函數(shù)中對調(diào)用它的函數(shù)沒有起到任何作用的是 C 。 (A) void f1(double &x)-x; (B) double f2(double x)return x-1.5; (C) void f3(double x)-x; (D) double f4(double *x)-*x;return *x;第一部分 語法與語義(3)以下程序輸出的第一行是 0 1 2 3 4 第二行是 1

40、5 。#include (作用域)int k;void main(void) k=10; for(int i=0;i5;i+) int k;k+=i;/由于重新定義變量k,所以就有不同的作用域 coutk ;k+;:k+;coutnkn;第一部分 語法與語義2. 遞歸函數(shù) 在利用遞歸方法求值時,必需留意三點: 1.遞歸的公式; 2.遞歸的終了條件; 3.遞歸的約束條件。 關(guān)鍵是找到遞歸公式和遞歸的終了條件。 遞歸函數(shù)在調(diào)用時分兩部分:遞推和回歸。第一部分 語法與語義(1).以下程序的輸出結(jié)果是vrg 。#includevoid func2(int i);char s=“verygood!voi

41、d func1(int i) coutsti;if(i3)i=+2;func2(i);void func2(int i) coutsti;if(i3)i=+2;func1(i);void main() int i=0;func1(i);第一部分 語法與語義(2).以下程序的輸出結(jié)果是 15 。#includelong fib(int n) if(n2) return(fib(n-1)+fib(n-2); else return 5*n;void main() coutfib(3);第一部分 語法與語義(3)以下程序輸出的第一行是 1 1 第二行是 4 1 最后一行是 x=10 。#includ

42、evoid fun(int n,int *s) int f1,f2; if(n=1|n=2)*s=1; else fun(n-1,&f1);fun(n-2,&f2); *s=2*f1+f2+1; coutf1tf2n;void main(void)int x;fun(4,&x);coutx=xn;第一部分 語法與語義( 4 ) 以 下 程 序 輸 出 的 結(jié) 果 是 dcba 。#includevoid show(char *s)if(*s)show(s+1);cout*s;void main(void) show(“abcd0efg0hij); coutn;第一部分

43、語法與語義(5)以下程序輸出的第一行是 123 第二行是 321 第三行是 123 。#includevoid p1(char s,int i) if(si!=0)p1(s,i+1); coutsi; void p2(char s,int i) coutsi; if(si!=0)p2(s,i+1);void main(void) char str=123;coutstrn; p1(str,0);coutn; p2(str,0);coutn;第一部分 語法與語義3.重載函數(shù) 定義的重載函數(shù)必需具有:一樣的函數(shù)名但具有不同的參數(shù)個數(shù)或不同的參數(shù)類型。 調(diào)用重載該函數(shù)時,將根據(jù)實參的數(shù)據(jù)類型和重載函

44、數(shù)的形參匹配,確定調(diào)用其中的一個重載函數(shù)。第一部分 語法與語義4.靜態(tài)變量 靜態(tài)類型變量有確定的初值。靜態(tài)類型變量對全局變量和部分變量有不同的含義。 靜態(tài)類型變量只能初試化一次。當部分變量運用靜態(tài)類型變量時,其作用將保管函數(shù)的運轉(zhuǎn)結(jié)果,以便下次調(diào)用函數(shù)時,能繼續(xù)運用上次計算的結(jié)果。但不在變量的作用域時,不能直接運用,確需運用時,可經(jīng)過變量的地址取值即指針。 當全局變量運用靜態(tài)類型變量時,表示所闡明的變量僅限于這個源程序文件內(nèi)運用。第一部分 語法與語義(1)以下程序輸出的結(jié)果是 i=105 i=110 。 #include int t() static int i=100; i+=5; retu

45、rn i; void main(void) couti=t()n; couti=t()n; 第一部分 語法與語義(2)以下程序輸出的結(jié)果是 i=105 105 i=105 110 。 #include int t(int *p) static int i=100;*p=&i; i+=5; return i; void main(void) int i,*p;i=t(&p); couti=it *pn; t(&p); couti=it *pn; 第一部分 語法與語義(3)以下程序輸出的第一行是 20 ,第二行是 400 。#includeint f(int x) stat

46、ic int u=1; x+=x;return u*=x;void main(void) int x=10;coutf(x)n;coutf(x)n;第一部分 語法與語義(4)以下程序輸出的第一行是 21 ,第二行是 53 。#includeint f(void) static int a,b=10,c=1; a+=b;b+=c;return c=a+b;void main(void) coutf()n;coutf()n;第一部分 語法與語義5. 編譯預處置指令 編譯預處置指令包括三方面的內(nèi)容:文件包含、宏指令和條件編譯,其重點是宏指令-帶參數(shù)的宏定義。 留意:在宏調(diào)用時,將不作任何語法檢查,也

47、不做任何計算,只作簡單交換。第一部分 語法與語義(1)假設(shè)有宏定義: #define N 2 #define Y(n) (N+1)*n)那么執(zhí)行語句“z=2*(N+Y(N+2);后,z的值為 20 。(2)假設(shè)有宏定義: #define T(x,y,z) x*y*z/4那么表達式“z=T(3+4,2*4,4+4);后,z的值為 132 。第一部分 語法與語義(3)假設(shè)有宏定義: 那么 D 。 #define M(a,b) a*b;/E int x=M(3+4,5+6),y;/F y=M(3,4); /GA.編譯時,E行語法錯 B.編譯時,F行語法錯C.編譯時,G行語法錯 D.編譯時,F行和G行

48、語法錯(4)假設(shè)有宏定義: #define P(x,y) x/y #define PP(a,b) a*b int c=P(2+3,2+3)+PP(2+3,2+3);那么c的值為 17 。第一部分 語法與語義(5).編譯以下程序時,結(jié)果是 B 。#include /第1行#define aa 123; /第2行void main(void) /第3行 coutaan; /第4行A.編譯時第2行出錯 B.編譯時第4行出錯C.編譯時第2,4行出錯 D. 編譯時無錯誤第一部分 語法與語義六、指針、援用和函數(shù)1.指針 指針變量的訪問有兩種方式:訪問指針變量的值和訪問指針的內(nèi)容。 指針可執(zhí)行的運算有三種:

49、賦值運算、關(guān)系運算和算術(shù)運算。 指針變量+,-,*,&之間的混合運算, *p1+、*+p1、(*p1)+、+*p1 。第一部分 語法與語義2. 指針和一維數(shù)組假設(shè)有:int a10,*point;point=&a0;總結(jié):(1).數(shù)組名等同于數(shù)組的第0個元素的地址,也是數(shù)組的起始地址。(2).當指針變量point指向數(shù)組a的第0個元素后,那么point+i等同于a+i,為ai的地址。(3).當指針變量point指向數(shù)組a的第0個元素后,那么*(point+i)、*(a+i)、ai、pointi和*&ai都表示元素ai。 留意:point+允許,但a+不允許。第一部分 語

50、法與語義3.指針與二維數(shù)組要留意區(qū)分元素地址和行地址。例:假設(shè)有數(shù)組:int a44,*point;第0行第0列的元素地址:a0,&a00,*&a0,*a 等。第0行的行地址:&a0,a 等。Point指針變量只能存放元素地址值。第一部分 語法與語義(1)以下程序輸出的第一行至第三行分別是 1 1 2 、 3 5 8 、 13 21 34 。#include void f(int *q1,int *q2,int *q3) *q3=*q1+*q2;void main(void) int i,j,a33=1,1,*p1=a0; int *p2=a0+1,*p3=a0+2;

51、for(i=2;i9;i+)f(p1+,p2+,p3+); for(i=0;i3;i+)for(j=0;j3;j+) coutaijt; coutn; 第一部分 語法與語義 4. 指向數(shù)組的指針 對于一個m列的二維數(shù)組,我們可以定義一個指向它的指針:“int (*p)m; 。然后就有:“p=a; 。這里的指針p稱為“指向數(shù)組的指針(也稱指向數(shù)組的指針變量)。 定義指向數(shù)組的指針的普通方式為: (*)【例】運用指向數(shù)組的指針輸出數(shù)組中的元素。【例】運用指向數(shù)組的指針輸出數(shù)組中的元素。 void main() int a34=0,1,2,3,4,5,6,7,8,9,10,11; int (*p)4

52、, i, j; p=a; /指針指針p指向數(shù)組指向數(shù)組a起始地址起始地址 for(i=0;i3;i+) for(j=0;jab; if(ab)exchang( &a,&b ); coutatbn; 實參為實參為地址地址第一部分 語法與語義4.指針和字符串 當字符串和指針結(jié)合在一同,運用起來就特別靈敏。在各類考試中經(jīng)常會出現(xiàn)相關(guān)的標題。 (1)(完善程序題)以下程序的功能是:輸入兩個字符串,把這兩個字符串拼成一個新的字符串,輸出拼接后的字符串。第二部分 構(gòu)造化程序設(shè)計 (1)(完善程序題)以下程序的功能是:輸入兩個字符串,把這兩個字符串拼成一個新的字符串,輸出拼接后的字符串。#i

53、ncludechar *stringcat(char *to,char *from)/實現(xiàn)拼接 char *p= to ; /把form拼接到to后面 while(*to+); to- ; while( *to+ =*from+) ;return p;(2)以下程序中函數(shù)以下程序中函數(shù)insertstr的功能是:在字符串的功能是:在字符串str中中一切出現(xiàn)子串一切出現(xiàn)子串str1的后面插入子串的后面插入子串str2。如本程序的。如本程序的輸出為:輸出為:“I am a student too.You are a student too.He is a student too.#include#

54、includechar *insertstr(char *str,char *str1,char str2) char *p,*p1,*q1,*t1; int i,len2; if(*str=0| *str1=0| *str2=0) return str; len2=strlen(str2); p=str; t1=str2; while(*p!=0) p1=p;q1=str1; while(*p1=*q1& *q1 ) p1+;q1+; if(p!=p1&*q1=0) p= p1 ;while(*p1+!= 0); for(;p1=p;p1-) *( p1+len2 )=*p1

55、; for(i=0;*(t1+i)!=0;i+) *p+=*(t1+i); p+ ; return str;第一部分 語法與語義 5. 援用援用 援用是某一變量目的的一個別名,對援用援用是某一變量目的的一個別名,對援用的操作與對變量直接操作完全一樣。的操作與對變量直接操作完全一樣。 定義援用的普通格式:定義援用的普通格式: &=; “目的變量名必需是曾經(jīng)定義過的變量或援用。目的變量名必需是曾經(jīng)定義過的變量或援用。符號符號“&在不同的場一切不同的含義。在數(shù)據(jù)聲明在不同的場一切不同的含義。在數(shù)據(jù)聲明時時(如如int &a),“&意為援用,假設(shè)意為援用,假設(shè)“&

56、;前無類前無類型符,那么是取變量的地址型符,那么是取變量的地址(如如int a,*p=&a)。6.參數(shù)傳送方式有值傳送、地址傳送和援用傳送三種。怎樣了解參數(shù)傳送呢? 前期知識回想計算機內(nèi)存單元、地址與數(shù)據(jù)第一部分第一部分 語法與語義語法與語義了解C言語中,最簡單的語句: int a=10;10地址地址變量名變量名變量的值變量的值a2000H第一部分第一部分 語法與語義語法與語義形參與實參的對應關(guān)系假設(shè):主調(diào)函數(shù)中有定義:int x=10,*p=&x,y10; 形參形參實參實參值傳遞:類型值傳遞:類型 參數(shù)名參數(shù)名int f(int a)常量、變量、表達式常量、變量、表達式f(x

57、)地址傳遞:類型地址傳遞:類型 *參數(shù)名參數(shù)名 類型類型 參數(shù)名參數(shù)名int f(int *a)int f(int a)&變量名、指針變量名、變量名、指針變量名、數(shù)組名數(shù)組名f(p)或或f(&x)f(y)引用傳遞:類型引用傳遞:類型 &參數(shù)名參數(shù)名int f(int &a)變量名變量名f(x) 參數(shù)不同傳送方式對結(jié)果的影響參數(shù)不同傳送方式對結(jié)果的影響 #include int f1(int a) a+;return a; int f2(int *a)(*a)+;return *a; int f3(int *a)a+;return *a; int f4(int &

58、amp;a)a+;return a; void main() int y=20,x=10;printf(%d,%dn,x,f1(x);x=10;printf(%d,%dn,x,f2(&x);x=10;printf(%d,%dn,x,f3(&x);x=10;printf(%d,%dn,x,f4(x); 10,11 11,11 10,20 11,11第一部分第一部分 語法與語義語法與語義七、七、 構(gòu)造體構(gòu)造體 有時需求將不同類型的數(shù)據(jù)有時需求將不同類型的數(shù)據(jù)組合成一個有機的整體,以便于援組合成一個有機的整體,以便于援用。這些組合在一個整體中的數(shù)據(jù)用。這些組合在一個整體中的數(shù)據(jù)是相互

59、聯(lián)絡(luò)的。是相互聯(lián)絡(luò)的。 第一部分第一部分 語法與語義語法與語義1. 構(gòu)造體類型闡明構(gòu)造體類型闡明聲明一個構(gòu)造體類型的普通方式為聲明一個構(gòu)造體類型的普通方式為struct 構(gòu)造體名構(gòu)造體名 成員表列成員表列 ; 第一部分第一部分 語法與語義語法與語義2. 構(gòu)造體類型變量定義構(gòu)造體類型變量定義定義構(gòu)造體類型變量的方法定義構(gòu)造體類型變量的方法先聲明構(gòu)造體類型再定義變量名先聲明構(gòu)造體類型再定義變量名structstudent int num; charname20; charsex; ;第一部分第一部分 語法與語義語法與語義聲明構(gòu)造體類型時定義變量名聲明構(gòu)造體類型時定義變量名structstudent

60、 int num; charname20; charsex; stu1,stu2;直接定義構(gòu)造體變量直接定義構(gòu)造體變量struct int num; charname20; charsex; stu1,stu2;第一部分第一部分 語法與語義語法與語義3. 構(gòu)造體類型變量援用構(gòu)造體類型變量援用 在定義了構(gòu)造體變量以后在定義了構(gòu)造體變量以后,當當然可以援用這個變量。但應遵守以然可以援用這個變量。但應遵守以下規(guī)那么下規(guī)那么:(1) 不能將一個構(gòu)造體變量作為一個不能將一個構(gòu)造體變量作為一個整體進展輸入和輸出。例如整體進展輸入和輸出。例如,已定已定義義student1和和student2為構(gòu)造體為構(gòu)造體變量并且它們已有值。不能這樣援變量并且它們已有值。不能這樣援用用: printf (%d,%s,%c,%d,%f,%sn,student1); 只能對構(gòu)造體變量中的各個只能對構(gòu)造體變量中的各個成員分別進展輸入和輸出。援用構(gòu)成員分別進展輸入和輸出。援用構(gòu)造體變量中成員的方式為:造體變量中成員的方式為: 構(gòu)造體變量名構(gòu)造

溫馨提示

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

評論

0/150

提交評論