計算機二級C語言-完整復(fù)習(xí)資料(精編)_第1頁
計算機二級C語言-完整復(fù)習(xí)資料(精編)_第2頁
計算機二級C語言-完整復(fù)習(xí)資料(精編)_第3頁
計算機二級C語言-完整復(fù)習(xí)資料(精編)_第4頁
計算機二級C語言-完整復(fù)習(xí)資料(精編)_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第一章C語言概述第二章變量及表達式二.教學(xué)重點,難點分析1.C語言概述知識點所占分值考核幾率專家點評C語言概述0-1分20%簡單識記C語言程序的構(gòu)成0-1分30%簡單識記標(biāo)識符1-2分60%簡單,屬重點識記知識點常量1-2分80%簡單,屬重點識記知識點變量2-3分100%難度適中,重點理解重點掌握注意從幾年的試題分析看C語言的概述和程序的構(gòu)成合起來考試已經(jīng)是一個慣例了。2.運算符與表達式知識點所占分值考核幾率專家點評C運算符簡介0-1分10%簡單識記運算符的結(jié)合和優(yōu)先級0-1分60%簡單識記強制類型轉(zhuǎn)換運算符0-1分30%簡單識記逗號運算符和逗號表達式0-1分40%簡單,屬重點識記知識點基本的算術(shù)運算符1-2分100%簡單,屬重點識記知識點算術(shù)表達式和運算符的1-2分100%難度適中,重點理解重點掌握優(yōu)先級與結(jié)合、自增自減運算符2-3分100%難度適中,重點理解重點掌握賦值運算符和賦值表達式2-4分100%簡單,重點掌握重點理解復(fù)合的賦值運算符1-2分80%偏難,不是重點賦值運算中的類型轉(zhuǎn)換0-1分75%偏難,不是重點位運算符和位運算0-1分80%偏難,屬重點識記知識點三.教學(xué)講點1.C語言的基本構(gòu)成和格式#include“stdio.h”main(){inta,b,sum;/*定義變量*/賦值給變量a*/賦值給變量sum=a+b;/*把兩數(shù)之和賦值給變量sum*/printf(“a=%d,b=%d,sum=%d\n”,a,b,sum);/*輸出計算結(jié)果*/}(1).C程序由函數(shù)組成,一個程序必須且只能有一個主函數(shù)(main()),C程序總是從主函數(shù)開始執(zhí)行,在主函數(shù)中結(jié)束。(2).定義函數(shù)時函數(shù)名后必須有一對小括號,函數(shù)體必須放在一對花括號內(nèi),在函數(shù)體中,函數(shù)體有兩個部分:定義部分和執(zhí)行部分。定義語句必須出現(xiàn)在執(zhí)行語句之前,我們先定義了a,b,sum,然后才給它們賦值。(3).CC語句的一部分。即使是程序的最后一個語句也不例外。分號是語句結(jié)束的標(biāo)志。(4).體分開。例如:int是錯誤的,而int正確。(5).C位置。注釋部分不被執(zhí)行。(6).C語言程序書寫格式自由,語句可以從任一列開始書寫,一行內(nèi)可程序,初學(xué)者應(yīng)該從一開始就養(yǎng)成好的習(xí)慣,是程序便于閱讀。2.標(biāo)識符(1)標(biāo)識符只能由字母、數(shù)字和下劃線組成。(2)標(biāo)識符的第一個字符必須是字母或下劃線。(3)標(biāo)識符的大小寫字母是有區(qū)別的,如和ABC是兩個完全不同的標(biāo)識符。(3)標(biāo)識符的分類:C語言特定成分的一類標(biāo)識符。詳細的查閱附錄二。預(yù)定義標(biāo)識符:在C語言中它也有特定的含義。預(yù)定義標(biāo)識符可以用位“用戶表標(biāo)識符”使用,只是這將使這些標(biāo)識符失去了原來的意義。用戶標(biāo)識符:由用戶根據(jù)需要定義的標(biāo)識符被成為用戶標(biāo)識符。用戶標(biāo)示符用來給變量、函數(shù)、數(shù)組或者指針等命名。3.C語言的數(shù)據(jù)類型3.1數(shù)據(jù)可以分為常量和變量。常量是指在程序執(zhí)行中不變的量,常量分為:整型常數(shù)、實型常數(shù)、字符常量、字符串常量。整型數(shù)據(jù):進制間的轉(zhuǎn)換3.11.二、八、十六進制轉(zhuǎn)為十進制3.12.十進制轉(zhuǎn)為二、八、十六進制規(guī)則:整數(shù)部分:基數(shù)除取余,逆序排列小數(shù)部分:基數(shù)乘取整,順序排列3.13.二進制轉(zhuǎn)為八、十六進制規(guī)則:三(四)合一,按序相拼(整數(shù)部分,從右向左取,小數(shù)部分從左向右3.14.八、十六進制轉(zhuǎn)為二進制3.2整型數(shù)據(jù)在內(nèi)存中的存放形式1字節(jié)=8位,1Byte=8bit字長:指CPU能同時處理的二進制位數(shù)。由CPU的型號而定。如:16位微機的字長就是16位或2字節(jié)。1GB=1024MB,1MB=1024KB,1KB=1024B的最小單位。如:50000000000000101二字節(jié)能存放的最大數(shù)是:327670111111111111111對帶符號數(shù),最高位是符號位,用0表示正,用1表示負(fù)。3.22.負(fù)整數(shù)在內(nèi)存中用“補碼”形式存放。取補碼的步驟:(1)忽略負(fù)號,求出原碼。(2)將原碼按位取反(0、1(3)在第二步的基礎(chǔ)上加如:取-5的補碼。(1)0000000000000101(2)1111111111111010(3)1111111111111011將補碼轉(zhuǎn)換成相應(yīng)的整數(shù)的步驟:(1)將補碼按位取反加1。(2)將步驟1得到的二進制數(shù)轉(zhuǎn)換成十進制數(shù),然后加上負(fù)號即可。例如:1000000000000000按位取反加10111111111111111+11000000000000000=轉(zhuǎn)換成十進制:1×215=

32768加負(fù)號:-32768幾個特殊的帶符號整數(shù):1000000000000000-3276832767-13.23.無符號整數(shù):只有正整數(shù),沒有負(fù)整數(shù),最高位不表示符號位,每一位均參與轉(zhuǎn)換。二進制帶符號整數(shù)無符號整數(shù)-1655351000000000000000-3276832768例2-12:若有:inta=-1;unsignedb=65535;則輸出結(jié)果是:-1,65535,-1,65535數(shù)據(jù)益出問題:例2-13:若有inta=32767;則a=a+1的結(jié)果是:-32768例2-14:若有unsignedb=65536;則b的值是:0+1100000000000000將100000000000000按照帶符號數(shù)轉(zhuǎn)為十進制為-32768+1+11000000000000000065536unsignedb=655536;而b屬于無符號整型,在內(nèi)存中只占兩字節(jié),所以只能包括16位。標(biāo)準(zhǔn)C沒有具體要求規(guī)定各類型數(shù)據(jù)所占內(nèi)存的字節(jié)數(shù),現(xiàn)以這次考試標(biāo)準(zhǔn)viusalc++6.0為例,說明各類型變量所占的位數(shù)。類型所占位數(shù)所占字節(jié)數(shù)類型所占位數(shù)所占字節(jié)數(shù)short162unsigned int324int324unsigned long324long324float324unsigned short162double6483.3實型數(shù)據(jù)(浮點數(shù))3.31.實型常量(1)小數(shù)形式:由數(shù)字和小數(shù)點組成,必須有小數(shù)點,小數(shù)點的某一側(cè)可以沒有數(shù)字。如:.23,123.876,123.(2)指數(shù)形式:用“e”或“E”后接一個整數(shù),表示以10為底的冪數(shù)。注意:“e”或“E”之前之后必須有數(shù)字,且之后的數(shù)字必須是整數(shù)。他們和前后的數(shù)字之間不能有空格。例如:例-15下列合法的常量是(。A.-32169 B.0128 例-16下列合法的實型常量是( 。(A)0Xff (B)124E (C)1.23E5.0 (D)3.E2 (E)1.25E+2 (F).23e+023.32.實型變量單精度型float占4字節(jié)雙精度型double占8字節(jié)長雙精度longdouble占字節(jié)(較少用)4.表達式與運算符4.1算術(shù)運算符及其表達式:+ - * / %注意:(1)%兩邊必須是整型數(shù)據(jù)。12.0%3表達式是錯誤的。(2)求余(%)的方法是:忽略符號,求出余數(shù),再將所得余數(shù)的符號定為與被除數(shù)相同。例如:17%3結(jié)果是:217%-3結(jié)果是:2,-17%3結(jié)果是:-2,-17%-3結(jié)果是:-24.2強制類型轉(zhuǎn)換注意:類型名(表達式)這種形式是C++的強制類型表達方式。5.賦值運算符及其表達式5.1.賦值運算符=格式:變量名=表達式功能:將表達式的值賦給左邊的變量。注:(1)賦值運算符左邊只能是一個變量,不能是常量,也不能是表達式。是非法的表達式都是合法的表達式都是合法的表達式(2)實型數(shù)據(jù)賦給整型變量時,小數(shù)部分被舍去,整型數(shù)據(jù)賦給實型變量時,系統(tǒng)自動將整型數(shù)據(jù)轉(zhuǎn)換為實型數(shù)據(jù)。例如:floata;intb;表達式a=10%3的值是1.0表達式b=a=10%3的值是15.2.復(fù)合賦值運算符及其表達式:+=-= *= /= &= |= ^= >>=<<=例如:a+=3相當(dāng)于a=a+3,a/=b+4相當(dāng)a/=(b+4)或a=a/(b+4)例:若a=12,則執(zhí)行表達式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*/的值是-24*/5.3.自增、自減運算符及其表達式--注意:(1)只能用于變量,不能用于常量和表達式。如:6++(a+b)--都是錯誤的。(2)當(dāng)它們用于變量名前時,表達式的值為變量的值加一或減一。當(dāng)位于變量名后時,表達式的值為變量原來的值。不論位于變量名前還是變量名后,只要進行了自增、自減運算,變量的值都會在原來的基礎(chǔ)上加1或減如:a=3則a++表達式的值是3運算之后變量的值是4a=3則++a表達式的值是4之后變量的值是4a=3則a--表達式的值是3之后變量的值是2a=3則--a表達式的值是2之后變量的值是2(3)口訣:j=i++;這個表達式是先引用后增值。即:先把i的初始值給變量j,然后i再自加j=++i;這歌表達式是先增值后引用。即:i先自加1,然后再將我們自加后的值賦值給變量j。但是記住它們是一起執(zhí)行的,就是說:例如j=i++先引用后增值實際上是一起執(zhí)行的,它們之間不存在先后關(guān)系,我們只是位了好記才用到了上面的方法。老師在上課的時候先不要說,但是你們必須知道。j=i--,j=--i和上面j=i++,j=++i的方法是一樣。5.4逗號運算符及其表達式1.格式:表達式1,表達式2,…,表達式n注意:1.逗號表達式的值是整個逗號表達式中最后一個表達式的值。2.求值順序是從左到右依次求解。例如:a=(3,b=1)的值是1運算結(jié)束后a的值是b的值是1。四.相關(guān)試題1.2008年4月相關(guān)試題(11)以下敘述中正確的是A)C程序中的注釋只能出現(xiàn)在程序的開始位置和語句的后面B)C程序書寫格式嚴(yán)格,要求一行內(nèi)只能寫一個語句C)C程序書寫格式自由,一個語句可以寫在多行上D)用C語言編寫的程序只能放在一個程序文件中(12)以下選項中不合法的標(biāo)識符是A)printB)FORC)&aD)_00(13)以下選項中不屬于字符常量的是(14)設(shè)變量已正確定義并賦值,以下正確的表達式是A)x=y*5=x+zB)int(15.8%5)C)x=y+z+5,++yD)x=25%5.0填空()設(shè)變量已正確定義為整型,則表達式ni2,i,i的值為【。2.2007年9月相關(guān)試題語言源程序名的后綴是B).C C).obj D).cp(12)可在C程序中用作用戶標(biāo)識符的一組標(biāo)識符是A)and B)Date C)Hi D)case_2007 Big1(13)以下選項中,合法的一組C語言數(shù)值常量是A)028 B)12. C).177 D)0x8A.5e-3 4e1.5 10,0004.5e0 0abc 3.e5(14)以下敘述中正確的是A)C語言程序?qū)脑闯绦蛑械谝粋€函數(shù)開始執(zhí)行B)可以在程序中由用戶指定任意一個函數(shù)作為主函數(shù),程序?qū)拇碎_始執(zhí)行C)C語言規(guī)定必須用main作為主函數(shù)名,程序?qū)拇碎_始執(zhí)行,在此結(jié)束D)main可作為用戶標(biāo)識符,用以命名任意一個函數(shù)作為主函數(shù)(16)以下關(guān)于long、int和short類型數(shù)據(jù)占用內(nèi)存大小的敘述中正確的是A)均占4個字節(jié) B)根據(jù)數(shù)據(jù)的大小來決定所占內(nèi)存的字節(jié)數(shù)C)由用戶自己定義 D)由C語言編譯系統(tǒng)決定(17)若變量均已正確定義并賦值,以下合法的C語言賦值語句是3.2007年4月相關(guān)考題(12)下列敘述中錯誤的是(D)A)計算機不能直接執(zhí)行用C語言編寫的源程序B)C程序經(jīng)C編譯程序編譯后,生成后綴為.obj的文件是一個二進制文件C)后綴為.obj的文件,經(jīng)連接程序生成后綴為.exe的文件是一個二進制文件D)后綴為.obj和.exe的二進制文件都可以直接運行C語言規(guī)定的用戶標(biāo)識符命名規(guī)則,不能出現(xiàn)在標(biāo)識符中的是(B)A)大寫字母 B)連接符 D)下劃線(14)以下敘述中錯誤的是(C)A)C語言是一種結(jié)構(gòu)化程序設(shè)計語言B)結(jié)構(gòu)化程序有順序、分支、循環(huán)三種基本結(jié)構(gòu)組成C)使用三種基本結(jié)構(gòu)構(gòu)成的程序只能解決簡單問題D)結(jié)構(gòu)化程序設(shè)計提倡模塊化的設(shè)計方法(15)對于一個正常運行的C程序,以下敘述中正確的是(A)A)程序的執(zhí)行總是從main函數(shù)開始,在main函數(shù)結(jié)束B)程序的執(zhí)行總是從程序的第一個函數(shù)開始,在main函數(shù)結(jié)束C)程序的執(zhí)行總是從main函數(shù)開始,在程序的最后一個函數(shù)中結(jié)束D)程序的執(zhí)行總是從程序的第一個函數(shù)開始,在程序的最后一個函數(shù)中結(jié)束(19)有以下程序,其中%u表示按無符號整數(shù)輸出(B)main(){unsignedintx=0xFFFF; /*x的初值為十六進制數(shù)*/printf(“%u\n”,x);}/*注意:x是占兩個字節(jié)*/程序運行后的輸出結(jié)果是A)-1 B)65535 第三章順序結(jié)構(gòu)一.教學(xué)重點、難點知識點所占分值考核幾率專家點評C語句分類0-130%簡單識記字符輸出函數(shù)putchar()1-270%難度適中,重點掌握字符輸入函數(shù)getchar()1-270%難度適中,重點掌握格式輸入函數(shù)printf()3-4100%握格式輸出函數(shù)scanf()3-4100%握二.教學(xué)內(nèi)容1.語句C語句共分為5類:1.1控制語句1.2函數(shù)調(diào)用語句:pint“this isactatnt;1.3表達式語句每一個合法的表達式后加上分號(就構(gòu)成了表達式語句。++a;i+j;語句和表達式的區(qū)別:表達式有唯一確定的值,而語句沒有值。1.4賦值語句格式:賦值表達式;i=1,j=2是逗號表達式i=1;j=2;是兩條賦值語句i++;i--;++i;--i;都是賦值語句等價于i=i+1;或i=i-1;1.5空語句:只有一個單獨的分號構(gòu)成的語句。如:;就是一條空語句。1.6復(fù)合語句:用一對{}將若干語句括起來構(gòu)成一條復(fù)合語句。2.輸入輸出語句在使用庫函數(shù)時必須先用預(yù)編譯命令#include<頭文件名>或#include“頭文件名”將相應(yīng)的頭文件包含到源程序中。如:#include<stdio.h>2.1.printf()函數(shù)功能:按格式控制指定的格式輸出數(shù)據(jù)。注意:格式控制包括以%開頭的“格式說明符”和原樣輸出的普通字符。輸出結(jié)果是:a=30,a+b=11(1)d格式%d:按實際長度輸出十進制整數(shù)。%md:輸出占m列,若小于m列,左邊補空格,若大于m列,按實際輸出。%-md:輸出占m列,若小于m列,右邊補空格,若大于m列,按實際輸出。%ld:輸出長整型數(shù)據(jù),輸入輸出長整型數(shù)據(jù)時必須用該格式。例如:printf(“%d,%6d,%-6d,%ld”,386,1234,3456,12345L);輸出結(jié)果:386, ,12345printf(“%2d”,12345);輸出結(jié)果:12345(2)u格式%u:以無符號十進制形式輸出整數(shù)。printf(“%u”,-1);65535ptintf(“%u”,-32768);32768(3)o格式%o:以無符號八進制形式輸出整數(shù),不輸出前導(dǎo)符printf(“%d,%o”,-1,-1);-1,177777(4)x或X格式%x或%X以無符號十六進制形式輸出整數(shù)。不輸出前導(dǎo)符0x或?qū)?,大寫對大寫。printf(“%d,%x,%X,%x”,-1,-1,0xabc,0XAbc);-1,ffff,ABC,abc注:若要輸出十六進制和八進制的前導(dǎo)符,則要用%#o和%#x、%#X格式。0177777,0xffff,0XABC(5)c格式%c用來輸出一個字符,不輸出單引號定界符。%c和%d可以相互轉(zhuǎn)換。a,97printf(“%c,%d”,100,100);d,100(6)s格式用來輸出一個字符串,不輸出雙引號和字符串結(jié)束符。%s:輸出字符串的有效字符。printf(“%s”,”china\0yunnan”);china%ms:輸出占m列,若小于m列,左邊補空格,大于m列,按實際輸出。swfc,swfc,swfc%m.ns:輸出占m列,只輸出字符串的左n個字符到m列的右端。如:printf(“%7.5s”,”yunnan”);yunna(7)f格式:按小數(shù)形式輸出實型數(shù)據(jù)。%f:默認(rèn)輸出6位小數(shù)。如:printf(“%f,%f”,543.12,5.4312e+2);543.120000,543.120000%m.nf:輸出占m列,其中有n位小數(shù)。若超過m列,確保n位小數(shù)后按實際輸出。注意四舍五入問題。如:printf(“%7.3f,%-7.3f,%4.2f”,3.1415726,3.1415926,314.5926);3.142,3.142 ,314.59(8)e格式以指數(shù)形式輸出一個實數(shù)。小數(shù)點前只有一位非零數(shù),5位小數(shù),3位指數(shù)。如:printf(“%e,%e”,123.4,123.45e-7);234000e+002,1.234500e-005(9)g格式自動在%f和%e中選擇較短的一種輸出,對于小數(shù)部分不輸出無意義的如:printf(“%g,%g”,123.45,123.45e-2);123.45,1.2345printf(“%g”,123000000.0);23e+08小結(jié):(1)%%表示輸出一個%。如:printf(“%%d=%d”,10,10);%d=10(2)除了x,e,g大小寫均可外,其它都只能小寫。如:printf(“%d=%D”,20,20);20=%D(3)輸出格式說明符所能操作的數(shù)據(jù)類型必須與輸出項的類型一致。如:printf(“%d”,1.234);/*出錯*/2.2.scanf()函數(shù)注意:(1)可指定數(shù)據(jù)所占的列數(shù),輸入后由系統(tǒng)自動截取相應(yīng)的位數(shù)。如:scanf(“%3d%2d”,&a,&b);若輸入:3863018則:a的值是:386b的值是:30若輸入:3863a的值是:386b的值是:3scanf(“%3c%2d”,&ch,&c);若輸入:3863018則:ch的值是:’3’b的值是:30(2)%*md:表示跳過m列不讀。如:scanf(“%*3d%3d%4d”,&a,&b);若輸入:123456則:a的值是:456b的值是:原來的值。(3)不能在scanf()函數(shù)中指定輸入數(shù)據(jù)的小數(shù)位數(shù)。如:scanf(“%7.5f”,&a);/*出錯*/在scanf()函數(shù)中,輸入時普通字符原樣輸入。如:scanf(“a=%d,b=%d”,&a,&b);若要給a賦值5,b賦值10,正確的輸入是:a=5,b=10scanf(“%d*,%d#,%d”,&a,&b,&c);若要讓a,b,c分別得到1,2,3,正確的輸入是:1*,2#,3<回車>若兩個格式說明符之間沒有其它字符,則在輸入數(shù)據(jù)時,兩數(shù)據(jù)之間要用回車或空格分隔,回車或空格可以是多個。但是,%c格式除外。如:scanf(“%d%d”,&a,&b);若想讓a的值為5,b的值為10。則正確的輸入是:5空格10<回車>或5<回車>10<回車>或5空格空格空格10<回車>(6)多個%c格式之間沒有其它字符,仍然不能用回車或空格來分隔。如:scanf(“%c%c%c”,&a,&b,&c);若輸入:a空格b空格c<回車>a的值是’a’,b的值是空格,c的值是’b’。(7)格式說明符所能操作的數(shù)據(jù)類型必須與對應(yīng)變量的類型相同。如:inta;scanf(“%f”,&a);/*出錯*/總結(jié):1.普通字符原樣輸入,原樣輸出。2.對于%d格式,指定寬度小于輸出寬度,原樣輸出。3.%#o,%#x,%#X表示要輸出八進制的前導(dǎo)符數(shù)字0,和十六進制的前導(dǎo)符0x,0X。4.%x,%X格式,小寫對小寫,大寫對大寫。5.%*md:表示跳過相應(yīng)的輸入項。6.注意進制間的轉(zhuǎn)換,以及無符號數(shù)和帶符號數(shù)之間的轉(zhuǎn)換。7.在scanf()函數(shù)中,給double類型變量輸入數(shù)據(jù)時,應(yīng)該使用%lf類型說明符,而輸出時,可以用%lf,也可以用%lf。三.試題分析1.2008年4月試題分析(16)有以下程序段charch;intk;ch='a';k=12;printf("%c,%d,",ch,ch,k);printf("k=%d\n",k);已知字符a的ASCll十進制代碼為97,則執(zhí)行上述程序段后輸出結(jié)果是A)因變量類型與格式描述符的類型不匹配輸出無定值B)輸出項與格式描述符個數(shù)不符,輸出為零值或不定值C)a,97,12k=12D)a,97,k=122.2007年9月試題分析(15)若在定義語句:int a,b,c,*p=&c;之后,接著執(zhí)行以下選項中的語句,則能正確執(zhí)行的語句是(18)有以下程序段int j; y; scanf("%2d%f%s",&j,name);當(dāng)執(zhí)行上述程序段,從鍵盤上輸入55566 7777abc后,y的值為A)55566.0 B)566.0 C)7777.0 D)566777.0填空(6)執(zhí)行以下程序時輸入1234567<CR>,則輸出結(jié)果是【6】。main(){ }3.2007年4月試題分析語句為變量a1和賦數(shù)值10和和c2賦字符X和的輸入形式中正確的是(注:□代表空格字符)(D)A)10□X□20□Y〈回車〉 B)10□X20□Y〈回車〉C)10□X〈回車〉 D)10X〈回車〉填空(6)執(zhí)行以下程序后的輸出結(jié)果是 。main(){inta=10;}第四章 選擇結(jié)構(gòu)一.教學(xué)重點、難點知識點所占分值考核幾率專家點評關(guān)系運算符及優(yōu)先次序0-140%簡單識記關(guān)系表達式0-150%邏輯運算符及優(yōu)先級1-250%簡單識記邏輯表達式1-250%if語句的幾種形式1-2100%簡單識記if語句的嵌套1-2100%難度適中,重點掌握條件運算符0-1100%難度適中,重點掌握switch語句2-4100%語句標(biāo)號0-110%偏難,不是重點goto1-210%簡單識記二.教學(xué)內(nèi)容1.關(guān)系運算與邏輯運算1.1邏輯值真(非零值) 假(零)1.2關(guān)系運算符及其表達式< > !=關(guān)系運算符優(yōu)先級別低于算術(shù)運算符,高于賦值運算符。(< > 如:a>b+c等價于a>(b+c)a==b<c等價于a==(b<c)a=b<c等價于a=(b<c)44表達式的值為“真。4=4表達式不合法關(guān)系表達式的值只有1和,其中1表示“真,0表示“假。1.3邏輯運算符及其表達式&&邏輯“與”||邏輯“或”!邏輯“非”》&&》||運算規(guī)則:邏輯&&:遇假則假邏輯||:遇真則真例如:3>4結(jié)果是:03&&4結(jié)果是:1!3&&4結(jié)果是:00||3結(jié)果是:1則不再進行&&右邊表達式的運算,且將整個&&表達式的值定為0;在求解邏0式的運算,且將整個邏輯||表達式的值定為2.if語句2.1.if語句格式:1) 語句語句else語句稱為:全if 單if注意:(1)if后的表達式必須用()括起,else后沒有表達式。(2)if和else都只能控制緊跟它的一條語句,若要控制多條語句,必須用一對{}括起構(gòu)成一條復(fù)合語句。2.2執(zhí)行方式:2.21f語句的執(zhí)行方式首先判斷表達式的值是否“真“真,則執(zhí)行語句部分如果表達式的值“假“跳過語句部分執(zhí)行if語句后面的其它語句。2.22fese語句的執(zhí)行方式:首先判斷表達式的值是否為“真,若“真,則執(zhí)行語句部分。如果表達式的值為“假,則執(zhí)行e語句后面的語句。例1:main(){intm=5;if(m++>5)printf(“m=%d”,m);elseprintf(“m=%d”,m--);}例2:main(){intm=5;if(++m>5)printf(“m=%d”,m);elseprintf(“m=%d\n”,m--);}2.3if語句的嵌套if(表達式if(表達式語句語句elseif(表達式語句語句else總是與前面最近的且未配對的if語句配對,組成一對if-else語句。if(表達式if(表達式語句elseif(表達式語句語句第一個else語句有的同學(xué)會把它誤以為和第一個if配對,但是實際的情況是和第二個if語句配對,即:if(表達式if(表達式2) 語句elseif(表達式語句語句例1.請分析下列程序的輸出結(jié)果。main(){ints,t,a,b;sanf(“%d%d”,&a,&b);s=1;t=1;if(a>0)s=s+1;if(a>b)t=s+1;elseif(a==b)t=s;elset=2*s;printf(“%d\n”,t);}若運行時輸入5 10回車,則程序的執(zhí)行結(jié)果是?main(){ints,t,a,b;sanf(“%d%d”,&a,&b);s=1;t=1;if(a>0){s=s+1;if(a>b)t=s+1;}elseif(a==b)t=s;elset=2*s;printf(“%d\n”,t);}若運行時輸入5 10回車,則輸出結(jié)果是?例2.分析下列程序的輸出結(jié)果main(){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\n”,a,b,c);}main(){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\n”,a,b,c);}聯(lián)想交換的思想:若要交換a和b的值,通常的做法是:{t=a;a=b;b=t;}3.條件運算符和條件表達式條件運算符:?:是唯一一個三目運算符。優(yōu)先級別高于賦值運算,結(jié)合方向自右向左。格式:表達式1?表達式2:表達式3執(zhí)行方式:先求“表達式式的值。例如:max=a>b?a:b;相當(dāng)于:if(a>b)max=a;elsea>b?a:c>d?c:d相當(dāng)于a>b?a:(c>d?c:d)的值不要求具有相同的類型,最后結(jié)果的類型為表達式3中較高類型的一種。如:(x=6)>(y=5)?1:1.5表達式的值是1.0而不是4.switch語句格式:switch(表達式){case 常量表達式1:語句常量表達式…常量表達式n:語句:語句}說明:(1)都是關(guān)鍵字?;ɡㄌ柪锩娴恼Z句叫做switch語句體。Switch語句體中可以沒有語句和default部分。(2)Switch語句的圓括號中表達式的值必須是整型或是字符型,不能為實型。case后的表達式可以是求得整型量的常量表達式,但是常量表達式中不能含有變量。(3)執(zhí)行SwitchSwitch后圓括號的表達式的值,然后將這個值與語句體中case后的常量表達式的值相比較,如果某個常量表達式的值與之相等,則執(zhí)行該case后的語句塊;如果沒有任何一個常量表達式的值與之相等,則執(zhí)行default后的語句塊。(4)在執(zhí)行的時候如果遇到break語句,則跳出switch語句。如果執(zhí)行完一個case或者default語句塊后沒有遇到break,則繼續(xù)順序往下執(zhí)行,知道遇到語句或者語句體被執(zhí)行完畢為止。(5)default最多只能有一個,通常出現(xiàn)在switch語句的最后部分,但也可以出現(xiàn)在case之間或所有的case之前。四.試題分析1.2008年4月試題分析:(17)已知字母A的ASCⅡ代碼值為65,若變量kk為char型,以下不能正確判斷出kk中的值為大寫字母的表達式是kk>='A'&&kk<='Z'B)!(kk>='A'||kk<='Z')C)(kk+32)>='a'&&(kk+32)<='z'D)isalpha(kk)&&(kk<91)(18)當(dāng)變量c的值不為2、4、6時,值也為“真”的表達式是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)(19)若變量已正確定義,有以下程序段inta=3,b=5,c=7;if(a>b)a=b;c=a;if(c!=a)c=b;printf("%d,%d,%d\n",a,b,c);其輸出結(jié)果是A)程序段有語法錯B)3,5,3C)3,5,5D)3,5,7(20)有以下程序#include<stdio.h>main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;case1:b++;}case2:a++;b++;case3:a++;b++;}printf(“a=%d,b=%d\n”,a,b);}程序的運行結(jié)果是A)a=1,b=0B)a=2,b=2C)a=1,b=1D)a=2,b=12.2007年9月試題分析(20)有以下計算公式xx

(x0)xyx

(x0)若程序前面已在命令行中包含math.h文件,不能夠正確計算上述公式的程序段是A)if(x>=0)y=sqrt(x); B)y=sqrt(x);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(-x);(21)設(shè)有條件表達式:(EXP)?i++:j-- ,則以下表達式中與(EXP)完全等價的是,程序前面已在命令行中包含ctype.h于判斷c中的字符是否為大寫字母的表達式是C)'A'<=c&&cD)c<=('z'-32)&&('a'-32)<=c(7)以下程序的功能是:輸出a、b、c三個變量中的最小值。請?zhí)羁铡?include<stdio.h>main(){ scanf("%d%d%d",&a,&b,&c);t1=a<b? 【7】;t2=c<t1?【8】;printf("%d\n",t2);}3.2007年4月試題分析(20)設(shè)變量x和y均已正確定義并賦值,以下if語句中,在編譯時將產(chǎn)生錯誤信息的是(C)C)if(x>y)- D)if(y<0){;}elsey++; elsex++;(21)以下選項中,當(dāng)x為大于1的奇數(shù)時,值為0的表達式()(22)以下敘述中正確的是(C)A)break語句只能用于switch語句體中B)continue語句的作用是:使程序的執(zhí)行流程跳出包含它的所有循環(huán)C)break語句只能用在循環(huán)體內(nèi)和switch語句體內(nèi)D)在循環(huán)體內(nèi)使用break語句和continue語句的作用相同(23)有以下程序()main(){intk=5,n=0;do{switch(k)default;n=0;k--;case2:case4:n+=2;k--;break;}printf(“%d”,n);}while(k>0&&n<5);}程序運行后的輸出結(jié)果是A)235 B)0235 C)02356 D)2356第五章 循環(huán)結(jié)構(gòu)一.教學(xué)重點、難點知識點所占分值考核幾率專家點評while語句2-3100%重點理解重點掌握do...while語句2-3100%重點理解重點掌握for語句5-7100%重點理解重點掌握循環(huán)嵌套4-6100%重點理解重點掌握循環(huán)比較0-120%簡單識記break語句2-370%難度適中,重點掌握continue語句2-350%難度適中,重點掌握C語言的章節(jié)中,老師在教學(xué)中一定要把它它當(dāng)做重點中的重點來抓!二.教學(xué)內(nèi)容while語句格式: while(表達式){注意:

循環(huán)體語句}while是C語言的關(guān)鍵字。1.2.while后必須有小括號將表達式括起,里面的表達式是C語言中任意的表達循環(huán)。1.3.while語句也只能控制緊跟它的一條語句。若需要控制多條語句,必須用{}括起,構(gòu)成一條復(fù)合語句。1.4.圓括號內(nèi)的表達式不能省略。循環(huán)體中的可以由一條空語句構(gòu)成,表示循環(huán)例如:分析下列程序的輸出結(jié)果。1.5.執(zhí)行過程:(1)計算圓括號中表達式的值。若為非0則執(zhí)行循環(huán)體語句,若為0則跳出循環(huán)。(2)執(zhí)行完循環(huán)體語句后重復(fù)過程(。main(){inti=1,sum=0;while(i<=100){i++;}printf(“sum=%d”,sum);}這是學(xué)習(xí)C語言基礎(chǔ)循環(huán)的最好的練習(xí),老師讓學(xué)生練習(xí)的時候可以把i控制在以內(nèi),讓學(xué)生知道什么是循環(huán).d0-while語句格式: do循環(huán)體hi(表達式;注意:2.1.do是C語言的關(guān)鍵字,需要和一起搭配使用。2.2.while后必須有小括號將表達式括起,里面的表達式是C語言中任意的表達循環(huán)。2.3.while語句也只能控制緊跟它的一條語句。若需要控制多條語句,必須用{}括起,構(gòu)成一條復(fù)合語句。2.4.圓括號內(nèi)的表達式不能省略。循環(huán)體中的可以由一條空語句構(gòu)成,表示循環(huán)體部分不做任何的操作。如:語句*/循環(huán)結(jié)構(gòu)整個語法上也是C少,它同樣表示語句的結(jié)束。2.6.執(zhí)行過程:(1)執(zhí)行循環(huán)體語句。(2)計算圓括號中表達式的值。若為非0則重復(fù)(否則跳出循環(huán)。for語句格式:for(表達式1;表達式2;表達式循環(huán)體3.1.for是C語言的關(guān)鍵字.達式1的作用是賦初值;表達式2的作用是控制循環(huán);表達式3的作用是賦值。3.3.for語句也只能控制緊跟它的一條語句。若需要控制多條語句,必須用{}括起,構(gòu)成一條復(fù)合語句。3.4.表達式均可以省略,若省略表達式2,則認(rèn)為表達式2的值始終為真。而兩個分號絕不能省。3.5執(zhí)行過程:(1)計算表達式()計算表達式,若其值為非0,轉(zhuǎn)步驟(若其值為0則轉(zhuǎn)步驟(;(3)執(zhí)行一次for循環(huán)體。(4)計算表達式,轉(zhuǎn)步驟(。(5)結(jié)束循環(huán),執(zhí)行for語句后面的語句。4.循環(huán)結(jié)構(gòu)的嵌套在一個循環(huán)體內(nèi),又包含另一個循環(huán)。三種循環(huán)語句可以相互嵌套。main(){inti,j;for(j=1;j<4;j++)printf(“\ni=%d,j=%d”,i,j);for(j=1;j<4;j++)printf(“\ni=%d,j=%d”,i,j);}for(i=1;;i++)printf(“%d”,i);/*表達式2的值始終為真,這是死循環(huán)*/5.break和continue語句break語句用于結(jié)束循環(huán)或switch結(jié)構(gòu)。continue語句用于結(jié)束本次循環(huán),跳過循環(huán)中continue后尚未執(zhí)行的語句,繼續(xù)進行下一次循環(huán)條件的判斷。注意:break語句只能控制直接包含它的switch結(jié)構(gòu)或循環(huán)。continue語句只能控制直接包含它的循環(huán)。例main(){inti,s1=0,s2=0,s3=0;for(i=1;i<=10;i++){switch(i%5){case1:s1++;case2:s2++;break;case3:s3++;contiune;}}printf(“%d,%d,%d”,s1,s2,s3);}例把之間能被4main(){inti;for(i=1;i<=100;i++){if(i%4!=0)continue;printf(”%3d”,i);}}三.試題分析1.2008年4月試題分析(21)有以下程序#include<stdio.h>main(){intx=8;for(;x>0;x--){if(x%3){printf(“%d,”,x--);continue;}printf(“%d,”,--x);}}程序的運行結(jié)果是A)7,4,2B)8,7,5,2C)9,7,6,4D)8,5,4,2(22)以下不構(gòu)成無限循環(huán)的語句或者語句組是A)n=0;B)n=0;do{++n;}while(n<=0);while(1){n++;}C)n=10;D)for(n=0,i=1;;i++)n+=i;while(n);{n--;}(31)有以下程序#include<stdio.h>main(){ints[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;for(i=0;i<12;i++)c[s[i]]++;for(i=1;i<5;i++)printf(“%d”,c[i]);printf(“\n”);}程序的運行結(jié)果是A)1234B)2344C)4332D)1123(32)有以下程序#include<stdio.h>voidfun(int*s,intnl,intn2){inti,j,t;i=nl;j=n2;while(i<j){t=s[i];s[i]=s[j];s[j]=t;i++;j--;}}main(){inta[10]={1,2,3,4,5,6,7,8,9,0},k;fun(a,0,3);fun(a,4,9);fun(a,0,9);for(k=0;k<10;k++)printf(“%d”,a[k]);printf(“\n”);}程序運行的結(jié)果是A)0987654321B)4321098765C)5678901234D)0987651234(33)有以下程序#include<stdio.h>#include<string.h>voidfun(char*s[],intn){char*t;inti,j;for(i=0;i<n-1;i++)if(strlen(s[i])>strlen(s[j])){t=s[i];s[i]=s[j];s[j]=t;}}main(){char*ss[]={“bcc”,”bbcc”,”xy”,”aaaacc”,”aabcc”};fun(ss,5);printf(“%s,%s\n”,ss[0],ss[4]);}程序的運行結(jié)果是A)xy,aaaaccB)aaaacc,xyC)bcc,aabccD)aabcc,bcc(35)有以下程序#include<stdio.h>voidfun(char*a,char*b){while(*a==’*’)a++;while(*b=*a){b++;a++;}}main(){char*s=”****a*b****”,t[80];fun(s,t);puts(t);}程序的運行結(jié)果是A)*****a*bB)a*bC)a*b****D)()若有定義:int;,以下程序段的輸出結(jié)果是【。for(k=2;k<6;k++,k++)printf(“##%d”,k);(9以下程序段的定義語句中[1的初值【程序運行后輸出的內(nèi)容【1。#include<stdio.h>main(){intx[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},*p[4],i;for(i=0;i<4;i++){p[i]=&x[2*i+1];printf(“%d”,p[i][0]);}printf(“\n”);}2.2007年9月試題分析(19)若變量已正確定義,有以下程序段i=0;do printf("%d,",i); while(i++);printf("%d\n",i);其輸出結(jié)果是A)0,0 B)0,1 C)1,1 D)程序進入無限循環(huán)(22)有以下程序main(){ ; }程序的運行結(jié)果是A)741 B)963 C)852 D)875421(24)有以下程序main(){ printf("%d\n",m);}程序的運行結(jié)果是A)0 B)1 C)2 D)3(34)有以下程序void *a,n)/*函數(shù)的功能是將a所指數(shù)組元素從大到小排序*/{ t,i,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(){ fun(c+4,6);for(i=0;i<10;i++) printf("%d,",c[i]);printf("\n");}程序的運行結(jié)果是(8)以下程序的輸出結(jié)果是【9】。#include <stdio.h>main(){ }}(9)有以下程序段,且變量已正確定義和賦值for(s=1.0,k=1;k<=n;k++) s=s+1.0/(k*(k+1));printf("s=%f\n\n",s);請?zhí)羁?,使下面程序段的功能與之完全相同s=1.0;k=1;) { ; }printf("s=%f\n\n",s);(10)以下程序的輸出結(jié)果是【12】。main(){ i;for(i='a';i<'f';i++,i++) printf("%c",i-'a'+'A');printf("\n");}3.2007年4月試題分析(22)以下敘述中正確的是(C)A)break語句只能用于switch語句體中B)continue語句的作用是:使程序的執(zhí)行流程跳出包含它的所有循環(huán)C)break語句只能用在循環(huán)體內(nèi)和switch語句體內(nèi)D)在循環(huán)體內(nèi)使用break語句和continue語句的作用相同(23)有以下程序()main(){intk=5,n=0;do{switch(k)default;n=0;k--;case2:case4:n+=2;k--;break;}printf(“%d”,n);}while(k>0&&n<5);}程序運行后的輸出結(jié)果是A)235 B)0235 C)02356 D)2356(24)有以下程序mian(){inti,j;{for(j=i;j<4;j++)printf(“%d*%d=%d“,i,j,i*j);printf(“\n”);}}程序運行后的輸出結(jié)果是()B)2*1=22*2=4 2*2=42*3=6C)1*1=1 1*1=1}(7)當(dāng)執(zhí)行以下程序時,輸入1234567890<回車>,則其中while循環(huán)體將執(zhí)行 次。#include<stdio.h>main(){charch;Whi(hgtha()’0’)pint(#);}一.教學(xué)內(nèi)容

字符型數(shù)據(jù) 位運算1.字符型數(shù)據(jù)1.1字符常量:用一對單引號括起的一個字符。例如:’A’,’a’,’6’是合法的字符型常量?!盿”,’ab’,A,1.2轉(zhuǎn)義字符常量:必須以一個反斜杠“\”開頭.常見的轉(zhuǎn)義字符見表5-1。\n:回車換行 \t:橫向跳格\v:豎向跳格\b:退格 \\:\ 1.3 \ddd:ddd表示最多可以有三位8進制數(shù)。1.4 \xhh:hh表示最多可以有二位16進制數(shù)。注意:三位8進制數(shù)不一定以0開頭,只要是0~7之間的數(shù)字即可。例:下列字符常量中合法的是()A.\027 B.’\028’ D.’\0x1f’E.’\1234’ H.’123’I.’\12’ K.’\xf’例:下列字符常量中合法的是()A.’/’ ’’ D.’”’1.5字符型變量關(guān)鍵字:char,字符型變量在內(nèi)存中占1字節(jié)。例:chara=’5’;‘a(chǎn)’字符的ASCII碼值是97字符的ASCII碼值是65同一字母的大小寫之差是32,那么我們要把小寫字母變成大寫字母就相應(yīng)的字母減去32即可,同樣大寫字母加上32后就變成了與其相對應(yīng)的小寫字母。數(shù)字’0’~’9’對應(yīng)的ASCII碼值是48~57。2.字符數(shù)據(jù)的輸入輸出2.1.putchar()和printf()格式:putchar(字符), printf(“%c”,ch);功能:輸出一個字符,但不輸出單引號。其中“字符”可以是一切合法的字符型或整型數(shù)據(jù)。它會自動將整型數(shù)據(jù)轉(zhuǎn)換為相應(yīng)的字符輸出。aputha(65;A pint(“”,65);Aharh=‘g;ptha(h輸出:gcharch=‘g’;printf(“%c”,ch);輸出:g2.2.getchar()格式:getchar()功能:接收一個從鍵盤輸入的字符。注意:1.它可以接收從鍵盤上輸入的任何字符,包括回車符、空格符等。2.任何輸入都是在回車后方按順序送入內(nèi)存中即才被函數(shù)接收如hara,b;=gtha(b=gtha(;若輸入:1<回車>則變量a的值為字符‘1’變量b的值為回車符。2.3.scanf都是合法有效的字符,都將被讀入并賦值給相應(yīng)的變量。3.位運算(詳細的見課本頁)二.試題分析1.2008年試題分析(13)以下選項中不屬于字符常量的是(16)有以下程序段charch;intk;ch='a';k=12;printf("%c,%d,",ch,ch,k);printf("k=%d\n",k);已知字符a的ASCll十進制代碼為97,則執(zhí)行上述程序段后輸出結(jié)果是A)因變量類型與格式描述符的類型不匹配輸出無定值B)輸出項與格式描述符個數(shù)不符,輸出為零值或不定值C)a,97,12k=12D)a,97,k=12(17)已知字母A的ASCⅡ代碼值為65,若變量kk為char型,以下不能正確判斷出kk中的值為大寫字母的表達式是A)kk>='A'&&kk<='Z'B)!(kk>='A'‖kk<='Z')C)(kk+32)>='a'&&(kk+32)<='z'D)isalpha(kk)&&(kk<91)示的形式是11110000。若要求將a的高4位取反,低4位不變,所要執(zhí)行的運算是A)a^bB)a|bC)a&bD)a<<42.2007年9月試題分析,程序前面已在命令行中包含ctype.h于判斷c中的字符是否為大寫字母的表達式是C)'A'<=c&&cD)c<=('z'-32)&&('a'-32)<=cASCII代碼值是c1的值是'D'。執(zhí)行語句printf("%d,%d",c1,c2-2);后,輸出結(jié)果是B)A,68 C)65,66 D)65,68main(){ i;for(i='a';i<'f';i++,i++) printf("%c",i-'a'+'A');printf("\n");}3.2007年4月試題分析(25)以下合法的字符型常量是()(27)已知大寫字母A的ASCII碼是aASCII碼是將變量c中大寫字母轉(zhuǎn)換為對應(yīng)小寫字母的語句是()(7)當(dāng)執(zhí)行以下程序時,輸入1234567890<回車>,則其中while循環(huán)體將執(zhí)行 次。#include<stdio.h>main(){charch;Whi(hgtha()’0’)pint(#);}第六章 函數(shù)一.教學(xué)重點、難點知識點所占分值考核幾率專家點評庫函數(shù)1-260%簡單,重點識記知識點函數(shù)的定義0-150%簡單,重點識記知識點形參和實參及函數(shù)調(diào)用2-380%難度適中,重點理解重點掌握函數(shù)調(diào)用的一般形式和調(diào)用方式2-390%偏難,重點掌握重點理解函數(shù)的說明及其位置0-160%簡單識記函數(shù)的嵌套調(diào)用1-390%偏難,重點掌握重點理解函數(shù)的遞歸調(diào)用1-280%偏難,重點掌握重點理解二.教學(xué)內(nèi)容1.函數(shù)的定義:

函數(shù)是C程序的基本單位。函數(shù)返回值的類型名 函數(shù)(類型名1 形參名1類型名2 形參名){說明部分語句部分}說明:1.1一個C程序可以由一個或多個源程序文件組成。一個源程序文件可以由一個或多個函數(shù)組成。C程序>源程序>函數(shù)1.2函數(shù)返回值的類型名缺省時,返回值類型默認(rèn)為int型,而不是沒有返回值。若沒有返回值的時候應(yīng)該為void.1.3主函數(shù)的函數(shù)名必須是main。1.4函數(shù)后面的括號是必不可少的,括號中的為形式參數(shù)列表。形式參數(shù)用于數(shù)據(jù)的傳遞,同樣是用戶標(biāo)識符。在同一函數(shù)內(nèi)形式參數(shù)必須是唯一的。如果函數(shù)不帶形式參數(shù),則形式參數(shù)列表可以省略。1.5函數(shù)體部分的一對花括號必不可少。1.6函數(shù)之間的關(guān)系是相互平行、獨立的,不是相互隸屬的。1.7函數(shù)不能嵌套定義,不能在一個函數(shù)體內(nèi)定義另一個函數(shù)。1.8函數(shù)可以相互調(diào)用,但不能調(diào)用main()函數(shù)。1.9函數(shù)的分類:1.從形式分:無參函數(shù):如:main() getchar()帶參函數(shù):如:strlen(“abc”)2.從用戶使用的角度分用戶自定義函數(shù):doubleadd(inta,intb){函數(shù)體}1.10函數(shù)的定義的比較類型名函數(shù)名(類型名形參1,類型名形參2,…)/*函數(shù)首部*/{函數(shù)體}intmin(intintintmin(x,y){函數(shù)體} intx,y;/*現(xiàn)代方式*/ {函數(shù)體}/*傳統(tǒng)方式*例如:floatfun(intx,intfloatfun(x,y){ } intint{ }以上函數(shù)的定義是合法的。intfun(intx,y){ … }intfun(intx;int{ … }intfun(intx,y)int{ … }intfun(x,y){intx,y;…}intfun(x,y)int{…}以上函數(shù)的定義均是非法的。2.函數(shù)的參數(shù)和函數(shù)值2.1.函數(shù)的參數(shù)可以分為:形式參數(shù)和實際參數(shù)。形參:函數(shù)定義時函數(shù)名后小括號內(nèi)的參數(shù)。實參:函數(shù)調(diào)用時函數(shù)名后小括號內(nèi)的參數(shù)。注意:(1)形參只有在該函數(shù)被調(diào)用時才占內(nèi)存單元,即該變量才可用;函數(shù)調(diào)用結(jié)束時形參所占的內(nèi)存單元被釋放,即不可用。(2)實參和形參的數(shù)據(jù)類型應(yīng)該對應(yīng)相同。否則,必須將函數(shù)的定義放在函數(shù)調(diào)用之前或在調(diào)用之前對函數(shù)作原型聲明。例如:voidsum(intx,inty)//函數(shù)定義,x,y是被調(diào)用函數(shù)的參數(shù),我們叫它形參{printf(“%d”,x+y);}main(){sum(3,5);//函數(shù)調(diào)用,這里的3和5是調(diào)用函數(shù)的參數(shù),我們叫為實參}/*類型對應(yīng)不相同*/2.2.函數(shù)值:函數(shù)的返回值即函數(shù)值。語句的格式:表達式;或(表達式);功能:將表達式的值作為函數(shù)值返回給主調(diào)函數(shù),并結(jié)束本函數(shù)的執(zhí)行。注意:2.21.函數(shù)值應(yīng)通過語句返回,一個函數(shù)中可以有多條語句,只要執(zhí)行其中任何一條語句,該函數(shù)立即結(jié)束執(zhí)行,并將該后表達式的值返回。例如:intmax(inta,intb){a;b;}2.22.函數(shù)值的類型保持與函數(shù)定義時所指定的類型相同,而與后表達式的值的類型無關(guān)。若定義函數(shù)時不指定函數(shù)的類型,則默認(rèn)是max(floata,floatb) intmax(floata,floatb){returna/b;} a/b;}例如:voidfun(inta){printf(“%d”,a);}3.函數(shù)調(diào)用調(diào)用格式:函數(shù)名(實參)無參調(diào)用格式:函數(shù)名()clrscr();帶參調(diào)用格式:函數(shù)名(實參列表)3.1調(diào)用函數(shù)時,函數(shù)名必須一致。函數(shù)名是唯一區(qū)別函數(shù)的標(biāo)志。3.2實參和形參的類型匹配,個數(shù)一致,形式上一一對應(yīng)。3.3一般情況下,函數(shù)應(yīng)該先定義后調(diào)用。3.4函數(shù)可以直接或者間接調(diào)用自己,稱為遞歸調(diào)用。例如:voidswap(inta,intb)/*函數(shù)定義*/{a=a+b;b=a-b;a=a-b;}main(){inta=2,b=5;swap(a,b);/*函數(shù)調(diào)用*/printf(“a=%d,b=%d”,a,b);}4.函數(shù)的原型聲明格式:函數(shù)類型 函數(shù)名(形參類型1,形參類型2,…); 或函數(shù)類型 對上例中的swap函數(shù)作原型聲明的格式:voidswap(int,int);voidswap(inta,intb);voidswap(intx,inty);注意:若被調(diào)函數(shù)定義在主調(diào)函數(shù)之前時,可以不作原型聲明。若被調(diào)函數(shù)定義在主調(diào)函數(shù)之后,則在調(diào)用前應(yīng)作原型聲明。例如:voidswap(inta,intb)/*函數(shù)定義*/{a=a+b;b=a-b;a=a-b;}main(){inta=2,b=5;swap(a,b);/*函數(shù)調(diào)用*/printf(“a=%d,b=%d”,a,b);}main(){inta=2,b=5;voidswap(int,int);/*原型聲明*/swap(a,b);/*函數(shù)調(diào)用*/printf(“a=%d,b=%d”,a,b);}voidswap(inta,intb)/*函數(shù)定義*/{a=a+b;b=a-b;a=a-b;}如果在程序文件的開始就對函數(shù)作外部原型聲明,則在各主調(diào)函數(shù)中不必再作原型聲明。例:voidswap(int,int);/*外部原型申明*/main(){intx=1,y=2;swap(x,y);}voidswap(inta,intb){……}補充:若果形參中有數(shù)組,則作原型聲明時數(shù)組的中括號不能省略。例如:floatfun(doubleb[]){ }可以用以下方式原型聲明:floatfun(double[]);floatfun(doublea[]);而以下的聲明方式是錯誤的:floatfun(doubleb);5.函數(shù)的嵌套調(diào)用和遞歸調(diào)用嵌套調(diào)用:在一個函數(shù)內(nèi)調(diào)用另一個函數(shù)。遞歸調(diào)用:在一個函數(shù)內(nèi)直接或間接調(diào)用它本身。若在函數(shù)A內(nèi)直接調(diào)用函數(shù)AA調(diào)用函數(shù)B,函數(shù)B又調(diào)用函數(shù)A則稱為間接遞歸調(diào)用。例longfun(intk){if(k==1||k==2)1;elsefun(k-1)+fun(k-2);}main(){intn;printf(“%ld”,fun(n));}例intfunc(inta,intb){(a+b);}main(){intx=2,y=5,z=8,r;printf(“%d\n”,r);}6.函數(shù)的參數(shù)傳遞C語言中函數(shù)參數(shù)之間的數(shù)據(jù)傳遞僅僅通過實參向形參的單向數(shù)據(jù)傳遞,即“值傳遞“。不能我們不能通過形參的改變來改變實參??偨Y(jié):(1)數(shù)據(jù)只能從實參向形參單向傳遞。(2)到目前為止,函數(shù)之多能返回一個值。就是return帶回來的值。例如:voidswap(inta1,intb1)/*函數(shù)定義*/ voidswap(int*a3,int*b3){ {intt1; intt2;} }{ {inta=2,b=5; inta2=2,b2=5;} }地址值變量10002a10025b1004a11006b110081010101210141016用地址表來講解這些問題比較好。三.試題分析1.2008年4月試題分析(34)有以下程序#include<stdio.h>intf(int{intif(x==0||x==1)(3);y=x*x-f(x-2);y;}main(){intz=f(3);printf(“%d\n”,z);}程序的運行結(jié)果是A)0B)9C)6D)8(12以下程序的輸出結(jié)果是【1。#include<stdio.h>voidfun(int{if(x/2>0)fun(x/2);printf(“%d”,x);}main(){fun(3);printf(“\n”);}2.2007年9月試題分析(25)若函數(shù)調(diào)用時的實參為變量時,以下關(guān)于函數(shù)形參和實參的敘述中正確的是A)函數(shù)的實參和其對應(yīng)的形參共占同一存儲單元B)形參只是形式上的存在,不占用具體存儲單元C)同名的實參和形參占同一存儲單元D)函數(shù)的形參和實參分別占用不同的存儲單元(27)以下敘述中錯誤的是A)改變函數(shù)形參的值,不會改變對應(yīng)實參的值B)函數(shù)可以返回地址值C)可以給指針變量賦一個整數(shù)作為地址值D)當(dāng)在程序的開頭包含頭文件stdio.h時,可以給指針變量賦NULL3.2007年4月試題分析(8)以下程序的運行結(jié)果是 。intk=0;voidfun(int{m+=k;k+=m;printf(“m=%d\n k=%d”,m,k++);}main(){inti=4;fun(i++);printf(“i=%dk=%d\n”,i,k);}第七章 數(shù)組一.教學(xué)重點、難點知識點所占分值考核幾率專家點評一維數(shù)組的定義及引用1-380%簡單,重點掌握一維數(shù)組的初始化1-280%簡單,重點掌握二維數(shù)組的定義及引用3-490%二維數(shù)組的初始化1-290%簡單,重點掌握通過賦初值定義二維數(shù)組1-260%偏難,重點理解二.教學(xué)講點8.1一維數(shù)組的定義和引用8.1.1一維數(shù)組的定義格式:類型名數(shù)組名[常量表達式];例如:inta[8];注意:1.數(shù)組名屬于用戶標(biāo)識符,必須滿足用戶標(biāo)識符的命名規(guī)則。如:intdo[5];float3com[10];chara-b[5];都是非法的定義值必須是大于0正整數(shù),表示數(shù)組元素的個數(shù),也成為數(shù)組的長度。如:inta[5.3];inta[-4];inta[n];inta[0];{intinta[N];}都是非法的定義#defineM5inta[M];3.同一數(shù)組元素在內(nèi)存中所占的存儲空間是依次連續(xù)的,每個數(shù)組只能有一個下標(biāo),數(shù)組下標(biāo)是從0開始,到數(shù)組長度減4結(jié)束。例如:inta[5];a[0] 8.1.2一維數(shù)組元素的引用格式:數(shù)組名[下標(biāo)表達式]如:doublea[10];/*定義數(shù)組*/intb=a[4];/*引用數(shù)組元素a[4]*/intb=a[2*2];/*引用數(shù)組元素a[4]*/說明:1.數(shù)組中的元素其實就是一個變量,占一個存儲單元。如數(shù)組b中的變量就是int型的變量。2.引用數(shù)組元素時,下標(biāo)表達式的值的上限為定義是常量表達式減一,下限為0.在引用時保證下標(biāo)不能超過定義時的常量表達式減一,即下標(biāo)不能越界。3.數(shù)組是一個構(gòu)造類型,是集合的概念,因此不能整體引用數(shù)組里面的所用元素。企圖簡單地通過數(shù)組名b體代表其中的4個int類型的變量是不行。注意:不能對數(shù)組進行整體引用,只能單獨引用其元素。inta[10];intb[10]=a;/*錯誤的*/intb[10]=a[10];/*錯誤的,沒有元素a[10]*/floata[10],b[10];b=a;/*錯誤,a代表整個數(shù)組,不能整體引用*/b[0]=a[0];b[1]=a[1];等for(i=0;i<100;i++)a[i]=b[i];8.1.3一維數(shù)組的初始化在定義一維數(shù)組的同時可以將各元素的初值依次放在一對{}中賦給數(shù)組,初值之間用逗號隔開。例如:inta[10]={1,2,3,4,5,6,7,8,9,10};inta[5]=1,2,3,4,5;錯inta[5]={1;2;3;4;5};錯注意:數(shù)少于數(shù)組元素的個數(shù),則將初值依次賦給前面的元素,而未得到初值的元素自動賦零。例如:inta[5]={1,2,3,4,5,6};inta[5]={1,2,3};inta[4]={2*2};inta[3]={0};(2)可以通過賦初值來定義數(shù)組的大小。此時數(shù)組的長度可以省略。若定義時,未賦初值,則長度絕不能省略。例如:inta[]={1,2,3,4};數(shù)組的長度是int];是非法的。(3)只能在定義時可以用{}給數(shù)組整體賦值,不是定義時,則只能單獨給每個數(shù)組元素賦值。例如:inta[4];a={1,,或a[4]{1,,3,}是非法的。inta[4]={1,2,3};本節(jié)習(xí)題:下列一維數(shù)組定義中正確的是( 。A.inta[n];B.int];C.intD.int E.inta[2]={1,3,4};inta[0]={0};inta[5]={0};H.inta[5];a[5]={123,456};I.inta[5];a={1,2,3,4,5};J.inta[N=5];K.{intn=5;inta[n];}L.inta[2*3];M.inta[3]={1,2,34};8.2二維數(shù)組8.2.1二維數(shù)組的定義格式:類型名數(shù)組名[常量表達式1][常量表達式2],….例如:inta[2][3];a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]在內(nèi)存中的存放形式依次連續(xù))a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]8.2.2二維數(shù)組元素的引用格式:數(shù)組名[下標(biāo)表達式1][下標(biāo)表達式2]注意:1.不論是一維數(shù)組還是二維數(shù)組都不能整體引用。例如:inta[3][4];intb[3][4]=a;/*是非法的*/inta[3][4]={0},intb,n=2;b=a[2][n];執(zhí)行上述語句后,問b的值是多少?2.引用數(shù)組元素時,下標(biāo)可以是C語言中任何合法的表達式,且可以含有變量。inta[2][3]={1,2,3,4,5,6};intb;b=a[10.5%5][2];/*錯誤*/8.2.3二維數(shù)組初始化1.直接賦值inta[3][4]={1,2,3,4,5,6,7,8,9};問a[2][0]的值是多少?9a[2][2]的值是多少?0int[2][]={,0,,0,;/非法的*/2.按行賦值int[3][]{1,,},{,5,}{7,,9};注意:出現(xiàn)空花括號{}對。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,};inta[3][4]={{1,2,3,4},{},{10,11,12,13}};inta[3][4]={1,2,3,4},{5,6,7,8,},{10,11,12,13};以上定義均是非法的。維則不能省略。若定義時未賦初值,則各維的長度均不能省略。例如:inta[][3]={1,2,3,5,4,6};int][3];或inta[3][];都是非法的。例:有如下程序main(){inta[3][3]={{1,2},{3,4},{5,6}};inti,j,s=0;s+=a[i][j];printf(“%d\n”,s);}輸出結(jié)果是?三.試題分析1.2008年4月考試試題分析(24)以下錯誤的定義語句是A)intx[][3]={{0},{1},{1,2,3}};B)intx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};C)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數(shù)組元素正確引用的是A)a[2][!1]B)a[2][3]C)a[0][3]D)a[1>2][!1](31)有以下程序#include<stdio.h>main(){ints[12]={1,2,3,4,4,3,2,1,1,1

溫馨提示

  • 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

提交評論