C語言筆記-郭永鋒老師_第1頁
C語言筆記-郭永鋒老師_第2頁
C語言筆記-郭永鋒老師_第3頁
C語言筆記-郭永鋒老師_第4頁
C語言筆記-郭永鋒老師_第5頁
已閱讀5頁,還剩84頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第1章 程序結(jié)構(gòu)1. C語言框架#include /standard inpuit output header,標(biāo)準(zhǔn)輸入輸出頭文件。因為后面用到了輸出輸出,而輸入輸出是在stdio.h這個頭文件中定義。用到時才包含,比如沒包含math.hint main()/int表示函數(shù)返回值的類型,main是主函數(shù),每個C語言程序中有且只能有一個main函數(shù),是程序的入口。后面的小括號是函數(shù)的標(biāo)志,括號可以有參數(shù),也可以沒有。/一對大括號表示函數(shù)體,函數(shù)體就是函數(shù)功能的具體實現(xiàn)部分。int a,b,sum; /變量的定義,相當(dāng)于申請存儲空間printf(請輸入兩個整數(shù):n); /printf(雙引號中原樣

2、輸出的內(nèi)容,除格式控制符和轉(zhuǎn)義字符外,需要輸出的參數(shù))scanf(%d%d,&a,&b);/scanf(格式控制列表,地址列表)sum=a+b;printf(%d+%d=%dn,a,b,sum); /%格式控制需要后面參數(shù)的值進行替換return 0;/return 表示函數(shù)的返回值,注意返回值的類型和函數(shù)前定義的類型要保持一致。/格式控制符:%d整型數(shù)據(jù)的輸入輸出,%f單精度浮點數(shù)據(jù)的輸入輸出,%lf雙精度,%s字符串,%c單個字符/轉(zhuǎn)義字符:n回車換行,t表示橫向跳格/scanf(a=%d,b=%d,&a,&b);雙引號中內(nèi)容原樣輸入,除格式控制符外。不建議使用第2章 數(shù)據(jù)類型1. 數(shù)據(jù)類

3、型int, float, double, char在定義變量時指定變量的數(shù)據(jù)類型,系統(tǒng)會按照指定的類型分配存儲空間??梢酝ㄟ^sizeof求出數(shù)據(jù)類型所占空間的大小。sizeof()函數(shù),括號中是變量求出變量所占存儲空間大小,是類型求出類型所占空間大小。C語言中所有的小數(shù)如沒有特別指明均按double類型處理。如:2.1就是double類型,2.1f就是float類型。后綴f/F只能加在小數(shù)后面??梢詫懗?2f或.2,相當(dāng)于0.2f或0.22. 標(biāo)識符標(biāo)識符只能由數(shù)字、字母和下劃線組成,而且數(shù)字不能作為開頭。盡量做到見名知義。_例:abc, h873合法 8hk不合法不能使用系統(tǒng)的關(guān)鍵字作為標(biāo)識

4、符。如:int,float,sizeof等,在編輯器中輸入時會變藍(lán)色。不建議使用如:printf,scanf。3. 變量變量是值在程序執(zhí)行過程中能改變的量,標(biāo)識符前加類型就是定義該種類型的變量。變量必須先定義,后使用。變量在使用之前要確保變量有一個確定的值(變量在沒有賦值時是隨機值)。C語言中是區(qū)分大小寫的。int a,b,c; /表示定義了三個整型變量,和int a; int b; int c;等價如果同時定義相同數(shù)據(jù)類型的多個變量,可以用逗號隔開。如果定義不同類型的多個變量,則需要分開定義,用分號隔開。4. 常量值不能改變的量。如:123,a, “abc”。常量不能出現(xiàn)在賦值號(=)的左側(cè)

5、。#define N 4注意:常量通常使用大寫字母定義,變量一般使用小寫字母定義。5. 運算符+ - * / %/ 除號(雙目運算符),如果兩側(cè)數(shù)據(jù)都是整型數(shù),剛表示整除,如果有一側(cè)為小數(shù),則表示數(shù)學(xué)的除法。如:5/2 = 2 5/2.0 = 2.5%求余,只能用于整數(shù)的計算。如:5%2 = 1考點:整數(shù)位的分離,如找出所有四位數(shù)中,個位加百位等于十位加千位的數(shù)。(找出三位數(shù)中所有的水仙花數(shù))#include int main()int a,b,c,d;for(int i=1000;i10000;i+)a=i%10; /a個位b=i/10%10; /b十位c=i/100%10; /c百位d=i

6、/1000; /d千位if(a+c = b+d)printf(%d ,i);printf(n);return 0;/求三位數(shù)中的水仙花數(shù)#include int main()int a,b,c,d;for(int i=100;i1000;i+)a=i%10; /a個位b=i/10%10; /b十位c=i/100%10; /c百位if(a*a*a + b*b*b + c*c*c = i)printf(%d ,i);printf(n);return 0;+自增,-自減+在前表示先加后使用,在后表示先使用后加,如:int a=3,b; b=a+; /b=3 int a=3,b; a+;b=a; /b

7、=4int a=3,b; b=+a; /b=4 int a=3,b; +a; b=a; /b=4總結(jié):如果+或單獨構(gòu)成一條語句,在前和在后沒有區(qū)別。如果出現(xiàn)在賦值號右側(cè)時:+在前表示先加后使用,在后表示先使用后加。6. 數(shù)據(jù)類型轉(zhuǎn)換隱式轉(zhuǎn)換:系統(tǒng)自動完成,由低類型向高類型自動轉(zhuǎn)換。低和高指的是占用存儲空間的大小。在轉(zhuǎn)換時不會出現(xiàn)警告,反之,由高類型向低類型自動轉(zhuǎn)換時會出現(xiàn)警告。例:float a=.1; /出現(xiàn)警告,原因:.1(0.1)是double類型,由double(高)到float(低)轉(zhuǎn)換double b=a; /不會出現(xiàn)警告,原因:由float(低)到double(高)轉(zhuǎn)換強制轉(zhuǎn)換:

8、在需要轉(zhuǎn)換的數(shù)據(jù)前加:(需要轉(zhuǎn)換到的數(shù)據(jù)類型)例:float a=(float).1; /把double的0.1強制轉(zhuǎn)換為float注意:強制轉(zhuǎn)換只轉(zhuǎn)換數(shù)據(jù)的值,而不會改變值本身的類型。賦值運算符(=)把等號右側(cè)的值賦給左側(cè),左側(cè)只能是變量,右側(cè)比較靈活,可以是常量、變量或表達式,但是要求等號兩側(cè)值的類型一致。如:int a=2.5+4; /a=?注意:所有運算符在進行計算時,都需要進行隱式的自動轉(zhuǎn)換或顯示的強制類型轉(zhuǎn)換,把兩側(cè)的數(shù)據(jù)類型統(tǒng)一。如:2.5+4,加號會首先將兩側(cè)的值轉(zhuǎn)換為double運算符優(yōu)先級:不建議記,如果需要指定優(yōu)先級時,可以加小括號。7. 語句表達式是用運算符連接起來的式

9、子。如:a+b,單個字符或變量都是表達式。語句是C語言執(zhí)行的基本單位。分號是語句的標(biāo)志,表達式末尾加上分號就構(gòu)成了語句。如:a+b;8. 復(fù)合賦值運算符+=,-=,/=等int a=3,b=2; b += a; 等價于:b=b+a;a+; = a+=1; = a=a+1;9. 格式控制(非重點)%-m.nf或%-m.nlf,-表示對齊方式,m表示數(shù)據(jù)總的寬度,n表示小數(shù)的位數(shù)。如果數(shù)據(jù)的實際寬度大于指定的m,則按實際長度輸出。m可以省略,意思是不指定數(shù)據(jù)的寬度。%-md,-表示對齊方式,m表示寬度,如果數(shù)據(jù)寬度達不到指定的寬度m,則在前面或后面加空格。如果數(shù)據(jù)的實際寬度大于指定的m,則按實際長

10、度輸出。例:計算圓的面積,結(jié)果保留兩位小數(shù)。#include #include /表示系統(tǒng)的頭文件,表示用戶自定義的頭文件#define PI 3.1415926 /宏定義,#預(yù)處理標(biāo)志,在編譯程序時,程序中所有出現(xiàn)PI的地方均被替換成3.1415926int main()double r,area;printf(請輸入圓的半徑:n);scanf(%lf,&r); /lf表示:long float/area=PI*r*r;area=PI*pow(r,2); /pow(x,y)是數(shù)學(xué)函數(shù)乘方,表示x的y次方printf(半徑為%.2lf圓的面積是:%.2lfn,r,area);return 0;

11、10. 字符、字符串字符用單引號引起來,單引號中只能有一個字符(除一些比較特殊的轉(zhuǎn)義字符外)。字符串是由一個或多個字符組成,用雙引號引起來,以0結(jié)束。char a=a; /定義一個字符變量a,并賦值為a。等價于:char a; a=a;char a=”a”; /定義一個字符數(shù)組a與”a”不同點:a表示一個字符,占用一個字節(jié)的存儲空間;”a”表示一個字符串,占用兩個字節(jié)的存儲空間,一個是字符a本身,另外一個是字符串的結(jié)束標(biāo)志0。存儲方式:字符在存儲時存儲的是ASCII,所以可以和整型數(shù)據(jù)進行混合運算。a在存儲時并不存儲字符a,而是存的a的ASCII 97補充:在定義時賦值稱作:定義并初始化。需要

12、記住的ASCII值:大A(65)或小a(97),字符0(48)例:輸入一個字符,小寫則轉(zhuǎn)換為大寫,大寫則轉(zhuǎn)換為小寫,非字母字符按原樣輸出。#include int main()char ch;printf(請輸入一個字符:n);scanf(%c,&ch);if(ch=a & ch=z) /等價于 a= ch =A & ch=Z)ch+=32;else; /空語句,表示什么也不做printf(%cn,ch);return 0;11. 逗號int a=1,b=2,c=3;優(yōu)先級較低。取最后一個表達式的值作為整個逗號表達式的值(在有賦值或條件判斷時)。if(a=1,b=2,c=3)12. 唯一的三目

13、運算符(條件表達式,問號表達式?:)一般形式:表達式1?表達式2:表達式3;首先判斷表達式1(條件判斷)的值,如果為真取表達式2的值,否則取表達式3的值。例:#include int main()int a,b,c;printf(請輸入兩個整數(shù):n);scanf(%d%d,&a,&b);/*if(ab)c=a;elsec=b;*/c=ab?a:b;printf(兩個數(shù)中較大的為:%dn,c);return 0;第3章 程序控制結(jié)構(gòu)1. 程序執(zhí)行流程順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)順序結(jié)構(gòu)按照程序員書寫代碼的順序執(zhí)行,如果遇到分支或循環(huán)就按流程執(zhí)行。2. 分支語句if(條件) /可以是單個變量或常量

14、,也可以是表達式語句; /當(dāng)if條件成立時執(zhí)行else if(條件) /else if不能單獨出現(xiàn)(前面必須有if語句),也可以沒有,也可以出現(xiàn)多個語句;else /else可以沒有,如果出現(xiàn)else,則前面必須有與之配對的if,else與它前面沒有配對且最近、同一層次上的一個if配對語句;如果不加大括號,則只和離if語句最近的一條語句相關(guān),加過大括號,大括號中所有語句都和if相當(dāng)。ifelse ifelse它們之前是互斥的,只能執(zhí)行其中的一條。例:單語句和復(fù)合語句#include int main() /當(dāng)a大于b時交換a和bint a,b,t;printf(請輸入兩個整數(shù):n);scanf

15、(%d%d,&a,&b);printf(交換前,a=%d,b=%dn,a,b);if(ab)t=a;a=b;b=t;printf(交換后,a=%d,b=%dn,a,b);return 0; 加過大括號的if 不加大括號的if單語句、復(fù)合語句:單語句就是一條語句,一個分號。復(fù)合語句是加過大括號的一條或多條語句,在邏輯上相當(dāng)于一條。邏輯值的真和假:非0為真,0為假。如:if(0) 假 if(0) 真 if(!0) 真,!是邏輯非,把真的變成假,把假的變成真 if(!1) 假switch語句(開關(guān)語句)一般形式如下:switch(表達式)case 常量表達式1: 語句1; break;case 常量

16、表達式2: 語句2; break;case 常量表達式n: 語句n; break;default:語句n+1;break; /default可以出現(xiàn)在switch中的任何位置,也可以沒有。當(dāng)所有的case匹配均失敗的情況下才執(zhí)行default注意:case后面的常量表達式的值不能相同,要和switch中的表達式值的類型一致。如果case后面都有break,各條語句順序無關(guān),反之則相關(guān)。最后一條語句有無break均可。一般建議在每個case和default后都加上break。當(dāng)與case后面的表達式匹配成功時,順序向下執(zhí)行(不再與case條件比較),直到遇到break或右括號結(jié)束。例:采用if語

17、句實現(xiàn)成績劃分等級#include int main() /當(dāng)a大于b時交換a和bfloat score;printf(請輸入你的考試成績:n);scanf(%f,&score);if(score100)printf(輸入的考試成績非法!n);elseif(score=90)printf(優(yōu)秀n);else if(score=80 & score=80)printf(良好n);else if(score=70 & score=60 & score70)printf(及格n);else /60分以下,等價于:else if(score60),后面不要else也可以printf(不及格n);ret

18、urn 0;例:采用switch實現(xiàn)成績等級的劃分#include int main() /當(dāng)a大于b時交換a和bfloat score;printf(請輸入你的考試成績:n);scanf(%f,&score);if(score100)printf(輸入的考試成績非法!n);elseswitch(int)score/10) /強制把score轉(zhuǎn)換為int,當(dāng)作整數(shù)的整除處理case 10:/printf(優(yōu)秀n);break; /前面注釋部分可有可無case 9:printf(優(yōu)秀n);break;case 8:printf(良好n);break;case 7:printf(中等n);brea

19、k;case 6:printf(及格n);break;default:printf(不及格n); /最后一條語句,不管是default或是case,要不要break都一樣return 0;3. 循環(huán)語句while(表達式) /當(dāng)條件表達式成立時,執(zhí)行循環(huán)體語句;do語句;while(表達式); /先執(zhí)行一次循環(huán)體,之后進行條件的判斷,成立繼續(xù)執(zhí)行,直至條件不成立結(jié)束。while條件后有一分號。對比:while循環(huán)又叫當(dāng)型循環(huán),當(dāng)條件成立時執(zhí)行(首先進行條件判斷);dowhile叫直到型循環(huán),先進行一次條件判斷,直到條件不成立時結(jié)束。如果初始條件成立,兩者完全一樣,如果初始條件不成立,while

20、一次不執(zhí)行,dowhile執(zhí)行一次。例:求1+2+。+100的和#include int main()int i=1,sum=0;while(i=100)sum+=i;i+; /修改循環(huán)控制變量,讓循環(huán)趨于終止printf(1+2+.+100=%dn,sum);return 0;#include int main()int i=1,sum=0;dosum+=i;i+; /修改循環(huán)控制變量,讓循環(huán)趨于終止while(i=100);printf(1+2+.+100=%dn,sum);return 0;for語句一般形式:for(表達式1; 表達式2; 表達式3)循環(huán)體;注意:for中有且只能有兩個

21、分號,三個表達式可以省略任意一個。執(zhí)行流程:1. 先執(zhí)行表達式1(一般是給循環(huán)控制變量賦初值,只執(zhí)行一次);2. 進行條件表達式2的判斷,如果成立執(zhí)行循環(huán)體,不成立則退出循環(huán);3計算表達式3(循環(huán)控制變量的修改,讓循環(huán)趨于終止),然后跳轉(zhuǎn)到第2步。例:#include int main()int i,sum=0;for(i=1;i=100;i+)sum+=i;printf(1+2+.+100=%dn,sum);return 0;與while等價轉(zhuǎn)換:表達式1; /循環(huán)控制變量賦初值while(表達式2)循環(huán)體;表達式3;總結(jié):當(dāng)循環(huán)次數(shù)已知的情況下,用for;當(dāng)循環(huán)次數(shù)未知的情況下用while

22、。循環(huán)容易出錯在循環(huán)控制變量的初始值和終止值,避免出現(xiàn)死循環(huán)。如果循環(huán)的條件是死循環(huán),則必須要保證在循環(huán)體內(nèi)部有退出的條件。4. break和continuebreak:只能用在switch開關(guān)語句和循環(huán)中。用在循環(huán)中時,跳出(結(jié)束)所在層循環(huán)。#include int main()int i,sum=0;i=1;for(;)sum+=i;if(sum10000)break;i+;/*i=1;while(sum10000)sum+=i;i+;*/printf(1+2+.+%d=%dn,i,sum);return 0;continue:只能用在循環(huán)中,結(jié)束本次循環(huán),進行下一次條件判斷。例:#in

23、clude int main()int i,sum=0;for(i=0;i100;i+)if(i%2 = 0)continue; /如果執(zhí)行到continue,后面的語句不再執(zhí)行sum+=i;printf(sum=%dn,sum);return 0;循環(huán)嵌套:外層循環(huán)執(zhí)行一次,里層循環(huán)執(zhí)行一輪。盡可能減少循環(huán)執(zhí)行的輪數(shù)。例:百馬百擔(dān),有一百匹馬,馱一百擔(dān)貨,大馬馱3擔(dān),中馬馱2擔(dān),兩只小馬馱1擔(dān),問有大,中,小馬各幾匹?分析:設(shè)大馬x個,中馬y個,小馬z個,滿足x+y+z=100,另外一個條件:3*x+2*y+z/2=100,注意z/2整除。用其中兩個未知數(shù)表達出另一個未知數(shù):z=100-x-

24、y,循環(huán)由三層轉(zhuǎn)為二層#include int main()int x,y,z,count=0; /count記錄循環(huán)執(zhí)行的次數(shù)for(x=0;x=33;x+) /從100優(yōu)化至33for(y=0;y=50;y+) /從100優(yōu)化至50for(z=0;z=100;z+)count+;if(x+y+z = 100 & 3*x+2*y+z/2.0 = 100)printf(大馬:%d 中馬:%d 小馬:%dn,x,y,z);printf(循環(huán)執(zhí)行次數(shù):%dn,count);return 0;循環(huán)層數(shù)的優(yōu)化:#include int main()int x,y,z,count=0; /count記錄

25、循環(huán)執(zhí)行的次數(shù)for(x=0;x=33;x+)for(y=0;y=50;y+)count+;z=100-x-y;if(3*x+2*y+z/2.0 = 100)printf(大馬:%d 中馬:%d 小馬:%dn,x,y,z);printf(循環(huán)執(zhí)行次數(shù):%dn,count);return 0;例:乘法口訣#include int main()int i,j;for(i=1;i=9;i+) /如果有行列,一般外層控制行,里層控制列for(j=1;j=i;j+) /控制列,行列相關(guān),j和i存在關(guān)系,第i行上有i列printf(%d*%d=%-2d ,i,j,i*j);printf(n); /每一行輸

26、出完后,輸出一個換行return 0;例:求數(shù)列1+(1+2)+(1+2+3) +(1+2+n)前20項的和分析:遇到數(shù)列一般先找出通項,an=1+2+n(求an需要一個循環(huán)),整個式子可以理解為求a1+a2+an的和(又需要一個循環(huán))#include int main()int i,j,sum=0,n=0;for(i=1;i=20;i+) /*n=0;for(j=1;j=i;j+) n+=j; /n=1+2+.isum+=n; /n相當(dāng)于aiprintf(%d ,n); /額外的輸出,輸出每一項ai=1+2+.+i的值*/n+=i; /n=1+2+.i,每次在原來第i-1項和的基礎(chǔ)之上增加s

27、um+=n;printf(1+(1+2)+(1+2+3) +(1+2+20)=%dn,sum); /每一行輸出完后,輸出一個換行return 0;例:求1-1/2+1/3-1/4+1/n,輸入n,求前n項的和分析:1. 正負(fù)號變換;2. 整除變有小數(shù)的除法#include int main()int i,n,flag=1; /flag用于變換正負(fù)號double sum=0;printf(請輸入加的項數(shù):n);scanf(%d,&n);for(i=1;i=n;i+)sum+=flag*1.0/i; /(double)1flag=-flag;printf(1-1/2+1/3-1/4+1/%d=%l

28、fn,n,sum);return 0;補充:getchar(), putchar(), gets(), puts()getchar和putchar是專門用于字符輸入輸出的函數(shù)。用法如下:char ch; ch=getchar(); /給ch賦值 putchar(ch); /輸出ch的值,自動在后面加一換行等價于:scanf(“%c”,&ch);/給ch賦值 printf(“%cn”,ch); /輸出ch的值例:輸入一系列字符,將其中的大寫轉(zhuǎn)換為小寫,其它不變,直到遇到#號退出。#include int main()char ch;while(1) /1是常量,永遠(yuǎn)為真,while的條件是死循環(huán)

29、,要保證循環(huán)體中有退出的條件ch=getchar();if(ch = #)break; /在循環(huán)體內(nèi)部退出的條件if(ch=A & ch=Z)ch+=32;putchar(ch);return 0;例:特殊字符以及進制轉(zhuǎn)換輸出#include int main()printf(50%n); /輸出50%printf(an); /輸出aprintf(nn); /輸出nprintf(%on,10); /將十進制的10按八進制輸出12printf(%on,010); /將八進制的010按八進制輸出12,在整數(shù)前加0表示該數(shù)是八進制printf(%x%Xn,10,10); /將十進制的10按十六進制輸

30、出aprintf(%x %Xn,0x1f,0x10); /將十六進制的0x10按十六進制輸出,在整數(shù)前加0x表示16進制printf(%d %o %Xn,12,12,12);printf(%d %o %Xn,012,012,012);printf(%d %o %Xn,0x12,0x12,0x12);return 0;例:求當(dāng)?shù)趎項的絕對值小于0.0001時PI的值,PI=1-1/3+1/5+#include #include int main()double n,sum=0,t; /n表示結(jié)束的條件int flag=1,i=1;printf(請輸入所加項的終止條件:n);scanf(%lf,&

31、n);/*while(1)t=flag*1.0/i;if(t0) /當(dāng)前項是負(fù)數(shù)if(-tn)break;else /當(dāng)前項是正數(shù)if(tn)sum+=t;flag=-flag;t=flag*1.0/i;i+=2;printf(PI=%.4lfn,sum*4);return 0;第4章 數(shù)組1. 數(shù)組的基本概念能夠存放多個相同數(shù)據(jù)類型的特殊變量,下標(biāo)從0開始,存儲空間連續(xù),數(shù)組名是首地址,而且是地址常量。2. 數(shù)組的定義和初始化一般形式:數(shù)據(jù)類型 數(shù)組名正整數(shù)常量表達式;int a10; /定義了一個數(shù)組a,可以存放10個整型數(shù)據(jù),可以使用的數(shù)據(jù)范圍:a0 - a9賦值:1. 在定義時直接初始

32、化int a10=1,2,3,4,5,6,7,8,9,10; /定義時給數(shù)組每一個元素賦初值,值之間用逗號隔開int a=1,2,3,4,5,6,7,8,9,10; /全部元素都賦值時可以省略數(shù)組的大小int a10=1,2,3,4,5; /給部分?jǐn)?shù)組元素賦值,如果數(shù)組只定義沒有初始化,則數(shù)組元素均為隨機值,如果給部分元素賦了初值,剛剩下的元素系統(tǒng)自動賦值為0注意:數(shù)組只有在定義時能整體賦值,定義后只能逐個賦值。如:int a10; a10= 1,2,3,4,5,6,7,8,9,10; / 錯誤的,定義后不能整體賦值2. 先定義后賦值int a10;for(int i=0;i10;i+)sca

33、nf(“%d”,&ai); /是下標(biāo)運算符例:輸入10個整數(shù),按照從小到大的順序排列。測試數(shù)據(jù):5 9 2 0 4 7 1 6 3 8思想:每次相鄰兩個數(shù)進行比較,大的下沉(冒泡法)第1輪比較結(jié)果:5 2 0 4 7 1 6 3 8 9 此輪比較找到最大值9第2輪比較結(jié)果:2 0 4 5 1 6 3 7 8 9 此輪比較找到次大值8。第9輪比較結(jié)果:0 1 2 3 4 5 6 7 8 9#include #include int main()int a10,i,j;puts(請輸入10個整數(shù):);for(i=0;i10;i+)scanf(%d,&ai);printf(排序之前:);for(i=

34、0;i10;i+)printf(%d ,ai);printf(n);/下面代碼實現(xiàn)排序for(i=0;i9;i+) /外層循環(huán)控制排序的輪數(shù)for(j=0;jaj+1) /如果出現(xiàn)下標(biāo)加減的情況,確保下標(biāo)不越界int t=aj;aj=aj+1;aj+1=t;for(int k=0;k10;k+)/增加額外輸出,看中間結(jié)果printf(%d ,ak);printf(n);/printf(排序之后:); for(i=0;i10;i+)printf(%d ,ai);printf(n);return 0;思想:第i輪就拿第i個數(shù)和后面的一一比較,大于則交換。測試數(shù)據(jù):5 9 2 0 4 7 1 6 3

35、 8第0輪比較結(jié)果:0 9 5 2 4 7 1 6 3 8 此輪比較在下標(biāo)0找到最小值0第1輪比較結(jié)果:0 1 9 5 4 7 2 6 3 8 此輪比較在下標(biāo)1找到次小值1。第8輪比較結(jié)果:0 1 2 3 4 5 6 7 8 9#include #include int main()int a10,i,j;puts(請輸入10個整數(shù):);for(i=0;i10;i+)scanf(%d,&ai);printf(排序之前:);for(i=0;i10;i+)printf(%d ,ai);printf(n);/下面代碼實現(xiàn)排序for(i=0;i9;i+)for(j=i+1;jaj) /如果出現(xiàn)下標(biāo)加減

36、的情況,確保下標(biāo)不越界int t=ai;ai=aj;aj=t;/printf(排序之后:); for(i=0;i10;i+)printf(%d ,ai);printf(n);return 0;思想:第i輪假設(shè)第i個下標(biāo)對應(yīng)的數(shù)最小,記錄其下標(biāo),在與后面的數(shù)據(jù)比較過程中,若發(fā)現(xiàn)有比假設(shè)下標(biāo)還小的數(shù),則替換原來下標(biāo),當(dāng)本輪全部比較完后,進行一次交換#include #include int main()int a10,i,j;puts(請輸入10個整數(shù):);for(i=0;i10;i+)scanf(%d,&ai);printf(排序之前:);for(i=0;i10;i+)printf(%d ,ai

37、);printf(n);/下面代碼實現(xiàn)排序for(i=0;i9;i+)int index=i; /針對于第i輪,假設(shè)第i個下標(biāo)對應(yīng)的數(shù)最小,如果在比較過程中發(fā)現(xiàn)比index下標(biāo)對應(yīng)的數(shù)還小時,替換下標(biāo)indexfor(j=i+1;jaj) /如果出現(xiàn)下標(biāo)加減的情況,確保下標(biāo)不越界index=j; /記錄下標(biāo)if(index != i) /當(dāng)假設(shè)的最小值發(fā)生變化時交換int t=ai;ai=aindex;aindex=t;/printf(排序之后:); for(i=0;i10;i+)printf(%d ,ai);printf(n);return 0;3. 字符數(shù)組char str10=H,e,l

38、,l,o; /給部分賦值,則后面自動賦值為空(ASCII為0,0),如果都不初始化,則內(nèi)容為隨機(輸出:燙)char str10=”Hello”; /系統(tǒng)會在末尾自動添加0字符數(shù)組名同樣也是首地址,可以對數(shù)組整體賦值,不局限于在定義。char str=H,e,l,l,o; /占5個字節(jié)char str=Hello; /占6個字節(jié)printf(%dn,sizeof(str); /sizeof求類型或變量占用多少個字節(jié)強調(diào):在對字符串整體輸入時,是向指定的首地址空間中存放內(nèi)容,直到按下回車結(jié)束,中間不檢查是否越界,但一定不要越界,越界可能引發(fā)其他一些異常。整體輸出時,也不檢查是否越界,遇到0結(jié)束,

39、如果是printf,遇到空格提前結(jié)束。在對字符單個輸入%c時,回車也被當(dāng)做正常的字符處理,存儲的是其ASCII 10.例:字符串的輸入輸出#include int main()char str10=H,e,l,l,o;printf(%sn,str);for(int i=0;i10;i+)printf(%c,stri);printf(n);gets(str); /給str整體賦值puts(str); /,最后輸出一個換行,可以輸出空格scanf(%s,str); /因為str本身已經(jīng)是地址,不能再加取地址符&printf(%sn,str); /整體輸出str的內(nèi)容,遇到0輸出結(jié)束,如果字符串中有

40、空格,提前結(jié)束輸出for(i=0;i10;i+)scanf(%c,&stri); /對數(shù)組元素逐個輸入,必須輸入十次(10個字符)for(i=0;i10;i+)printf(%c,stri); /對數(shù)組元素逐個輸出,即使遇到0也不會提前結(jié)束return 0;4. 字符串處理函數(shù)a. strlen(str); 求字符串str的長度b. strcpy(str1,str2); 把str2中的內(nèi)容拷貝至str1,需要注意str1的長度要大于或等于str2的長度,確保不越界c. strcmp(str1,str2); 比較str1和str2的大小,逐個從下標(biāo)為0開始比較相應(yīng)位置的字符大小,發(fā)現(xiàn)不相等的字符

41、退出,如果str1中的字符大于str2中的字符,返回一個大于0的數(shù),如果小于str2中的字符,返回一個小于0的數(shù),如果比較到最后完全相等,則返回0. 需要說明是比較字符的ASCII如:str1=”Hello”; str2=”Hello C.”; strcmp(str1,str2)小于0str1=”hello”; str2=”Hello”; strcmp(str1,str2)大于0d. strcat(str1,str2); 把str2中的內(nèi)容拷貝到str1后,要求str1的長度大于原有str1中內(nèi)容長度加str2中內(nèi)容長度例:輸入一個字符串,長度不超過81,分別統(tǒng)計其中數(shù)字字符、字母字符和其他字

42、符的個數(shù)。#include #include /字符串拷貝函數(shù)strcpy,求字符串長度函數(shù)strlen,字符串比較函數(shù)strcmpint main()char str81;int digit=0,charater=0,other=0,i=0;printf(請輸入一個字符串,長度不超過80n);gets(str); /遇到回車結(jié)束/*int len1=strlen(str); /求出實際輸入了多少個字符,不包括0/int len2=sizeof(str); /求字符數(shù)組str占用空間大小,為定義時的81/printf(len1=%d,len2=%dn,len1,len2);for(int i=

43、0;i=a&stri=A&stri=0 & stri=a&stri=A&stri=0 & stri=9) /數(shù)字字符digit+;elseother+;i+;printf(字母字符:%d個,數(shù)字字符:%d個,其他字符:%d個n,charater,digit,other);return 0;例:輸入一個字符串,長度不超過81,再輸入一個字符,刪除字符串中所有該字符,如果不存在,提示“Not Found.”。分析:從0下標(biāo)開始,逐個比較查找該字符,找到后,從該字符所在位置開始,把后面的其他字符前移一位,覆蓋該字符。如:Not Found. 刪除其中的o,在找到第一個o時,后面前移,字符串的長度減1

44、,點的位置存放結(jié)束標(biāo)志0,再接著查找其他的o,刪除方法類似。#include #include /字符串拷貝函數(shù)strcpy,求字符串長度函數(shù)strlen,字符串比較函數(shù)strcmpint main()char str81,ch;printf(請輸入一個字符串,長度不超過80n);gets(str); /遇到回車結(jié)束puts(請輸入你要刪除的字符:);/scanf(%c,&ch);ch=getchar();int len=strlen(str),i,j,count=0;for(i=0;ilen;i+)if(stri = ch) /查找要刪除的字符for(j=i;jlen-1;j+)strj=s

45、trj+1; /后面字符逐個前移strj=0;len-;count+;if(count = 0)puts(Not Found.);puts(str);return 0;5. 二維數(shù)組數(shù)據(jù)類型 數(shù)組名正整型常量正整型常量;int a33=1,2,3,4,5,6,7,8,9; /整體賦值,在VC編譯器中,二維數(shù)組是按行存儲。int a33=1,2,3,4,5,6; /整體賦值int a33=1,2,3,4,5,6,7,8,9; /按行賦值int a33=1,2,4,; /按行賦值for(int i=0;i3;i+) /控制行for(int j=0;j3;j+) /控制列scanf(“%d”,&aij);補充:針對于a33數(shù)組,每一行都有首地址,每一行的首地址分別為:a0, a1, a2 等價于:&a00, & a10, &a20例:定義二維數(shù)組a55并為其賦值,求其對角線元素的和。分析:怎么判斷對角線?主(左上到右下):行列下標(biāo)相等副對角線(右上到左下):行列下標(biāo)的和等于5-1=4上三角:行下標(biāo)大于等于列下標(biāo)下三角:行下標(biāo)小于等于列下標(biāo)注意:對角線交叉時的值不能重復(fù)加

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論