C語言教案(另一個)_第1頁
C語言教案(另一個)_第2頁
C語言教案(另一個)_第3頁
C語言教案(另一個)_第4頁
C語言教案(另一個)_第5頁
已閱讀5頁,還剩46頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

武昌理工學院計算機二級C語言培訓教案第一章 C語言的基礎(chǔ)知識一、對C語言的初步認識通過講解以下這個簡單的C程序例子,讓學生對C程序有個大致了解。main(){inta,b,c;a=10;b=20;c=a+b;printf("%d",c);}注:(1)C程序中有且僅有一個main函數(shù),程序從main函數(shù)開始執(zhí)行,并且在main函數(shù)中結(jié)束。(2)用“{}”括起來的部分稱為“函數(shù)體”,“{”和“}”必須成對出現(xiàn),表示開始和結(jié)束。(3)main()函數(shù)的格式:main(){函數(shù)體}(4)變量先定義,后使用。(5)printf為C語言的屏幕輸出函數(shù),注意寫法。(6)書寫程序時應遵循的規(guī)則:語句中的不同單詞至少且必須加一個空格以示間隔,若已有明顯的間隔符,也可不再加空格來間隔;最好一個語句占一行。二、標識符1、標識符命名規(guī)則(1)只能包含字母、數(shù)字和下劃線(2)第一個字符必須是字母或下劃線(3)C語言是大小寫敏感的,如grade和Grade是兩個不同的標識符。2、標識符分類(1)關(guān)鍵字:已經(jīng)事先定義好了,程序遠不能再將它們另做它用。參看教材附錄二,記住常用的關(guān)鍵字(如int、if、do、break、case、char等)。(2)預定義標識符:在C語言系統(tǒng)中已經(jīng)使用了的標識符(如printf、scanf、define、include等)。預定義標識符可用作用戶標識符。(3)用戶標識符:根據(jù)用戶需要定義的標識符。用戶標識符不能是關(guān)鍵字。例;下列選項中,不能用作標識符的是A)_1234_B)_1_2C)int_2_D)2_int_以下選項中合法的用戶標識符是______。A)longB)_2TestC)3DmaxD)A.dat三、常量與變量1、常量在程序的運行過程中,其值不發(fā)生改變的量。2、常量分類(1)直接常量直接常量又包括整型常量(如12、-3、0)、實型常量(如4.6、-1.23、1.2E+3)和字符常量(如'A'、'6')。(2)符號常量符號常量在使用之前必須先定義,其一般形式為:#define符號常量標識符常量值通過以下兩個實現(xiàn)功能相同(求圓面積)的程序,給學生解釋使用與不使用符號常量兩者的區(qū)別。程序1: 程序2: #define R 5 main() #define PI 3.14159 { main() floatarea;{ intr;float area; r=5; area=PI*R*R; area=3.14159*r*r;printf("%f",area); printf("%f",area);} }注:習慣上符號常量的標識符用大寫字母。符號常量的值在其作用域內(nèi)不能被改變。3、變量在程序的運行過程中,其值可以改變的量。4、變量的定義變量定義的一般形式為:類型說明符變量名;注:變量名是合法的標識符,但不可以是關(guān)鍵字;允許在一個類型說明符后,定義多個相同類型的變量,各變量名之間用逗號間隔,最后一個變量名之后必須以“;”號結(jié)尾;一般變量的定義放在函數(shù)體的開頭部分??梢酝ㄟ^以下例子的講解,使學生進一步掌握變量的定義與使用。main(){inta,b,c;a=15;b=20;c=b-a;printf("%d",c);}四、整數(shù)和實數(shù)1、整型常量分類(1)八進制整型常量以數(shù)字0開頭,其中由數(shù)字0~7組成,如023、076等。(2)十進制整型常量最常用的常量,由數(shù)字0~9組成,如15、345、-38等。(3)十六進制整型常量以0x或0X開頭,由數(shù)字0~9、字母a~f(或大寫A~F)組成,如0x7e、0X4AB等。注:整型常量沒有二進制的。2、整型變量分類(1)短整型變量類型說明符為:[signed]short[int],占用2個字節(jié),取值范圍為-32768~32767。(2)基本整型變量類型說明符為:[signed]int,占用4個字節(jié),取值范圍為-2147483648~2147483647。(3)長整型變量類型說明符為:[signed]long[int],占用4個字節(jié),取值范圍與基本整型變量相同。(4)無符號短整型變量類型說明符為:unsignedshort[int],占用2個字節(jié),取值范圍為0~65535。(5)無符號基本整型變量類型說明符為:unsigned[int],占用4個字節(jié),取值范圍為0~4294967295。(6)無符號長整型變量類型說明符為:unsignedlong[int],占用4個字節(jié),取值范圍同無符號基本整型變量相同。注:整型變量的各種類型,在編程中一定要注意,不要讓一個整型變量超出該類型的取值范圍,以免發(fā)生溢出錯誤。可引導學生自己推出每種變量的表示范圍。3、實型常量(1)小數(shù)形式小數(shù)點前或后可以沒有數(shù)字,但不能同時沒有數(shù)字。(2)指數(shù)形式可以參考口訣:“E前E后必有數(shù),E后必須為整數(shù)”。例;以下選項中合法的實型常數(shù)是______。A)5E2.0B)E-3C).2E0D)1.3E例;以下符合C語言語法的實型常量是A)1.2E0.5B)3.14.159EC).5E-3D)E154、實型變量實型變量分為:單精度實型(float)和雙精度實型(double)。float占用4個字節(jié),double占用8個字節(jié)。五、算術(shù)運算和賦值運算1、算術(shù)運算符(+、-、*、/、%)(1)/:5/2=25.0/2=2.55/2.0=2.55.0/2.0=2.5(2)%:5%2=1-5%2=-15%-2=1注:這五種算術(shù)運算符以/和%為主,進行除運算時,注意兩邊都為整數(shù)的情況;“%”運算符左右兩邊必須為整數(shù),余數(shù)的符號同被除數(shù)的符號相同。例:若有語句inti=-19,j=i%4;printf("%d\n",j);則輸出的結(jié)果是【】。2、算術(shù)運算符的優(yōu)先級(*、/、%)>(+、-)3、算術(shù)表達式的計算根據(jù)優(yōu)先級的高低決定計算順序。通過講解以下表達式的計算過程,使學生掌握算術(shù)運算符的優(yōu)先級。4*5+8*2%4+12/5=224、賦值運算符(=、+=、-=、*=、/=)賦值運算的一般格式為:變量=表達式(1)+=a+=6a=a+6(2)-=a-=6a=a-6(3)*=a*=6a=a*6(4)/=a/=6a=a/6注:任意一種賦值運算符的左側(cè)必須為變量,不能是表達式和常量;整個賦值表達式的值是最左邊變量的值。當賦值運算符左右兩邊類型不一樣,系統(tǒng)會自定進行類型轉(zhuǎn)換。六、強制類型轉(zhuǎn)換強制類型轉(zhuǎn)換的格式為:(類型名)表達式(int)5.28=5注:在二級C考試中,經(jīng)??紡娭祁愋偷霓D(zhuǎn)換格式,尤其是一對小括號的位置。七、自加、自減運算符1、自加、自減運算符(++、--)自加、自減運算符的運算對象只能是變量,運算符可在變量的前面,也可以在變量的后面,形如i++、++i、i--、--i。2、自加、自減的運算規(guī)則自加:i++先用i的值參與運算,再使i的值加1。自加:++i先使i的值加1,再讓i參與運算。自減:i--先用i的值參與運算,再使i的值減1。自減:--i先使i的值減1,再讓i參與運算。注:自加、自減運算是一個難點,可以參考以下例子進行詳細講解,便于學生掌握。main(){intm=011,n=11;printf("%d,%d\n",++m,n++);/*輸出結(jié)果為:10,11*/printf("%d,%d\n",--m,n--); /*輸出結(jié)果為:9,12*/}3、自加、自減運算的注意事項(1)只能和變量結(jié)合,如(i++)++是不合法的。(2)運算結(jié)合方向是從右到左。例:設(shè)有intx=11;則表達式(x++*1/3)的值是【】例:有以下程序main(){intm=3,n=4,x;x=-m++;x=x+8/++n;printf("%d\n",x);}程序運行后的輸出結(jié)果是【】例:有如下程序main0{inty=3,x=3,z=1;printf(“%d%d\n”,(++x,y++),z+2);}運行該程序的輸出結(jié)果是【】例:設(shè)有以下定義inta=0;doubleb=1.25;charc=’A’;#defined2則下面語句中錯誤的是A)a++;B)b++C)c++;D)d++;八、逗號運算符及逗號表達式1、逗號運算符(,)在逗號表達式中,逗號運算符具有從左向右的結(jié)合性,最后一個表達式的值是整個逗號表達式的值。2、要和變量多余的情況區(qū)別開3、優(yōu)先級別在所有運算符中,逗號運算符優(yōu)先級最低。例:設(shè)有如下程序段:intx=2002,y=2003;printf("%d\n",(x,y));則以下敘述中正確的是A)輸出語句中格式說明符的個數(shù)少于輸出項的個數(shù),不能正確輸出B)運行時產(chǎn)生出錯信息C)輸出值為2002D)輸出值為2003例:假定x和y為double型,則表達式的值是A)3.500000B)3C)2.000000D)3.000000九、C語言中的語句1、表達式語句表達式;2、空語句;3、復合語句{語句1;語句2;?語句n;}例:{t=x;x=y;y=t;}十、注釋C語句中有兩種注釋方法:(1)//:只能注釋一行(2)/*?*/:可注釋多行,在“/*”和“*/”之間的都屬于注釋部分。注:注釋在程序運行時,不執(zhí)行,第二種注釋需要注意,在二級C考試中出現(xiàn)過。十一、字符數(shù)據(jù)1、字符常量分類(1)一般字符常量用一對單引號括起來的單個字符,如'A'、'b'、'5'。(2)轉(zhuǎn)義字符常量在一對單引號內(nèi),以“\”開頭,后跟一個字符,或1~3位八進制數(shù)。另外也可以是1~2位的十六進制數(shù),但必須以“\x”開頭(在這里,一定注意x不能是大寫的X)。常用的轉(zhuǎn)義字符:注:在二級C考試中,轉(zhuǎn)義字符是必考的。更要注意“\”后跟的1~3位八進制數(shù)不能以數(shù)字0開頭。例:語句printf("a\bre\'hi\'y\\\bou\n");的輸出結(jié)果是【】例:設(shè)有說明語句:chara=’\72’;則變量aA)包含1個字符B)包含2個字符C)包含3個字符D)說明不合法2、字符變量定義字符變量的格式為:char變量名;注:字符型數(shù)據(jù)在內(nèi)存中占1個字節(jié)。3、字符型數(shù)據(jù)參與運算采用其ASCII碼進行運算。注:字符型數(shù)據(jù)可以按“%d”和“%c”輸出,注意這兩者區(qū)別。十二、位運算1、位運算符(~、<<、>>、&、^、|)2、位運算注意事項(1)對象只能是整數(shù)或字符型數(shù)據(jù)。(2)進行位運算前,一定要先將數(shù)據(jù)轉(zhuǎn)換成二進制數(shù)。(3)各個位運算符的優(yōu)先級注:字符型數(shù)據(jù)參與位運算時,采用其ASCII碼進行運算。3、位運算的規(guī)則(1)~:0變1,1變0。(2)<<:a<<i表示a向左移動i位,右補0。(3)>>:a>>i表示a向右移動i位,左補符號位。(4)&:a&ba、b對應的二進制位,同時為1,則結(jié)果即為1,否則為0。(5)|:a|ba、b對應的二進制位,只要有一個為1,則結(jié)果即為1,否則為0。(6)^:a^ba、b對應的二進制位,相同為0,不同為1。注:在沒有舍去數(shù)據(jù)的時候,<<左移一位表示乘以2;>>右移一位表示除以2。兩個相同的數(shù)進行按位異或(^),結(jié)果為0。例:設(shè)intb=2;表達式(b>>2)/(b>>1)的值是【】例:main(){unsignedchara,b,c;a=0x3;b=a|0x8;c=b<<1;printf("%d%d\n",b,C);}例:設(shè)char型變量x中的值為10100111,則表達式(2+x)∧(~3)的值是A)10101001B)10101000C)11111101D)01010101例:main(){unsignedchara,b;a=4|3;b=4&3;printf("%d%d\n",a,b);}第二章數(shù)據(jù)輸出與輸入一、數(shù)據(jù)輸出函數(shù)printf1、printf函數(shù)的一般格式:printf(格式輸出控制,輸出列表)(1)格式輸出控制:需用一對雙引號括起來,雙引號內(nèi)包含“格式說明”和“普通字符”兩部分。(2)輸出列表:需要輸出的數(shù)據(jù),多個數(shù)據(jù)之間用逗號隔開。2、格式說明“格式說明”由“%”和格式字符組成,如%d,%c,它的作用是把輸出數(shù)據(jù)轉(zhuǎn)換為指定格式輸出。注:在printf函數(shù)中,若格式說明的個數(shù)少于輸出項的個數(shù),多余的輸出項則忽略不輸出。例:有以下程序main(){inta=666,b=888;printf("%d\n",a,b);}程序運行后的輸出結(jié)果是A)錯誤信息B)666C)888D)666,888例:以下程序段的輸出結(jié)果是inta=1234;printf("%2d\n",a);A)12B)34C)1234D)提示出錯、無結(jié)果3、普通字符普通字符會原樣輸出,轉(zhuǎn)義字符需要輸出對應的字符。注:printf函數(shù)輸出數(shù)據(jù)時,學生做題很容易忽略普通字符的輸出。在二級C考試中,這類題目常出現(xiàn),可以通過以下例子進行講解。main(){inta,b;a=10;b=15;printf("a+b=%d",a+b);}4、數(shù)據(jù)輸出實例(已知inta=66;floatb=123.56;)通過以下各輸出語句,講解輸出函數(shù)的各種格式。(1)printf("%d",a); 66(2)printf("%3d",a); □66(3)printf("%-3d",a); 66□(4)printf("%f",b); 123.560000(5)printf("%7.2f",b); □123.56(6)printf("%-7.2f",b); 123.56□(6)printf("%c",a); B(7)printf("%x",a); 425、putchar函數(shù) 格式為:putchar(c) 功能:輸出單個字符。這里的c只能是字符型變量或字符型常量,即putchar函數(shù)只能輸出字符型數(shù)據(jù)。二、數(shù)據(jù)輸入函數(shù)scanf1、scanf函數(shù)的一般格式:scanf(格式輸入控制,輸入數(shù)據(jù)列表)格式輸入控制與printf函數(shù)的格式輸出控制相同。輸入數(shù)據(jù)列表必須是一個或者是多個合法的地址。2、scanf函數(shù)的注意事項(1)輸入數(shù)值型數(shù)據(jù)時,各數(shù)值間的分隔符可以是:空格、Tab、回車。(2)輸入字符型數(shù)據(jù)時,空格、Tab、回車都會被認為是字符,而不是分隔符。(3)“格式輸入控制”中的普通字符,在輸入數(shù)據(jù)時一定要原樣輸入。(4)跳過輸入數(shù)據(jù),在%和格式字符之間加一個“*”。注:以上注意事項,在二級C考試題目中經(jīng)常出現(xiàn),可以通過以下數(shù)據(jù)輸入實例,進行講解。3、數(shù)據(jù)輸入實例(已知charc1,c2;intc,d,e;)(1)scanf("%d%d%d",&c,&d,&e);輸入:5<空格>6<空格>7<回車>輸入:5<Tab>6<Tab>7<回車>輸入:5<回車>6<回車>7<回車> //以上三種輸入方式,c、d、e的值分別都為5、6、7。(2)scanf(“%d,%d,%d”,&c,&d,&e);輸入:5,6,7<回車>若輸入第一個數(shù)據(jù)后,使用了任意一種分隔符,則只確定輸入了c的值為5,d和e為本身的初始值,若沒有初始值,則為不定值。注:在C語言中,沒有指定值的任何類型的變量,在輸出時為不定值。(3)scanf(“%d%*d%d%d”,&c,&d,&e);輸入:2<空格>3<空格>4<空格>5<回車> //c、d、e的值分別為2、4、5(4)scanf("%c%*c%*c%c",&c1,&c2);輸入:a<空格>b4<回車>//c1、c2的值分別為a、4(5)scanf("%2d%d%d",&c,&d,&e);輸入:123<空格>456<回車>//c、d、e的值分別為12、3、456(6)scanf("%d",&c,&d,&e);輸入:1<空格>2<空格>3<回車> //c的值為1、d、e為不定值4、getchar函數(shù)格式為:getchar()該函數(shù)稱為輸入字符型數(shù)據(jù)的函數(shù),只能用來接收一個字符型數(shù)據(jù)。注:在輸入字符型數(shù)據(jù)時,空格、Tab、回車都屬于字符。在二級C考試中經(jīng)常出現(xiàn)該類題目,可以參考以下例子,進行講解。main(){charc1,c2,c3,c4;c1=getchar();c2=getchar();c3=getchar();c4=getchar();printf("%c%c%c%c",c1,c2,c3,c4);}運行程序時,輸入:a<空格>b<空格>5<回車>第三章選擇結(jié)構(gòu)一、關(guān)系運算與邏輯運算1、關(guān)系運算符>、>=、<、<=、==、!=。2、關(guān)系運算符的優(yōu)先級別(>、>=、<、<=)>(==、!=)3、關(guān)系表達式關(guān)系表達式的運算結(jié)果有兩個:0和1,0代表“假”,1代表“真”。例:以下程序輸出的結(jié)果是【】。main(){inta=5,b=4,c=3,d;d=(a>b>c);printf("%d\n",d);}4、邏輯運算符&&、||、!5、邏輯運算符的優(yōu)先級別!>&&>||6、邏輯表達式邏輯表達式的運算結(jié)果有兩個:0和1,0代表“假”,非0代表“真”。注:“&&”和“||”存在“短路”現(xiàn)象。&&運算符左邊的表達式的值為“假”,則不再計算&&運算符右邊的表達式的值;||運算符左邊的表達式的值為“真”,也不再計算||右邊的表達式的值。在二級C考試中,經(jīng)常考計算關(guān)系和邏輯表達式的值。在計算的過程中,要注意運算優(yōu)先級:!>算術(shù)運算>關(guān)系運算>&&>||>賦值運算。例:有以下程序main(){inta=1,b=2,m=0,n=0,k;k=(n=b>a)||(m=a);printf("%d,%d\n",k,m);}例:設(shè)a、b、C、d、m、n均為int型變量,且a=5、b=6、c=7、d=8、m=2、n=2,則邏輯表達式(m=a>b)&&(n=c>d)運算后,n的值位為【】二、if語句1、簡單的if語句格式為:if(表達式) 語句注:在二級C考試中,經(jīng)常考查簡單的if語句。當表達式成立時,默認只有一條執(zhí)行語句,可以通過以下例子進行講解。main(){inta=10,b=50,c=30;if(a>b)a=b,b=c;c=a;printf("%d,%d,%d\n",a,b,c);}2、if?else語句格式為:if(表達式)語句1else語句23、多分支if?else?if格式為:if(表達式1)語句1elseif(表達式2)語句2elseif(表達式3)語句3?else語句n例:main(){floatx=2.0,y;if(x<0.0)y=0.0;elseif(x<10.0)y=1.0/x;elsey=1.0;printf(“%f\n”,y);}注:if語句中表達式可以是任意合法的表達式(在二級C考試中,經(jīng)常用賦值語句作為if語句的表達式)。語句如果是復合語句必須用“{}”將語句括起來,否則會出錯,可以參考以下例子進行講解。main(){inta=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3;printf("%d,%d,%d,%d\n",a,b,c,d);}4、嵌套if結(jié)構(gòu)中的else和if的配對原則else總是和離它最近的且不帶else的if配對,可以參考以下例子進行講解。#include<stdio.h>main(){intx=1,y=2,z=3;if(x>y)if(y<z)printf("%d",++z);elseprintf("%d,",++y);printf("%d\n",x++);}例:有如下程序main(){inta=2,b=-1,c=2;if(a<0)if(b<0)c=0;elsec++;printf(“%d\n”,c);}該程序的輸出結(jié)果是A)0B)1C)2D)3例:若執(zhí)行以下程序時從鍵盤上輸入9,則輸出結(jié)果是A)11B)10C)9D)8main(){intn;scanf(“%d”,&n);if(n++<10)printf(“%d\n”,n);elseprintf(“%d\n”,n--);}例:閱讀以下程序:main(){intx;scanf(“%d”,&x);if(x--<5)printf(“%d”,x);elseprintf(“%d”,x++);}程序運行后,如果從鍵盤上輸人5,則輸出結(jié)果是A)3B)4C)5D)6例:以下程序運行后的輸出結(jié)果是【】。main(){intx=10,y=20,t=0;if(x==y)t=x;x=y;y=t;printf("%d,%d\n",x,y);}例:main(){intp,a=5;if(p=a!=0)printf("%d\n",p);elseprintf("%d\n",p+2);}執(zhí)行后輸出結(jié)果是【】。三、條件表達式、switch語句、goto語句1、條件表達式基本格式為:表達式1?表達式2:表達式3可以通過以下例子進行講解,便于學生對條件表達式的分析和理解。main(){intx,a=2,b=5;x=(a<b)?a:b;printf("%d\n",x);}2、switch語句基本格式為: switch(表達式) { case 常量表達式1:語句1; break;case 常量表達式2:語句2; break;? case 常量表達式n:語句n; break;default: 語句n+1;break;}switch語句注意事項:(1)switch、case、break、default都是關(guān)鍵字。(2)default語句至多有一個,但位置可以放在任何case之前。(3)表達式的值只能是整型或字符型。注:switch語句中,注意在case的語句塊后加break語句和不加break語句的區(qū)別,在二級C考試中,經(jīng)常考查該類題。另外,考查default語句的執(zhí)行(只有所有case后的常量表達式都不成立時,才執(zhí)行default后的語句)。例:有如下程序main(){intx=1,a=0,b=0;switch(x){case0:b++;case1:a++;case2:a++;b++;}printf(“a=%d,b=%d\n”,a,b);}該程序的輸出結(jié)果是A)a=2,b=1B)a=1,b=1C)a=1,b=0D)a=2,b=2例:若a、b、c1、c2、x、y、均是整型變量,正確的switch語句是A)swich(a+b);B)switch(a*a+b*b){case1:y=a+b;break;{case3:case0:y=a-b;break;case1:y=a+b;break;}case3:y=b-a,break;}C)switchaD)switch(a-b){casec1:y=a-b;break{default:y=a*b;breakcasec2:x=a*d;breakcase3:case4:x=a+b;breakdefault:x=a+b;case10:case11:y=a-b;break;}}例:以下程序的輸出結(jié)果是main(){inta=0,i;for(i=1;i<5;i++){switch(i){case0:case3:a+=2;case1:case2:a+=3;default:a+=5;}}printf("%d\n",a);}A)31B)13C)10D)20例:有以下程序main(){inta=15,b=21,m=0;switch(a%3){case0:m++;break;case1:m++;switch(b%2){default:m++;case0:m++;break;}}printf("%d\n",m);}程序運行后的輸出結(jié)果是______。A)1B)2C)3D)43、goto語句無條件轉(zhuǎn)向goto語句,格式為:goto語句標號;第四章循環(huán)結(jié)構(gòu)一、while語句while語句的一般形式為:while(表達式){循環(huán)體語句}while循環(huán)結(jié)構(gòu)的執(zhí)行過程:先計算表達式(循環(huán)條件)的值,若結(jié)果為“真”(非0),執(zhí)行循環(huán)體語句;然后再次計算表達式的值,重復上述過程,直到表達式的值為“假”(0)時,結(jié)束循環(huán),流程控制轉(zhuǎn)到循環(huán)結(jié)構(gòu)的下一條語句。while循環(huán)結(jié)構(gòu)的注意事項:(1)while循環(huán)結(jié)構(gòu)的特點是“先判斷,后執(zhí)行”。如果表達式的值一開始就為“假”,則循環(huán)體一次也不執(zhí)行。(2)循環(huán)體內(nèi)中,如果包含兩個或兩個以上的語句,必須用花括號括起來,以復合語句的形式出現(xiàn)。(3)循環(huán)體內(nèi)一定要有改變循環(huán)條件的語句,使循環(huán)趨向于結(jié)束,以免形成“死循環(huán)”。例:有如下程序main(){intn=9;while(n>6){n--;printf(“%d”,n);}}該程序段的輸出結(jié)果是A)987B)876C)8765D)9876二、do…while語句do?while語句的形式為:do{循環(huán)體語句}while(表達式);do?while循環(huán)結(jié)構(gòu)的執(zhí)行過程:先執(zhí)行一次循環(huán)體語句,然后計算表達式(循環(huán)條件)的值。若結(jié)果為“真”(非0),則再次執(zhí)行循環(huán)體,再計算表達式的值,如此重復下去,直到表達式的值為“假”(0)時,循環(huán)結(jié)束,流程控制轉(zhuǎn)到循環(huán)結(jié)構(gòu)的下一條語句。do?while循環(huán)結(jié)構(gòu)的注意事項:(1)循環(huán)體包含兩個或兩個以上的語句時,必須用花括號括起來,以復合語句形式出現(xiàn)。(2)循環(huán)體內(nèi)一定要有改變循環(huán)條件的語句,使循環(huán)趨向于結(jié)束,以免形成“死循環(huán)”。例:程序運行后的輸出結(jié)果是【】。main(){inti=10,j=0;do{j=j+i;i--;}while(i>2);printf(“%d\n”,j);}例:有以下程序main(){ints=0,a=1,n;scanf("%d",&n);do{s+=1;a=a-2;}while(a!=n);printf("%d\n",s);}若要使程序的輸出值為2,則應該從鍵盤給n輸入的值是A)-1B)-3C)-5D)0三、for語句for語句的形式為:for(表達式1;表達式2;表達式3){循環(huán)體語句}for循環(huán)結(jié)構(gòu)的執(zhí)行過程:先執(zhí)行表達式1,賦初值;再執(zhí)行表達式2,計算表達式2的值,結(jié)果為“真”(非0),執(zhí)行循環(huán)體語句;循環(huán)體語句執(zhí)行完畢,返回表達式3,讓循環(huán)變量發(fā)生變化,再判斷表達式2的值。如此循環(huán)重復下去,直到表達式2的值為“假”(0)時,循環(huán)結(jié)束,流程控制轉(zhuǎn)到循環(huán)結(jié)構(gòu)的下一條語句。for循環(huán)結(jié)構(gòu)的注意事項:(1)關(guān)鍵字for的三個表達式允許部分或全部省略,但其中的兩個分號(;;)不能省略。(2)當省略表達式3時,應該在循環(huán)體有修改循環(huán)變量的值的語句,以保證循環(huán)能夠正常結(jié)束。(3)當表達式2或三個表達式全部省略時,應該在循環(huán)體內(nèi)設(shè)置相應的語句來結(jié)束循環(huán),否則程序始終認為判斷條件成立,循環(huán)將無終止地執(zhí)行下去,即形成死循環(huán)。(4)循環(huán)體包含兩個或兩個以上的語句時,必須用花括號括起來,以復合語句形式出現(xiàn)。例:有以下程序main(){intt=1,i=5;for(;i>=0;i--)t*=i;printf("%d\n",t);}執(zhí)行后輸出結(jié)果是【】。四、循環(huán)結(jié)構(gòu)的嵌套任意一種循環(huán)結(jié)構(gòu)中又套有循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。循環(huán)結(jié)構(gòu)的嵌套是一個難點,建議通過以下求階乘的和(s=1!+2!+3!+?n!,n由鍵盤輸入),main(){inti,j,n;longsum,p;/*定義變量sum、p為長整型變量*/scanf("%d",&n);for(sum=0,i=1;i<=n;i++){p=1;j=1;do{p=p*j; /*求i的階乘*/}while(++j<=i);sum+=p; /*把i的階乘累加到sum中*/printf("\nsum=%ld\n",sum);}例:執(zhí)行以下程序后,輸出'#'號的個數(shù)是【6】。main(){inti,j;for(i=1;i<5;i++)for(j=2;j<=i;j++)putchar('#');}五、break語句和continue語句1、break語句break語句的一般形式:break;該語句的功能是:使執(zhí)行從包含它的最內(nèi)層循環(huán)或switch語句中跳出,轉(zhuǎn)到switch結(jié)構(gòu)或該循環(huán)結(jié)構(gòu)外的下一條語句執(zhí)行。這將導致包含它的最內(nèi)層循環(huán)(while、for、do?while)或switch語句的終止。使用break語句的注意事項:(1)break語句只能用于switch結(jié)構(gòu)或循環(huán)結(jié)構(gòu)中。在循環(huán)結(jié)構(gòu)中應用時,通常與if語句配合使用。(2)在嵌套的循環(huán)結(jié)構(gòu)中使用時,break語句只能跳出(或終止)包含它的最內(nèi)層循環(huán)。而不能同時跳出(或終止)多層循環(huán)。以下程序涉及在嵌套結(jié)構(gòu)中,使用了break語句,建議重點講解。#include<stdio.h>main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;printf("a=%d,b=%d\n",a,b); /*輸出結(jié)果為:a=2,b=1*/2、continue語句continue語句的一般形式:continue;該語句的功能是:結(jié)束本次循環(huán),使得包含它的循環(huán)(while、do?while、for)開始下一次循環(huán)。使用continue語句的注意事項:(1)continue語句只能用于循環(huán)結(jié)構(gòu)中,通常也要有if語句配合使用。(2)continue語句只能結(jié)束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行。(3)在循環(huán)結(jié)構(gòu)中,一旦continue語句執(zhí)行,即使該語句后有其他語句也不再執(zhí)行,而是跳轉(zhuǎn)到循環(huán)條件,再次判斷條件是否成立。例:main(){inti,n=0;for(i=2;i<5;i++){do{if(i%3)continue;n++;}while(!i);n++;}printf("n=%d\n",n);}程序執(zhí)行后的輸出結(jié)果是()A)n=5B)n=2C)n=3D)n=4例:有以下程序main(){intk=4,n=0;for(;n<k;){n++;if(n%3!=0)continue;k--;}printf("%d,%d\n",k,n);}程序運行后的輸出結(jié)果是A)1,1B)2,2C)3,3D)4,4例:以下程序的輸出結(jié)果是main(){inta,b;for(a=1,b=1;a<=100;a++){if(b>=10)break;if(b%3==1){b+=3;continue;}}printf(“%d\n”,a);}A)101B)6C)5D)4第五章函數(shù)一、函數(shù)的定義1、函數(shù)定義功能單一且獨立的程序模塊,用于完成特定的任務并根據(jù)需要返回一個確定的值。2、函數(shù)定義的格式返回值類型函數(shù)名(類型1形參名1[,類型2形參名2]?){說明部分語句部分}3、注意事項(1)函數(shù)返回值類型名缺省時,返回值類型默認為int,無返回值時類型是void。(2)函數(shù)名和形參名是用戶標識符,后面的括號“()”不能省。(3)一對花括號中的內(nèi)容為函數(shù)體,包含兩部分:說明部分和語句部分。(4)函數(shù)不能嵌套定義。二、函數(shù)返回值1、return語句基本格式為:return(表達式);2、使用return語句的注意事項(1)表達式可以不加括號。(2)表達式的類型應和函數(shù)定義返回值的類型一致。(3)如果有多個return語句,則只有第一個起作用,因為一旦遇到return語句就會結(jié)束當前函數(shù)的運行。intmax(inta,intb){intc;if(a>b)c=a;elsec=b;returnc;}三、庫函數(shù)1、include命令行一般格式為:#include<頭文件名.h>或#include"頭文件名.h"2、注意事項(1)include命令行必須以“#”符號開頭。(2)系統(tǒng)提供了的頭文件以.h作為文件的后綴。(3)include命令行是C語言的預處理命令,所以不用在語句的結(jié)尾加“;”。例如,在程序中要引用數(shù)學函數(shù),則在程序開頭要加上:#include"math.h"。3、庫函數(shù)的調(diào)用形式函數(shù)名(實參);庫函數(shù)的調(diào)用可以以兩種形式出現(xiàn):(1)在表達式中調(diào)用,如y=cos(x);。(2)作為獨立的語句完成某種操作,如:printf("Iamateacher");.此處可引入下面的例子來講解庫函數(shù)的應用。例如,若有代數(shù)式(其中e僅代表自然對數(shù)的底數(shù),不是變量),則表示該代數(shù)式的C語言表達式是:sqrt(fabs(pow(n,x)+exp(x)))。解析:在C語言中,計算平方根應使用sqrt()函數(shù),計算n的x次方應使用pow()函數(shù)(第1個參數(shù)是n,第2個參數(shù)是x);計算自然數(shù)e的x次方應使用exp()函數(shù),計算絕對值使用fabs()函數(shù)。本題的代數(shù)式首先應計算nx和ex,根據(jù)前面介紹應該分別為pow(n,x)和exp(x),然后計算它們的和pow(n,x)+exp(x),接著是這個和的絕對值fabs(pow(n,x)+exp(x)),最后對這個絕對值開平方,所以最終結(jié)果應是sqrt(fabs(pow(n,x)+exp(x)))。四、函數(shù)調(diào)用1、函數(shù)調(diào)用的形式函數(shù)名(實參);2、函數(shù)調(diào)用注意事項(1)不寫返回值類型和實參類型。(2)實參可以是常量、變量、表達式、函數(shù)調(diào)用。(3)參數(shù)傳遞方向:實參→形參(單向)。(4)若函數(shù)返回值類型是void,則函數(shù)調(diào)用不能出現(xiàn)在表達式中,不能賦值給變量。注:函數(shù)調(diào)用以及參數(shù)的傳遞,初學者很難理解,所以多舉一些例子詳細講解函數(shù)調(diào)用和參數(shù)傳遞的過程。在此可以參考教材P78、例1、例2和P79、例3來詳細講解函數(shù)的調(diào)用。voidswap(intx,inty){intt;t=x;x=y;y=t;printf("%d%d",x,y);}main(){inta=3,b=4;swap(a,b);printf("%d%d",a,b);}五、函數(shù)的聲明1、函數(shù)聲明的形式返回值類型函數(shù)名(類型1形參名1,類型2形參名2,?);即在函數(shù)的首部加上分號。2、函數(shù)聲明的注意事項(1)可省略形參名,不可省略形參的類型。(2)聲明的位置:在函數(shù)的內(nèi)部,該函數(shù)屬于私有函數(shù);如果在所有函數(shù)的外部,則屬于公有函數(shù)。(3)聲明時的參數(shù)名可與定義時的形參名相同,也可不同。3、函數(shù)的兩種使用方式(1)先定義,后調(diào)用。(2)先聲明,后調(diào)用,最后定義。例:若程序中定義了以下函數(shù)doublemyadd(doublea,doubleb){return(a+b);}并將其放在調(diào)用語句之后,則在調(diào)用之前應該對該函數(shù)進行說明,以下選項中錯誤的說明是()A)doublemyadd(doublea,b);B)doublemyadd(double,double);C)doublemyadd(doubleb,doublea);D)doublemyadd(doublex,doubley);例:下列程序的運行結(jié)果是A)63B)36C)編譯出錯D)00voidfun(int*a,int*b){int*k;k=a;a=b;b=k;}main(){inta=3,b=6,*x=&a,*y=&b;fun(x,y);printf(“%d%d”,a,b);}例:下列程序的輸出結(jié)果是【】。voidfun(int*n){while((*n)--);printf(“%d”,++(*n));}main(){inta=100;fun(&a);}例:下程序的輸出結(jié)果是【】。main(){intx=0;sub(&x,8,1);printf("%d\n",x);}sub(int*a,intn,intk){if(k<=n)sub(a,n/2,2*k);*a+=k;}例:如下程序intrunc(inta,intb){return(a+b);}main(){intx=2,y=5,z=8,r;r=func(func(x,y),z);printf(“%\d\n”,r);}該程序的輸出的結(jié)果是A)12B)13C)14D)15例:以下程序floatfun(intx,inty){return(x+y);}main(){inta=2,b=5,c=8;printf("%3.0f\n",fun((int)fun(a+c,b),a-c));}程序運行后的輸出結(jié)果是______。例:有以下程序charfun(charx,chary){if(x<y)returnx;returny;}main(){inta='9',b='8',c='7';printf("%c\n",fun(fun(a,b),fun(b,c)));}程序的執(zhí)行結(jié)果是()A)函數(shù)調(diào)用出錯B)8C)9D)7第六章指針一、指針的定義1、變量p存放變量a的地址,即變量p指向變量a,p是一種特殊類型的變量,稱為指針變量。2、指針變量的定義形式(1)一級指針變量的定義:類型名*指針變量名1;(2)二級指針變量的定義:類型名**指針變量名1;二級指針變量即指向指針的指針變量。二、指針變量賦值1、通過“&”運算符給指針變量賦初值inta,*p;p=&a;注釋:單目運算符“&”只能和變量結(jié)合,求變量的地址,不能放在表達式的前面。2、給指針變量賦空值int*p;p=NULL;注釋:不能通過一個空指針訪問一個存儲單元。3、通過其他指針變量獲得地址值int*p,*q,a;p=&a;q=p;這樣p和q則指向同一個變量。三、間接訪問運算符(引用存儲單元)1、間接訪問運算符:*2、含義:*p表示訪問p所指向變量的值。(p為指針變量)3、間接訪問運算符和定義時指針變量中“*”的區(qū)別inta,*p;a=3;p=&a;priintf("%d",*p);注:要講解清楚,第一行中的*p和第三行中的*p的區(qū)別。四、指針的移動和比較1、指針的移動移動指針就是通過賦值運算,使指針變量加上或減去一個整數(shù),使指針變量指向相鄰的存儲單元。指針每移動一次則移動一個存儲單元。2、指針比較p>q:p所指單元在q之后;p<q:p所指單元在q之前。此處可結(jié)合教材P90的圖例,再引入如下的圖例來講解。a[0]a[1]a[2]a[3]a[4]1122334455p↑q↑上圖中,指針p指向存儲單元a[0],指針q指向存儲單元a[2],這時運算表達式q-p值為2,如果執(zhí)行p++;則指針p向后移動一個存儲單元指向存儲單元a[1],q=q+2;則將指針q向后移動2個存儲單元指向存儲單元a[4]。如下圖:a[0]a[1]a[2]a[3]a[4]1122334455p↑q↑五、函數(shù)之間地址值的傳遞1、傳值調(diào)用與傳址調(diào)用函數(shù)調(diào)用過程中的參數(shù)傳遞:(1)傳值:前面學習的普通變量作實參的函數(shù)調(diào)用便是傳值調(diào)用。形參改變時實參不變。(2)傳址:當函數(shù)的形參為指針變量時,則調(diào)用該函數(shù)時,對應的實參也必須是與形參基類型相同的地址值或指針變量,這種函數(shù)調(diào)用即傳址調(diào)用。形參變化時,實參也會改變。可引用以下兩個程序進行對比,講解傳值調(diào)用和傳址調(diào)用時,形參和實參的變化。傳值調(diào)用:voidswap(intx,inty){intt;t=x;x=y;y=t;printf("%d%d",x,y);}main(){inta=3,b=4;swap(a,b);printf("%d%d",a,b);}傳址調(diào)用:voidswap(int*a,int*b){intt;t=*a;*a=*b;*b=t;}main(){inta=3,b=4;printf("(1)a=%db=%d\n",a,b);swap(&a,&b);printf("(2)a=%d b=%d\n",a,b);}注:以下是在二級C考試中,一個比較容易出錯的題,作為重點進行講解。#include<stdio.h>voidfun(int*a,int*b){int*c;c=a;a=b;b=c;}main(){intx=3,y=5,*p=&x,*q=&y;fun(p,q);printf("%d,%d",*p,*q);fun(&x,&y);printf("%d,%d\n",*p,*q);}程序的結(jié)果是:3,5,3,52、函數(shù)返回地址值函數(shù)返回值的類型也可以為指針類型。第七章數(shù)組一、一維數(shù)組1、數(shù)組的概念數(shù)組是一組具有相同類型的數(shù)據(jù)的集合。2、一維數(shù)組的定義類型名數(shù)組名[整型常量表達式]例如:inta[5];通過上面語句定義數(shù)組后,便會為數(shù)組a開辟連續(xù)的5個存儲單元,每個存儲單元存放一個整型數(shù)據(jù)。注意事項:常量表達式用來表示數(shù)組的長度,不能為變量。3、一維數(shù)組元素的引用數(shù)組名[下標表達式]例如:通過inta[5]定義一個數(shù)組后,a[0]、a[1]、a[2]、a[3]和a[4]便是數(shù)組中的5個元素。注意事項:(1)數(shù)組元素的下標,必須是從0開始,到數(shù)組的最大長度減1。(2)數(shù)組名代表數(shù)組的首地址,是一個地址常量,不能整體引用數(shù)組里的所有元素。(3)數(shù)組中的元素就是一個變量,所有適合該類型變量的操作同樣適用于數(shù)組。4、一維數(shù)組的初始化數(shù)組的初始化,就是在定義數(shù)組之后對數(shù)組元素賦初值。有以下幾種方式:(1)inta[5]={1,2,3,4,5};(2)inta[5]={1,2};(3)inta[]={1,2,3,4,5};(4)inta[5];a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;例:以下程序的輸出結(jié)果是main(){inti,a[10];for(i=9;i>=0;i--)a[i]=10-i;printf(“%d%d%d”,a[2],a[5],a[8]);}A)258B)741C)852D)369例:以下程序中函數(shù)sort的功能是對a所指數(shù)組中的數(shù)據(jù)進行由大到小的排序voidsort(inta[],intn){inti,j,t;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}}main(){intaa[10]={1,2,3,4,5,6,7,8,9,10},i;sort(&aa[3],5);for(i=0;i<10;i++)printf("%d,",aa[i]);printf("\n");}程序運行后的輸出結(jié)果是______。A)1,2,3,4,5,6,7,8,9,10,B)10,9,8,7,6,5,4,3,2,1,C)1,2,3,8,7,6,5,4,9,10,D)1,2,10,9,8,7,6,5,4,3,例:以下程序中的函數(shù)reverse的功能是將a所指數(shù)組中的內(nèi)容進行逆置。voidreverse(inta[],intn){inti,t;for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}}main(){intb[10]={1,2,3,4,5,6,7,8,9,10};inti,s=0;reverse(b,8);for(i=6;i<10;i++)s+=b[i];printf("%d\n",s);}程序運行后的輸出結(jié)果是______。A)22B)10C)34D)30二、二維數(shù)組1、二維數(shù)組的定義類型名 數(shù)組名[常量表達式1][常量表達式2]例如:inta[2][3];通過上面的語句便定義了一個2行3列的數(shù)組,數(shù)組中元素的個數(shù)為:上標×下標=2×3=6。即為數(shù)組a開辟了6個連續(xù)的存儲單元,每個存儲單元可存放一個整型數(shù)。注意事項:(1)行下標和列下標都必須是常量表達式,不能為變量。(2)二維數(shù)組可看作是一個特殊的一維數(shù)組,這個一維數(shù)組中的每個元素又是一個一維數(shù)組。可參考以下圖例進行講解。a[0]→a[0][0]a[0][1]a[0][2]a[1]→a[1][0]a[1][1]a[1][2]2、二維數(shù)組的引用數(shù)組名[行下標][列下標];例如,上面定義的數(shù)組a,則a[0][0]、a[0][1]、a[0][2]、a[1][0]、a[1][1]、a[1][2]便是數(shù)組中6個元素。注意事項:(1)數(shù)組中的行下標和列下標都是從0開始,到下標的上界減1。(2)列下標變化比行下標快。(3)數(shù)組名代表數(shù)組的首地址,是一個地址常量,不能整體引用數(shù)組里的所有元素。3、二維數(shù)組的初始化二維數(shù)組的初始化有如下幾種方法:(1)inta[2][3]={{1,2,3},{4,5,6}};(2)inta[2][3]={{1,2},{3}};(3)inta[2][3]={{1,2}};(4)inta[2][3]={1,2,3,4,5,6};(5)inta[][3]={1,2,3,4,5,6};注意事項:(1)在初始化過程中,不允許缺省常量表達式2(列數(shù)),在單純定義數(shù)組不賦初值時,常量表達式1(行數(shù))和常量表達式2(列數(shù))都不能省略。(2)一般情況下,每一行初值放在一對內(nèi)花括號中,但每一行所賦的個數(shù)不能多于該行的元素數(shù)。三、數(shù)組的實際應用在數(shù)組的實際應用中,常常用循環(huán)來控制數(shù)組中的元素。用單層循環(huán)控制一維數(shù)組,用嵌套的雙層循環(huán)控制二維數(shù)組。由于二維數(shù)組中,列下標的變化快,行下標的變化慢,所以用嵌套循環(huán)的內(nèi)層循環(huán)變量控制列下標,用外層循環(huán)變量控制行下標。要注意數(shù)組的下標是從0開始的。例:有如下程序main(){inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=1;i<3;i++)for(j=0;j<=i;j++)s+=a[i][j];printf("%d\n",s);}例:以下數(shù)組定義中不正確的是A)inta[2][3];B)intb[][3]={0,1,2,3};C)intc[100][100]={0};D)intd[3][]={{1,2},{1,2,3},{1,2,3,4}};例:有以下程序main(){intaa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};inti,s=0;for(i=0;i<4;i++)s+=aa[i][1];printf("%d\n",s);}例:以下能正確定義二維數(shù)組的是A)inta[][3];B)inta[][3]=2{2*3};C)inta[][3]={};D)inta[2][3]={{1},{2},{3,4}};第八章字符串一、字符串字符串是用雙引號("")括起來的一串字符。注意,C語言編譯系統(tǒng)會自動在字符串的結(jié)尾加上字符串結(jié)束標志'\0'。二、字符串的處理字符串的處理方式主要有以下幾種:1、一維數(shù)組存放字符串,但后面加'\0'。主要有以下幾種方式:(1)charstr[10]={'x','i','a','o','y','u','a','n','\0'};(2)charstr[10];str[0]='x';str[1]='i';str[2]='a';str[3]='o';str[4]='y';str[5]='u';str[6]='a';str[7]='n';str[8]='\0';(3)charstr[]={'x','i','a','o','y','u','a','n','\0'};(4)charstr[10]={"xiaoyuan"};(5)charstr[10]="xiaoyuan";注:charstr[10];str="xiaoyuan";是錯誤的。2、指針指向字符串的首地址例如:char*p="xiaoyuan";3、二維字符數(shù)組存放字符串數(shù)組例如:charname[4][20]={"I","am","a","teacher"};4、指針數(shù)組處理字符串數(shù)組例如:char*pname[4]={"I","am","a","teacher"};注:用字符數(shù)組和指針對字符串進行處理是比較靈活的,但有時容易混淆,造成非法使用。三、字符串的輸入輸出1、字符串的輸出(1)printf函數(shù):用%s格式控制符,輸出列表是字符串的首地址。(2)puts函數(shù):puts(字符串首地址);2、字符串輸入(1)scanf函數(shù):采用%s格式控制符,制表符、空格和回車不讀入。(2)gets函數(shù):gets(待輸入字符串的首地址),制表符、空格和回車讀入。注:此處要注意哪些函數(shù)讀入制表符、空格和回車,哪些不讀入。四、字符串處理函數(shù)1、strcpy(d,s);:將字符串s賦到字符串d的存儲空間中。2、strlen(s);:求字符串s的長度。3、strcat(d,s);:將字符串s賦值到字符串d的后面。4、strcmp(s1,s2);:比較s1和s2兩個字符串的大小。第九章文件一、基本概念1、文件文件名=主文件名+擴展名2、文件指針FILE*指針變量名;3、文件的基本操作(1)讀:從文件中輸入數(shù)據(jù)給程序中的變量;(2)寫:將變量中的數(shù)據(jù)輸出到文件中。二、文件的基本操作1、打開文件fopen(文件名,文件使用方式);注意事項:文件名和文件指針都是字符串;文件名中含有'\',要用'\\'代替;文件打開方式,要注意常用的和特殊的。例:文件打開與測試FILE*fp=fopen(“test.c”,“w”);if(fp==NULL){printf(“Fileopenerror!\n”);exit(0);}2、關(guān)閉文件fclose(文件指針);3、判斷文件結(jié)束feof(文件指針);功能:判斷文件是否結(jié)束返回值:文件結(jié)束,返回真(非0);文件未結(jié)束,返回0判斷二進制文件是否結(jié)束while(!feof(fp)){c=fgetc(fp);……..}4、設(shè)置文件的位置fseek(文件指針,位移量,移動起始點);功能:改變文件位置指針的位置起始點文件開始SEEK_SET0文件當前位置SEEK_CUR1文件末尾SEEK_END2例fseek(fp,100L,0);fseek(fp,50L,1);fseek(fp,-10L,2);5、獲得文件當前的位置ftell(文件指針);功能:返回位置指針當前位置(相對文件開頭的位移量)6、將文件指針定位在文件頭rewind(文件指針);功能:重置文件位置指針到文件開頭7、文件的讀操作:從文件中輸入數(shù)據(jù)給程序中的變量(1)變量=getc(文件指針);功能:從fp指向的文件中讀取一字節(jié)代碼(2)fscanf(文件指針,格式控制字符串,輸入項表);功能;按格式對文件進行讀操作fscanf(fp,“%d,%f”,&i,&t);//若文件中有3,4.5,則將3送入i,4.5送入t8、文件的寫操作:將變量中的數(shù)據(jù)輸出到文件中(1)putc(文件指針);功能:把一字節(jié)代碼ch寫入fp指向的文件中(2)fprintf(文件指針,格式控制字符串,輸出項表);9、讀寫字符串功能;按格式對文件進行寫操作fprintf(fp,“%d,%6.2f”,i,t);//將i和t按%d,%6.2f格式輸出到fp文件fgets(字符串首地址,長度,文件指針);功能:fgets從fp所指文件讀n-1個字符送入s指向的內(nèi)存區(qū),并在最后加一個‘\0’(若讀入n-1個字符前遇換行符或文件尾EOF即結(jié)束)fputs(字符串首地址,文件指針);功能:fputs把s指向的字符串寫入fp指向的文件10、讀寫二進制文件fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);功能:讀/寫數(shù)據(jù)塊返值:成功,返回讀/寫的塊數(shù);出錯或文件尾,返回0說明:typedefunsignedsize_t;buffer:指向要輸入/輸出數(shù)據(jù)塊的首地址的指針size:每個要讀/寫的數(shù)據(jù)塊的大?。ㄗ止?jié)數(shù))count:要讀/寫的數(shù)據(jù)塊的個數(shù)fp:要讀/寫的文件指針fread與fwrite一般用于二進制文件的輸入/輸出例:floatf[2];FILE*fp;fp=fopen(“in.dat","rb");fread(f,4,2,fp);等價:for(i=0;i<2;i++)fread(&f[i],4,1,fp);第十章對C語言的深入探討一、用戶自定義類型1、基本格式typedef類型名標識符2、用戶自定義類型需要注意的事項(1)用戶自定義類型并沒有產(chǎn)生新的類型。(2)新類型名一般用大寫。二、預編譯處理1、宏(1)不帶參數(shù)的宏的定義形式:#define宏名替換文本。(2)宏展開:用替換文本代替宏名的過程,參考教材P128,例2、例3進行講解。注:此處強調(diào)宏展開時加括號問題,注意講解計算方法。強調(diào)不能用計算結(jié)果展開,不能亂加括號。(3)宏的處理時間:在編譯之前。(5)#undef提前終止已經(jīng)定義的宏。(6)帶參數(shù)的宏的定義形式:#define宏名(形參表)表達式(7)帶參數(shù)的宏也要注意展開時的括號問題(8)宏和函數(shù)的調(diào)用區(qū)別:1.處理時間不同2.參數(shù)要求不同例:如下程序#defineN2#defineMN+1#defineNUM2*M+1#main(){inti;for(i=1;i<=NUM;i++)printf(“%d\n”,i);}該程序中的for循環(huán)執(zhí)行的次數(shù)是A)5B)6C)7D)8例:以下程序的輸出結(jié)果是[16]。#defineMAX(x,y)(x)>(y)?(x):(y)main(){inta=5,b=2,c=3,d=3,t;t=MAX(a+b,c+d)*10;printf(“%d\n”,t);}例:程序的輸出結(jié)果是A)16B)2C)9D)1#defineSQR(X)X*Xmain(){inta=16,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf(“d\n”,a);}2、文件包含(1)文件包含的形式:#include"文件名"或#include<文件名>(2)處理時間在編譯之前。(3)在同一個程序中可包含多個文件。三、標識符的作用域和存儲分類1、變量的分類(1)按存儲類別分為:自動類和靜態(tài)類。(2)按定義位置分為:局部變量和全局變量。2、局部變量(1)auto變量定義形式:autointa;或intautoa;,(2)register變量定義形式:registerinta;和auto變量的不同之處在于:auto在內(nèi)存中分配空間,而register在寄存器中分配空間。(3)static變量注:static變量是重點也是難點,注意涉及到這個知識點的程序分析。static變量的特點是:1.占據(jù)永久性存儲單元。2.未賦值的情況下,系統(tǒng)自動賦值為0。3.存儲單元保留上一次運行結(jié)果。例:以下程序的輸出的結(jié)果是intx=3;main(){inti;for(i=1;i<=2;i++)ncre();}ncre(){staicintx=1;x*=x+1;printf("%d",x);}A)33B)22C)26D)253、全局變量(1)在函數(shù)外部定義的變量,稱為全局變量,全局變量只能是靜態(tài)變量。(2)用extern說明全局變量在同一文件內(nèi)其作用域從extern說明處起,延伸到該文件末尾;在其他用到全局變量的文件中,可使用extern對這些變量進行說明。(3)用static說明全局變量:只限于在本文件使用,不能被其他文件引用。4、用extern說明函數(shù)(1)用extern說明的函數(shù)稱為外部函數(shù),可供其他文件的函數(shù)調(diào)用。(2)如果extern省略,則隱含為外部函數(shù)。5、用static說明函數(shù)用static說明的函數(shù)稱為內(nèi)部函數(shù),只能被本文件的函數(shù)調(diào)用。例:有以下程序inta=3;main(){ints=0;{inta=5;s+=a++;}s+=a++;printf("%d\n",s);}程序運行后的輸出結(jié)果是_______。A)8B)10C)7D)11例:以下程序:inta=2;intf(int*a){return(*a)++;}main(){ints=0;{inta=5;s+=f(&a);}s+=f(&a);printf("%d\n",s);}執(zhí)行后輸出結(jié)果是()A)10B)9C)7D)8四、動態(tài)存儲分配1、malloc函數(shù)(1)調(diào)用形式:malloc(size)(2)一次只能分配單個數(shù)據(jù)類型的存儲單元。(3)返回值類型為void*,若函數(shù)執(zhí)行失敗,返回空指針(NULL)。(4)重點強調(diào)malloc返回值的強制類型轉(zhuǎn)換。(5)使用sizeof運算符int*p;p=(int*)malloc(sizeof(int));注:以上是利用malloc函數(shù)使p指向一個整型的動態(tài)存儲單元,在二級C考試中,題目會要求p指向不同類型的動態(tài)存儲單元,注意該語句的書寫。2、calloc函數(shù)(1)調(diào)用形式:calloc(n,size)(2)一次可分配多個同一類型的連續(xù)的存儲單元。(3)返回值類型為void*,若函數(shù)執(zhí)行失敗,返回空指針(NULL)。(4)講解教材P139,例2。注意calloc返回值的強制類型轉(zhuǎn)換。3、free函數(shù)(1)調(diào)用形式:free(p)(2)p為指針變量,但必須指向由動態(tài)分配函數(shù)分配的地址。(3)該函數(shù)沒有返回值。注:動態(tài)存儲分配一般考查填空題,重點注意malloc函數(shù)返回值的強制類型轉(zhuǎn)換。五、main函數(shù)的參數(shù)與函數(shù)指針1、main函數(shù)的參數(shù)(1)參數(shù)的類型:intargc,char*argv[](2)參數(shù)argc和argv是常規(guī)的名稱,也可以換成其他名稱。(3)argc為整型,對應命令行中參數(shù)個數(shù),包括執(zhí)行文件名;argv為字符型的指針數(shù)組,每個數(shù)組元素是一指向字符數(shù)據(jù)的指針,對應命令行中各參數(shù)的名字。2、函數(shù)指針(1)函數(shù)指針存放的是函數(shù)的入口地址。(2)函數(shù)指針的定義格式:函數(shù)返回值類型(*指針名)(函數(shù)參數(shù)列表);(3)函數(shù)的3種調(diào)用格式(可以參考以下程序進行講解)intadd(inta,intb){returna+b;}main(){intk,(*f)(),a=5,b=10;f=add;?}3種正確的函數(shù)調(diào)用格式為:k=(*f)(a,b); k=add(a,b); k=*f(a,b);例:假定以下程序經(jīng)編譯和連接后生成可執(zhí)行文件PROG.EXE,如果在此可執(zhí)行文件所在目錄的DOS提示符下鍵入:PROGABCDEFGHIJKL<回車>,則輸出結(jié)果為A)ABCDEFGB)IJHLC)ABCDEFGHIJKLD)IJKLABCDEFGHmain(intargc,char*argv[])){while(--argc>0)printf(“%s”,argv[argc]);printf(“\n”);}例:有以下程序#include<string.h>main(intargc,char*argv[]){inti,len=0;for(i=1;i<argc;i++)len+=strlen(argv[i]);printf("%d\n",len);}程序編譯連接后生成的可執(zhí)行文件是ex1.exe,若運行時輸入帶參數(shù)的命令行是:ex1abcdefg10<回車>則運行的結(jié)果是______。A)22B)17C)12D)9例:有以下程序main(intargc,char*argv[]){intn,i=0;while(argv[1][i]!='\0'){n=fun();i++;}printf("%d\n",n*argc);}intfun(){staticints=0;s+=1;returns;}假設(shè)程序編譯、連接后生成可執(zhí)行文件exam.exe,若鍵入以下命令exam123〈回車〉則運行結(jié)果為A)6B)8C)3D)4六、函數(shù)的遞歸調(diào)用與對C語言的補充說明1、函數(shù)的遞歸調(diào)用調(diào)用函數(shù)的過程中直接或間接調(diào)用該函數(shù)本身。2、采用遞歸方法的約束條件(1)解決問題的方法相同,調(diào)用函數(shù)的參數(shù)每次不同(有規(guī)律的遞增或遞減),如果沒有規(guī)律也就不能適用遞歸調(diào)用。(2)可以應用這個轉(zhuǎn)化過程使問題得到解決。(3)必須有一個明確的結(jié)束遞歸的條件。3、遞歸分析時要注意:從那里出去執(zhí)行,結(jié)束回到那里4、C語言的總體說明(1)C

溫馨提示

  • 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

提交評論