C語言二級(jí)輔導(dǎo)課件_第1頁
C語言二級(jí)輔導(dǎo)課件_第2頁
C語言二級(jí)輔導(dǎo)課件_第3頁
C語言二級(jí)輔導(dǎo)課件_第4頁
C語言二級(jí)輔導(dǎo)課件_第5頁
已閱讀5頁,還剩284頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第1章C語言的基本詞法一、字元集1.什麼是字元集

在C語言程式中允許出現(xiàn)的所有基本字元的組合稱為C語言的字元集。2.字元集分類(1)大小寫英文字母(52個(gè))(2)數(shù)字符號(hào)(10個(gè))(3)鍵盤符號(hào)(33個(gè))(4)轉(zhuǎn)義字元3.轉(zhuǎn)義字元的作用、表示方法(1)作用:通常用來表示鍵盤上的控制代碼或特殊符號(hào)。(2)表示方法:由“反斜杠字元(\)”後跟單個(gè)字元或若干個(gè)字元組成。(3)常用轉(zhuǎn)義字元:

\n,\t,\a,\”,\’,\\,\ddd,\xhh二、保留字1.什麼是保留字在C語言的程式中有特殊含義的英語單詞稱為保留字。2.保留字的作用主要用於構(gòu)成語句、進(jìn)行存儲(chǔ)類型和數(shù)據(jù)類型的轉(zhuǎn)換。3.常用保留字可參考教材。三、識(shí)別字1.什麼是識(shí)別字識(shí)別字是用戶自定義的一種字元序列,通常用來表示程式中需要辨認(rèn)的對(duì)象名稱。2.識(shí)別字的命名規(guī)則(1)識(shí)別字是由字元或下劃線開頭的字母、數(shù)字、下劃線組成的一串符號(hào);(2)保留字不能作為識(shí)別字。正確識(shí)別字:sumia2a_2_a2_a_2錯(cuò)誤的識(shí)別字:2aa?c.ga-2ifwhile第2章基本數(shù)據(jù)類型和運(yùn)算2.1C語言的數(shù)據(jù)類型整型實(shí)型字元型無值型指針型數(shù)組結(jié)構(gòu)型枚舉型共用型基本類型構(gòu)造類型2.2常量一、什麼是常量二、常量類型

整型常量、實(shí)型常量、字元常量、字串常量三、常量特點(diǎn)四、各種類型常量說明1.整型常量(1)

整型常量就是整數(shù),包括正整數(shù)、負(fù)整數(shù)及0;(2)整型常量有三種書寫方式十進(jìn)位整數(shù):0、-111、+15、21八進(jìn)制整數(shù):00、-0111、+015、021十六進(jìn)制整數(shù):0x0、-0x111、0x21(3)整型常量在機(jī)記憶體放一般占2個(gè)位元組,所表示的範(fàn)圍-32768~+32767(4)為了擴(kuò)大數(shù)值範(fàn)圍,C語言提供“長整型常量”,長整型常量在機(jī)記憶體放占4個(gè)位元組。表示方法是在數(shù)的後面加一個(gè)L或l字母。(0L、40000L)2.實(shí)型常量(1)

實(shí)型常量就是帶小數(shù)點(diǎn)的實(shí)數(shù),也稱為浮點(diǎn)數(shù);(2)實(shí)型常量書寫方式有兩種:一般形式的實(shí)數(shù):12.345、-1.23456、7.0指數(shù)形式的實(shí)數(shù):-1.2345E3.0、0.12345e4(3)實(shí)型常量在機(jī)記憶體放一般占4個(gè)位元組;3.字元常量(1)

字元常量就是用兩個(gè)單引號(hào)(‘)前後括住的單個(gè)字元;例如:’a’、’A’、’1’、’%’(2)轉(zhuǎn)義字元也可以組成字元常量;例如:‘\n’、’\101’、’\x41’(3)字元常量在機(jī)記憶體放一般占1個(gè)位元組;4.字串常量(1)

字串常量就是用兩個(gè)雙引號(hào)(“)前後括住的若干個(gè)字元;例如:”abc”、”ABC”、”112”(2)轉(zhuǎn)義字元也可以出現(xiàn)在字串常量中;例如:“123\n4\\”、”\”1\43\n2\x11\””(3)字串常量在機(jī)記憶體放所佔(zhàn)用的位元組數(shù)等於字串長度+1;2.3變數(shù)一、基本問題1.什麼是變數(shù)2.變數(shù)的命名規(guī)則3.變數(shù)的特點(diǎn)(1)變數(shù)在內(nèi)存中要佔(zhàn)用連續(xù)的若干個(gè)位元組;(2)所佔(zhàn)用的位元組數(shù)由變數(shù)的數(shù)據(jù)類型確定;(3)變數(shù)使用必須要先定義。二、變數(shù)的數(shù)據(jù)類型及其定義1.變數(shù)定義格式[存儲(chǔ)類型符]數(shù)據(jù)類型符變數(shù)名1,變數(shù)名2,……;

2.變數(shù)數(shù)據(jù)類型數(shù)據(jù)類型類型符號(hào)佔(zhàn)用位元組數(shù)數(shù)據(jù)類型類型符號(hào)佔(zhàn)用位元組數(shù)整型int2無符號(hào)長整型unsignedlong4短整型short2單精確度實(shí)型float4長整型long4雙精度實(shí)型double8無符號(hào)整型unsignedint2字元型char1無符號(hào)短整型unsignedshort23.變數(shù)存儲(chǔ)類型三、變數(shù)的初始化1.變數(shù)賦初值的語句格式:[存儲(chǔ)類型符]數(shù)據(jù)類型符變數(shù)名1=初值,變數(shù)名2=初值;

2.幾點(diǎn)說明存儲(chǔ)類型存儲(chǔ)類型符存儲(chǔ)地點(diǎn)自動(dòng)型auto記憶體堆疊區(qū)寄存器型registerCPU的通用寄存器靜態(tài)型static記憶體數(shù)據(jù)區(qū)外部參照型extern3.舉例分析例1:main(){inta;staticintb;printf(“%d”,a);‘將輸出不確定的值

printf(“%d”,b);‘將輸出0}例2:voidf1();main(){f1();f1();}voidf1(){inta=3;staticintb=4;printf(“%d,%d”,a,b);a=a+1;b=b+1;}說明:(1)第1次調(diào)用f1(),將輸出3,4(2)第2次調(diào)用f1(),將輸出3,5四、變數(shù)的生存期和作用域1.什麼是內(nèi)部變數(shù)和外部變數(shù)

把在函數(shù)(或某個(gè)複合語句)內(nèi)定義的變數(shù)稱為“內(nèi)部變數(shù)”,把在函數(shù)外定義的變數(shù)稱為“外部變數(shù)”。2.什麼是變數(shù)的生存期

我們把變數(shù)從開始分配記憶體單元到分配的記憶體單元被收回的期間稱為變數(shù)的生存期。3.什麼是變數(shù)的作用域

在變數(shù)的生存期中,我們把變數(shù)可以使用的程式區(qū)域稱為變數(shù)的作用域。4.作用域的分類全局變數(shù):生存期覆蓋了定義點(diǎn)到整個(gè)程式結(jié)束的變數(shù)稱為全局變數(shù)。局部變數(shù):生存期只覆蓋某個(gè)函數(shù)(或某個(gè)複合語句)的變數(shù)稱為局部變數(shù)。5.幾點(diǎn)說明6.舉例分析

inta1;main(){inta2;{inta3;}}inta4;voidf1(){inta5;staticinta6;}2.4運(yùn)算符基本問題1.什麼是運(yùn)算符

用來表示各種運(yùn)算的符號(hào)稱為運(yùn)算符。2.運(yùn)算符特點(diǎn)(1)運(yùn)算符必須有運(yùn)算對(duì)象,運(yùn)算對(duì)象都有規(guī)定的數(shù)據(jù)類型,同時(shí)運(yùn)算結(jié)果也有確定的數(shù)據(jù)類型。(2)每個(gè)運(yùn)算符都有自己特定的運(yùn)算規(guī)則。(3)當(dāng)運(yùn)算式中出現(xiàn)多個(gè)運(yùn)算符時(shí)則必須考慮運(yùn)算符的優(yōu)先順序。(4)同級(jí)別的運(yùn)算符還規(guī)定了結(jié)合性。一、算術(shù)運(yùn)算符包括基本算術(shù)運(yùn)算符和增1、減1運(yùn)算符兩種1.基本算術(shù)運(yùn)算符(1)有哪些運(yùn)算符號(hào)(2)特點(diǎn)(3)舉例說明運(yùn)算符名稱優(yōu)先順序結(jié)合性+、-取正、取負(fù)2自右向左*、/、%乘、除、取餘數(shù)3自左向右+、-加、減4自左向右2.增1、減1運(yùn)算符(1)有哪些運(yùn)算符號(hào)(2)特點(diǎn)①增1、減1的運(yùn)算對(duì)象必須是變數(shù)或數(shù)組元素;②增1(或減1)運(yùn)算符作為首碼使用時(shí),是先對(duì)運(yùn)算對(duì)象加1(或減1),然後再使用加1(或減1)後的運(yùn)算對(duì)象。③增1(或減1)運(yùn)算符作為尾碼使用時(shí),是先使用不加1(或減1)的運(yùn)算對(duì)象,然後再對(duì)運(yùn)算對(duì)象加1(或減1)。運(yùn)算符名稱優(yōu)先順序結(jié)合性++增12自右向左--減1二、關(guān)係運(yùn)算符1.關(guān)係運(yùn)算有哪些運(yùn)算符號(hào)2.關(guān)係運(yùn)算符的特點(diǎn)①關(guān)係運(yùn)算符可以用來比較兩個(gè)數(shù)值型數(shù)據(jù)的大小,也可以比較兩個(gè)字元型數(shù)據(jù)的大小。②關(guān)係運(yùn)算符的運(yùn)算結(jié)果是邏輯值,若為“真”用整數(shù)1表示,若為“假”用整數(shù)0表示。運(yùn)算符名稱優(yōu)先順序結(jié)合性>=、>、<=、<大於等於、大於、小於等於、小於6自左向右==、!=等於、不等於7自左向右三、邏輯運(yùn)算符1.邏輯運(yùn)算有哪些運(yùn)算符號(hào)2.邏輯運(yùn)算符的特點(diǎn)①邏輯運(yùn)算符運(yùn)算對(duì)象是數(shù)值型或字元型等;如果是非0表示邏輯真,0表示邏輯假。②運(yùn)算結(jié)果是邏輯值,如運(yùn)算結(jié)果為真用1表示,若為假則用0表示。運(yùn)算符名稱優(yōu)先順序結(jié)合性!邏輯非2自右向左&&邏輯與11自左向右||邏輯或12自左向右3.注意幾點(diǎn)①用“&&”對(duì)兩個(gè)運(yùn)算式進(jìn)行計(jì)算時(shí),若第1個(gè)運(yùn)算式的值為“假”,則與第2個(gè)運(yùn)算式的值無關(guān),結(jié)果肯定為“假”,所以C語言規(guī)定此時(shí)第2個(gè)運(yùn)算式不再計(jì)算。②用“||”對(duì)兩個(gè)運(yùn)算式進(jìn)行計(jì)算時(shí),若第1個(gè)運(yùn)算式的值為“真”,則與第2個(gè)運(yùn)算式的值無關(guān),結(jié)果肯定為“真”,所以C語言規(guī)定此時(shí)第2個(gè)運(yùn)算式不再計(jì)算。四、賦值運(yùn)算符

賦值運(yùn)算符分為三種:基本賦值運(yùn)算符、算術(shù)自反賦值運(yùn)算符、位自反賦值運(yùn)算符1.基本賦值運(yùn)算符(1)運(yùn)算符號(hào)(2)特點(diǎn)①賦值運(yùn)算符的前面必須是變數(shù),後面是運(yùn)算式;②賦值運(yùn)算符是先計(jì)算運(yùn)算式的值,再把值賦給變數(shù)。運(yùn)算符名稱優(yōu)先順序結(jié)合性=賦值14自右向左2.算術(shù)自反賦值運(yùn)算符(1)運(yùn)算符號(hào)(2)特點(diǎn)

該運(yùn)算符是將某個(gè)變數(shù)和運(yùn)算式進(jìn)行指定算術(shù)運(yùn)算後的結(jié)果賦予該變數(shù)。運(yùn)算符名稱優(yōu)先順序結(jié)合性+=加賦值14自右向左-=減賦值*=乘賦值/=除賦值%=模賦值五、逗號(hào)運(yùn)算符1.運(yùn)算符號(hào)2.特點(diǎn)(1)該運(yùn)算符是雙目運(yùn)算,其運(yùn)算對(duì)象是運(yùn)算式;(2)運(yùn)算規(guī)則是依次計(jì)算前、後運(yùn)算式的值;(3)運(yùn)算結(jié)果是後運(yùn)算式的值。運(yùn)算符名稱優(yōu)先順序結(jié)合性,逗號(hào)15自左向右六、條件運(yùn)算符1.運(yùn)算符號(hào)2.特點(diǎn)(1)該運(yùn)算符是三目運(yùn)算符,其三個(gè)運(yùn)算對(duì)象是運(yùn)算式(e1?e2:e3);(2)運(yùn)算規(guī)則是如果e1運(yùn)算式為“真”,取e2運(yùn)算式的值,否則取e3運(yùn)算式的值。運(yùn)算符名稱優(yōu)先順序結(jié)合性?:逗號(hào)13自右向左七、長度運(yùn)算符1.運(yùn)算符號(hào)2.特點(diǎn)(1)其運(yùn)算對(duì)象可以是任何數(shù)據(jù)類型或變數(shù);(2)運(yùn)算對(duì)象必須用圓括號(hào)括住。運(yùn)算符名稱優(yōu)先順序結(jié)合性sizeof長度2無八、位運(yùn)算符(一)基本問題1.什麼是位運(yùn)算是一種對(duì)運(yùn)算對(duì)象按二進(jìn)位位進(jìn)行操作的運(yùn)算。2.位運(yùn)算的特點(diǎn)(1)位運(yùn)算不允許只操作其中的某一位,而是對(duì)整個(gè)數(shù)據(jù)按二進(jìn)位位進(jìn)行運(yùn)算;(2)位運(yùn)算的對(duì)象只能是整型數(shù)據(jù)(包括字元型),運(yùn)算結(jié)果仍是整型數(shù)據(jù)。(3)位運(yùn)算符分為位邏輯運(yùn)算符、位移位運(yùn)算符、位自反賦值運(yùn)算符三種。(二)位邏輯運(yùn)算符1.運(yùn)算符號(hào)2.特點(diǎn)位邏輯運(yùn)算符是將數(shù)據(jù)中每個(gè)二進(jìn)位位上的“0”或“1”看成邏輯值,逐位進(jìn)行邏輯運(yùn)算。運(yùn)算符名稱優(yōu)先順序結(jié)合性~位非2自右向左&位與8自左向右^按位加9自左向右|位或10自左向右(三)位移位運(yùn)算符1.運(yùn)算符號(hào)2.特點(diǎn)(1)該運(yùn)算符是將數(shù)據(jù)看成是二進(jìn)位數(shù),對(duì)其進(jìn)行向左或向右移動(dòng)若干位的運(yùn)算;(2)該運(yùn)算符是雙目運(yùn)算,第一運(yùn)算對(duì)象是移位對(duì)象,第二個(gè)運(yùn)算對(duì)象是所移的二進(jìn)位位數(shù)。運(yùn)算符名稱優(yōu)先順序結(jié)合性<<左移5自左向右>>右移自左向右(四)位自反賦值運(yùn)算符1.運(yùn)算符號(hào)2.特點(diǎn)該運(yùn)算符是將某個(gè)變數(shù)和運(yùn)算式進(jìn)行指定位運(yùn)算後的結(jié)果賦予該變數(shù)。運(yùn)算符名稱優(yōu)先順序結(jié)合性&=位與賦值14自右向左^=按位加賦值|=位或賦值<<=位左移賦值>>=位右移賦值2.5運(yùn)算式1.什麼是運(yùn)算式用運(yùn)算符將運(yùn)算對(duì)象連接形成的式子就是運(yùn)算式。2.運(yùn)算式的特點(diǎn)(1)每個(gè)運(yùn)算式都可以按照其中運(yùn)算符的優(yōu)先順序和運(yùn)算規(guī)則依次對(duì)運(yùn)算對(duì)象進(jìn)行運(yùn)算,最終獲得一個(gè)數(shù)據(jù),該數(shù)據(jù)稱為運(yùn)算式的值。(2)運(yùn)算式值的數(shù)據(jù)類型就稱為運(yùn)算式的數(shù)據(jù)類型。3.運(yùn)算式的分類主要有六種:算術(shù)運(yùn)算式、關(guān)係運(yùn)算式、邏輯運(yùn)算式、條件運(yùn)算式、賦值運(yùn)算式和逗號(hào)運(yùn)算式。4.運(yùn)算式計(jì)算時(shí)的數(shù)據(jù)類型轉(zhuǎn)換(1)為什麼計(jì)算時(shí)數(shù)據(jù)類型要轉(zhuǎn)換(2)轉(zhuǎn)換方法①運(yùn)算式計(jì)算中數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換原則特點(diǎn):參加運(yùn)算的各個(gè)數(shù)據(jù)都轉(zhuǎn)換成數(shù)據(jù)長度最長的數(shù)據(jù)類型,然後計(jì)算。計(jì)算結(jié)果值當(dāng)然就是數(shù)據(jù)長度最長的數(shù)據(jù)類型。例如:設(shè)i為int,f為float,d為double,e為long則10+a+i*f-d/e的結(jié)果是double。②運(yùn)算結(jié)果存入變數(shù)時(shí)數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換原則特點(diǎn):先將運(yùn)算結(jié)果的數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換成變數(shù)的數(shù)據(jù)類型,然後再賦予該變數(shù)。3.2賦值語句1.賦值語句是最常用的運(yùn)算式語句,由賦值運(yùn)算式加分號(hào)構(gòu)成。2.賦值語句有三種形式:(1)簡單賦值:x=2*y+1;(2)多重賦值:x=y=z=3;(3)複合賦值:x+=y;3.使用賦值語句需注意以下兩點(diǎn):(1)定義變數(shù)時(shí)若賦初值則不能採用多重賦值形式。例如:intx=y=z=0;

是錯(cuò)誤形式。而應(yīng)改寫成:

intx=0,y=0,z=0;而賦值語句x=y=z=0;

是正確形式。(2)賦值運(yùn)算式可以出現(xiàn)在任何運(yùn)算式中,而賦值語句則不能。例如:x=(y=2)+(z=3+y);

是正確的。而:x=(y=2;)+(z=3+y;);

是錯(cuò)誤的。

3.3數(shù)據(jù)的輸出一、基本說明1.C語言本身沒有直接提供用於輸出的語句,它是通過輸出函數(shù)來實(shí)現(xiàn)的(例如:putchar函數(shù)、printf函數(shù))。2.由於C語言將上述標(biāo)準(zhǔn)輸出函數(shù)的原型放在頭檔stdio.h中,因此在編寫程式時(shí),要在根源程式的開頭用#include“stdio.h”命令將頭檔stdio.h包括到用戶根源程式中。(但是printf函數(shù)除外)二、putchar函數(shù)1.函數(shù)調(diào)用格式:putchar(參數(shù));

其中:參數(shù)可以是一個(gè)字元型變數(shù)、整型變數(shù)或一個(gè)字元型常量(包括控制字元和轉(zhuǎn)義字元)。2.功能:是在顯示器上輸出一個(gè)參數(shù)對(duì)應(yīng)的字元。例如:charch1=‘C’;inta=105;

putchar(ch1);/*輸出字元C*/

putchar(a);/*輸出字元i*/

putchar(‘n’);

/*輸出字元n*/

putchar(‘\n’);

/*輸出回車換行*/三、printf函數(shù)1.函數(shù)調(diào)用格式:

printf(“格式控制字串”,運(yùn)算式1,運(yùn)算式2,…);2.功能:按照自右向左的順序,依次計(jì)算各運(yùn)算式的值,然後按照“格式控制字串”中規(guī)定的格式輸出到顯示器上顯示。例如:

inta=3,b=2;printf(“%d,%d”,b=a<b,a=a<b);輸出結(jié)果:1,0

3.說明:(1)輸出項(xiàng)可以是變數(shù)、常量和運(yùn)算式。(2)格式控制字串中允許包含格式編輯符和原樣輸出的字串。例如:“c=%d”

(是一個(gè)格式控制字串)(c=是原樣輸出的字串,%d是格式編輯符)(3)格式編輯符用於指定輸出格式,其形式為:

%[格式修飾]格式字元(4)格式字元的符號(hào)及功能如下表所示:4.舉例分析:例3-1

格式字元數(shù)據(jù)對(duì)象輸出形式數(shù)據(jù)輸出方法%-mdint,shortunsignedintunsignedshortchar十進(jìn)位整數(shù)無m按實(shí)際位數(shù)輸出有m輸出m位超過m位,按實(shí)際位數(shù)輸出不足m位,補(bǔ)空格無(-)右對(duì)齊(左補(bǔ)空格)有(-)左對(duì)齊(右補(bǔ)空格)%-mo八進(jìn)制整數(shù)%-mx十六進(jìn)制整數(shù)%-mu無符號(hào)整數(shù)%-mldlongunsignedlong十進(jìn)位整數(shù)%-mlo八進(jìn)制整數(shù)%-mlx十六進(jìn)制整數(shù)%-mlu無符號(hào)整數(shù)%-m.nffloatdouble十進(jìn)位小數(shù)無m.n按實(shí)際位數(shù)輸出有m.n輸出n位小數(shù),總寬度為m%-m.ne十進(jìn)位指數(shù)%-mcchar,int,short單個(gè)字元無m輸出單個(gè)字元,有m輸出m位,補(bǔ)空格%-m.ns字串一串字元無m.n按實(shí)際字串輸出全部字元有m.n僅輸出前n個(gè)字元,補(bǔ)空格3.4數(shù)據(jù)的輸入一、基本說明1.C語言本身沒有直接提供用於輸入的語句,它是通過輸入函數(shù)來實(shí)現(xiàn)的(例如:getchar函數(shù)、scanf函數(shù))。2.由於C語言將上述標(biāo)準(zhǔn)輸出函數(shù)的原型放在頭檔stdio.h中,因此在編寫程式時(shí),要在根源程式的開頭用#include“stdio.h”命令將頭檔stdio.h包括到用戶根源程式中。(但是scanf函數(shù)除外)二、getchar函數(shù)1.函數(shù)調(diào)用格式:getchar()2.功能:從鍵盤輸入一個(gè)字元。3.說明:該函數(shù)只能接收一個(gè)字元,而且得到的是字元的ASCII碼。該值可以賦給一個(gè)字元型變數(shù)或一個(gè)整型變數(shù)。4.舉例說明例3-2三、scanf函數(shù)1.函數(shù)調(diào)用格式:

scanf(“格式控制字串”,輸入項(xiàng)1,輸入項(xiàng)2,…);2.功能:按指定的格式接收由鍵盤輸入的數(shù)據(jù),並存入輸入項(xiàng)變數(shù)所在的記憶體單元中。3.說明:(1)格式控制字串中允許包含格式編輯符和原樣輸入的字串。例如:“c=%d”

(是一個(gè)格式控制字串)(c=是原樣輸入的字串,%d是格式編輯符)(2)格式編輯符用於指定輸入格式,其形式為:

%[格式修飾]格式字元格式字元用於規(guī)定相應(yīng)輸入項(xiàng)的輸入格式,其字元如下表所示:(3)輸入項(xiàng)必須為變數(shù)的地址,通常用“&變數(shù)名”組成。例如:定義intx;用scanf(“%d”,x);是錯(cuò)誤的。用scanf(“%d”,&x);是正確的。

格式字元數(shù)據(jù)對(duì)象輸入形式數(shù)據(jù)輸入方法%mdint,shortunsignedintunsignedshortchar十進(jìn)位整數(shù)無m按實(shí)際位數(shù)輸入有m輸入m位,不足m位則跟回車鍵%mo八進(jìn)制整數(shù)%mx十六進(jìn)制整數(shù)%mld

longunsignedlong十進(jìn)位整數(shù)%mlo八進(jìn)制整數(shù)%mlx十六進(jìn)制整數(shù)%mf%mefloat十進(jìn)位小數(shù)十進(jìn)位指數(shù)%mlf%mledouble%mcchar單個(gè)字元無m僅取單個(gè)字元,有m輸入m位,僅取第一個(gè)字元%ms字串一串字元無m取若干個(gè)字元直到回車或空格為止,有m僅取前m個(gè)字元(4)輸入數(shù)據(jù)時(shí),數(shù)據(jù)與數(shù)據(jù)之間應(yīng)使用分隔符號(hào)。分隔符號(hào)有兩種形式:一種是在輸入格式控制串中給定的,例如scanf(“%d,%d”,&x,&y);其分隔符號(hào)為逗號(hào)(,)。另一種是空格、跳位字元(Tab)或換行符,它們不是在輸入格式控制串中給定的,而是用戶在鍵入數(shù)據(jù)時(shí)隨機(jī)使用的。例如:scanf(“%d%d”,&x,&y);執(zhí)行時(shí)就可以用以上方法作為輸入數(shù)據(jù)之間的分隔符號(hào)。(5)鍵入數(shù)據(jù)的類型、寬度應(yīng)該與格式控制中給定的相一致。例3-3第四章選擇結(jié)構(gòu)程式設(shè)計(jì)一、概述:1.什麼是選擇結(jié)構(gòu)在程式執(zhí)行中依據(jù)條件判斷,確定某些操作是做還是不做,或者確定若干操作中選擇哪個(gè)操作來執(zhí)行。2.選擇結(jié)構(gòu)有兩種形式If語句(單分支結(jié)構(gòu)、雙分支結(jié)構(gòu)、多分支結(jié)構(gòu))switch語句4.1if語句一、單分支結(jié)構(gòu)1.形式:

if(運(yùn)算式)語句;2.語義:若運(yùn)算式的值為非0,就執(zhí)行“語句”,否則直接執(zhí)行if語句的後繼語句。運(yùn)算式語句塊非003.說明(1)“運(yùn)算式”允許是任何運(yùn)算式,而且兩側(cè)的圓括號(hào)不可少。(2)如果“語句塊”包含多個(gè)語句,必須用{}將其括成複合語句。二、雙分支結(jié)構(gòu)1.形式:

if(運(yùn)算式)

語句塊1;

else

語句塊2;2.其語義是:如果運(yùn)算式的值為非0,則執(zhí)行“語句塊1”,然後跳出if結(jié)構(gòu),執(zhí)行後續(xù)語句;若運(yùn)算式的值為0,則執(zhí)行“語句塊2”,之後跳出if結(jié)構(gòu),往下執(zhí)行後續(xù)語句。運(yùn)算式語句塊1語句塊23.說明“運(yùn)算式”允許是任何運(yùn)算式,而且兩側(cè)的圓括號(hào)不可少。如果“語句塊”包含多個(gè)語句,必須用{}將其括成複合語句。else必須與if語句配對(duì)使用,而且總是和最近的if配對(duì)。例如:

if(c>=‘0’&&c<=‘9’)if(c==‘5’)y=0;elsey=1

if(c>=‘0’&&c<=‘9’){if(c==‘5’)y=0;}elsey=1三、多分支結(jié)構(gòu)1.形式:

if(運(yùn)算式1)

語句塊1;

elseif(運(yùn)算式2)

語句塊2;

elseif(運(yùn)算式3)

語句塊3;

else

語句塊4;2.說明

多分支if語句的執(zhí)行步驟是:首先判斷運(yùn)算式1的條件是否成立,若成立就執(zhí)行語句1,否則判斷運(yùn)算式2的條件是否成立,若成立就執(zhí)行語句2……依次類推,若所有的條件都不成立,就執(zhí)行else後面的語句,然後出口。4.2switch語句1.作用:用於實(shí)現(xiàn)多分支選擇結(jié)構(gòu)問題。2.形式:

switch(運(yùn)算式){case常量運(yùn)算式1:語句1;[break;]case常量運(yùn)算式2:語句2;[break;]

case常量運(yùn)算式n:語句n;[break;][default:語句n+1;]}3.該語句的含義是:(1)先計(jì)算switch右邊運(yùn)算式的值,並將其逐個(gè)與case行中“常量運(yùn)算式”的值相比較,若相等,則執(zhí)行case行給出的語句,若有break語句則跳出switch語句執(zhí)行後續(xù)語句;(2)若沒有break語句則繼續(xù)執(zhí)行後續(xù)case行所給出的語句;(3)如果所有的常量運(yùn)算式都不匹配,則執(zhí)行default行指引的語句。4.說明(1)該結(jié)構(gòu)中{}必不可少,其中的語句是switch語句體;(2)case後跟的常量運(yùn)算式與冒號(hào)一起構(gòu)成語句標(biāo)號(hào)。case和常量運(yùn)算式之間必須要有空格,常量運(yùn)算式的值必須唯一。(3)switch後面的運(yùn)算式可以是整型、字元型,但不能是實(shí)型。運(yùn)算式的值與常量運(yùn)算式的值應(yīng)保持類型一致。(4)case後面跟的語句允許是多條語句,可以不加{}。一個(gè)語句也可以被多個(gè)case共用。

例如:case1:case2:printf(“ok”);第五章迴圈結(jié)構(gòu)程式設(shè)計(jì)一、概述:1.什麼是迴圈結(jié)構(gòu)

在程式執(zhí)行中當(dāng)滿足某個(gè)特定的條件時(shí),重複執(zhí)行某段程式,直至條件不滿足為止,這種結(jié)構(gòu)就稱為迴圈結(jié)構(gòu)。2.迴圈結(jié)構(gòu)有三種類型當(dāng)型結(jié)構(gòu)(while結(jié)構(gòu))直到型結(jié)構(gòu)(do-while結(jié)構(gòu))已知迴圈次數(shù)的結(jié)構(gòu)(for結(jié)構(gòu))5.1當(dāng)型迴圈結(jié)構(gòu)(while結(jié)構(gòu))1.形式:

while(運(yùn)算式)語句;2.語義:先計(jì)算運(yùn)算式的值,判斷其是否為0,若為非0,表示迴圈條件滿足,就執(zhí)行循環(huán)體,如此重複,直至運(yùn)算式的值為0,退出迴圈執(zhí)行後繼語句。迴圈語句運(yùn)算式後繼語句0非03.說明(1)運(yùn)算式可以是任意合法的運(yùn)算式,並以它作為判別循環(huán)體執(zhí)行與否的條件。若運(yùn)算式的值為非0表示條件成立;若為0表示條件不成立。(2)“語句”是重複執(zhí)行部分,稱之為循環(huán)體。(3)循環(huán)體中可以只包含一句語句,也可以包含多個(gè)語句。若為多條語句,必須用{}括起來,組成一個(gè)複合語句,否則while語句只將第一句語句視為循環(huán)體。(4)循環(huán)體中必須要有改變條件運(yùn)算式值的語句,否則將成為死迴圈。(5)該迴圈結(jié)構(gòu)由於先判斷迴圈條件,當(dāng)一開始條件就不成立循環(huán)體就不會(huì)執(zhí)行,所以該迴圈結(jié)構(gòu)又可稱允許0次迴圈的結(jié)構(gòu)。舉例說明:例5-1#include“stdio.h”main(){charc;while((c=getchar())!=’\n’)switch(c){case‘0’:case‘1’:putchar(c+2);case‘2’:putchar(c+3);break;case‘3’:putchar(c+4);default:putchar(c+1);break;}printf(“\n”);}假設(shè)從鍵盤上輸入:420回車則程式運(yùn)行結(jié)果為:55325.2直到型迴圈結(jié)構(gòu)(do-while結(jié)構(gòu))1.形式:

do

語句;

while(運(yùn)算式);2.語義:先執(zhí)行循環(huán)體一次,然後判斷運(yùn)算式是否成立,若為非0,表示迴圈條件滿足,就繼續(xù)執(zhí)行循環(huán)體,如此重複,直至運(yùn)算式的值為0,退出迴圈執(zhí)行後繼語句。運(yùn)算式後繼語句迴圈語句0非03.說明(1)運(yùn)算式可以是任意合法的運(yùn)算式。(2)“語句”是重複執(zhí)行部分,稱之為循環(huán)體。(3)循環(huán)體中可以只包含一句語句,也可以包含多個(gè)語句。若為多條語句,必須用{}括起來,組成一個(gè)複合語句,否則只將第一句語句視為循環(huán)體。(4)循環(huán)體中必須要有改變條件運(yùn)算式值的語句,否則將成為死迴圈。(5)該迴圈結(jié)構(gòu)由於先執(zhí)行迴圈語句再判斷迴圈條件是否成立,所以該迴圈結(jié)構(gòu)又可稱不允許0次迴圈的結(jié)構(gòu)。5.3已知迴圈次數(shù)的迴圈結(jié)構(gòu)(for結(jié)構(gòu))1.形式:for(運(yùn)算式1;運(yùn)算式2;運(yùn)算式3)語句;2.語義:(1)先計(jì)算“運(yùn)算式1”的值;(2)再計(jì)算“運(yùn)算式2”的值,並判斷其是否為0,若非0,則執(zhí)行循環(huán)體一次,否則跳出迴圈,執(zhí)行for語句的後續(xù)語句;(3)計(jì)算“運(yùn)算式3”的值,然後轉(zhuǎn)到步驟(2)重複執(zhí)行。注:for語句的語義也可用下圖表示:

求運(yùn)算式1的值運(yùn)算式2循環(huán)體語句求運(yùn)算式3的值後續(xù)語句非003.說明(1)在整個(gè)for迴圈執(zhí)行過程中,“運(yùn)算式1”只計(jì)算一次,“運(yùn)算式2”和“運(yùn)算式3”可能計(jì)算多次;循環(huán)體可能多次被執(zhí)行,也可能一次也不執(zhí)行。(2)循環(huán)體中可以只包含一句語句,也可以包含多個(gè)語句。若為多條語句,必須用{}括起來,組成一個(gè)複合語句,否則只將第一句語句視為循環(huán)體。(3)for迴圈結(jié)構(gòu)的循環(huán)體可以是空語句。(4)for語句中的各運(yùn)算式都可以省略,但分號(hào)間隔符不能少。例如:

for(;運(yùn)算式2;運(yùn)算式3)

for(運(yùn)算式1;;運(yùn)算式3)

for(運(yùn)算式1;運(yùn)算式2;)

for(;

;)若運(yùn)算式1省略,則運(yùn)算式1的計(jì)算必須在for語句的上面完成。若運(yùn)算式2省略,則循環(huán)體中必須要有控制迴圈結(jié)束的break語句,否則將會(huì)死迴圈。若運(yùn)算式3省略,則運(yùn)算式必須在循環(huán)體內(nèi)完成。

5.4迴圈結(jié)構(gòu)中的轉(zhuǎn)移語句一、break語句1.形式:break;2.功能:是終止當(dāng)前的迴圈,轉(zhuǎn)向後繼語句執(zhí)行。例如:for(x=1,y=0;x<=10;x++){y=y+x;

if(y>5)break;printf(“y=%d\n”,y);}

當(dāng)x=3時(shí),y的值為6,使if(y>5)的運(yùn)算式的值為1,於是執(zhí)行break語句,跳出for循環(huán)體。二、continue語句1.形式:continue;2.功能:對(duì)於while和do-while語句,其功能是結(jié)束本次迴圈轉(zhuǎn)去求迴圈條件運(yùn)算式的值,而在for語句中,則是求解運(yùn)算式3的值。While(運(yùn)算式){…continue;…}do{…continue;…}While(運(yùn)算式);for(;;){…continue;…}5.5迴圈結(jié)構(gòu)的嵌套1.含義:當(dāng)一個(gè)迴圈語句的循環(huán)體中又出現(xiàn)另一個(gè)迴圈語句時(shí),就構(gòu)成了迴圈的嵌套。2.形式:while()…while()…do…do…while();while();for(;;)…for(;;)…3.說明(1)不要將迴圈的嵌套和並列混為一談。例如:

for(i=1;i<3;i++){for(j=1;j<=2;j++)printf(“%d\t”,i*j);for(k=2;k<4;k++)m=i*k;s=s+m;}其中,j迴圈和k迴圈為並列關(guān)係,它們都是i的內(nèi)層迴圈。(2)由於內(nèi)迴圈是外迴圈的循環(huán)體,因此外迴圈每執(zhí)行一遍,內(nèi)迴圈從初值到終值完整執(zhí)行一周。例如:

for(i=1;i<=3;i++)for(j=1;j<=2;j++)printf(“%d\t”,i*j);

內(nèi)層循環(huán)體printf(“%d\t”,i*j);共執(zhí)行了3*2(6)遍。例1:編寫程式,列印出所有的“水仙花數(shù)”。所謂“水仙花數(shù)”是指一個(gè)三位數(shù),其各位數(shù)字立方和等於該數(shù)本身。如:153=13+53+33,故153是水仙花數(shù)。main(){inti,x1,x2,x3;for(i=100,i<=999;i++){x1=i%10;/*取個(gè)位數(shù)*/x2=(i/10)%10;/*取十位數(shù)*/x3=i/100;/*取百位數(shù)*/if(x1*x1*x1+x2*x2*x2+x3*x3*x3==i)printf(“%d\t”,i);}}第六章數(shù)組6.1數(shù)組的概述:1.什麼是數(shù)組

數(shù)組是一組相同類型變數(shù)的集合。2.數(shù)組的特點(diǎn)(1)數(shù)組中的每一個(gè)成員稱為“數(shù)組元素”。每一個(gè)“數(shù)組元素”都有相同的名稱,但用不同的下標(biāo)來區(qū)分。(2)每一個(gè)數(shù)組元素都可以當(dāng)做單個(gè)變數(shù)來使用,但它們的數(shù)據(jù)類型都必須是相同的。(3)數(shù)組的類型可以是整型、實(shí)型、字元型、指針型、結(jié)構(gòu)型等(4)數(shù)組根據(jù)其下標(biāo)的個(gè)數(shù)可分為一維數(shù)組、二維數(shù)組及多維數(shù)組。6.2數(shù)組的說明一、數(shù)組說明形式1.形式:存儲(chǔ)類型數(shù)據(jù)類型數(shù)組名[長度1][長度2]……2.說明:(1)數(shù)組說明的作用是為數(shù)組預(yù)留空間。(2)數(shù)據(jù)類型可以是int、float、double、char等基本類型,也可以是指針型或結(jié)構(gòu)類型。(3)數(shù)組名是按照“識(shí)別字”的規(guī)則構(gòu)成的。(4)長度定義了數(shù)組中所含元素的個(gè)數(shù),通常是一個(gè)整型常數(shù)。(5)方括號(hào)[]為下標(biāo)運(yùn)算符,其個(gè)數(shù)決定了數(shù)組的維數(shù)。例如:

inta[5],b[2][3];charc[20];floatd[4][3];

這裏一共定義了四個(gè)數(shù)組,其中a為一維整型數(shù)組,有5個(gè)元素;

b為二維整型數(shù)組,有2行3列共6個(gè)元素;

c為一維字元型數(shù)組,有20個(gè)元素;

d為二維實(shí)型數(shù)組,有4行3列共12個(gè)元素。二、使用數(shù)組的注意事項(xiàng)1.在C語言中,數(shù)組元素的下標(biāo)起始值為0而不是1。例如:inta[5],b[2][3];

那麼a數(shù)組包含的數(shù)組元素為:

a[0],a[1],a[2],a[3],a[4]

b數(shù)組的元素為:b[0][0]、b[0][1]、b[0][2]b[1][0]、b[1][1]、b[1][2]2.[]中的長度必須為正整數(shù)。它們的乘積確定了整個(gè)數(shù)組的長度。3.[]中不允許使用變數(shù)定義數(shù)組長度;但允許包含符號(hào)常量和sizeof運(yùn)算式6.3數(shù)組的引用一、下標(biāo)變數(shù)的表示形式1.什麼是下標(biāo)變數(shù):數(shù)組中的每一個(gè)元素可以當(dāng)做一個(gè)變數(shù)來使用,這種變數(shù)必須以下標(biāo)形式表示。2.表示形式:數(shù)組名[下標(biāo)1][下標(biāo)2]……例如:inta[10];floatb[3][5];a[0]=15;a[9]=100;b[0][0]=3.58;b[0][4]=2.5;3.使用說明(1)引用下標(biāo)變數(shù)時(shí),所給出的下標(biāo)個(gè)數(shù)必須與所定義的數(shù)組維數(shù)相一致,而且每一個(gè)下標(biāo)運(yùn)算式的值不得超界。例如:inta[10];a[10]=0;是錯(cuò)誤的數(shù)組下標(biāo)引用。(2)數(shù)組下標(biāo)引用時(shí)可用整型常量、整型運(yùn)算式和整型變數(shù)。6.4數(shù)組的賦初值1.給數(shù)組賦初值的語法形式數(shù)據(jù)類型數(shù)組名[下標(biāo)1][下標(biāo)2]…={常數(shù)列表}2.說明:(1){常數(shù)列表}為初值表,其中常數(shù)與常數(shù)之間用逗號(hào)分隔。例如:floatx[4]={-1.0,0.0,2.7,5.2E-8};inty[3][2]={{0,1},{2,3},{4,5}}x數(shù)組元素的初值為:x[0]=-1.0,x[1]=0.0,x[2]=2.7,x[4]=0.0000000052y數(shù)組元素的初值為:y[0][0]=0,y[0][1]=1,y[1][0]=2,y[1][1]=3,y[2][0]=4,y[2][1]=6,(2)對(duì)數(shù)組賦初值時(shí),若初值表中常數(shù)個(gè)數(shù)少於數(shù)組元素的個(gè)數(shù),這表示僅對(duì)數(shù)組中排列靠前的元素賦初值;若初值表中給定的初值多於下標(biāo)變數(shù)的個(gè)數(shù),將出現(xiàn)編譯錯(cuò)誤。例如:intx[5]={10,20,30};是正確的

intx[5]={1,2,3,4,5,6}是錯(cuò)誤的(3)C語言允許使用一維數(shù)組賦初值的方法對(duì)多維數(shù)組賦初值。下麵兩句語句寫法等價(jià):

inty[3][2]={{0,1},{2,3},{4,5}}inty[3][2]={0,1,2,3,4,5}(4)一維數(shù)組定義時(shí)若賦初值則[]內(nèi)的下標(biāo)可省略,由初值表中初值的個(gè)數(shù)來間接決定長度。二維數(shù)組定義時(shí)若賦初值則第1個(gè)[]內(nèi)的下標(biāo)可省略,由初值表中初值的個(gè)數(shù)來間接決定其長度。例如:intx[]={0,1,2,3,4,5};inty[][3]={0,1,2,3,4,5};6.5字元數(shù)組與字串處理一、字串1.所謂字串,就是用雙引號(hào)括起來的字元序列。它是由若干個(gè)字元組成的,其最後一個(gè)字元是結(jié)束標(biāo)記“\0”。2.在C語言中,沒有標(biāo)準(zhǔn)的字串定義類型,字串被當(dāng)作字元數(shù)組來處理。3.所謂字元數(shù)組就是每一個(gè)元素都是一個(gè)字元變數(shù)的數(shù)組。二、字元數(shù)組的定義1.定義形式:char數(shù)組名[下標(biāo)1][下標(biāo)2]…

例如:charc1[100],c2[20][20];

c1被定義為一維字元數(shù)組,包含100個(gè)字元型的數(shù)組元素;c2被定義為二維字元數(shù)組,20行20列共有400個(gè)字元型的數(shù)組元素。2.說明因?yàn)樽衷妥償?shù)只能存放一個(gè)由單引號(hào)括起來的字元,因此字元數(shù)組中的每一個(gè)元素也只能存放一個(gè)字元。三、字元數(shù)組賦初值第一種方法:按單個(gè)字元的方式賦初值。例如:chars1[3]={‘1’,’2’,’3’};結(jié)果s1[0]的值為‘1’,s1[1]的值為‘2’,s1[2]的值為‘3’。但s1數(shù)組中存放的不是一個(gè)字串。

staticchars2[3]={‘1’,’2’};結(jié)果s2[0]的值為‘1’,s2[1]的值為‘2’,s2[2]的值為空。s2數(shù)組中存放的是一個(gè)字串。因?yàn)榭兆衷闹禐?,等於字串結(jié)束標(biāo)記‘\0’。

chars3[3]={‘1’,’2’,’\0’}結(jié)果s3[0]的值為‘1’,s3[0]的值為‘2’,s3[2]的值為‘\0’。所以s3中存放的是一個(gè)字串。

第二種方法:是直接在初值表中寫一個(gè)字串常量。例如:chars1[3]={“12”};結(jié)果s1[0]的值為‘1’,s1[1]的值為‘2’,s1[2]的值為‘\0’。所以s1數(shù)組中存放的是一個(gè)字串。

chars2[5]={“ABCD”};結(jié)果s2[0]的值為‘A’,s2[1]的值為‘B’,s2[2]的值為‘C’,s2[4]的值為‘D’,s2[5]的值為‘\0’。存放的是一個(gè)字串。chars2[]={“ABCD”};結(jié)果s2[0]的值為‘A’,s2[1]的值為‘B’,s2[2]的值為‘C’,s2[4]的值為‘D’,s2[5]的值為‘\0’。存放的是一個(gè)字串。chars2[5]={“ABCDE”};該語句在編譯時(shí)將是錯(cuò)誤的,因?yàn)閿?shù)組元素個(gè)數(shù)小於字串長度。四、字串的輸入字串的輸入可以用scanf(),也可以用gets()。1.用scanf()輸入其形式為:

charc1[80];scanf(“%s”,c1);2.用gets()輸入其形式為:

charc1[80];gets(c1);3.說明(1)scanf()和gets()輸入相同的地方:它們都是直接用數(shù)組名,因?yàn)閿?shù)組名是地址常量。另外輸入的字串最大長度必須是數(shù)組個(gè)數(shù)減1。(2)不同的地方:scanf()可以同時(shí)輸入多個(gè)輸入項(xiàng),而gets()只能輸入一個(gè)輸入項(xiàng)。scanf()用%s格式輸入字串時(shí),遇空格字元、Tab鍵和回車符將自動(dòng)結(jié)束輸入。gets()不識(shí)別字串中的轉(zhuǎn)義字元,它原樣傳送,而以回車作為輸入結(jié)束。例如:charc1[40];scanf(“%s”,c1);

如果輸入Howareyou

則c1中只存放Howcharc1[40];gets(c1);

如果輸入Howareyou

則c1中只存放Howareyou五、字串的輸出字串的輸出可以用printf()

或puts()。1.用printf()輸出其形式為:

charc1[]=“abcdefg”;printf(“%s”,c1);2.用puts()輸出其形式為:

charc1[]=“abcdefg”;puts(c1);3.說明相同點(diǎn):都能識(shí)別轉(zhuǎn)義字元。例如charc1[]=“ABCDEFGHI”;printf(“%s”,c1);結(jié)果為ABCputs(c1);結(jié)果為ABC不同點(diǎn):printf()能輸出多個(gè)輸出項(xiàng),而puts()則能輸出一個(gè)輸出項(xiàng)。六、常用字符串處理函數(shù)1.strlen函數(shù)形式:strlen(str);功能:計(jì)算並返回字串的長度(結(jié)束標(biāo)記‘\0’不計(jì)入內(nèi))說明:str可以是字串常量、字元數(shù)組。例如:strlen(“abcdefgh\\\123”);結(jié)果為11。2.strcmp函數(shù)形式:strcmp(str1,str2);功能:比較str1和str2兩個(gè)字串的大小。若相同則返回0,若str1大於str2則返回大於0,若str1小於str2則返回小於0。例如:strcmp(“ABC”,”ABC”);結(jié)果為0strcmp(“abc”,”ABC”);結(jié)果為大於0strcmp(“ABC”,”abc”)結(jié)果為小於0說明:(1)str1、str2可以是字串常量、字元數(shù)組。(2)不能用if語句比較兩個(gè)字串是否相同。3.strcpy函數(shù)形式:strcpy(str1,str2);功能:將字串str2的內(nèi)容連同結(jié)束標(biāo)記‘\0’一起複製到str1中。說明:(1)str1、str2只能是字元數(shù)組。(2)str1必須有足夠的長度以容納str2的內(nèi)容。例如:charc1[80],c2[40]=“abcdefghijk”;strcpy(c1,c2);4.strcat函數(shù)形式:strcat(str1,str2);功能:將字串str1與字串str2尾首相接,拼接以後,原str1串尾的結(jié)束符‘\0’被自動(dòng)覆蓋,新串的未尾自動(dòng)加上‘\0’,生成的新串存放於str1中。說明:(1)str1必須是字元數(shù)組、str2可以是字串常量、也可以是字元數(shù)組。

(2)str1必須有足夠的長度以容納拼接後的新串內(nèi)容。例如:charc1[80]=“abcdefgh”,c2[40]=“xyz123”;strcat(c1,c2);結(jié)果為abcdefghxyz123編程舉例:例1:從鍵盤上輸入一串字串,並按逆序顯示出來。

main(){charc[80];inti;gets(c);for(i=strlen(c)-1;i>=0;i--)printf(“%c”,c[i]);}第7章指針7.1指針和指針變數(shù)一、指針1.什麼是指針?biāo)^指針,就是指存放數(shù)據(jù)的記憶體地址。2.變數(shù)與記憶體地址的關(guān)係例如:有一條定義語句

inti=3,j=5;floatf;地址記憶體單元20012002200320042005200620072008整型變數(shù)i整型變數(shù)j單精確度變數(shù)f3.數(shù)組與地址的關(guān)係例如:有一條定義語句

inta[3];地址記憶體單元200120022003200420052006整型數(shù)組元素a[1]整型數(shù)組元素a[0]整型數(shù)組元素a[2]二、指針變數(shù)1.什麼是指針變數(shù)

用於存放地址的變數(shù)稱為指針變數(shù)2.指針變數(shù)的特點(diǎn)

地址是一種特殊的數(shù)據(jù)類型,所以存放地址的指針變數(shù)和存放字元型、整型、實(shí)型數(shù)據(jù)的變數(shù)是不同類型的變數(shù)。3.如何獲得地址3.如何獲得地址(1)變數(shù)地址或數(shù)組元素地址通過“&”運(yùn)算符獲得。例如:inta,b[10];&a、&b[3](2)數(shù)組的首地址直接可用數(shù)組名,不必利用“&”運(yùn)算符獲得。例如:intb[10]那麼數(shù)組名b就是數(shù)組首地址7.2指針變數(shù)的定義、初始化和引用一、指針變數(shù)的定義和初始化1.定義格式

存儲(chǔ)類型數(shù)據(jù)類型*指針變數(shù)名[=初值]……2.功能:定義指向“數(shù)據(jù)類型”變數(shù)或數(shù)組的若干個(gè)指針變數(shù),同時(shí)給這些指針變數(shù)賦初值。3.說明3.說明(1)指針變數(shù)名前面必須有“*”號(hào)。(2)定義指針變數(shù)時(shí)的“數(shù)據(jù)類型”可以是任何數(shù)據(jù)類型,但這個(gè)數(shù)據(jù)類型不是指針變數(shù)中存放的數(shù)據(jù)類型,而是它將要指向的變數(shù)或數(shù)組的數(shù)據(jù)類型。(3)其中的初值必須是地址。4.舉例

inta;int*p=&a;intf1,f[10],*p1=&f1,*p2=f;二、指針變數(shù)的引用方式1.給指針變數(shù)賦值格式:指針變數(shù)=運(yùn)算式例如:inti,*p_i;p_i=&i;2.直接引用指針變數(shù)名(1)作用:凡是用到地址時(shí),可以直接引用指針變數(shù)名。(2)舉例:

inti,j,*p=&i,*q;

q=p;scanf(“%d,%d”,q,&j);3.通過指針變數(shù)來引用它所指向的變數(shù)(1)使用格式:*指針變數(shù)名(2)例如:

inti=1,j=2,k,*p=&i;k=*p+j;(等價(jià)於k=i+j;)printf(“%d”,*p);(等價(jià)於printf(“%d”,i);)

注意:printf(“%d”,p);是錯(cuò)誤用法。三、取地址運(yùn)算符與指針運(yùn)算符說明:(1)“&”運(yùn)算符的運(yùn)算對(duì)象必須是已定義過的變數(shù)或數(shù)組名;(2)“*”運(yùn)算符的運(yùn)算對(duì)象必須是已賦值的指針變數(shù);不能是普通變數(shù)。例如:inta,*pa=&a;*&a、*&pa、&*pa是正確用法;

&*a是錯(cuò)誤用。運(yùn)算符名稱優(yōu)先順序結(jié)合性&取地址2自右向左*取對(duì)象7.3指針變數(shù)的使用一、指向變數(shù)的指針變數(shù)的使用1.給指針變數(shù)賦值格式:指針變數(shù)=地址運(yùn)算式;說明:指針變數(shù)的數(shù)據(jù)類型和地址對(duì)應(yīng)的數(shù)據(jù)類型應(yīng)一致。例如:

inta,*p_a;floatb,*p_b;p_a=&a;p_b=&b;是正確的

p_a=&b;p_b=&a;是錯(cuò)誤的2.引用所指向的變數(shù)(1)格式:*指針變數(shù)(2)說明:使用時(shí)要注意該指針變數(shù)必須已賦過值即已指向某個(gè)變數(shù)。二、指向一維數(shù)組的指針變數(shù)的使用1.指針變數(shù)指向數(shù)組的方法(1)指向數(shù)組首地址用賦初值方法:*指針變數(shù)=數(shù)組名在程式中賦值:指針變數(shù)=數(shù)組名(2)指向某數(shù)組元素用賦初值方法:*指針變數(shù)=&數(shù)組名[下標(biāo)]在程式中賦值:

指針變數(shù)=&數(shù)組名[下標(biāo)]2.用指向一維數(shù)組的指針變數(shù)處理數(shù)組元素(1)當(dāng)指針變數(shù)指向數(shù)組首地址引用數(shù)組元素[i]:*(指針變數(shù)+i)(2)當(dāng)指針變數(shù)指向下標(biāo)為i的數(shù)組元素引用數(shù)組元素[i]:*指針變數(shù)引用數(shù)組元素[i-k]:*(指針變數(shù)-k)引用數(shù)組元素[I+k]:*(指針變數(shù)+k)(3)當(dāng)指針變數(shù)指向數(shù)組首地址後,對(duì)下標(biāo)為i的數(shù)組元素引用的四種方法*(指針變數(shù)+i)*(數(shù)組名+i),

指針變數(shù)[i]

數(shù)組名[i]例如:inta[10],*p=a;

若要引用a[5]數(shù)組元素:

*(p+5)、*(a+5)、p[5]、a[5]3.指向一維數(shù)組的指針變數(shù)的運(yùn)算(1)指針變數(shù)和整數(shù)的算術(shù)運(yùn)算

指針變數(shù)+整數(shù)指針變數(shù)-整數(shù)

++指針變數(shù)

--指針變數(shù)指針變數(shù)++

指針變數(shù)--例如:inta[10],*p=a;p+5(表示a[5]的地址,指針仍指向a[0])

p=&a[4],p-2(表示a[2]的地址,指針仍指向a[4]

p=&a[3],p++(表示a[3]的地址,指針將指向a[4])

p=&a[3],++p(表示a[4]的地址,指針將指向a[4])

a+5(表示a[5]的地址)

a++(這是不允許的)例如:(2005年試卷試題一(7))main(){inta[4]={0,4,5,13},*p;p=&a[2];printf("++(*p)=%d\n",++(*p));printf("*--p=%d\n",*--p);printf("*p++=%d\n",*p++);printf("%d\n",a[0]);}輸出結(jié)果:

++(*p)=6*--p=4*p++=40(2)指針變數(shù)和指針變數(shù)的減法運(yùn)算

指針變數(shù)1-指針變數(shù)2注意:要求這兩個(gè)指針變數(shù)必須指向同一個(gè)數(shù)組,否則不能進(jìn)行減法運(yùn)算;運(yùn)算結(jié)果為它們所指向的數(shù)組元素下標(biāo)相差的整數(shù)。例如:inta[10],*p=&a[5],*q=&a[8];q-p(值為3)

p-q(值為-3)(3)指針變數(shù)的關(guān)係運(yùn)算

指針變數(shù)1關(guān)係運(yùn)算符指針變數(shù)2注意:要求這兩個(gè)指針變數(shù)必須指向同一個(gè)數(shù)組,否則不能進(jìn)行關(guān)係運(yùn)算;運(yùn)算結(jié)果為邏輯真(1),或邏輯假(0)。例如:inta[10],*p=&a[5],*q=&a[8];q>p(值為1)

q<p(值為0)

p>=a(值為1)

p>=&a[8](值為0)

三、指向字串的指針變數(shù)的使用1.將指針變數(shù)指向字串常量的方法第一種方法:給指針變數(shù)賦初值的方法格式:*指針變數(shù)=字串常量例如:char*p=“abcd”第二種方法:先定義指針變數(shù),再賦值。格式:指針變數(shù)=字串常量例如:char*pp=“abcd”2.指向字串常量的指針變數(shù)的使用(1)處理整個(gè)字串輸出字串printf(“%s”,指針變數(shù));輸入新的字串代替原字串

scanf(“%s”,指針變數(shù));(2)處理字串中的單個(gè)字元第i個(gè)字元的表示方法*(指針變數(shù)+i)3.指向存放字串的字元數(shù)組的指針變數(shù)的使用同數(shù)組處理。四、指向二維數(shù)組的指針變數(shù)的使用1.指針變數(shù)指向二維數(shù)組的某個(gè)元素(1)讓指針變數(shù)指向二維數(shù)組的某個(gè)元素的方法用賦初值方式的格式:

*指針變數(shù)=&數(shù)組名[下標(biāo)1][下標(biāo)2]用賦值方式的格式:

指針變數(shù)=&數(shù)組名[下標(biāo)1][下標(biāo)2](2)數(shù)組元素的引用方法:*指針變數(shù)2.指針變數(shù)指向二維數(shù)組的首地址(1)指針變數(shù)指向二維數(shù)組首地址的方法用賦初值的方式有兩種:

*指針變數(shù)=二維數(shù)組名

*指針變數(shù)=&二維數(shù)組名[0][0]用賦值的方式也有兩種:

指針變數(shù)=二維數(shù)組名指針變數(shù)=&二維數(shù)組名[0][0](2)數(shù)組元素的地址表示方法:

指針變數(shù)+i*列數(shù)+j

數(shù)組元素的引用方法:

*(指針變數(shù)+i*列數(shù)+j)3.指針變數(shù)指向二維數(shù)組中某個(gè)一維數(shù)組(1)讓指針變數(shù)指向二維數(shù)組中某個(gè)一維數(shù)組的方法第一步:先定義一個(gè)指針變數(shù)

(*指針變數(shù))[m]第二步:將該指針變數(shù)指向二維數(shù)組的首地址用賦初值的方法:(*指針變數(shù))[m]=二維數(shù)組名用賦值的方法:指針變數(shù)=二維數(shù)組名第i行對(duì)應(yīng)的一維數(shù)組首地址可以用下列運(yùn)算式表示:*(指針變數(shù)+i)(2)二維數(shù)組元素的引用方法數(shù)組元素地址:*(指針變數(shù)+行下標(biāo))+列下標(biāo)數(shù)組元素引用:*(*(指針變數(shù)+行下標(biāo))+列下標(biāo))7.4指針數(shù)組和多級(jí)指針一、基本問題1.什麼是指針數(shù)組當(dāng)某個(gè)數(shù)組被定義為指針類型,就稱這樣的數(shù)組為指針數(shù)組。2.什麼是多級(jí)指針用來存放其他指針變數(shù)的地址的指針變數(shù)稱為二級(jí)指針。二、指針數(shù)組的定義1.定義格式

存儲(chǔ)類型數(shù)據(jù)類型*指針數(shù)組名[長度]={初值1}2.功能:3.說明:三、指針數(shù)組元素的引用1.引用所指向的普通變數(shù)或數(shù)組*指針數(shù)組名[下標(biāo)]2.對(duì)其賦值:指針數(shù)組名[下標(biāo)]=地址運(yùn)算式3.參加運(yùn)算:(1)賦值運(yùn)算(2)算術(shù)運(yùn)算(3)關(guān)係運(yùn)算四、多級(jí)指針的定義和應(yīng)用1.定義格式:存儲(chǔ)類型數(shù)據(jù)類型**指針變數(shù)={初值1}……

功能、使用說明2.引用方法

*二級(jí)指針變數(shù)(代表所指向的一級(jí)指針變數(shù))**二級(jí)指針變數(shù)(代表所指向的一級(jí)指針變數(shù)指向的變數(shù))第8章函數(shù)8.1函數(shù)的概念一、函數(shù)的概念1.什麼是函數(shù)函數(shù)是一個(gè)可以反復(fù)使用的程式段,從其他的程式段中均可以通過調(diào)用語句來執(zhí)行這段程式,完成既定的工作。2.函數(shù)說明(1)建立函數(shù)稱為“函數(shù)定義”,使用函數(shù)稱為“函數(shù)調(diào)用”。(2)調(diào)用其他函數(shù)的函數(shù)稱為“主調(diào)函數(shù)”,而被調(diào)用的函數(shù)稱為“被調(diào)函數(shù)”。二、函數(shù)的定義1.定義格式(1)有參函數(shù)的定義存儲(chǔ)類型數(shù)據(jù)類型函數(shù)名(形式參數(shù)表)形式參數(shù)說明序列;

{數(shù)據(jù)定義語句序列;執(zhí)行語句序列;

}(2)無參函數(shù)的定義存儲(chǔ)類型數(shù)據(jù)類型函數(shù)名()

{數(shù)據(jù)定義語句序列;執(zhí)行語句序列;

}2.定義函數(shù)的說明(1)函數(shù)有“函數(shù)頭”和“函數(shù)體”兩部分組成;(2)存儲(chǔ)類型可以是exterm和static兩種;(3)數(shù)據(jù)類型規(guī)定了函數(shù)返回值的數(shù)據(jù)類型,若無返回值則數(shù)據(jù)類型為void;(4)形式參數(shù)表是用逗號(hào)分隔的若干個(gè)形式參數(shù),每個(gè)形參可以是一個(gè)變數(shù)名、數(shù)組名、指針變數(shù)名和指針數(shù)組名;(5)形參說明可以用一條說明語句說明,也可以寫在形式參數(shù)表中;(6)形參若是數(shù)組,只需給出數(shù)組名,數(shù)組長度不需給出;(7)如果函數(shù)有返回值,則在函數(shù)體中應(yīng)有一條返回語句“return(運(yùn)算式);”,無返回值,則返回語句應(yīng)為“return;”,也可以省略。三、函數(shù)的調(diào)用1.調(diào)用格式(1)沒有返回值的函數(shù)調(diào)用格式:

函數(shù)名(實(shí)際參數(shù)表);(2)有返回值的函數(shù)調(diào)用格式:函數(shù)名(實(shí)際參數(shù)表)2.函數(shù)調(diào)用時(shí)對(duì)被調(diào)函數(shù)的說明(1)調(diào)用系統(tǒng)函數(shù)時(shí),要求在程式的開始用包含命令“#include<頭檔案名.h>”(2)如果被調(diào)函數(shù)是非整型或字元型函數(shù),而且書寫順序在主調(diào)函數(shù)後面,則在主調(diào)函數(shù)中需對(duì)被調(diào)函數(shù)進(jìn)行說明。例8-1intmax(x1,x2,x3)intx1,x2,x3;{

……}main(){intx,y,z,w,m;scanf("%d,%d,%d,%d",&x,&y,&z,&w);m=max(x-y,y-z,z-w);printf("max=%d\n",m);}例8-2main(){voidf();inta[10],i;for(i=0;i<10;i++)scanf("%d",&a[i]);

f(a);for(i=0;i<10;i++)printf("%d",a[i]);}voidf(b)intb[];{……}8.2函數(shù)調(diào)用中的數(shù)據(jù)傳遞方法一、基本問題1.函數(shù)調(diào)用中的數(shù)據(jù)傳遞方法(1)值傳遞方式(2)地址傳遞方式二、值傳遞方式1.特點(diǎn)(1)值傳遞方式所傳遞的是參數(shù)值;(2)調(diào)用函數(shù)時(shí),將實(shí)值的值計(jì)算出來賦予對(duì)應(yīng)的形參(3)在函數(shù)體中對(duì)形參的加工與實(shí)參完全脫離關(guān)係;(4)當(dāng)函數(shù)體執(zhí)行完畢返回時(shí),形參的值將不回帶到對(duì)應(yīng)的實(shí)參中;(5)用值傳遞方式時(shí),形參一般都是變數(shù),實(shí)參可以是變數(shù),也可以是運(yùn)算式。2.舉例說明(例8-1)三、地址傳遞方式1.特點(diǎn)(1)地址傳遞方式所傳遞的是地址,調(diào)用函數(shù)時(shí),將實(shí)值的地址賦予對(duì)應(yīng)的形參作為其地址;(2)因?yàn)樾螀⒑蛯?shí)參共用同一個(gè)地址,所以在函數(shù)體中對(duì)形參的加工實(shí)際是對(duì)實(shí)參的加工;(3)當(dāng)函數(shù)體執(zhí)行完畢返回時(shí),形參的值將回帶到對(duì)應(yīng)的實(shí)參中;(4)用地址傳遞方式時(shí),實(shí)參可以是變數(shù)地址、指針變數(shù)或數(shù)組名,所以形參一般是指針變數(shù)或數(shù)組名。2.舉例說明(例8-2)例8-3(2005年試卷試題二(2))#include<stdio.h>voidfunc(int*x,inty){statick=3;y=*x+y;*x=y%k;k++;printf("*x=%d,y=%d\n",*x,y);}voidmain(){intx=12,y=5;func(&x,y);printf("x1=%d,y1=%d\n",x,y);func(&y,x);printf("x2=%d,y2=%d\n",x,y);}結(jié)果:*x=2,y=17x1=2,y1=5*x=3,y=7x2=2,y2=38.3函數(shù)的嵌套調(diào)用和遞歸調(diào)用一、函數(shù)的嵌套調(diào)用1.什麼是函數(shù)的嵌套調(diào)用函數(shù)甲調(diào)用了函數(shù)乙,而函數(shù)乙又調(diào)用了函數(shù)丙。2.嵌套調(diào)用方法函數(shù)甲函數(shù)乙函數(shù)丙調(diào)用函數(shù)乙返回調(diào)用函數(shù)乙結(jié)束返回二、函數(shù)的遞歸調(diào)用1.什麼是函數(shù)的遞歸調(diào)用即函數(shù)在自身定義的內(nèi)部又調(diào)用自己。2.遞歸的特點(diǎn)(1)遞歸必須有遞歸結(jié)束條件;(2)遞歸過程首先是一級(jí)一級(jí)遞推(即當(dāng)前調(diào)用未結(jié)束又引出下一層調(diào)用),而滿足遞歸結(jié)束條件時(shí)結(jié)束遞推,再一級(jí)一級(jí)的回歸(即一級(jí)一級(jí)再返回上一級(jí)的調(diào)用繼續(xù)完成上一級(jí)的未完成的操作)。3.舉例說明例8-4(2004年試卷試題一(7))voidconv(intm){if(m>=2)conv(m/2);printf("%d",m%2);}voidmain(){conv(13);}結(jié)果是:11018.4指針型函數(shù)及調(diào)用一、指針型函數(shù)的定義1.什麼是指針型函數(shù)是指該函數(shù)的返回值是指針型的,也就是說,這類函數(shù)的返回值是地址數(shù)據(jù)。2.指針型函數(shù)的特點(diǎn)指針型函數(shù)的返回值必須是地址值,調(diào)用該類函數(shù)時(shí),接受返回值的必須是指針變數(shù)等能存入地址的對(duì)象。3.定義方法定

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論