C語言基礎(chǔ)知識總結(jié)_第1頁
C語言基礎(chǔ)知識總結(jié)_第2頁
C語言基礎(chǔ)知識總結(jié)_第3頁
C語言基礎(chǔ)知識總結(jié)_第4頁
C語言基礎(chǔ)知識總結(jié)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C語言基礎(chǔ)知識總結(jié)主要內(nèi)容:1.C數(shù)據(jù)類型 2.簡單的算術(shù)運算和表達式 3.鍵盤輸入和屏幕輸出 4.選擇控制結(jié)構(gòu) 5.循環(huán)控制結(jié)構(gòu)總結(jié)風(fēng)格:分條羅列,主要是知識點,有例題不多 一、C數(shù)據(jù)類型1.C語言處理兩種數(shù)據(jù):常量和變量2.常量:整形常量、實型常量、字符常量、字符串常量、枚舉常量3.整形常量:正整數(shù)、負整數(shù)、零 eg: 10,-30,04.實型常量:實數(shù)、小數(shù)、浮點數(shù) eg: 3.14,-0.56,18.05.字符常量:字符型常量、用單引號括起來的任意字符 eg: x X ? , 96.字符串常量:用雙引號括起來的一個或多個字符 eg: x Hello Y787.在C程序中,整型常量可以用

2、十進制、八進制、十六進制形式表示,但編譯器都會自動將其轉(zhuǎn)換成二進制存儲8.整型常量的類型:長整型、短整型、有符號、無符號。9.不同進制的整型常量的表示形式: 1)十進制:09數(shù)字組合,可帶正負號 eg: 256,-128,0,+7 2)八進制:0開頭,后面跟07數(shù)字組合 eg: 021,-017 3)十六進制:0x(0X)開頭,后跟09,af(AF)數(shù)字組合 eg:0x12,-0x1F10.不同類型的整形常量的表示形式: 1) 有符號整型常量:默認int型定義為有符號整數(shù),無需signed eg:10,-30,0 2) 無符號整形常量:常量值后跟u或U,只能表示=0的數(shù) eg:30u,256U

3、 3) 長整型常量:常量值后跟l或L eg:-256l,1024L 4) 無符號長整型常量:常量值后跟LU、Lu 、lU 、lu eg:30lu11.C程序中,實型常量兩種表示形式:小數(shù)、指數(shù)12.不同形式的實型常量的表示形式: 1) 十進制表示形式:數(shù)字和小數(shù)點組成,必須要有小數(shù)點,整數(shù)部分可省略 eg:0.123, -12.35, .98 2) 指數(shù)形式:e或E代表以10為底的指數(shù), e左邊是數(shù)值部分(有效數(shù)字,可以是整數(shù)、小數(shù),不能省略),e右邊是指數(shù)部分(必須是整數(shù)形式) eg:3.45e-613.實型常量有單精度和雙精度之分,無有符號和無符號之分14.不同類型的實型常量表示形式: 1

4、)單精度實型常量:常量值后跟F或f eg:1.25F,1.25e-2f 2)雙精度實型常量(double):實型常量默認按雙精度處理 eg:0.123,-12.35, .98 3)長雙精度實型常量(long double):常量值后跟L或l eg:1.25L15.變量:在程序執(zhí)行過程中可以改變的量16.變量在必須先定義后使用,定義時需要聲明變量的類型和變量名,一般形式:類型關(guān)鍵字 變量名;17.關(guān)鍵字是C語言預(yù)先規(guī)定具有特殊意義的單詞,類型關(guān)鍵字用于聲明變量的類型18.標(biāo)準(zhǔn)C語言編寫的程序都是以main()作為開頭,指定了C程序執(zhí)行的起點,在C程序中只能出現(xiàn)一次,稱為主函數(shù)19.C程序總是從m

5、ain函數(shù)開始執(zhí)行,與他在程序中的位置無關(guān),main函數(shù)主體部分稱為語句,用括起來,一般C語句以;結(jié)束20.變量的類型決定了編譯器為其分配內(nèi)存單元的字節(jié)數(shù)、數(shù)據(jù)在內(nèi)存單元中的存放形式、該類型變量合法的取值范圍以及該類型變量可參與的運算種類21.變量名是用戶定義的標(biāo)識符,用于標(biāo)識內(nèi)存中具體的存儲單元,存放的數(shù)據(jù)稱為變量的值22.新數(shù)據(jù)存放于存儲單元時,舊數(shù)據(jù)將會被修改,反應(yīng)變量的值是可以改變的23.變量名的命名規(guī)則: 1)標(biāo)識符只能由英文字母、數(shù)字、下劃線組成 2)標(biāo)識符必須以字母或下劃線開頭 3)不允許使用C關(guān)鍵字為標(biāo)識符命名 4)標(biāo)識符可以包含任意多個字符,但一般會有最大長度限制,預(yù)編譯器有

6、關(guān),一般不會超過,最好不超過8個字符 注意:標(biāo)識符區(qū)分大小寫 eg:x y3 _imax ELSE X A_to_B (合法) eg:7x int #No bad one re-input(不合法)24.標(biāo)準(zhǔn)C規(guī)定所有變量必須在第一條可執(zhí)行語句之前定義25.在同一條語句中可以同時定義多個相同類型變量,多個變量之間用逗號分隔,沒有順序要求26.在使用標(biāo)準(zhǔn)輸入/輸出函數(shù)時,必須在程序開頭加上編譯預(yù)處理命令27.中stdio為頭文件,std是standard,i為input,o為output,h為head28.編譯預(yù)處理命令#include的作用:將在輸入/輸出函數(shù)的頭文件stdio.h包含到用戶源

7、文件中29.%d按十進制整數(shù)個格式輸出,%f按十進制小數(shù)格式輸出,一般輸出6位小數(shù),%c輸出一個字符,n換行,雙引號內(nèi)字符原樣輸出30.不同類型的數(shù)據(jù)在內(nèi)存中占用不同大小的存儲單元,他們所能表示的數(shù)據(jù)的取值范圍各不相同,不同類型的數(shù)據(jù)表示形式及其可以參與的運算種類也不同31.定義整型變量時,只要不指定為無符號型,其隱含類型為有符號型,signed通常省略不寫32.C程序中每個變量的值都是按字節(jié)編址,都被存儲在內(nèi)存中特定的存儲單元中,這個存儲空間實際是一個線性地址表,即每個字節(jié)的存儲空間對應(yīng)一個唯一的地址33.1個字節(jié)等于8個二進制位,即8個位為一個字節(jié),一個字節(jié)可以表示的整數(shù)最小為0,最大25

8、5,即8個位可以表示0-255之間的數(shù),一個二進制位的值只能是0或134.同種類型在不同的平臺所占字節(jié)數(shù)不同,要計算數(shù)據(jù)類型所占內(nèi)存空間的字節(jié)數(shù)需要用sizeof()運算符35.sizeof是C語言關(guān)鍵字,不是函數(shù)名,sizeof(變量名)計算一個變量所占內(nèi)存的字節(jié)數(shù)36.計算不同類型運算符的表達式時,要考慮運算符的優(yōu)先級和結(jié)合性37.正數(shù)的反碼、補碼與原碼都相同,負數(shù)的補碼等于反碼加138.在計算機內(nèi)存中負數(shù)都是用補碼來表示39.對于實數(shù),無論小數(shù)海曙指數(shù)形式,在計算機內(nèi)存中都采用浮點形式來存儲40.浮點數(shù)分為階碼、尾數(shù)兩部分,實數(shù)N=S*pow(r,j),S為尾數(shù)(無論正負,規(guī)定用存小數(shù))

9、,j為階碼(無論正負,必須是整數(shù)),r是基數(shù) eg:10.0111=0.100111*pow(2,10)41.階碼所占位數(shù)決定實數(shù)的取值范圍,尾數(shù)所占位數(shù)決定實數(shù)的精度,尾數(shù)的符號決定實數(shù)的正負,階碼和尾數(shù)的字節(jié)大小與編譯器有關(guān)42.float型變量能接收實型常量的7位有效數(shù)字,double型變量能接收16位43.運算符的優(yōu)先級:單目運算算術(shù)運算關(guān)系運算邏輯運算條件運算賦值運算算術(shù)運算關(guān)系運算邏輯運算條件運算賦值運算逗號運算9.計算并輸出一個三位整數(shù)的個位、十位、百位數(shù)字之和#includevoid main()int x=321;int a,b,c,sum;a=x%10;/a=1b=(x/1

10、0)%10;/b=2c=x/100;/c=3sum=a+b+c;printf(a=%d,b=%d,c=%dnsum=%dn,a,b,c,sum);10.涉及算術(shù)運算的復(fù)合賦值運算符有5個:+=,-=,*=,/=,%=11.增1運算符也稱自增運算符,減1運算符也稱自減運算符,都是一元運算符,只有一個操作數(shù)必須是變量不能是常量或表達式12.自增自減運算符作為前綴時,先執(zhí)行加1或減1然后使用;自增自減運算符作為后綴時,先使用再執(zhí)行加1或減1;13.考慮優(yōu)先級與結(jié)合性的實例m=-n+=m=-(n+)=m=-n,n=n+1;/正面:-和+都是一元運算符,優(yōu)先級相同,此時要考慮結(jié)合性,結(jié)合性都是右結(jié)合的,

11、所以先算+后算-/反面:如果等價m=(-n)+就不合法了,因為表達式不能進行自增操作14.scanf函數(shù)和printf函數(shù)都是C的標(biāo)準(zhǔn)輸入/輸出函數(shù),&為取地址運算符15.宏常量與宏替換: 1) 在程序中直接使用的常數(shù)稱為幻數(shù),將幻數(shù)定義為宏常量或const常量是為了提高程序的可讀性和可維護性2) 宏常量也稱符號常量,沒有數(shù)據(jù)類型,編譯器不對其進行類型檢查,只進行字符串替換 3) 宏定義一般形式:#define 標(biāo)識符 字符串。標(biāo)識符被稱為宏名,宏名與字符串之間可有多個空白符,不加等號,結(jié)尾不加分號 4) 宏常量是由宏定義編譯預(yù)處理命令來定義,宏名替換成字符串的過程稱為宏替換,宏替換不做任何語

12、法檢查5) 當(dāng)宏定義是一個表達式時,調(diào)用時,是一個數(shù)就可以直接帶入,而是表達式也要看成是一個數(shù)代進宏定義表達式中, 而看成一個數(shù)這就要求把調(diào)用的數(shù)加上圓括號,為了減少不必要的錯誤,最好都加上圓括號6) 宏替換的過程是將宏名原樣替換成字符串,而不是直接計算出值,所以要用調(diào)用后的結(jié)果參與其他運算就需要把調(diào)用的結(jié)果加上圓括號7) 例題:#include#define N 2 /N=2#define M N+1 /M=2+1#define NUM 2*M+1 /NUM=2*2+1+1=6void main()int i;for(i=1;i=NUM;i+);printf(%dn,i); /執(zhí)行完空循環(huán),

13、i=7i-; / i=6printf(%dn,i); 8) 例題:#include#define f(x) x*xvoid main()int b;b=f(4+4); /b=4+4*4+4=24,解釋見5)printf(b=%dn,b); 9) 例題:#include#define f(x) x*xvoid main()int b;b=f(4+4)/(2+2); /b=4+4*4+4/(2+2)=21解釋見6)printf(b=%dn,b); 10) 例題:#include#define f(x) x*xvoid main()int b;b=f(4+4); /b=(4+4)*(4+4)=64p

14、rintf(b=%dn,b); 11) 例題:#include#define f(x) (x*x)void main()int b;b=f(4+4)/(2+2); /b=(4+4)*(4+4)/(2+2)=16printf(b=%dn,b);16.const常量 1) const常量只能在定義時賦初值,因為編譯器將其放在只讀存儲區(qū),不允許在程序中修改2) const常量的定義一般形式:const 類型名 標(biāo)識符=字符串;/將標(biāo)識符聲明為具有該數(shù)據(jù)類型的const常量3) const是一種類型修飾符,const常量具有數(shù)據(jù)類型,編譯器要對其進行類型檢查17.表達式中的自動類型轉(zhuǎn)換: 1) 表達式

15、中,操作數(shù)類型相同,運算的結(jié)果類型與操作數(shù)類型相同2) 表達式中,操作數(shù)類型不相同,編譯器自動將所有操作數(shù)進行類型提升,轉(zhuǎn)換成同一類型,所占字節(jié)最大,再計算18.賦值中的自動類型轉(zhuǎn)換: 1) 賦值運算符左側(cè)變量與右側(cè)表達式類型不同時,發(fā)生自動類型轉(zhuǎn)換:右側(cè)表達式的值轉(zhuǎn)換成左側(cè)變量的類型19.強制類型轉(zhuǎn)換: 1) 強制類型轉(zhuǎn)換運算符是一元運算符2) 強制類型轉(zhuǎn)換也稱強轉(zhuǎn),是將表達式的值轉(zhuǎn)換為任意類型,并不改變變量本身的數(shù)據(jù)類型3) 強轉(zhuǎn)一般形式:(類型)表達式4) 演示強制類型轉(zhuǎn)換運算符的使用#includevoid main()int m=5;printf(m/2=%dn,m/2);/m=2p

16、rintf(float)(m/2)=%fn,(float)(m/2);/m=2.000000printf(float)m/2=%fn,(float)m/2);/m=2.500000printf(m=%dn,m);/m=5,只是將m強轉(zhuǎn)為實型數(shù)據(jù),并不改變m的數(shù)據(jù)類型20.常用的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù): 1) 使用C標(biāo)準(zhǔn)數(shù)學(xué)函數(shù),要在程序開頭加上編譯預(yù)處理命令:#include2) 例:已知三角形三邊長為a,b,c,計算三角形的面積#include#includevoid main()float a,b,c,s,area;printf(Input a,b,c:);scanf(%f,%f,%f,&a,&b,

17、&c);s=(a+b+c)/2;area=(float)sqrt(s*(s-a)*(s-b)*(s-c);printf(area=%fn,area);21.賦值運算符的左側(cè)不能出現(xiàn)表達式,變量與變量之間可以賦值 例1:若有定義:int a,b,c;下列表達式中哪一個是合法的C語言賦值表達式(C、D) A)a=7+b=c=7 B)a=b+=c=7 C)a=(b=7,c=12) D)a=3,b=a+5,c=b+2 /A.7+b表達式不能做左值 B.b+表達式不能做左值 C.逗號表達式a=12 D.依次賦值 例2:下面不正確的賦值語句是(B) A)a=+a B)a=b+=10 C)a+=b D)a=

18、1a/D.算術(shù)運算符優(yōu)先級高于賦值運算符,先算1a再將其結(jié)果賦給a 例3:若有下列定義:int a=3,b=2,c=1;以下選項錯誤的賦值表達式是(A) A)a=(b=4)=3 B)a=b=c+1 C)a=(b=4)+c D)a=1+(b=c=4)/A.先計算圓括號里的值等于4,然后按照賦值表達式的順序從右向左計算,將3賦值給4這是不對的, 即賦值號左側(cè)只能是變量,不能出現(xiàn)表達式b=4 三、 鍵盤輸入和屏幕輸出1.字符常量: 把字符放在一對單引號內(nèi),適用于多數(shù)可打印字符2.轉(zhuǎn)義字符: 以反斜線()開頭,也是放在一對單引號內(nèi),適用于控制字符(如回車符,換行符)3.常用的轉(zhuǎn)義字符: 1) n 換行

19、 8) a 響鈴報警提示音 2) r 回車(不換行) 9) 一個雙引號 3) 0 空字符 10) 一個單引號 4) t 水平制表 11) 一個反斜線 5) v 垂直制表 12) ? 問號 6) b 退格 13) ddd 1到3位八進制ASCII碼值所代表的字符 7) f 走紙換頁 14) xhh 1到2位十六進制ASCII碼值所代表的字符4.n,是將光標(biāo)移到下一行起始位置,r是將光標(biāo)移到當(dāng)前行的起始位置5.t,是水平制表符,相當(dāng)于按下Tab鍵,每次按下Tab鍵并不是從當(dāng)前光標(biāo)位置向后移動一個Tab寬度,而是移到下一個制表位實際移動的寬度視當(dāng)前光標(biāo)位置距相鄰的下一個制表位的距離而定6.制表位,屏

20、幕上的一行被分為若干個域,相鄰域之間的交接點稱為制表位,每個域的寬度就是一個Tab寬度,多數(shù)習(xí)慣上為47.當(dāng)轉(zhuǎn)義序列出現(xiàn)在字符串中時,是按單個字符計數(shù)的8.一個整形數(shù)在內(nèi)存中是以二進制形式存儲的,而一個字符在內(nèi)存中也是以其對應(yīng)的ASCII碼的二進制形式存儲的,但char型數(shù)據(jù)在內(nèi)存中只占一個字節(jié),而int型數(shù)據(jù)在16位系統(tǒng)中占2個字節(jié),32位系統(tǒng)占4個字節(jié)9.在ASCII碼取值范圍內(nèi),char型數(shù)據(jù)可以和int型數(shù)據(jù)進行混合運算,char型數(shù)據(jù)也能以int型輸出,直接輸出其對應(yīng)的ASCII碼的十進制值10.字符的輸入/輸出: 1) getchar()和putchar()是標(biāo)準(zhǔn)函數(shù)庫中專門用于字

21、符輸入/輸出的函數(shù),功能是只能輸入/輸出一個字符 2) 例:從鍵盤輸入一個大寫英文字母,將其轉(zhuǎn)換為小寫字母顯示在屏幕上#includevoid main()char ch;ch=getchar();/鍵盤輸入一個字符,再按回車表示輸入結(jié)束,字符存入變量ch,注意:getchar()沒有參數(shù),直接返回讀入的字符ch=ch+32;putchar(ch);/第二次按回車,將顯示轉(zhuǎn)換后的結(jié)果putchar(n);/注意:putchar()內(nèi)一定要有參數(shù),參數(shù)就是待輸出的字符,可以是可打印字符,也可是轉(zhuǎn)義字符11.數(shù)據(jù)的格式化屏幕輸出: 1) 函數(shù)printf()的一般格式:printf(格式控制字符串

22、);或者printf(格式控制字符串,輸出值參數(shù)表); 2) 格式控制字符串包括:格式轉(zhuǎn)換說明符,需要原樣輸出的普通字符 3) 函數(shù)printf()的格式轉(zhuǎn)換說明符: %d 輸出帶符號十進制整數(shù),整數(shù)符號省略 %u 輸出無符號十進制整數(shù) %o 輸出無符號八進制整數(shù),不輸出前導(dǎo)符0 %x 輸出無符號十六進制整數(shù)(小寫),不輸出前導(dǎo)符0x %X 輸出無符號十六進制整數(shù)(大寫),不輸出前導(dǎo)符0x %c 輸出一個字符 %s 輸出字符串 %f 以十進制小數(shù)形式輸出實數(shù),包含單,雙精度,隱含6位小數(shù),但并非全是有效數(shù)字,單精度有效7位,雙精度16位 %e 以指數(shù)形式輸出實數(shù)(小寫e表示指數(shù)部分),小數(shù)點前

23、有且僅有一位非0數(shù)字 %E 以指數(shù)形式輸出實數(shù)(大寫E表示指數(shù)部分) %g 自動選取f或e格式中寬度較小的一種使用,不輸出無意義的0 % 輸出% 4) 輸出值參數(shù)表:需要輸出的數(shù)據(jù)項的列表,可以是變量或表達式,逗號隔開,類型與格式轉(zhuǎn)換說明符相匹配 5) 每個格式轉(zhuǎn)換說明符與輸出值參數(shù)表中的輸出值參數(shù)一一對應(yīng),沒有輸出值參數(shù),格式控制字符串就不需要格式轉(zhuǎn)換說明符 6) 例:從鍵盤輸入一個大寫英文字母,將其轉(zhuǎn)換為小寫字母和其十進制ASCII碼值顯示在屏幕上#includevoid main()char ch;printf(Please enter a key:);ch=getchar();ch=c

24、h+32;printf(%c,%dn,ch,ch);/printf(%c,ch)putchar(ch),printf(n)putchar(n) 7) 函數(shù)printf()中的格式修飾符:在%和格式符中間插入格式修飾符,用于輸出格式的微調(diào),如:指定輸出域?qū)挕⒕?、左對齊等 英文字母l 修飾格式符d,o,x,u時,用于輸出long型數(shù)據(jù) 英文字母L 修飾格式符f,e,g時,用于輸出long double型數(shù)據(jù) 英文字母h 修飾格式符d,o,x時,用于輸出short型數(shù)據(jù) 輸出域?qū)抦 m為整數(shù),輸出時占m列,若m0,當(dāng)數(shù)據(jù)寬度小于m時,域內(nèi)右靠齊,左補空格,當(dāng)數(shù)據(jù)寬度大于m時,修飾符失效,按實際寬度

25、輸出,若m有前導(dǎo)符0,左邊多余位補0;若m0,輸出數(shù)據(jù)在域內(nèi)左靠齊 顯示精度 .n n為大于等于0的整數(shù),精度修飾符位于最小域?qū)捫揎椃?,由圓點和整數(shù)構(gòu)成,對于浮點數(shù),用于指定輸出的浮點數(shù)小數(shù)位數(shù);對于字符串,用于指定從字符串左側(cè)開始截取的子串字符個數(shù) 8) 使用const常量定義pi,編程從鍵盤輸入圓的周長和面積,使其輸出數(shù)據(jù)保留兩位小數(shù)#includevoid main()const double pi=3.14159;double r,circum,area;printf(Please enter r:);scanf(%lf,&r);circum=2*pi*r;area=pi*r*r;

26、printf(輸出沒有寬度和精度的值:);printf(circum=%f,area=%fn,circum,area);printf(輸出沒有寬度和精度的值:);printf(circum=%7.2f,area=%7.2fn,circum,area);/域?qū)挒?,占7個字符寬度,小數(shù)點也算一個字符,精度為2,小數(shù)點后保留2位12.數(shù)據(jù)的格式化鍵盤輸入: 1) 函數(shù)scanf()的一般格式:scanf(格式控制字符串,參數(shù)地址表); 2) 格式控制字符串:包括格式轉(zhuǎn)換說明符,分隔符 3) 格式轉(zhuǎn)換說明符以%開始,以格式字符結(jié)束,用于指定各參數(shù)的輸入格式 4) 函數(shù)scanf()的格式轉(zhuǎn)換說明符:

27、 %d 輸入十進制整數(shù) %o 輸入八進制整數(shù) %x 輸入十六進制整數(shù) %c 輸入一個字符,空白字符(包括空格、回車、制表符)也作為有效字符輸入 %s 輸入字符串,遇到第一個空白字符(包括空格、回車、制表符)時結(jié)束 %f或%e 輸入實數(shù),以小數(shù)或指數(shù)形式輸入均可 % 輸入一個% 5) 參數(shù)地址表:由若干變量的地址組成的列表,用逗號分隔6) 函數(shù)scanf()中的格式修飾符:在%和格式符中間插入格式修飾符 英文字母l 加在格式符d,o,x,u之前,用于輸入long型數(shù)據(jù);加在f,e之前,用于輸入double型數(shù)據(jù) 英文字母L 加在格式符f,e之前,用于輸入long double型數(shù)據(jù) 英文字母h

28、加在格式符d,o,x時,用于輸入short型數(shù)據(jù) 輸出域?qū)抦 m為正整數(shù),指定輸入數(shù)據(jù)的寬度,系統(tǒng)自動按此寬度截取所需數(shù)據(jù) 顯示精度 .n n為0或正整數(shù),scanf()沒有精度格式修飾符,輸入時不能規(guī)定精度 忽略輸入修飾符* 表示對應(yīng)的輸入項在讀入后不賦給相應(yīng)的變量 7) 函數(shù)scanf()輸入數(shù)值型數(shù)據(jù)時,被認為輸入結(jié)束的幾種情況:遇空格符、回車符、制表符;達到輸出域?qū)?;遇非法字符輸?) 如果函數(shù)scanf()的格式控制字符串中存在除格式轉(zhuǎn)換說明符以外的其他字符,必須將這些字符原樣輸入#includevoid main()int a,b;scanf(%d %d,&a,&b); /以空格作

29、為分隔符,等價于scanf(%d%d,&a,&b),等價于scanf(%d%d,&a,&b),printf(a=%d,b=%dn,a,b);/實際輸入時,空格、回車符、制表符都可作為分隔符,即輸入:12空格34 12回車34 12制表符34均可, #includevoid main()int a,b;scanf(%d,%d,&a,&b);/輸入時必須以逗號作為分隔符,即只能輸入:12,34printf(a=%d,b=%dn,a,b);#includevoid main()int a,b;scanf(a=%d,b=%d,&a,&b);/輸入時必須將a=和b=原樣輸入,即只能輸入:a=12,b=3

30、4printf(a=%d,b=%dn,a,b); #includevoid main()int a,b;scanf(%2d%2d,&a,&b);/輸入時將前兩位數(shù)讀入存到a中,接著兩位存到b中,然后結(jié)束讀取,即輸入:1234,或123456結(jié)果一樣printf(a=%d,b=%dn,a,b); #includevoid main()int a,b;scanf(%d %d,&a,&b);printf(a=%d,b=%dn,a,b);/輸出a=12,b=34#includevoid main()int a,b;scanf(%d%*c%d,&a,&b);/任意字符都可作為分隔符,即輸入:12,34或

31、12?34或12+34結(jié)果都一樣printf(a=%d,b=%dn,a,b);#includevoid main()int a,b;scanf(%2d%*2d%d,&a,&b);/忽略兩位,輸入123456 printf(a=%d,b=%dn,a,b);/輸出a=12,b=56對于程序#includevoid main()int a,b;scanf(%d %d,&a,&b);printf(a=%d,b=%dn,a,b);如果輸入12 34a回車,則結(jié)果a=12,b=3,程序在遇到非法字符a時,會導(dǎo)致程序輸入終止,此時a會讀入12,b會讀入3如果輸入123a回車,則結(jié)果a=123,b=-8589

32、93460,程序在遇到非法字符a時,會導(dǎo)致程序輸入終止,此時a會讀入123,而b未能讀入指定數(shù)據(jù)項數(shù)如果在scanf()函數(shù)中忘記在變量前加取地址運算符&,會導(dǎo)致非法內(nèi)存訪問13.%c格式符使用幾種情況: 1) 用%c格式讀入字符時,空格字符和轉(zhuǎn)義字符(包括回車)都會被當(dāng)做有效字符讀入 例:鍵盤輸入一個整數(shù)加法算式:操作數(shù)1+操作數(shù)2,輸出:操作數(shù)1+操作數(shù)2=計算結(jié)果#include void main() int data1,data2; char op; /輸入:12空格+空格3 回車/輸出:12 -858993460=-858993448printf(Enter data1+data2

33、n);/輸入:12空格3 回車/輸出:12 3=15scanf(%d%c%d,&data1,&op,&data2);/輸入:12+3 回車/輸出:12+3=15printf(%d%c%d=%dn,data1,op,data2,data1+data2); 2) 先輸入一個數(shù)據(jù)后再輸入字符型變量時,輸入一個數(shù)據(jù)后,輸入的回車符將被當(dāng)做有效字符讀給字符型變量 例:編程從鍵盤先后輸入int型、char型和float型數(shù)據(jù),要求每輸入一個數(shù)據(jù)就顯示這個數(shù)據(jù)的類型和數(shù)據(jù)值#includevoid main()int a;char b;float c;printf(Please input an integ

34、er:);scanf(%d,&a);printf(integer:%dn,a);/在輸入一個整型數(shù)據(jù)后,輸入的回車符被當(dāng)做有效字符讀給了字符型變量b了 printf(Please input a character:);scanf(%c,&b);printf(chracter:%cn,b);printf(Please input a float number:);scanf(%f,&c);printf(float:%fn,c);14.%c格式符存在問題的解決方法 1) 用函數(shù)getchar()將數(shù)據(jù)輸入時存入緩沖區(qū)中的回車符讀入,以避免被后面的字符型變量作為有效字符讀入#includevoid

35、 main()int a;char b;float c;printf(Please input an integer:);scanf(%d,&a);printf(integer:%dn,a);getchar();/將存于緩沖區(qū)中的回車符讀入,避免在后面作為有效字符讀入/函數(shù)getchar()的返回值是一個回車符,已經(jīng)避免了錯誤,不需要再將其賦給字符型變量使用printf(Please input a character:);scanf(%c,&b);printf(chracter:%cn,b);printf(Please input a float number:);scanf(%f,&c);

36、printf(float:%fn,c); 2) 在%c前面加一個空格,將前面數(shù)據(jù)輸入時存于緩沖區(qū)的回車符讀入,避免被后面的字符型變量作為有效字符讀入#includevoid main()int a;char b;float c;printf(Please input an integer:);scanf(%d,&a);printf(integer:%dn,a);printf(Please input a character:);scanf( %c,&b);/在%c前面加空格,將存于緩沖區(qū)中的回車符讀入printf(chracter:%cn,b);printf(Please input a fl

37、oat number:);scanf(%f,&c);printf(float:%fn,c);/解釋:在%c前加空格為什么能將存于緩沖區(qū)中的回車符讀入因為如果函數(shù)scanf()的格式控制字符串中存在除格式轉(zhuǎn)換說明符以外的其他字符,必須將這些字符原樣輸入,所以在%c前加空格,就必須在輸入字符型數(shù)據(jù)前先原樣輸入空格,而空格,回車符,制表符在函數(shù)scanf()輸入數(shù)值型數(shù)據(jù)時都代表輸入結(jié)束,由實踐可知,空格符、回車符、制表符在輸入時等效所以,緩沖區(qū)中的回車將代替需要原樣輸入的空格,因此,實際上,在%c前增加空格或者Tab鍵都可以完成,并且與增加的數(shù)量無關(guān),且可以混合增加 3)*經(jīng)典例題:編程實現(xiàn)鍵盤任

38、意輸入字符,統(tǒng)計字母、數(shù)字、空格、其他字符數(shù)量首選字符串的方法:#include#define N 100int main()char aN;int i,m=0,n=0,b=0,c=0;printf(請輸入字符:n);gets(a); for(i=0;ai!=0;i+)if(ai=a&ai=A&ai=0&ai=9) n+;else if(ai= ) b+;else c+;printf(字母個數(shù):%dn,m);printf(數(shù)字個數(shù):%dn,n);printf(空格個數(shù):%dn,b);printf(其他字符個數(shù):%dn,c);return 0;單個字符輸入的方法,但是要解決緩沖區(qū)的問題#incl

39、udeint main()char ch;int a,b,c,d;a=b=c=d=0;printf(請輸入字符:n);doch=getchar();getchar();/清除緩沖區(qū)的回車鍵,不然會當(dāng)做第二個字符讀入if(ch!=)/用Tab鍵控制輸入結(jié)束,他在程序中只會出現(xiàn)一次并且統(tǒng)計一次, /然后結(jié)束,所以要去掉它,可以使用if語句,也可在前面初始化為d=-1if(ch=a&ch=A&ch=0&ch賦值運算符,先判斷a=b?是否正確正確則為真,把1賦給m,|是或運算,前面已經(jīng)為真,所以|后面的就不會再運算了,結(jié)果就為真所以m=1,n=0不變 2)int a,b,m,n;初值依次為4,3,2,

40、1,經(jīng)計算m=(a=b)&(n=mn)后,m,n的值為(C)A) 1,1 B) 1,0 C) 0,1 D) 0,0/ a=b為假,&是并,前面已經(jīng)為假,后面就不會再運算了,結(jié)果就為假,把0賦給m,即m=0,n=1不變 四、 選擇控制結(jié)構(gòu)1.沃思提出“數(shù)據(jù)結(jié)構(gòu)+算法=程序”只在面向過程的語言(如C語言)成立2.算法的正確性衡量方法: 1)有窮性 2)確定性 3)有效性 4)允許沒有輸入或者有多個輸入 5)必須有一個或者多個輸出3.算法的描述方法: 1)自然語言描述 2)流程圖描述 3)NS結(jié)構(gòu)化流程圖描述 4)偽碼描述4.關(guān)系表達式:用作判斷條件,結(jié)果只有真和假,(n%2!=0)等價于(n%2)

41、,0表示假,非0表示真5.分支結(jié)構(gòu):當(dāng)條件P成立時,執(zhí)行A操作,否則執(zhí)行B操作;如果B操作為空,即為單分支結(jié)構(gòu);如果B操作不為空,即為雙分支結(jié)構(gòu);如果B操作中又包含另一選擇結(jié)構(gòu),則構(gòu)成多分支選擇結(jié)構(gòu);6.單分支例題:計算輸出兩整數(shù)最大值單分支(一般形式):if(表達式P) 語句A#includevoid main()int a,b,max;printf(Enter a,b:);scanf(%d%d,&a,&b);if(ab) /單分支:if(表達式P) 語句Amax=a; if(a=b) /單分支:if(表達式P) 語句Amax=b;printf(max=%dn,max);7.雙分支例題:計算

42、輸出兩整數(shù)最大值雙分支(一般形式):if(表達式P) 語句1 else 語句2#includevoid main()int a,b,max;printf(Enter a,b:);scanf(%d%d,&a,&b);if(ab) max=a; else max=b;printf(max=%dn,max);8.條件運算符是C語言中唯一的三元運算符,需要三個操作數(shù)9.條件運算符例題:計算輸出兩整數(shù)最大值條件運算符(一般形式):表達式1?表達式2:表達式3含義:若表達式1為非0,則結(jié)果為表達式2的值,否則是表達式3的值#includevoid main()int a,b,max;printf(Ente

43、r a,b:);scanf(%d%d,&a,&b);max=ab?a:b; printf(max=%dn,max);10.多分支控制條件語句(一般形式): if(表達式1) 語句1 else if(表達式2) 語句2.else if(表達式m) 語句melse 語句m+111.條件語句在語法上只允許每個條件分支中帶一條語句,而要在分支里處理多條語句就要使用花括號,構(gòu)成復(fù)合語句12.隨機數(shù)的使用方法: 1) 符號常量RAND_MAX在頭文件#include中定義,標(biāo)準(zhǔn)C規(guī)定RAND_MAX不大于雙字節(jié)整數(shù)的最大值32767 2)隨機函數(shù)rand()產(chǎn)生的是一個在0RAND_MAX之間的整數(shù),即0,32767之間的整數(shù) 3) 利用求余運算rand()%b可將函數(shù)rand()生成的隨機數(shù)變化到0,b-1 4) 利用rand()%b+a可將隨機數(shù)的取值范圍平移

溫馨提示

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

評論

0/150

提交評論