




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C語言的基本構成和#include“stdio.h”{inta,b,sum;/*定義變量 /*把整數10賦值給變量a*/ /*把整數20賦值給變量b*/sum=a+b;/*把兩數之和賦值給變量sum*/printf(“a=%d,b=%d,sum=%d\n”,a,b,sum);/*輸出計算結果}(1).C程序由函數組成,一個程序必須且只能有一個主函數(main()),C程序總是從主函數開始執行,(2定義函數時函數名后必須有一對小括號,函數體必須放在一對花括號內,在函數體中,函數體有a,,m給它們賦值。例如:int是錯誤的,而it正確。“/”“*/(6).C語言程序書寫格式自由,語句可以從任一列開始書寫,一行內可以寫多個語句。但是慣,是程序便于閱讀。標識符只能由字母、數字和下劃線組成標識符的第一個字符必須是字母或下劃標識符的大小寫字母是有區別的,如abc和ABC是兩個完全不同的標識符(3)符的分類預定義標識符C語言中它也有特定的含義。預定義標識符可以用位“用戶表標識用戶標識符:由用戶根據需要定義的標識符被成為用戶標識符。用戶標示符用來給變量、函數、數組或者指針等命名。C型常數、字符常量、字符串常量。小數部分:基數乘取整,順二進制轉為八、十六進規則:三(四)合一,按序相拼(整數部分,從右向左取,小數部分從左向右取,位數不足補零,1字節=8字長:指CPU能同時處理的二進制位數CPU的型號而定。如:16位微機的字長就是16位或B:表示字節,字節是表示容量的最小單位。位(bit:是計算機中信息表示的最小單位(直接轉換為二進制即可如:50000000000000101二字節能存放的最大數是0111111111111111對帶符號數,最是符號位,用0表示正,用1表示負忽略負號,求出原碼將原碼按位取反(0、1互換如:取-5的補碼。000000000000010111111111111110101111111111111011將補碼轉換成相應的整數的步驟將補碼按位取反加1將步驟1得到的二進制數轉換成十進制數,然后加上負號即可。1000000000000000按位取反加01111111111111111000000000000000=轉換成十進制:1×215=加負號:-幾個特殊的帶符號整數--無符號整數:只有正整數,沒有負整數,最不表示符號位,每一位均參與轉換帶符號整無符號整--例2-12:若有:inta=-1;unsignedb=65535;則 -2-14:若有unsignedb=65536;b的值是:0 按照帶符號數轉為十進制1unsignedb=655536;而b屬于無符號整型,在內存中只占兩字節,所以只能包括16位類所占位所占字節類所占位所占字節2unsigned44unsigned444unsigned28標準C沒有具體要求規定各類型數據所占內存的字節數以這次考試標準viusalc++6.0為實型數據(浮點數3.31.實型常小數形式:由數字和小數點組成,必須有小數點,小數點的某一側可以沒有數字。如:.23,123.876,123.指數形式:用“e”或“E”后接一個整數,表示以10為底的冪數注意:“e”或“E”之前之后必須有數字,且之后的數字必須是整數。他們和前后的數字之間不能2-15:下列合法的常量是(A.- 例2-16:下列合法的實型常量是 (A) (C) (D) (E) 3.32.實型變單精度型float占4字節雙精度型double8字節長雙精度longdouble16字節(較少用算術運算符及其表達式 %(%兩邊必須是整型數據。12.0%3表達式是錯誤的求余()例如:17%3結果是:217%-3結果是:2,-17%3結果是:-2,-17%-3結果是:-強制類型轉強制類型表達式(類型名)表達注意:類型名(表達式)這種形式是C++的強制類型表達方式5.1.賦值運算符格式:變量名=表達 4=3是的表達式 a+(b=3)都是合法的表達 a=(b=10)/(c=2)都是合法的表達實型數據賦給整型變量時,小數部分被舍去,整型數據賦給實型變量時,系統自動將整型數據轉換為實型數據。例如:floata;int表達式a=10%3的值是書本:5.2.復合賦值運算符及其表達式:+=- 例如:a+=3相當于a=a+3,a/=b+4相當a/=(b+4)例:若a=12,則執行表達式a+=a-=a+a后a的值是多少? /*a的值是12*/a+=a-=24/*a的值是12*/a+=a=a-24/*a的值是12*/a+=a=-12/*a的值是12*/ /*a的值是-12*/a=a+(-12)/*a的值是-12*/ /*a的值是-24*/5.3. -如:6++(a+b)--都是錯誤的。當它們用于變量名前時,表達式的值為變量的值加一或減一。當位于變量名后時,表達式的值為變量原來的值。不論位于變量名前還是變量名后,只要進行了自增、自減運算,變量的值都會在原來的基礎上加1或減。如:a=3a++表達式的值是3運算之后變量的值是4a=3則++a表達式的值是4之后變量的值是4a=3a--表達式的值是3之后變量的值是2a=3--a表達式的值是2之后變量的值是口訣j=i++;這個表達式是 后增值。即:先把i的初始值給變量j,然后i再自加1j=++i;這歌表達式是先增值后。即:i先自加1,然后再將我們自加后的值賦值給變量j。但是記住它們是一起執行的,就是說:例如j=i++先后增值實際上是一起執行的,它們之不存在先后關系,我們只是位了好記才用到了上面的方法。老師在上課的時候先不要說,但是必須知道。=iji和上面j=++,=++i的方法是一樣。5.4逗號運算符及其表達格式:表達式1,表達式2,…,表達式注意:1.逗號表達式的值是整個逗號表達式中最后一個表達式的值求值順序是從左到右依次求解例如:a=(3,b=1)的值是1運算結束后a的值是1b的值是1二.相關試1.20084月相關試以下敘述中正確的以下選項中不合法的標識符printB)FORC)&a以下選項中不屬于字符常量的A) B) D)A)x=y*5=x+zB)int(15.8%5)x=y+z+5,++y填空(7)設變量已正確定義為整型,則表達式n=i=2,++i,i++的值為【72.2007年9月相關(11)C語言源程序名的后綴 B)y-m-3)以下選項B)y-m-3)以下選項中,合法的一組C語言數值常量 B) .5e--(14)以下敘述中正確的A)C語言程序將從源程序中第一個函數開始執C)C語言規定必須用main作為主函數名,程序將從此開始執行,在此結束D)main可作為用戶標識符,用以命名任意一個函數作為主函數以下關于long、int和short類型數據占用內存大小的敘述中正確的A)均占4個字 B)根據數據的大小來決定所占內存的字節由用戶自己定 D)由C語言編譯系統決若變量均已正確定義并賦值,以下合法的C語言賦值語句 3.2007年4月相關下列敘述中錯誤的是(DA)計算機不能直接執行用C語言編寫的源程B)C程序經C編譯程序編譯后,生成后綴為.obj的文件是一個二進制文件C)后綴為.obj的文件,經連接程序生成后綴為.exe的文件是一個二進制文件D)后綴為.obj和.exe的二進制文件都可以直接運行按照C語言規定的用戶標識符命名規則,不能出現在標識符中的是(BA)大寫字母B)連接符C)數字字符D)下劃以下敘述中錯誤的是(CA)C語言是一種結構化程序設計對于一個正常運行的C程序,以下敘述中正確的是程序的執行總是從main函數開始,在main函數結程序的執行總是從程序的第一個函數開始,在main函數程序的執行總是從main函數開始,在程序的最后一個函數中結程序的執行總是從程序的第一個函數開始,在程序的最后一個函數中(19)有以下程序,其中%u表示按無符號整數輸出(B{unsignedintx=0xFFFF; /*x的初值為十六進*/}/*注意:x是占兩個字節*/A)- 所占分考核幾專家點C語句分0-簡單識字符輸出函數1-難度適中,重點字符輸入函數1-難度適中,重點格式輸入函數3-難度適中,重點理解重點掌格式輸出函數3-難度適中,重點理解重點掌語C語句共分為5類控制語函數調用語句printf“this isacstatement表達式語每一個合法的表達式后加上分號()就構成了表達式語句語句和表達式的區別表達式有唯一確定的值,而語句沒有值賦值語i=1,j=2是逗號表達式i=1;j=2;是兩條賦值語句i++i--;++i;--i;都是賦值語句等價于i=i+1;或i=i-1;空語句:只有一個單獨的分號構成的語句。如:;就是一條空語句復合語句:用一對{}將若干語句括起來構成一條復合語輸入輸出語在使用庫函數時必須先用預編譯命令#include<頭文件名>或#include“頭文件名”將相應的頭文件如printf()函:printf“功能:按格式控制指定的格式輸出數據如:pinf“=%,+=%d3,+輸出結果是(1)d格%d:按實際長度輸出十進制整%md:輸出占m列,若小于m列,左邊補空格,若大于m列,按實際輸出%-md:輸出占m列,若小于m列,右邊補空格,若大于m列,按實際輸出輸出結果 輸出結果(2)u格%u:以無符號十進制形式輸出整數printf(“%u”,-1);65535(3)o格printf(“%d,%o”,-1,-1);-1,177777xX格%x或%X以無符號十六進制形式輸出整數。不輸出前導符0x0X,小寫對小寫,大寫對大寫。-注:若要輸出十六進制和八進制的前導符,則要用%#o和%#x、%#Xc格%c用來輸出一個字符,不輸出單引號定界符。%c和%d可以相互轉換 printf(“%c,%d”,100,100);s格用來輸出一個字符串,不輸出雙引號和字符串結束符%s:輸出字符串的有效字符printf(“%s”,”china\0yunnan”);%ms:輸出占m列,若小于m列,左邊補空格,大于m列,按實際輸出swfc,swfc,swfc%m.ns:輸出占m列,只輸出字符串的左n個字符到m列的右端f格式:按小數形式輸出實型數據%f:默認輸出6位小%m.nf:輸出占m列,其中有n位小數。若超過m列,確保n位小數后按實際輸出。注意四舍五入如:printf(“%7.3f,%- e格以指數形式輸出一個實數。小數點前只有一位非零數,5位小數,3位指數。234000e+002,1.234500e-g格自動在%f和%e中選擇較短的一種輸出,對于小數部分不輸出無意義的0。 %%表示輸出一個%如除了x,e,g大小寫均可外,其它都只能小寫。如:pinf(“%d1.23);/出錯*/scanf()函:scanf“如:anf(“%3d%2d&,&);若輸入則:a的值是:386b的值是:30ab的值是:3 則:ch的值是:’3’b的值是%*md:表示跳過m列不讀。則:a的值b的值是:原來的值若要給a賦值5,b賦值10,正確的輸入是:a=5,b=10若要讓a,b,c分別得到1,2,3,正確的輸入是:1*,2#,3<回車空格可以是多個。但是,%c格式除外。如若想讓a的值為5,b的值為10。確的輸入是5空格10<回車>5<回車10<回車5格格10<回車(6)多個%c格式之間沒有其它字符,仍然不能用回車或空格來分隔。若輸入:a空格b空格c<回車a的值是’a’,b的值是空格,c的值是’b’()如:inta;anf(“%f&a出錯*/普通字符原樣輸入,原樣輸出對于%d格式,指定寬度小于輸出寬度,原樣輸出%#o,%#x,%#X表示要輸出八進制的前導符數字0,和十六進制的前導符0x,0X%x,%X格式,小寫對小寫,大寫對大%*md:表示跳過相應的輸入項注意進制間的轉換,以及無符號數和帶符號數之間的轉換scanf()函數中,給double類型變量輸入數據時,應該使用%lf類型說明符,而輸出時,可以1.2008年4月試題分charch;intk;ch='a';k=12;printf("%c,%d,",ch,ch,k);已知字符a的ASCll十進制代碼為97,則執行上述程序段后輸出結果2.2007年9月試題 a,b,c,*p=&c;之后,接著執行以下選項中的語句,則能正確執行的語句 有以下程序 scanf("%2d%f%s",&j,&y,name);當執行上述程序段,從鍵盤上輸入 7777abc后,y的值 填空(6)執行以下程序時輸 <CR>,則輸出結果是【6】 }3.2007年4月試題設變量均已正確定義,若要通過scan(“%d%c%d%c”,&a1,&c1,&a2,&c2);語句為變量a1空格字符)(D) D)10X〈回車〉 填空(6)執行以下程序后的輸出結果是 {int }第三章擇結構所占分考核幾專家點關系運算符及優先次0-簡單識關系表達0-簡單,屬重點識記知識邏輯運算符及優1-簡單識邏輯表達1-簡單,屬重點識記知識if語句的幾種形1-簡單識if語句的嵌1-難度適中,重點條件運算0-難度適中,重點switch語2-簡單,重點掌握重點理語句標0-偏難,不是重1-簡單識二.教學內邏輯真(非零值 假(零關系運算符及其表達 關系運算符優先級別低于算術運算符,高于賦值運算符(< 如:a>b+c等價于a>(b+c)a==b<c等價于a==(b<c)a=b<c等價于a=(b<c)4==4表達式的值為4=4表達式不合關系表達式的值只有10,其中1表示“真0表示邏輯運算符及其表達&&邏輯“與||邏輯“或邏輯“非”優先級別&&》||運算規則例如:3>4結果是:03&&4結果!3&&4結果是:00||3結果是:1注意:在求解邏輯與()表達式時,若&運算符左邊表達式的值為(假,則不再進行&右邊表達式的運算,且將整個&表達式的值定為0;在求解邏輯或()表達式時,若左邊表達式的值為非0值(真,則不再進行右邊表達式的運算,且將整個邏輯表達式的值定為(真。if語句格式 語句1; 語句1;語句稱為:全 單if后的表達式必須用()括起,else后沒有表達式ifelse都只能控制緊跟它的一條語句,若要控制多條語句,必須用一對{}括起構成一條復2.2執行方式2.21if語句的執行方式:首先判斷表達式的值是否為“真若“真則執行語句部分達式的值為“假則“跳過”語句部分執行if語句后面的其它語句果表達式的值為則執行else語句后面的語句。{intif(m++>5)elseprintf(“m=%d”,m--}{intif(++m>5)printf(“m=%d”,m);elseprintf(“m=%d\n”,m--);printf“m=%d”,m);}2.3if語句的嵌if(表達式if(表達式2)語句1; 語句2;if(表達式3)語句3; 語句else總是與前面最近的且未配對的if語句配對,組成一對if-elseif(表達式if(表達式2)語句1;if(表達式3)語句2; 語句else語句有的同學會把它誤以為和第一個if配對,但是實際的情況是和第if語句配對,if(表達式if(表達式2)語句1;if(表達式3)語句2; 語句{ints,t,a,b;if(a>0)s=s+1;if(a>b)t=s+1;elseif(a==b)t=s;elset=2*s;}若運行時輸入 10回車,則程序的執行結果是{ints,t,a,b;if(a>0){s=s+1;if(a>b)t=s+1;}elseif(a==b)t=s;elset=2*s;}若運行時輸入 10回車,則輸出結果是{inta=4,b=3,c=5,t=0;if(a<b)t=a;a=b;b=t;if(a<c)t=a;a=c;c=t;printf(“%d%d}{inta=4,b=3,c=5,t=0;if(a<b){t=a;a=b;b=t;}if(a<c)printf(“%d%d}聯想交換的思想:若要交換a和b的值,通常的做法是條件運算符格式:表達式1?表達式2:表達式3執行方式:先求“表達式1”的值,若其值為“真求出“表達式2”的值作為整個條件表達式的值;若其值為求出“表達式3”的值作為整個表達式的值。相當于注意:表達式1、2、3的值不要求具有相同的類型,最后結果的類型為表達式2、3中較高類型的一種。如:(x=6)>(y=5)?1:1.5表達式的值是1.0而不是1。switch語switch(表達式{case 常量表達式2:語句… 常量表達式n:語句n;break; }switch、case、default、break都是關鍵字。花括號里面的語句叫做switch語句體。Switch語句體中可以沒break語句default部分。Switch語句的圓括號中表達式的值必須是整型或是字符型,不能為實型。case后的表達式可執行Switch語句時,首先計算Switch后圓括號的表達式的值,然后將這個值與語句體中case如果沒有任何一個常量表達式的值與之相等,則執行default后的語句塊。在執行的時候如break語句,則跳switch語句。如果執行完一casedefault語句塊后沒有遇到break,則繼續順序往下執行,知道遇到break語句或者語句體被執行完畢default最多只能有一個,通常出現在switch語句的最后部分,但也可以出現在case之間或所有的case之前。四.試題分1.20084月試題分析(17)已知字母的代碼值為6,若變量k為ha型,以下不能正確判斷出k中的值為大寫字母的表達式是A)kk>='A'&&kk<='Z'B)!(kk>='A'||kk<='Z')C)(kk+32)>='a'&&(kk+32)<='z'D)isalpha(kk)&&(kk<91)A)(c==2)||(c==4)||(c==6)B)(c>=2&&c<=6)||(c!=3)||(c!=5)C)(c>=2&&c<=6)&&!(c%2)D)(c>=2&&c<=6)&&(c%2!=1)inta=3,b=5,c=7;if(a>b)a=b;c=a;if(c!=a)c=b;其輸出結果A)程序段有語法錯B)3,5,3C)3,5,5#include<stdio.h>{intx=1,y=0,a=0,b=0;{case{case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}}A)a=1,b=0B)a=2,b=2C)a=1,b=1D)a=2,b=12.2007年9月試有以下計算y
(xx(xx若程序前面已在命令行中包含math.h文件,不能夠正確計算上述公式的程序段A)if(x>=0) B)elsey=sqrt(-x); if(x<0)y=sqrt(-x);C)if(x>=0)y=sqrt(x); D)y=sqrt(x>=0?x:-x);if(x<0)y=sqrt(-設有條件表達式:(EXP)?i++:j- ,則以下表達式中與(EXP)完全等價的 c;,程序前面已在命令行中包含ctype.h文件。不能用于判斷c中的字符是 C)'A'<=c&&c D)c<=('z'-32)&&('a'-32)<=以下程序的功能是:輸出a、b、c三個變量中的最小值。請填空#includemain( t1=a<b? 【7】;t2=ct1?【8】printf("%d\n",t2}3.20074設變量xy均已正確定義并賦值,以下if語句中,在編譯時將產生錯誤信息的是(C C)if(x>y)x-- D)if(y<0){;}elsey++; elsex++;以下選項中,當x為大于1的奇數時,值為0的表達式( 以下敘述中正確的是(Cbreak語句只能用于switch語句體continue語句的作用是:使程序的執行流程跳出包含它的所有循break語句只能用在循環體內和switch語句在循環體內使用break語句和continue語句的作用相有以下程序({intk=5,n=0; case3:n+=1;break;case2:case4:n+=2;k--}}程序運行后的輸出結果 所占分考核幾專家點while語2-所占分考核幾專家點while語2-重點理解重點掌do...while語2-重點理解重點掌for語5-重點理解重點掌循環嵌4-重點理解重點掌循環比0-簡單識break語2-難度適中,重點continue語2-難度適中,重點二.教學while格式 while(表達式{
循環體語}whileC語言的關鍵字其值為“真(非0)則執行循環體語句,否則跳出while循環。while語句也只能控制緊跟它的一條語句。若需要控制多條語句,必須用{}括起,構成一條復作。如:le(表達式;/是循環體,它是一條空語句*/例如:分析下列程序的輸出結果執行過程計算圓括號中表達式的值。若為非0則執行循環體語句,若為0則跳出循環執行完循環體語句后重復過程(1{inti=1,sum=0;}}這是學習C語言基礎循環的最好的練習,老師讓學生練習的時候可以把i控制在10以內,讓學生知d0-while格式 循環while(表達式doC語言的關鍵字,需要和while一起搭配使用其值為“真(非0)則執行循環體語句,否則跳出while循環。while語句也只能控制緊跟它的一條語句。若需要控制多條語句,必須用{}括起,構成一條復作。如:d{;}ile(表達式;/*是循環體,它是一條空語句*/由于do-while循環結構整個語法上也是C語言語句此最后的分號必不可它同樣表示語句執行過程執行循環體語句計算圓括號中表達式的值。若為非0則重復(1,否則跳出循環forforC語言的關鍵字值;表達2的作用是控制循環;表達3的作用是賦值。for語句也只能控制緊跟它的一條語句。若需要控制多條語句,必須用{}括起,構成一條復合3.5執行過程計算表達式計算表達式2,若其值為非0,轉步驟(3;若其值為0則轉步驟(執行一次for循環體計算表達式3,轉步驟(2結束循環,執行for語句后面的語句{inti,j;}for(i=1;;i++)/*表達式2的值始終為真,這是死循環breakcontinuebreak語句用于結束循環或switchcontinue語句用于結束本次循環,跳過循環中continue后尚未執行的語句,繼續進行下一次循環條注意:break語句只能控制直接包含它的switch結構或循環。continue語句只能控制直接包含它的循環。1:main{inti,s1=0,s2=0,s3=0;{casecase2:s2++;break;case3:s3++;contiune;}}把1~100之間能被4整除的數輸出(老師一定要學生這中方法{inti;{if(i%4!=0)continue;}}三.試題1.20084#include<stdio.h>{intfor(;x>0;x--{if(x%3){printf(“%d,”,x--);continue;}}}A)7,4,2B)8,7,5,2C)9,7,6,4D)8,5,4,2以下不構成無限循環的語句或者語句組A)n=0;B)n=0;do{++n;}while(n<=0);while(1){n++;}C)n=10;D)for(n=0,i=1;;i++)#includestdio.h>{intfor(i=0;i<12;i++)for(i=1;i<5;i++)printf(“%d”,c[i]);}程序的運行結果A)1234B)2344C)4332D)112#includestdio.h>voidfun(int*s,intnl,int{inti,j,t;i=nl;j=n2;}{intfun(a,0,3);fun(a,4,9);}程序運行的結果 #include<stdio.h>#includestring.h>voidfun(char*s[],int{char*t;inti,j;if(strlen(s[i])>strlen(s[j]))}{charfun(ss,5);}程序的運行結果A)xy,aaaaccB)aaaacc,xyC)bcc,aabcc(35)有以下程#includevoidfun(char*a,char{while(*a==’*’)a++;while(*b=*a){b++;a++;}}{char*s=”****a*b****”,t[80];fun(s,t);puts(t);}程序的運行結果A)*****a*bB)a*bC)a*b****D)若有定義:intk;,以下程序段的輸出結果是【8for(k=2;k<6;k++,k++)printf(“##%d”,k);{int{p[i]=&x[2*i+1];printf(“%d”,p[i][0]);}}2.20079若變量已正確定義,有以下程序 printf("%d,",i); while(i++);其輸出結果 D)程序進入無限循 printf("%d",--}程序的運行結果 i,j,m=55;for(j=3;j<=i;j++) printf("%d\n",m);}程序的運行結果 (34)有以下程 *a, n/*fun函數的功能是將a所指數組元素從大到小 t,i,for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if t=a[i];a[i]=a[j]; } fun(c+4,for(i=0;i<10;i++) printf("%d,",c[i]);}程序的運行結果 以下程序的輸出結果是9#include n=12345, printf("%d", }for(s=1.0,k=1;k<=n;k++) printf("s=%f\n\n",s);請填空,使下面程序段的功能與之完全s=1.0; 【10】) s=s+1.0/(k*(k+1));【11】; printf("s=%f\n\n",s);以下程序的輸出結果是12 for(i='a';i<'f';i++,i++) printf("%c",i-'a'+'A');}3.20074月試題分以下敘述中正確的是(Cbreak語句只能用于switch語句體continue語句的作用是:使程序的執行流程跳出包含它的所有循break語句只能用在循環體內和switch語句在循環體內使用break語句和continue語句的作用相有以下程序({intk=5,n=0; case3:n+=1;break;case2:case4:n+=2;k--}}程序運行后的輸出結果 有以下程{inti,j;{for(j=i;j<4;j++)printf(“%d*%d=%d}}程序運行后的輸出結果是( 1*1=11*2=2 B)1*1=11*2=22*2=4C)D) 3*2=6}(7)當執行以下程序時,輸 <回車>,則其中while循環體將執 次#include<stdio.h>{charWhil(ch=gtchar()=’’)}
第五章字符型數 位運字符常字符常量:用一對單引號括起的一個字符例如:’A’,’a’,’6’是合法的字符型常量”a”,’ab’,A,512’都是不合法的字符型常量轉義字符常量:必須以一個反斜杠“\”開頭.常見的轉義字符見表5-1\n:回車換行\t:橫向跳格\v:豎向\b:退 \r:回 \f:換\\: \ddd:ddd表示最多可以有三位8進制數\xhh:hh表示最多可以有二位16進制數注意:三位8進制數不一定以0開頭,只要是0~7之間的數字即可。例:下列字符常量中合法的是() 例:下列字符常量中合法的是( D.’”’ 字符型變關鍵字:char,字符型變量在內存中占1字節。例:chara=’5’;‘a’字符的ASCII碼值是‘A’字符的ASCII碼值是65(大寫字母加上32后就變成了與其相對應的小寫字母。數字’0’~’9’對應的ASCII碼值是48~57格式:putchar(字符 功能:輸出一個字符,但不輸出單引號。其中“字符”可以合法的字符型或整型數據。它會自動將整型數據轉換為相應的字符輸出。putchar‘a;a printf(“%c”,’a’);puthar(6;Ah=‘g;pthar(;charch=‘g’;printf(“%c”,ch);輸出功能:接收一個從鍵盤輸入的字符注意:1.它可以接收從鍵盤上輸入的任何字符,包括回車符、空格符等a,b;a=getcha(;b=getchar(;若輸入:1<回車>則變量a的值為字符1量b的值為符scanf函數輸入數據:在進行字符數據輸入的時候,空格符、回車、橫向跳格都是合法有效的字位運算(詳細的見52頁1.2008年試(13)以下選項中不屬于字符常量的A) B) D)charch;intk;ch='a';k=12;printf("%c,%d,",ch,ch,k);已知字符a的ASCll十進制代碼為97,則執行上述程序段后輸出結果C)a,97,12k=12D)a,97,k=12已知字母的代碼值為6,若變量k為ha型,以下不能正確判斷出k中的值為大寫字母的表達式是A)kk>='A'&&kk<='Z'C)(kk+32)>='a'&&(kk+32)<='z' A)a^bB)a|bC)a&b2.20079已有定義 否為大寫字母的表達式 C)'A'<=c&&c D)c<=('z'-32)&&('a'-32)<=已知字符'A'的ASCII代碼值是65,字符變量c1的值是'A',c2的值是'D'。執行語句printf("%d%d",c1,c2-2);后,輸出結果 for(i='a';i<'f';i++,i++) printf("%c",i-'a'+'A');}3.20074(25)以下合法的字符型常量是( 轉換為對應小寫字母的語句是()A)c=(c- C)c=c- D)c=(‘A’+c)%26-當執行以下程序時,輸 <回車>,則其中while循環體將執 次#include<stdio.h>{charWhil(ch=gtchar()=’’)}第六章函一.教學重點、所占分考核幾專家點1-簡單,重點識記知識函數的定0-簡單,重點識記知識形參和實參及函數調2-難度適中,重點理解重點掌函數調用的一般形式和調用2-偏難,重點掌握重點理函數的說明及其0-簡單識函數的嵌套調1-偏難,重點掌握重點理函數的遞歸調1-偏難,重點掌握重點理二.教學函數的定義
函數是C程序的基本單位函數返回值的類型名函數名(類型名 形參名1,類型名 形參名{}一個C程序可以由一個或多個源程序文件組成個源程序文件可以由一個或多個函數組成。程序>>函函數返回值的類型名缺省時,返回值類型默int型,而不是沒有返回值。若沒有返回值的時候應該為void.main。戶標識符。在同一函數內形式參數必須是唯一的。如果函數不帶形式參數,則形式參數列表可以省略。函數體部分的一對花括號必不可少函數之間的關系是相互平行、獨立的,不是相互隸屬的函數不能嵌套定義,不能在一個函數體內定義另一個函數函數可以相用,但不能調用main()函數函數的分類從形式分 從用戶使用的角度:用戶自定義函數:doubleadd(inta,intb){函數體函數的定義的數名(類型名參1,類型名參2,…)/*函數首部{函數體intmin(intx,int intmin({函數體 int/*現代方式 {函數體}/*傳統方式floatfun(intx,int float intx;int 以上函數的定義是合法的intfun(int{ intfun(intx;int{… intfun(intx,y)inty; int{int…}intfun(x,y)intx,y,z;{…以上函數的定義均是的形參只有在該函數被調用時才占內存單元,即該變量才可用;函數調用結束時形參所占的內存單元被釋放,即不可用。實參和形參的數據類型應該對應相同。否則,必須將函數的定義放在函數調用之前或在調用之前對函數作原型。voidsum(intx,inty)//函數定義,x,y是被調用函數的參數,我們叫它形{}main({sum(3,5);//函數調用,這里的3和5是調用函數的參數,我們叫為實}/*類型對應不相同函數的返回值即函數值return語句的格式retrun表達式;或return表達式功能:將表達式的值作為函數值返回給主調函數,并結束本函數的執行函數值應return語句返回,一個函數中可以有return語句,只要執行其中任何一return語句,該函數立即結束執行,并將該retrun后表達式的值返回。例如:intmax(inta,intb){ returna; return}函數值的類型保持與函數定義時所指定的類型相同,而與retrun后表達式的值的類型無關。若定義函數時不指定函數的類型,則默認是int。max(floata,float intmax(floata,float{return {return(void例如:voidfun(inta){}調用格式:函數名(實參無參調用格式:函數名()帶參調用格式:函數名(實參列表調用函數時,函數名必須一致。函數名是唯一區別函數的標志實參和形參的類型匹配,個數一致,形式上一一對應一般情況下,函數應該先定義后調用voidswap(inta,intb)/*函數定義{a=a+b;b=a-b;a=a-}{inta=2,b=5;}格式:函數類型函數名(形參類型1,形參類型 函數類型函數名(形參類型1形參名1,形參類型2形參名2對上例中的swap函數作原型的格式:voidvoidswap(inta,intb);voidswap(intx,inty);若被調函數定義在主調函數之前時,可以不作原型。若被調函數定義在主調函數之后,則在用前應作原型voidswap(inta,intb)/*函數定義{inta=2,b=5;}{intvoidswap(int,int);/*原型*/}voidswap(inta,intb)/*函數定義如果在程序文件的開始就對函數作外部原型,則在各主調函數中不必再作原型。例:voidswap(int,int);/*外部原型申明*/{intx=1,y=2;}voidswap(inta,int補充:若果形參中有數組,則作原型時數組的中括號不能省略例如:floatfn(douleb 可以用以下方式原型floatfun(double[]);floatfun(doublea[]);而以下的方式是錯誤的floatfun(double函數的嵌套調用和遞歸調嵌套調用:在一個函數內調用另一個函遞歸調用:在一個函數內直接或間接調用它本身。若在函數A內直接調用函數A稱為直接遞歸。若函數A調用函數B,函數B又調用函數A則稱為間接遞歸調用。longfun(int{if(k==1||k==2)returnelsereturnfun(k-1)+fun(k-}{intn;}intfunc(inta,int{return}{intx=2,y=5,z=8,r;}C函數參數之間的數據傳遞僅僅通過實參向形參的單向數值傳遞“。數據只能從實參向形參單向傳遞到目前為止,函數之多能返回一個值。就是return回來的值。voidswap(inta1,intb1)/*函數定義 voidswap(int*a3,int int int int intswap(a,b);/*函數調用 swap(&a2,&b2);/*函數調用 地值變2a5b用地址表來講解這些問題比較好三.試題1.20084#includestdio.h>intf(intx){intif(x==0||x==1)return(3);return}{intz=f(3);}程序的運行結果A)0B)9C)6voidfun(int{if(x/2>0)printf(“%d}{fun(3);2.20079月試題分(25)若函數調用時的實參為變量時,以下關于函數形參和實參的敘述中正確的函數的實參和其對應的形參共占同 單形參只是形式上的存在,不占用具 單同名的實參和形參占同 單函數的形參和實參分別占用不同 單(27)以下敘述中錯誤的可以給指針變量賦一個整數作為地址當在程序的開頭包含頭文件stdio.h時,可以給指針變量賦3.20074以下程序的運行結果 intvoidfun(int{m+=k;k+=m;printf(“m=%d\n k=%d”,m,k++);}{intfun(i++);printf(“i=%d}第七章指一.教學重點、所占分考核幾專家點指針變量的定義2-簡單識指針變量作為函數參2-簡單,重點掌指向數組元素的3-難度適中,重點掌握重點理用數組名作為函數參2-難度適中,重點指向數組的指3-偏難,重點理返回指針值的函1-簡單,重點掌二.教學內存中的每一個字節都有一個唯一的編號,這個編號就是該字節的地址inta=15,b=20;變量的地址:是對應單元的首地址(起始地址。那么a的地址就是2001,b的地址是指針:變量的地址就是該變量的”指針”,(指針就是地址,地址就是指針)指針變量:用于存放變量地址的變量稱為指針變量指針變量的定格式:類型名*指針變量名;如:int*p; inta,*q;例1:int*p,a=20;例2:int*p=20;/*出錯*/inta=20,*p=a;/*出錯,指針變量只能用于存放地址值指向指針變量的定義格式:類型名**指向指針變量名如:int**q;例:int*p,**q,a=5;/*我們定義了一個int型的指針變量、int型的指向指針變量和一個型的變量指針變量的賦值int*p, 或int int intp=&,q&p;/*須知道指針變量只能存取變量的地址或是和它相同類型指針的值指向指針只能存取指針變量的地址。學生在學習的時候一定要讓他們知道變量間的賦值必須是相同類型的才可以真確的賦值成功。*/給指針變量賦“空值NULL是在stdio.h頭文件中的預定義符,因此在使用NULL時,應該在程序前面寫上:#includeNULL的代碼值是0,所以等價:p=0;或注意:當p指向NULL時候,p并不是指向地址為0的單元,而是具有一個確定的值“空, 對指針的操3.1單int那么a=*p,a++等價與(*p)++。這里*p意味著取指針變量指向變量的內容指針變量定義中的“*”和間接運算符“*”有本質的區別。當定義一個指針變量的時候,“*”是說明一個變量是指針變量,而“*”作為間接運算符的時候意味著取指針變量所指向變量的內容。間接運算符必須出現在運算對象的左邊,運算對象可以是地址或存放了地址的指針變量第八章一.教學重點、難所占分考核幾專家點一維數組的定義及1-簡單,重點掌一維數組的初始1-簡單,重點掌二維數組的定義及3-偏難,重點掌握重點理二維數組的初始1-簡單,重點掌通過賦初值定義二維數1-偏難,重點理二.教學講一維數組的定義和一維數組的定格式:類型名組名[常量表達式];例如:inta[8];數組名屬于用戶標識符,必須滿足用戶標識符名規則。如:intdo[float3om[1];charchara-b[5];定義數組時,方括號必不可少,方括號中的表達式不能含有變量,且表達式的值必須是大于0正整如:inta[5.3];inta[-4];inta[n];inta[0];{intN=5;inta[N];}都是的定#defineM5inta[M];同一數組元素在內存中所占的空間是依次連續的,每個數組只能有一個下標,數組下標是從開始,到數組長度減4結束。例如:inta[5]; 格式:數組名[下標表達式如:doublea[10];/*定義數組intb=a[4];/* 數組元素a[4]*/intb=a[2*2];/* 數組中的元素其實就是一個變量,占一個單元。如數組b中的變量就是int型的變量數組元素時,下標表達式的值的上限為定義是常量表達式減一,下限為0.在時保證下標數組是一個構造類型是集合的概念,因此不能整體數組里面的所用元素企圖簡單地通數組名b體代表其中的4個it類型的變量是不行。注意:不能對數組進行整體,只能單獨其元素intintb[10]=a;/*錯誤的intb[10]=a[10];/*錯誤的,沒有元素a[10]*/floata[10],b[10];b=a;/*錯誤,a代表整個數組,不能整體*/在定義一維數組的同時可以將各元素的初值依次放在一對{}中賦給數組例如:inta[10,2,,4,,6,,8,,10};inta[5]=1,2,3,4,5;inta[5]={1;2;3;4;5};錯{(即數組長度數,則將初值依次賦給前面的元素,而未得到初值的元素自動賦零。例如:inta[5]={1,2,3,4,5,6};inta[5]={1,2,3};intint可以通過賦初值來定義數組的大小。此時數組的長度可以省略。若定義時,未賦初值,則長度絕不能省略。例如:inta[1,2,3,4};數組的長度是4。inta[];是的。只能在定義時可以用{}例如:inta[4;a={1,2,3;或a[4]={1,2,3,4};是的int本節習題下列一維數組定義中正確的是 intinta[inta(; intintintinta[5];inta[5];int{intn=5;intintint二維數二維數組的定格式:類型名數組名[常量表達式1][常量表達式例如:int在內存中的存放(依次連續格式:數組名[下標表達式1][下標表達式例如:inta[3][4];intb[3][4]=a;/*是的inta[3][4]={0},intb,n=2;執行上述語句后,問b的值是多少數組元素時,下標可以是C語言中任何合法的表達式,且可以含有變量。intintb=a[10.5%5][2];/*錯誤二維數組初始直接賦inta[2][0]的值是多少?9[2][]={,0,,0,;/按行賦int[3][]={1,,},{,5,}{7,,9}};inta[3][4]={{1,2,3,4},{5,6,7,8,9},{10,11,12,13}};int[3][]={1,,3,},{,6,,8,},{1,1,1,13}{1,};intint以上定義均是的義時未賦初值,則各維的長度均不能省略。例如:inta[inta[][3];或inta[3][];都是的。main({intinti,j,s=0;}輸出結果是三.試題分1.20084月考試試題分以下錯誤的定義語句A)intB)intC)intx[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};D)intx[][3]={1,2,3,4};(26)若有定義:inta[2][3];,以下選項中對a數組元素正確的A)a[2][!1]B)a[2][3]C)a[0][3]D)a[1>2][#includestdio.h>{intfor(i=0;i<12;i++)for(i=1;i<5;i++)printf(“%d”,c[i]);}程序的運行結果A)1234B)2344C)4332D)1122.20079月試題分(31)若有定義語句 a[3][6];,按在內存中的存放順序,a數組的第10個元素 3.20074月試題分(13)設有定義語句:inta[][3]={{0},{1},{2}};,則數組元素a[1][2](14)執行以下程序的輸出結18 printf("%d }所占分考核幾專家點指向數組元素的3-所占分考核幾專家點指向數組元素的3-難度適中,重點掌握重點理用數組名作為函數參2-難度適中,重點指向數組的指3-偏難,重點理二級指針及指針1-偏難,重點掌握重點理二.教學講(1在C語言中數組是占用一串連續的單元數組中每個元素都可以看作一個變量,因此個數組元素都有一個地址。那么:int指針p的基類型是int,數組a的各個元素也是int類型的。我們用p=&a[0],將指針pa[0]。由于數組元素在內存中是連續的,因此我們可以通過移動指針p來數組中的每一個元素。(2)C語言規定數組名代表數組在內存中的起始地址,即可a表示a的首地址。p=a是讓指針p指向數組a的起始地址。(3)a是一個地址常量它指向a數組的首地址因此我們不能對a進行重新賦值如:a=&I,a++通過指針一維數組元(1)通過指針數組元int int 指針變量p指向數組元素a[0], 指針變量p指向數組元素a[0], 來變量a[0]。如:*p=10;是 來變量a[0]。如:*p=10;是對指針的空間賦值,即a[0]=10變成了10.(2)通過數組的首地址數組元int由于a組的首地址,我們把a當作一個指針常量。因此*a等價于*(a+1)等價于a[0]。a等價于&a[0(3)用帶下標的指針變量一維數組元intp[0]來表示a[0],p[1]來表示對數組元素a[i]等價的方法a[i];p[i];*(a+i);若指針變量P指向了一維數組a的首地址,即:inta[10int則有下面的等價關系a+i等價于p+i,都是&a[i]*(a+i)等價于*(p+i)都與a[i]相a[i]等價于p++、++p、p+=1、p=p+1作用都是讓p指向下一個元素。p--、--p、p-=1、p=p-1作用都是讓指向前一個元素*p++與*(p++)等價,都是得到p當前所指向的元素的值,并讓p指向下一個元素。*p--與*(p--)等價,都是得到p當前所指向的元素的值*++p與*(++p)等價,都是先讓p指向下一個元素,再取出重指向的元素。*--p與*(--p)等價,都是先讓p指向前一個元素,再取出重新指向的元(7)(*p)++、++(*p)、++*p的作用都是讓p當前所指的元素值增加1。(*p)--、--(*p)、--*p的作用都是讓p當前所指的元素值減小1。指向數組的指針和指針變int列指針:加1跳過一個元素的指針(如:一維數組名行指針:加1跳過一行的指(如:二維數組名對列指針進行一次指針(下標)例如:inta[5,2,,4,5*=a;則a[3]等價于p[3]等價于*(p+3),都得到元素a[3]的值4對行指針進行一次指針(下標)運算得到的列指針(即元素的地址,而不是元素。若要通過行指針元素,必須進行兩次指針運算或下標運算。若a是一個二維數組,則有a+i是行指針,指向行號為i的一整行*(a+i)和a[i]等價都是一個列指針向的是元素示行號為i的最前面元素的地址a[i][0]*(a+i)+ja[i]+j等價,即&a[i][j]*(*(a+i)+j*(a[i]+j]float則對a數組元素的是 指向數組元素的指針變指指例如:intint則所指元常用于取二維數組a元素地址的方式:&a[i][j]、a[i]+j、m它是一個行指針,對它加1要跳過m個元而指向一維數組的指針變量是一個列指針。對它加1跳過1個元素。基類型(*指針變量名定義后該指針變量與具有m列的二維數組名具有相同的性質,即該指針變量可以指向一個具有m列的二維數組通過該指針變量名二維數組元素時方式與通過二維數組名的方式一樣。int[5][];int(*p)[7];此時p[0][0]a[0][0]對p[4][3]a[4][3]對charchar(*r)[80];例1.請分析r[0][0]和r[2][3]分別對應的元素 2.若有intt[3][2];能正確表示t數組元素地址的表達式是( 定義格式類型名*數組名[常量表達式inta[10];普通數組int*a[10];指針int(*a)[10];指向由10個元素組成的一維數組的指針變int*a)();指向函數的指針變量int*a()返回指針值的函數{…指針數組的每一個元素都是指針類型,即它的每一個元素相當于一個指針變量{charintfor(i=0;i<3;i++)for(i=0;i<3;i++)}有下列語floatinta; inta[10];int int三.試題分1.20084月試題分{int{p[i]=&x[2*i+1];printf(“%d”,p[i][0]);}}{inta[5]={2,4,6,8,10},p=a;p++;}2.20079月試題分(31)若有定義語句 a[3][6];,按在內存中的存放順序,a數組的第10個元素 若有定義語句 a[2][3],*p[3];,則以下語句中正確的 有以下程 *a, n/*fun函數的功能是將a所指數組元素從大到小 t,i,for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論