![計算機二級課程_第1頁](http://file4.renrendoc.com/view/311327c7971f011442620f59208c1236/311327c7971f011442620f59208c12361.gif)
![計算機二級課程_第2頁](http://file4.renrendoc.com/view/311327c7971f011442620f59208c1236/311327c7971f011442620f59208c12362.gif)
![計算機二級課程_第3頁](http://file4.renrendoc.com/view/311327c7971f011442620f59208c1236/311327c7971f011442620f59208c12363.gif)
![計算機二級課程_第4頁](http://file4.renrendoc.com/view/311327c7971f011442620f59208c1236/311327c7971f011442620f59208c12364.gif)
![計算機二級課程_第5頁](http://file4.renrendoc.com/view/311327c7971f011442620f59208c1236/311327c7971f011442620f59208c12365.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
計算機二級課程第1章程序設計基本概念程序和程序設計C程序計算機語言:二進制用戶:自然語言自然語言-英文助記符、數(shù)學表達式(C語言))二進制指令(目標文件*.obj)今可執(zhí)行程序(*.exe)C源程序(*.c)不能直接執(zhí)行,只能進行編輯源程序轉換為目標文件的過程,叫做“結譯compile”目標文件(*.obj)也不能直接執(zhí)行目標文件轉換為可執(zhí)行程序的過程,叫做“連接link”*.c---compile-->*.obj---link—>*.exe程序設計算法算法:為解決某個問題而采用的確定且有限的步騾。算法的特性:1)有窮性:算法應該在有限的步驟內(nèi)結束。2)確定性:算法不能有二義性,對于相同的輸入能得到相同的輸出。3)可行性:算法的步驟可以實現(xiàn)。4)擁有足夠的情報:算法有0個或多個輸入;1個或多個輸出。結構化程序設計和模塊化結構結構化程序C語言程序有3種基本結構:順序結構選擇結構(分支結構)循環(huán)結構(重復結構)模塊化結構自頂向下、逐步求精、模塊化C語言使用“函數(shù)”實現(xiàn)模塊化。C語言是函數(shù)的語言。C程序的基本組成單位是函數(shù)。第2章C程序設計的初步知識簡單C語言程序的構成和格式#include<stdio.h>main()doublea,b,area;a=1.2; /*將矩形的兩條邊分別賦給a和b*/b=3.6;/*計算矩形的面積7area=a*b;printf(,'a=%f,b=%f,area=%f\n,1,a,b,area);)說明:1、main是主函數(shù)名。C語言程序必須使用main作為主函數(shù)名,其后需接一對圓括號()表示其函數(shù)身份。main函數(shù)是C程序唯一的入口,也是程序唯一的出口,C程序從main函數(shù)的第一條語句開始執(zhí)行。故,C程序有且僅有一個main函數(shù)。2、C程序的語句以分號結尾。一般一條語句作為一行,但可以在一行上寫多條語句,也可以將一條語句寫成多行。語句需寫在{}表示的函數(shù)體內(nèi)。3、在程序中可以使用/*……*/符號表示注釋,被注釋的部分將不會在程序執(zhí)行過程中起作用,僅僅作為程序的說明。inta=3,b=5;a=10; I*賦值*1b=20;a+b的值是_30_inta=3,b=5;a=10;*/a=10;*/a+b的值是—15/*賦值b=20;標識符、常量和變量標識符標識符包括:變量名、數(shù)組名、函數(shù)名。1)由字母、數(shù)字、下劃線組成;2)數(shù)字不能開頭;3)不能和關鍵字重名。int(整型)float(單精度實型)double(雙精度實型)char(字符型)sizeof(求字節(jié)數(shù))short(短整型)long(長整型)areaPIa_arrayx100_100x(正確)a$ba++x.y100x(錯誤)變量名可以叫做main、printf標識符對大小寫敏感。int(錯誤)Int(正確)2.2.2常量常量:在程序執(zhí)行過程中,值不發(fā)生改變的量。12 -1 0 (整型常量)3.14-2.70.0(實型常量)‘A' 'b' (字符型常量)"NCRE""Wuhan"(字符串常量)2.2.3符號?!隽晳T上,常量使用大寫字母表示,變量使用小寫字母表示,但不是必須的。#defineN10main()(N=N*2;/*不能對符號常量賦值*1printf("%d\n",N);)intn=10;n=n*2;r可以對變量賦值*/printfC'%d\n",n);)#definePI3.14main()(doubler,s;r=5.0;s=r*r*PI;printf("s=%f\n",s);變量名可以叫做define、include2.2.4變量變量:在程序執(zhí)行過程中,值可以發(fā)生改變的量。變量必須“先定義,后使用”定義時,需指明變量的數(shù)據(jù)類型和變量名。整型數(shù)據(jù)整型?!鍪M制:32767 -32768 0八進制:由“0”引導的整數(shù)。010 011 0234 0386(錯誤)十六進制:由“Ox”或“0X”引導的整數(shù)。0x123OxaaOxlff0-9 a-10b-11...f-15長整型常量:40000L 40000I無符號型常量:100U 100u -12U(錯誤)整型變■inta;inta,b,c;整型數(shù)據(jù)的分類long(int)4字節(jié)int 4字節(jié)short(int)-32768?32767 2字節(jié)signed 有正有負unsigned正整數(shù)unsignedshort0?65535整型數(shù)據(jù)在內(nèi)存中的存儲形式位(bit):二進制位100110最小單位字節(jié)(byte):1byte=8bit最基本單位實型數(shù)據(jù)實型常■小數(shù)形式:0.123 .123 3.0 3.在實數(shù)的整數(shù)部分或小數(shù)部分為0時,可將為0的部分省略,但小數(shù)點不可省。0.0 0. .0 .(錯誤)指數(shù)形式:3E2-?3*102->300 3.15e3 3.15e-1E(e)的前面必須有數(shù)字,后面必須為整數(shù)。E22e3e1.0(錯誤)實型變?float(單精度實型) 4字節(jié)double(雙精度實型)8字節(jié)算術表達式基本的算術運算符整數(shù)和整數(shù)運算,結果為整數(shù)參與運算的數(shù)字中,有一個實數(shù),結果結果就為實數(shù)+-*/注意:在什么情況下運算結果才有小數(shù)部分。%求余數(shù)。求余數(shù)運算兩邊必須為整數(shù)。絕對值相除得余數(shù),符號取決于被除數(shù)。main()printf(,,%d\n",4%3);1printfC%d\nw,4%-3);1printf(,,%d\n",-4%3);-1printf(M%d\nM,-4%-3);-1)運算符的優(yōu)先級、結合性和算術表達式*/%+-強制類型轉換表達式(目標類型)需轉換變量(int)bint(b)(錯誤)鼠值表達式賦值運算符和賦值表達式注意:1)賦值運算的優(yōu)先級很低,往往需要在所有運算完成后,再進行賦值。2)賦值運算理解上,從右向左進行。3)賦值后,右側變量值不變,左側變量值更新。4)賦值號左側只能是變量,不能是常量或表達式。5)賦值表達式整體的值,等于被賦值變量的值。main()(inta,b;printf("%d\n",(a=3)+(b=5));}復合賦值表達式a+=1 ? a=a+1a*=2 - a=a*2main()inta=5;a+=a-=a+a;printf(M%d\nM,a);)鼠值運算中的類型轉換以被賦值變量的類型為準。inta;a=3.5; 3floata;a=3; 3.02.7自加、自減運算符和逗號運算符自加運算符”++”和自減運算符“一”獨立構成語句時,i++和++i是等價的。j=i++;j=i; ”先取值,后自增i=i+1;j=++i; 9 i=i+1; ”先自增,后取值j=i;main()inti=5;printf("%d\n',,i++); 5printf(M%d\n",++i); 7)逗號運算符和逗號表達式逗號運算符的優(yōu)先級最低;從左至右運行每個表達式;整個逗號表達式的值,等于最后一個表達式的值。main()(inti,j,x;x=(i=3,j=4);printf("%d\n",x); 4)main()(inti,j,x;x=i=3,j=4;printf("%d\n",x);)第3章順序結構賦值語句在賦值表達式后加上“:’號,構成賦值語句a=10 賦值表達式a=10; 賦值語句數(shù)據(jù)輸出printf函數(shù)的一般調(diào)用形式printf(ua=%d\n",a);)非格式說明符部分原樣輸出。如:a=)轉義符進行轉義。\n換行\(zhòng)t 下一制表位\b退格\r 回到開頭3)格式說明符輸出變量值。printf函數(shù)中常用的格式說明%d
%ld%u%o%x%f%lf%e%g使用printf函數(shù)時的注意事項數(shù)據(jù)輸入scanf函數(shù)的一般調(diào)用形式scanf中格式說明符的相關規(guī)則,和printf相同。scanf中變量前需要加&號(取地址卜scanf("%d",&a);scanf函數(shù)中常用的格式說明通過scanf函數(shù)從鍵盤輸入數(shù)據(jù)scanf中非格式說明符部分,在輸入時應原樣輸入。scanf("%d,%d",&a,&b);10,20scanf("a=%d,%d",&a,&b);a=10,20連續(xù)格式說明符,應使用空格、制表符、回車分隔數(shù)據(jù)。scanf("%d%d",&a,&b); 10 20按指定寬度輸入數(shù)據(jù)。scanf("%2d%3d%d",&a,&b,&c); 123456789printf("%d,%d,%d\n",a,b,c); 12,3,456跳過某個輸入數(shù)據(jù)。格式說明符中*號,表示跳過此位置的輸入。a=b=c=5;scanf("%d%*d%d",&a,&b); 123printf("%d,%d,%d\n",a,b,c); 1,3,5復合語句和空語句復合語句在C語言中,可以使用{……}號將多條語句括起來,形成復合語句。復合語句在邏輯上當做一條語句處理??照Z句;號是構成C語言語句的重要符號,若只有一個;號也能構成語句,它是一個空語句。空語句本身不做任何操作,故一般不會影響程序結果,而不是完全不會影響程序結果。第4章選擇結構關系運算和邏輯運算C語言的邏輯值C語句中沒有邏輯類型。在程序中使用0值表示假,使用非0值表示真。main()(if(O)printf("yes\n");elseprintf("no\n");)nomain()(if(-1)printf("yes\n");elseprintf("no\n");)yes在程序計算結果時,用0值表示假,用1表示真。
main()printf(,,%d\n,,,2<300); 1}關系運算符和關系表達式><>=<===!=C語言中不能正確表示連續(xù)的關系運算main()(printf("%d\n",4>3>2); 0)> < >= <=優(yōu)先級較高==!= 優(yōu)先級較低main()(printf("%d\n",1==3>1); 1邏輯運算符和邏輯表達式&&邏輯與“且”兩邊同時為真,結果為真。||邏輯或“或”兩邊有一邊為真,結果為真。!邏輯非原來真!邏輯非原來真,變?yōu)榧?。原來假,變?yōu)檎?。main()TOC\o"1-5"\h\zprintf("%d\n",4>3&&3==2); 0printf("%d\n",4>3||3==2); 1printf("%d\n",!(4>3)); 0邏輯運算的中斷:&&運算前段為假,后段不運行。main()(intx=3,y=5;(x=0)&&(y=8);printf("%d,%d\n",x,y);0,5)||運算的前段為真,后段不運行。main(){intx=O,y=O;x++||y++;printf("%d,%d\n",x,y);
運算符的優(yōu)先級:逗號單目 算術運算符 關系運算符 邏輯運算符 賦值運算符逗號運算符!*/%+->>=<<===!=&&||=!4>3&&2+5||7*3 1if語句和用if語句構成的選擇結構if語句計算if的括號內(nèi)表達式的值是否為真,若為真則運行if的子句)main()(intx;scanf("%d",&x);if(x%2==0)printf("偶數(shù)\n");)注意:)if只能控制最近的一條語句。intx;scanf(M%dM,&x);if(x%2==0)x++;x++;printf("%d\n”,x);})若有多條語句作為if的子句,需用0構成復合語句。main()(inta=3,b=6,t=0;if(a==b)t=a;a=b;b=t;printf("%d,%d\n",a,b);6,0))在if的括號后不用加“;”號,否則會影響程序的邏輯。main()intx=8;if(x==6);x++;printf(M%d\n",x);9))if的條件通常是一個關系表達式,但要注意其他情況,特別是賦值表達式冒充關系表達式的情況。main()|intx=8;if(x=6)x++;printf("%d\n”,x);7}if-else計算if的括號內(nèi)表達式的值是否為真,若為真則運行if的子句,否則運行else的子句。intx;scanf(M%dM,&x);if(x>0)printf(H%d\nn,x);elseprintf("%d\n",-x);)注意:1)else和最近的if配對4.2.2嵌套的if語句main()(inta=3,b=4,c=5;if(a>3)if(b==4)C++;elsec-;printfC'%d\n",c);5inta=3,b=4,c=5;if(a>3)(if(b==4)C++;}elsec-;printf("%d\n",c);4)條件表達式構成的選擇結構條件表達式是C語言中唯一的三目運算。exp1?exp2:exp3先計算exp1是否為真,若為真取exp2,為假取exp3。main()printf(,,%d\n",5>3?4<7?1:10:100);switch語句以及用switch語句和break語句構成的選擇結構switch語句switch(a)(n++;n++;n++;n++;n++;)語法規(guī)定:1)switch后有一對小括號。2)小括號中必須時整型或字符型表達式。)小括號后不能有“;”號。)case和數(shù)值間的空格不能省略。)case后需使用"號。.4.2switch語句的執(zhí)行過程)計算switch的括號內(nèi)表達式的值。)判斷表達式的值和哪一個case相等,若找到了,則運行對應case后的語句。)若沒有找到,則運行default后的語句。)當某一個部分的語句運行后,會無條件的運行其后所有的語句,直到遇到break為止。4.4.3在switch語句體中使用break語句在結構中遇到break語句,立即終止結構。main()|inta=O,n=O;switch(a)(default:n++;n++;n++;n++;break;n++;n++;}printf(M%d\nH,n);4.5語句標號和goto語句語句標號goto語句第5章循環(huán)結構while語句和用while語句構成的循環(huán)結構while循環(huán)的一般形式循環(huán)變量初始化while(循環(huán)條件)(循環(huán)體)while循環(huán)的執(zhí)行過程)循環(huán)變量初始化2)判斷循環(huán)條件,若條件為真,則運行循環(huán)體。若條件為假,循環(huán)終止。3)循環(huán)體運行完,返回到第2步,判斷條件。1+2+3+ +100while(i<=100){sum=sum+i;i++;}printf(H%d\n,,,sum);)1+2+3+ +50main()(intsum=0,i=1;while(i<=50){sum=sum+i;i++;}printf("%d\n”,sum);)30+31+32+ +50main()intsum=0,i=30;while(i<=50){sum=sum+i;i++;}printf(',%d\n",sum);}30+32+34+.?????+50main()(intsum=0,i=30;while(i<=50){sum=sum+i;i+=2;)printf("%d\n”,sum);}1至IJ100內(nèi),3和5的公倍數(shù)的和main()intsum=0,i=1;while(i<=100)if(i%3==0&&i%5==0)
sum=sum+i;i++;}printf(H%d\n",sum);)V+22+32+ +102main()(intsum=0,i=1;while(i<=10)(sum=sum+i*i;i++;}printf("%d\n",sum);5.2do-while語句和用do-while語句構成的循環(huán)結構do~while語句構成的循環(huán)結構循環(huán)變量初始化do(循環(huán)體}while(循環(huán)條件);main()(intsum=0,i=1;do{sum=sum+i;i++;}while(i<=100);printf("%d\n",sum);)do-while循環(huán)的執(zhí)行過程1)循環(huán)變量初始化2)運行循環(huán)體3)判斷循環(huán)條件,若條件為真,則返回第2步繼續(xù)循環(huán);若條件為假,則循環(huán)終止。while循環(huán)和do-while循環(huán)的比較)語法區(qū)別:while的條件在循環(huán)體前,do-while的條件在循環(huán)體后,前面是do;while的條件沒有“:號,do-while有。)邏輯區(qū)別:while先判斷條件,后執(zhí)行循環(huán)體;do-while先執(zhí)行循環(huán)體,后判斷條件。當初始條件不滿足時,while一次也不運行循環(huán)體;而do-while至少運行一次。5.3for語句和for語句構成的循環(huán)結構for語句構成的循環(huán)結構for(循環(huán)變量初始化;循環(huán)條件;循環(huán)變量增量)(循環(huán)體)for循環(huán)的執(zhí)行過程)循環(huán)變量初始化2)判斷循環(huán)條件,若條件為真,則運行循環(huán)體;若條件為假,循環(huán)終止。3)運行循環(huán)體4)運行循環(huán)變量增量后,返回到第2步,判斷條件1+3+5+ +99main()(intsum=O,i;f0r(i=1;i<=99;i+=2)sum+=i;printf("%d\n”,sum);}1-2+3-4+5-6+7+99-100main()(intsum=0,i,s=1;for(i=1;i<=100;i++)(sum+=s*i;s=-s;}printf("%d\n",sum);1+1/2+1/3+ +1/50main()(doublesum=0;inti;for(i=1;i<=50;i++)(sum+=1.0/i;}printf("%f\n",sum);}5.3.3有關for語句的說明1)for語句中的三個表達式都是可以省略的。i=1;for(;i<=100;i++)(sum+=i;}i=1;for(;i<=100;)sum+=i;i++;}死循環(huán)-無法退出的循環(huán)i=1;for(;;)(if(!(i<=100))break;sum+=i;i++;)循環(huán)結構的嵌套外層循環(huán)每循環(huán)一次,內(nèi)層循環(huán)循環(huán)一輪;內(nèi)層循環(huán)循環(huán)結束,外層循環(huán)才循環(huán)一次。main()inti,j,cnt=O;for(i=1;i<=4;i++)for(j=1;j<=3;j++)cnt++;printf(,'%d\n",cnt);}break和continue語句在循環(huán)體中的作用break語句立刻終止循環(huán)結構main()(inti,sum=0;for(i=1;i<=10;i++)(if(i==5)break;sum+=i;}printf("%d\n",sum);10)continue語句結束(跳過)本次循環(huán)后面的語句,繼續(xù)一下次循環(huán)。main()inti,sum=O;for(i=1;i<=10;i++)(jf(j==5||i==7)continue;sum+=i;}printf("%d\n",sum);43)第6章字符型數(shù)據(jù)字符型常?字符常?TOC\o"1-5"\h\z'A' 'b' '#' '\n'C語言中所有的字符,以ASCII碼存放。'A' - 65'a' - 97'0' - 48注意:1)有多種字符常量''2)單引號內(nèi)只能是一個字符 ‘a(chǎn)b'(錯誤)轉義符常?'\n'換行'\t' 制表符'\b' 退格'\r" 返回'W \'\ddd'由1~3位八進制數(shù)表示的ASCII碼值所對應的字符'MOV-'A',\1081(錯誤)'\xhh'由1?2位十六進制數(shù)表示的ASCII碼值所對應的字符 ‘\x65'-'e'字符串常?uabc"串長=3TOC\o"1-5"\h\z“a\bc” 3uabc123" 6uabc\123" 4",,空串o可對字符常一進行的運算C語言中字符就是一個整數(shù),所以可以對其進行運算。對字符型進行的運算,就是對其ASCII碼值進行的運算。大寫字母+32所對應的小寫字母小寫字母-329所對應的大寫字母字符變量charc1;charc1='A';字符的輸入和輸出調(diào)用printf和scanf函數(shù)輸出和輸入字符%c字符型的格式說明符注意:main()(charc1,c2;scanf("%c%c",&c1,&c2);printf("%c,%c\n",c1,c2);)在scanf中使用連續(xù)的%c%c輸入字符型數(shù)據(jù)時,不能使用任何方式分割字符,必須連續(xù)輸入。否則,用來分割的符號會作為有效輸入賦給變量。main()(charc1,c2;scanf(n%2c%2c",&c1,&c2);printf(,,%c,%c\n,,,c1,c2);)指定寬度輸入時,只會將第一個字符賦給變量。main()(inta,b;charc;scanf(H%d%c%d",&a,&c,&b); 10A20printf(',%d,%c,%d\n',,a,c,b); 10,A,20)調(diào)用putchar和getchar函數(shù)輸出和輸入字符main()(charc='a';c=getchar();putchar(c);
第7章函數(shù)7.1庫函數(shù)庫函數(shù)系統(tǒng)已經(jīng)定義好的函數(shù),直接調(diào)用即可。庫函數(shù)的使用方法:1庫函數(shù)系統(tǒng)已經(jīng)定義好的函數(shù),直接調(diào)用即可。庫函數(shù)的使用方法:1)獨立構成語句。2)作為表達式的一部分。stdio.h printf()scanf()math.h pow(2,3)-8abs(-3)-3sqrt(9)-37.2函數(shù)的定義和返回值printf("%d”,x);n=pow(2,2)+abs(-5)+sqrt(4);putchar()getchar()fabs(-3.5)-3.5和其他的程序元素一樣,函數(shù)也必須先定義,后使用。7.2.1函數(shù)定義的語法intfun(inta,intb)returna+b;函數(shù)定義一般形式:函數(shù)類型函數(shù)名(參數(shù)類型參數(shù)名,參數(shù)類型參數(shù)名 )函數(shù)體}注意:1)函數(shù)類型應和函數(shù)返回值的類型一致。當不一致時,按照賦值原則,以函數(shù)類型為準。若函數(shù)無返回值,則應將函數(shù)定義為void類型(空類型b當定義函數(shù)時,未聲明函數(shù)類型,則函數(shù)的默認類型為into2)函數(shù)名需符合標識符命名規(guī)則。3)定義函數(shù)時所列出的參數(shù)叫“形式參數(shù)”(形參卜每個形參均需分別聲明類型。形參的個數(shù)任意,若形參個數(shù)為0時,稱函數(shù)為無參函數(shù)。4)函數(shù)不能嵌套定義,即,不能在一個函數(shù)里面定義新的函數(shù)。5)函數(shù)需先定義,后使用。即,定義部分需放在調(diào)用部分的前面。若函數(shù)類型為int時,定義放在調(diào)用后也可(不推薦卜7.2.2函數(shù)的返回值函數(shù)通過return語句返回值。returna+b;或return(a+b);函數(shù)運行到return時,會將return后表達式的值作為函數(shù)值返回,同時立刻終止掉函數(shù)的運行,返回到函數(shù)被調(diào)用的位置。若函數(shù)中無return,則當最后一條語句運行完時終止。7.3函數(shù)的調(diào)用函數(shù)的兩種調(diào)用方式1)獨立構成語句。 printf("%d",x);2)作為表達式的一部分。 n=pow(2,2)+abs(-5)+sqrt(4);函數(shù)調(diào)用時的語法要求)函數(shù)名必須與定義的函數(shù)名一致。)調(diào)用函數(shù)時出現(xiàn)的參數(shù)叫“實際參數(shù)”(實參卜實參一般一個確定的常量、變量或表達式。實參不需要聲明類型。)實參必須與形參完全匹配。個數(shù)、類型、順序。若實參類型與形參類型不一致時,按賦值原則,以形參類型為準。4)調(diào)用時,實參值單向傳遞給形參。函數(shù)的聲明函數(shù)聲明的形式函數(shù)首部;函數(shù)聲明中需指出以下內(nèi)容:函數(shù)類型、函數(shù)名、參數(shù)類型。doublefun();正確形參名不是函數(shù)聲明時的必要內(nèi)容。函數(shù)聲明的位置前面:所有代碼的前面;main函數(shù)的前面。函數(shù)聲明可以出現(xiàn)在某個函數(shù)的內(nèi)部。調(diào)用函數(shù)和被調(diào)用函數(shù)之間的數(shù)據(jù)傳遞函數(shù)的參數(shù)傳遞是單向的,只能有實參傳遞給形參,形參的改變是不能影響實參的。第8章地址和指針變■的地址和指針地址:變量在內(nèi)存中的編號。指針:用來存放地址的變量。地址6》指針指針變量的定義和指針變量的基類型inta;int*p;注意:*號的作用在C語言中有3種:乘法;當*出現(xiàn)在定義語句中時,表示后面的變量是個指針;*以單目運算符形式出現(xiàn)普通語句中時,表示取值(取出指針所指變量的值bp=&a若有針對指針的賦值,理解上應從左向右進行,理解為:令p指向a。在p指向a的前提下,程序產(chǎn)生兩組等價關系。p &a*P3a*p=&a; 錯誤int*p=&a;正確main()(inta=5,*p=&a;a=10;*p=20;printf("%d,%d\n",a,*p); 20)8.3給指針變■鼠值8-3.1給指針變■賦地址值1)令指針直接指向變量inta,*p;P=&a;2)通過其他指針確定指向inta,*p=&a,*q;q=p;main()inta=5,*p=&a,*q;q=p;a=10;*p=20;*q=30;printf(”%d,%d,%d\n*a,*p*q); 30,30,308.3.2給指針變量賦"空”值在stdio.h中定義了符號常量NULL—0EOF--1NULL0 '\0'int*p;p=NULL;令指針p指向空空地址是系統(tǒng)的保留地址,即,不可向空地址中賦值。int*p=NULL;*p=10; 錯誤。不能對指向空地址的指針賦值。int*p;*p=10; 錯誤。不能對未確定指向的指針賦值inta,*p=&a;正確*p=10;正確對指針變■的操作通過指針來引用一個存儲單元在指針前加*號即可。*和&互為逆運算二級指針(指向指針的指針)main()(inta=5,*p=&a,**q;q=&p;printf("%d,%d1%d\n",a,*p,**q); 5,5,5}移動指針指針移動僅發(fā)生在指針指向數(shù)組時。此時,令指針自增,表示將指針向后移動;自減,表示向前移動。main()inta[5]={10,20,30,40,50),*p=&a[2];P++;printf("%d\n",*p);40)是否移動,主要看指針是否又被重新賦值。p++ p=p+1加幾,表示后移幾個位置;減幾,printf("%d\n",*p);40)是否移動,主要看指針是否又被重新賦值。p++ p=p+1加幾,表示后移幾個位置;減幾,表示前移幾個位置。main()inta[5]={10,20,30,40,50},*p=&a[2];printf(,,%d\n",*p++);先取p和*號結合,取值30,后移動pprintf(,'%d\n,,,(*p)++);先取*p,40,后累加*p值為41printf(M%d\nM,*++p);先后移p,后取*p值,50printf(H%d\n",++*p);先累加*p值,后取值,51)指針比較僅當指針指向同一數(shù)組時,才有比較的意義。main()inta[5]={10,20,30,40,50},*p=&a[1],*q=&a[3];printf(M%d\n",q-p);}指針相減,減的是所指的數(shù)組下標。函數(shù)之間地址值的傳遞形參為指針變■時實參和形參之間的傳遞函數(shù)參數(shù)傳遞是單向的,只能由實參傳遞給形參,形參的改變是無法影響實參的,但指針除外。fun(inta,int*b)(a=a+*b;*b=a+*b;)main()(inta=10,b=20;fun(a,&b);printf(”%d,%d\n"ab);10,50}通過傳送地址值在被調(diào)用函數(shù)中直接改變調(diào)用函數(shù)中的變■的值函數(shù)返回地址值int*fun(int*a,int*b)if(*a>*b)returna;elsereturnb;}main()(inta=10,b=20;int*c;c=fun(&a,&b);printf(,,%d\n",*c); 20)第9章數(shù)組一維數(shù)組的定義和一維數(shù)組元素的引用一維數(shù)組的定義inta[10];說明:1)這里定義的是一個由10個int型元素組成的一維數(shù)組a。2)定義時方括號中的整型常量表達式表示數(shù)組中元素的個數(shù)。定義數(shù)組時須指明長度,且長度表達式不能由實型或變量組成。3)數(shù)組元素的下標從0開始,故長度為5的數(shù)組,下標最大只能到4Oint磯10]; 正確inta[5+5]; 正確intn=10,a[n]; 錯誤intn[5.0] 錯誤#defineN10inta[N]; 正確inta[]; 錯誤一維數(shù)蛆元素的引用求和:inti,sum=0;for(i=0;i<=9;i++)sum+=a[i];求平均值:inti,sum=0;doubleave;for(i=0;i<=9;i++)sum+=a[i];ave=sum/10.0;求最值:inti.max;max=a[O];for(i=0;i<=9;i++)if(max<a[i])max=a[i];轉置:intfor(i=0,j=9;i<j;i++,j-)(t=a[i];a[i]=a[j];a[j]=t;}排序:排序使用3個變量完成,外層循環(huán)i從第1個開始到倒數(shù)第2個為止,內(nèi)層循環(huán)j從i的下一個開始到最后為止,循環(huán)體內(nèi)比較a[i]a[j]的關系(重復后一個字,從小到大),堀a[i]a[j]intfor(i=0;i<=8;i++)forQ=i+1;j<=9;j++)if(a[i]<aU])一維數(shù)組的初始化intb[5]={10,20,30,40,50};標準方式:初始化個數(shù)和數(shù)組長度相同intb[5]={10,20,30,40,50,60}; 錯誤intb[5]={10,20,30}; 定義數(shù)組時若只給部分元素賦初值,則未被賦初值的元素將自動賦。值。intb[]={10,20,30); 定義數(shù)組時若同時對數(shù)組進行初始化,則可以省略數(shù)組的長度,此時,數(shù)組長度等于初始化的個數(shù)。通過鼠初值定義數(shù)組的大小一維數(shù)組和指針數(shù)組名代表數(shù)組的首地址常量。首地址(首個元素的地址卜int磯5],*p;p=a;p=&a[0];程序中所有出現(xiàn)a的地址都能被p替換。printf("%d\n",*p++);printf("%d\n",*++p);printf("%d\n",++*p);printf("%d\n",(*p)++);printf("%d\n",*p);數(shù)組元素的多種表示方法:a[i]p[i]*(p+i)*(a+i)p++;對a++;錯指針指向數(shù)組中段,下標從0開始重新計數(shù)。inta[5]={10,20,30,40,50};int*p;P=&a[2];printf("%d\n",p[-1]); 20函數(shù)之間對一維數(shù)組和數(shù)組元素的引用數(shù)組元素作實參和普遍變量一樣數(shù)組名作實參數(shù)組名作為實參,則形參有以下表達方式:)使用和實參一樣的數(shù)組定義。inta[N])使用不指明長度的數(shù)組定義。inta[]3)使用指針表示。 int*a.3.3數(shù)組元素地址作為實參.3.4函數(shù)的指針形參和函數(shù)體中數(shù)組的區(qū)別一維數(shù)組應用舉例二維數(shù)組的定義和二維數(shù)蛆元素的引用二維數(shù)蛆的定義inta[2][3];二維數(shù)組元素的弓I用二維數(shù)組的初始化inta[2][3]={{1,2,3},{4,5.6)};inta[2][3]={{1,2},{4});inta[2][3]={1,2,4);inta[][3]={{1,2.3},{4,5.6});錯誤inta[2][]={{1,2,3},{4,5,6});錯誤主對角線置0:for(i=0;i<=3;i++)a[i][i]=O;左下三角置0:for(i=0;i<=3;i++)for(j=0;jv=i;j++)a[i][j]=O;右上三角置0:for(i=0;i<=3;i++)for(j=i;j<=3;j++)a[i][j]=O;反對角線置0:for(i=0;i<N;i++)a[i][N-1-i]=0;左上三角置0:for(i=0;i<N;i++)for(j=0;j<=N-1-i;j++)a[i][j]=O;右下三角置0:for(i=0;i<N;i++)for(j=N-1-i;j<N;j++)a[i]U]=O;轉置:for(i=0;i<N;i++)forO=0;j<=i;j++)(t=a[i][fl;a[i][j]=a[j][i];a皿i]=t;)二維數(shù)組和指針二維數(shù)組的一維表示:inta[N][N]={{1.2,3,4},{5,6,7,8},{9>10,11,12},{13,14,15,16)};int*p=a;printf("%d”,p[5]); 6二維數(shù)組元素的多種表示方法:a[i][j] *(a[i]+j) *(*(a+i)+j) (*(a+i))[j] *(&磯O][O]+i*N+j)指向數(shù)組的指針:inta[2][3]={{1,2,3},{5,6.7});int(*p)[3]:p=a;由指針構成的數(shù)組:inta[2][3]={{1,2,3},{5,6,7}};int*p[2];p[O]=a[O];P[1]=a[1];int*p;int**p;int(*p)[M];int*p[N];二維數(shù)組和指針數(shù)組作為實參inta[N]inta[]int*a二維數(shù)組作為形參的多種表示:inta[N][M]int磯][M]第10章字符串用一維字符數(shù)組存放字符串程序會自動在字符串常量的末尾添加(看不見的八0'——字符串的結束符chars[尸{"abc);printf(H%d\nM,sizeof(s));,\01 0NULL通過鼠初值的方式給一維字符數(shù)組賦字符串chars1[]={”abc”};chars2[]={,a',,b';c,,,\0,};在C程序執(zhí)行過程中給一維字符數(shù)組賦字符串charsn={,a'/b7c,,'\0};charsO={nabcn};charsQ=MabcM;chars[4]=,'abcH;char*p="abc*';char*p;p=,'abcn;錯誤情況:
charsO={'a','b','c');chars[3]="abc";chars[4];s="abc";使指針指向一個字符串通過鼠初值的方式使指針指向一個字符串通過鼠值運算使指針指向一個字符串用字符數(shù)組作為字符串和用指針指向的字符串之間的區(qū)別字符串的輸入和輸出輸入和輸出字符串時的必要條件用格式說明符%s進行整串輸入和輸出%d%o%x%f%c%s表示從當前所指的位置開始輸出,直到遇到結束符為止。main()(chars[]=nabcdef;char*p=s;printf(H%s\nM,p+2);cdef使用%S輸入字符串時,遇到空格將停止輸入。chars1[20],*p=s1;scanf("%s",p);chars1[20],*p;scanf("%s",p); 不能對未確定指向的指針賦值調(diào)用gets、puts函數(shù)在終端輸入或輸出一行字符串gets(s)能夠接受空格的輸入main()(chars[20];gets(s);puts(s);)字符串數(shù)組用于字符串處理的函數(shù)strlen(s)求字符串長度,從當前所指的位置開始統(tǒng)計,直到遇到結束符為止。chars[20]="abcde";printf("%d\n",strlen(s));520printf("%d\n",sizeof(s));20chars[]="abcde";printf("%d\n",strlen(s)); 5printf("%d\n",sizeof(s)); 6strcpy(s1,s2) 將后一個字符串的內(nèi)容復制到前一個字符串中。strcat(s1,s2) 將后一個字符串連接到前一個字符串的后面strcmp(s1,s2) 比較兩個字符串的大小,前面大返回正數(shù)相等返回0后面大返回負數(shù)第11章對函數(shù)的進一步討論傳給main函數(shù)的參數(shù)main(intargc.char*argv|])其中:argc表示執(zhí)行程序時命令行參數(shù)的個數(shù)。argv口中存放的是各命令行參數(shù)的首地址。main(intargc.char*argv[])
while(argc>1)argc-;printf(M%sM,argv[argc]);)}通過實參向函數(shù)傳遞函數(shù)名或指向函數(shù)的指針變量int(*f)();指向函數(shù)的指針intadd(inta,intb)(returna+b;)main()(int(*f)(int,int); //定義指向具有2個整型參數(shù)且返回值為整型的指針ff=add; 〃令指針f指向函數(shù)add〃通過指針f調(diào)用函數(shù)addf(3,5)指向函數(shù)的指針int*f(inta,intb); 返回值為指針的函數(shù)函數(shù)的遞歸調(diào)用遞歸:直接遞歸-函數(shù)自己調(diào)用自己間接遞歸-函數(shù)通過其他函數(shù)調(diào)用自己。斐波那契數(shù)列1 1 2 3 5 8 13 21intf(intn)(if(n>2)returnf(n-1)+f(n-2);elsereturn1;)main()(printf("%d\n",f(5));)intf(intn)if(n>1)returnn*f(n-1);elsereturn1;}第12章C語言中用戶標識符的作用域和存儲類型局部變■、全局變量和存儲分類用戶標識符的作用域局部變量和全局變量重名時,全局變量被屏蔽,局部變量發(fā)揮作用。inta=50;voidfun()(printf("%d\n",a);)main()(a++;(inta=100;printf("%d\n",a);fun();printf("%d\n",a);}局部變■、全局變量和存儲分類局部變■及其作用域和生存期局部變量的生命周期較短,在函數(shù)調(diào)用完時,局部變量被釋放。register寄存器型register型變量不能進行&運算auto自動型默認類型不賦初值,初值為隨機值 不能保留上一次的運行結果static靜態(tài)型不賦初值,初值為0 保留上次的運行結果extern外部型voidfun()(staticinta=1;a++;printf("%d\n",a);}main()fun();2fun();3inta=100;voidfun(){externinta;printf(H%d\n",a);)main()(fun(); 100)2成0變?register變量靜態(tài)存儲類型的局部變量全部變■及其作用和生存期在默認情況下,全局變量的特性類似于static的局部變量全局的static:此變量不能被外部引用。extern:引用外部的變量。Filel.cstaticinta=10;fun1()(printf("%d\rT,a);}File2.cfun2()(externinta;printf(M%d\n",a);全局變■的作用域和生存期在同一編譯單位內(nèi)用extern說明符擴展全局變曜的作用域在不同蝙譯單位內(nèi)用extern說明符擴展全局變量的作用域靜態(tài)全局變量函數(shù)的存儲分類用extern說明函數(shù)用static說明函數(shù)第13章編譯預處理和動態(tài)存儲分配編譯預處理宏替換先替換,后計算#defineN5+5#defineMN/Nmain()(printf("%d\n",2*M); 16#defineN(x,y)x*ymain()(printf("%d\n",N(2+3,2)); 8}文件包含)預處理命令包括:#define#include0預處理今預先處理,預先是相對于編譯,即,預處理命令在編譯前執(zhí)行。)預處理命令后沒有":’號,故不屬于C語句。)預處理命令#include后可以聲明包含任意類型的文件,一般文件擴展名為*.h,但不一定。4)當預處理命令中,所包含文件出錯時,整個程序需要重新編譯。13.2動態(tài)存儲分配malloc函數(shù)和free函數(shù)int*p;p=(int*)malloc(sizeof(int)); 分配int型所占字節(jié)數(shù)的空間返回空間的地址。free(p);釋放p所指空間的內(nèi)容。
calloc函數(shù)分配n個連續(xù)空間。main()(int*p;p=(int*)calloc(5,sizeof(int));p[0]=10;p[1]=p[0]*2;printf("%d\n",p[1]); 20第14章結構體、共用體和用戶定義類型用typedef說明一種新類型名用來定義新的類型名typedef舊類型名新類型名;typedefint*INT;結構體類型多種數(shù)據(jù)類型的集合。結構體類型的說明structST定義結構體類型structST定義結構體類型doublea;intb;);doublea;intb;);structSTx; 通過結構體類型,定義結構體變量structST 在定義結構體類型的同時,定義結構體變量(doublea;intb;}X;struct 定義匿名的結構體類型,同時定義變量。(doublea;intb;typedefstructST結構體類型名doublea;intb;}A; 結構體的新類型名Ax;結構體類型的變量、數(shù)組和指針變■的定義typedefstructST(inta,b;}A;Ax={1,2}; 通過新類型名定義結構體變量A*p; 定義結構體指針p=&x; 令指針p指向結構體變量x當結構體變量為“值”時使用訪問符,當結構體變量為指針(地址)時使用訪問符x.ap->ax.a引用結構體變量中的數(shù)據(jù)函數(shù)之間結構體變■的數(shù)據(jù)傳遞利用結構體變量構成鏈表structnode(intdata; 〃數(shù)據(jù)域structnode*next; //指針域,指向自身類型的指針)在處理鏈表時,應保持鏈表的通暢。p->next=r->next;r->next=p;r->next=p->next;free(p);鏈表指針的后移:p=p->next尾節(jié)點指向空。NULL尾節(jié)點指向空。NULL,\0'共用體union共用體類型所占的字節(jié)數(shù),等于最長的成員所占的字節(jié)數(shù)。結構體 ,等于所有成員所占字節(jié)數(shù)的和。共用體所有成員共用在同一個空間中,改變其中一個的值,所有成員都將改變。unionST(inta;intb;);main()(unionSTx;x.a=10; x.b=20;printf("%d\n”,x.a+x.b);40printf("%d\n”,x.a+x.b);4014.3.2共用體變■的引用第15章位運算位運算符做位運算時,現(xiàn)將運算數(shù)轉換為二進制,補齊8位后運算。&I“異或對應位不同為1,相同為0?乘2?除2優(yōu)先級<<、?&A|位運算符的運算功能第16章文件16.1C語言文件的概念文件的讀取方法:1)順序存?。簭奈募_頭開始。2)直接存?。簭娜我馕恢瞄_始。文件類型:1)文本文件:每個字符以ASCII碼的形式存放。2)二進制文件:按二進制存放。任意文件類型可以按任意方式存取。EOF:文件結束標志。-1文件指針FILE*fp;指向文件的指針。打開文件文件指針=£叩011(文件名,打開方式);fp=fopen("file.dat","r");“ab+”-追加,從頭再讀“ab+”-追加,從頭再讀1)針對文本文件什'-讀W-寫“a”-追加“r+”-讀寫“W+”-新建“a+”-追加,從頭再讀2)針對二進制文件"b”-讀“wb”-寫"ab”-追加“rb+”-讀寫 “wb+”-新建fclose(文件指針);fclose(fp);main()(FILE*fp;if((fp=fopen("file.dat","r"))==NULL)(printf("fileerror!");exit(O);)fclose(fp);)調(diào)用getc(fgetc)和putc(fputc)函數(shù)進行輸入和輸出putc(字符,文件指針) 寫文件 向文件中輸出字符putc('A',fp);ch=getc(fp);while(ch!=EOF)(printf("%c\n",ch);ch=getc(fp);)判斷文件結束函數(shù)feofEOF作為文件結束符有局限,只能在讀取文本文件時使用。讀取二進制文件時,應使用feof函數(shù)判斷文件是否結束。feof(fp)當文件確實結束時返回1,未結束時返回0if(feof(fp))(文件結束時的語句}if(!feof(fp))文件未結束時的語句fscanf(文件指針,格式說明符,變量列表);fscanf(fp,"%d%d",&x,&y);fprintf(文件指針,格式說明符,變量列表);fprintf(fp,"%d",i);fgets函數(shù)和fputs函數(shù)fgets(字符串,字符個數(shù)n,文件指針) 從文件指針處讀取n-1個字符,賦給字符串sfgets(s,5,fp);fputs(字符串,文件指針)fputs(“good”,fp);fread函數(shù)和fwrite函數(shù)fwrite(待讀寫變量,單個數(shù)據(jù)字節(jié)數(shù),讀寫個數(shù),文件指針);fwrite(&i,sizeof(int),1,fp);寫文件fread(&j,sizeof(int),1,fp);讀文件fread和fwrite的參數(shù)形式相同
fseek函數(shù)fseek(文件指針,偏移量,相對位置)fseek(fp,30L,SEEK_SET);相對位置:SEEK_SET文件頭SEEK_END 文件結尾SEEK_CUR 當前位置fseek(fp,-4L,SEEK_END); 移動到倒數(shù)4字節(jié)的位置ftell函數(shù)n=ftell(fp); 求當前文件指針相對于文件開頭的字節(jié)數(shù)。fseek(fp,30L,SEEK_SET);n=ftell(fp); 30有文件256字節(jié),fseek(fp,-50L,SEEK_END);n=ftell(fp);n=ftell(fp);206rewind函數(shù)rewind(fp); 令文件指針返回到開頭第一章數(shù)據(jù)結構與算法算法算法:是指解題方案的準確而完整的描述。特征包括:(1)可行性;(2)確定性,算法中每一步驟都必須有明確定義,不允許有模棱兩可的解釋,不允許有多義
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學二年級數(shù)學上冊口算題
- 2024-2025年高中化學課時分層作業(yè)5元素的電負性及其變化規(guī)律含解析魯科版選修3
- 西門子油煙機指導書
- 2025年年度尊重生命總結報告
- 二次消防改造工程合同范本
- 海南經(jīng)貿(mào)職業(yè)技術學院《建筑構造Ⅰ》2023-2024學年第二學期期末試卷
- 福州科技職業(yè)技術學院《德語口譯》2023-2024學年第二學期期末試卷
- 常州信息職業(yè)技術學院《中學語文課程與教學論》2023-2024學年第二學期期末試卷
- 宿遷學院《編譯原理》2023-2024學年第二學期期末試卷
- 烏蘭察布職業(yè)學院《建筑物理》2023-2024學年第二學期期末試卷
- 2024年度碳陶剎車盤分析報告
- 2025年1月 浙江首考英語試卷
- 十首最美的唐詩
- 2024年中考二輪專題復習道德與法治主觀題答題技巧(小論文)之演講稿
- 質(zhì)檢工作計劃書2025質(zhì)檢部工作計劃范文
- 《纏論的實戰(zhàn)技法》課件
- 新版標準化機電專業(yè)管理體系解讀課件
- 承包魚塘維修施工合同范例
- 耶魯綜合抽動嚴重程度量表正式版
- 水利水電工程建設常見事故類型及典型事故分析(標準版)
- 政府采購項目采購需求調(diào)查指引文本
評論
0/150
提交評論