2023年計算機(jī)等級考試二級C語言復(fù)習(xí)資料新_第1頁
2023年計算機(jī)等級考試二級C語言復(fù)習(xí)資料新_第2頁
2023年計算機(jī)等級考試二級C語言復(fù)習(xí)資料新_第3頁
2023年計算機(jī)等級考試二級C語言復(fù)習(xí)資料新_第4頁
2023年計算機(jī)等級考試二級C語言復(fù)習(xí)資料新_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

思維導(dǎo)圖1:C語言程序設(shè)計知識結(jié)構(gòu)思維導(dǎo)圖1:C語言程序設(shè)計知識結(jié)構(gòu)第一課C語言程序設(shè)計基礎(chǔ)思維導(dǎo)圖2:第一課C語言程序設(shè)計基礎(chǔ)思維導(dǎo)圖2:第一課C語言程序設(shè)計基礎(chǔ)本課重要知識點(diǎn):1.知識點(diǎn):C程序基礎(chǔ)C語言是一種結(jié)構(gòu)化程序設(shè)計語言。三種基本結(jié)構(gòu):順序、選擇、循環(huán)。例1:(2023-09-11)以下關(guān)于結(jié)構(gòu)化程序設(shè)計的敘述中對的的是(C)一個結(jié)構(gòu)化程序必須同時由順序、分支、循環(huán)三種結(jié)構(gòu)組成結(jié)構(gòu)化程序使用goto語句會很便捷在C語言中,程序的模塊化是運(yùn)用函數(shù)實(shí)現(xiàn)的由三種基本結(jié)構(gòu)構(gòu)成的程序只能解決小規(guī)模的問題例2:(2023-03-26)計算機(jī)高級語言程序的運(yùn)營方法有編譯執(zhí)行和解釋執(zhí)行兩種,以下敘述中對的的是(A)A)C語言程序僅可以編譯執(zhí)行B)C語言程序僅可以解釋執(zhí)行C)C語言程序既可以編譯執(zhí)行又可以解釋執(zhí)行D)以上說法都不對【解析】計算機(jī)不能直接理解高級語言,只能直接理解機(jī)器語言,所以必須要把高級語言翻譯成機(jī)器語言,計算機(jī)才干執(zhí)行高級語言編寫的程序。翻譯的方式有兩種,一個是編譯,一個是解釋。C語言程序僅可以編譯。例3:(2023-03-26)以下敘述中錯誤的是(D)A)C語言的可執(zhí)行程序是由一系列機(jī)器指令構(gòu)成的B)用C語言編寫的源程序不能直接在計算機(jī)上運(yùn)營C)通過編譯得到的二進(jìn)制目的程序需要連接才可以運(yùn)營D)在沒有安裝C語言集成開發(fā)環(huán)境的機(jī)器上不能運(yùn)營C源程序生成的.exe文獻(xiàn)【解析】C程序開發(fā)過程:編輯—>(.c)編譯—>(.obj)鏈接—>可執(zhí)行文獻(xiàn)(.exe)2.知識點(diǎn):C語言程序的構(gòu)成C程序是由函數(shù)構(gòu)成的,一個C程序有且僅有一個main函數(shù)。一個函數(shù)由兩部分組成:函數(shù)的首部和函數(shù)體。函數(shù)體涉及聲明部分和執(zhí)行部分。一個C程序總是從main函數(shù)開始執(zhí)行(即程序的入口),由main函數(shù)結(jié)束,(即程序的出口)。例1:(2023-03-12)以下敘述對的的是(B)C語言程序是由過程和函數(shù)組成的C語言函數(shù)可以嵌套調(diào)用,例如:fun(fun(x))C語言函數(shù)不可以單獨(dú)編譯C語言中除了main函數(shù),其他函數(shù)不可作為單獨(dú)文獻(xiàn)形式存在例2:(2023-09-11)以下敘述中錯誤的是(C)A.C語言編寫的函數(shù)源程序,其文獻(xiàn)名后綴可以是CB.C語言編寫的函數(shù)都可以作為一個獨(dú)立的源程序文獻(xiàn)C.C語言編寫的每個函數(shù)都可以進(jìn)行獨(dú)立的編譯并執(zhí)行D.一個C語言程序只能有一個主函數(shù)3.知識點(diǎn):標(biāo)記符命名規(guī)則:=1\*GB3①標(biāo)記符中只能包含字母(a-z,A-Z),數(shù)字(0-9),下劃線(_)。=2\*GB3②第一個字符必須是字母或下劃線。類型說明符:int,float,double等語句定義符:if,for,while等分類類型說明符:int,float,double等語句定義符:if,for,while等都是小寫=1\*GB3①關(guān)鍵字(32個)都是小寫(有固定含義,不可改變)庫函數(shù)的名字:printf,scanf庫函數(shù)的名字:printf,scanf等編譯預(yù)解決命令名:include等=2\*GB3②預(yù)定義標(biāo)記符(有特殊含義,可以改變)=3\*GB3③用戶自定義的標(biāo)記符ⅰ格式合法,ⅱ不能使用關(guān)鍵字,ⅲ見名知意例1:(2023-03-13)以下C語言用戶標(biāo)記符中,不合法的是(D)A)_1B)AaBcC)a_bD)a-b4.知識點(diǎn):數(shù)據(jù)類型例1:(2023-03-16)以下關(guān)于C語言數(shù)據(jù)類型使用的敘述中錯誤的是(D)A)若要準(zhǔn)確無誤差的表達(dá)自然數(shù),應(yīng)使用整數(shù)類型B)若要保存帶有多位小數(shù)的數(shù)據(jù),應(yīng)使用雙精度類型C)若要解決如“人員信息”等具有不同類型的相關(guān)數(shù)據(jù),應(yīng)自定義結(jié)構(gòu)體類型D)若只解決“真”和“假”兩種邏輯值,應(yīng)使用邏輯類型【解析】結(jié)構(gòu)數(shù)據(jù)類型是根據(jù)已定義的一個或多個數(shù)據(jù)類型用構(gòu)造的方法來定義的,一個結(jié)構(gòu)類型的值可以分解成若干個“成員”或“元素”,每個“成員”都是一個基本數(shù)據(jù)類型或又是一個構(gòu)造類型,C項(xiàng)對的。C語言沒有邏輯類型,故D項(xiàng)錯誤。例2:(2023-03-26)定義無符號整數(shù)類為UInt,下面可以作為類UInt實(shí)例化值的是(B)A)-369B)369C)0.369D)整數(shù)集合{1,2,3,4,5}【解析】無符號整數(shù)類型為只有正整數(shù)和0,所有選擇B。5.知識點(diǎn):常量整型常量十進(jìn)制整常數(shù):沒有前綴,其數(shù)碼為0-9。例如65535,-568八進(jìn)制整常數(shù):以0開頭,其數(shù)碼為0-7。例如015十六進(jìn)制整常數(shù):以0X或0x開頭,其數(shù)碼為0-9,A-F或a-f。例如0x2A長整型數(shù):整型常數(shù)后綴為L或l。例如358000L無符號數(shù):整型常數(shù)后綴為U或u。例如158u實(shí)型常量的形式小數(shù)形式:必須有小數(shù)點(diǎn),小數(shù)點(diǎn)前后不能同時沒有數(shù)字。指數(shù)形式:aEn(其中a表達(dá)十進(jìn)制數(shù),E階碼標(biāo)志,n階碼)。E前E后必須有數(shù)字,E后必為整數(shù),可以帶符號。例如2.1E-3、5E8例1:(2023-09-13)以下選項(xiàng)中關(guān)于C語言常量的敘述錯誤的是:(D)A.所謂常量,是指在程序運(yùn)營過程中,其值不能被改變的量 B.常量分為整型常量、實(shí)型常量、字符常量和字符串常量C.常量可分為數(shù)值型常量和非數(shù)值型常量D.經(jīng)常被使用的變量可定義成常量【解析】根據(jù)常量的基本概念,則不難判斷A、B、C均對的。例1:(2023-04-13)以下選項(xiàng)中,能用作數(shù)據(jù)常量的是(D)A)o115B)0118C)1.5e1.5D)115L【解析】八進(jìn)制整常數(shù)以0開頭,A項(xiàng)錯誤;八進(jìn)制整常數(shù)的數(shù)碼味0-7,B項(xiàng)錯誤;實(shí)型常量的指數(shù)形式E后必為整數(shù),故C項(xiàng)錯誤;長整型數(shù)后綴為L或l,故D項(xiàng)對的。例2:(2023-03-26)以下選項(xiàng)中可用作C程序合法實(shí)數(shù)的是(A)A).1e0B)3.0e0.2C)E9D)9.12E【解析】實(shí)型指數(shù)表達(dá)方式“E前E后比有數(shù),E后必須是整數(shù)”,故選A字符常量:用單引號‘’括起來的一個字符。涉及普通字符常量和轉(zhuǎn)義字符。普通字符常量:如‘a’、‘A’、‘1’。轉(zhuǎn)義字符:由一對單引號引起來的以\開頭的若干字符的組合。如‘\n’表達(dá)回車換行、‘\\’表達(dá)反斜線符、‘\’’表達(dá)單引號符、‘\”’表達(dá)雙引號、‘\ddd’表達(dá)八進(jìn)制數(shù)、‘\xhh’表達(dá)十六進(jìn)制數(shù)。例3:(2023-09-15)以下選項(xiàng)中能表達(dá)合法常量的是(C)A)整數(shù):1,200B)實(shí)數(shù):1.5E2.0C)字符斜杠:‘\\’D)字符串:“\007”【解析】表達(dá)整常量不能用逗號分隔,A項(xiàng)錯誤;實(shí)型常量的指數(shù)形式E后必為整數(shù),故B項(xiàng)錯誤;’\007’是轉(zhuǎn)義字符,只能用單引號括起來,不能用雙引號或其他括號,故D項(xiàng)錯誤。例4:(2023-03-26)以下選項(xiàng)中不能用作C程序合法常量的是(B)A)1,234B)'\123'C)123D)"\x7G"【解析】A中的‘,’在編譯時會犯錯的,直接寫成1234即可,B是一個三位八進(jìn)制數(shù)代表的字符,C是一個數(shù)字常量,D是一個字符串,其中\(zhòng)x7是一個一位十六進(jìn)制數(shù)代表的字符,也即D中的字符串是兩個字符,假如sizeof的話是3,假如strlen的話是2。6.知識點(diǎn):變量整型變量和實(shí)型變量以考試標(biāo)準(zhǔn)Viusalc++6.0為例,說明各類型變量所占的位數(shù)。類型所占位數(shù)所占字節(jié)數(shù)類型所占位數(shù)所占字節(jié)數(shù)short162unsignedint324int324unsignedlong324long324float324unsignedshort162double648例1:(2023-09-38)有以下程序#include<stdio.h>main(0){ints,t,A=100;doubleB=6;s=sizeof(A);t=sizeof(B);printf(“%d,%d\n”,s,t);}在VC6平臺上編譯運(yùn)營,程序運(yùn)營后的輸出結(jié)果是(C)A)2,4B)4,4C)4,8D)10,6【解析】在VC6平臺上,int型占4個字節(jié),double型占8個字節(jié),故答案是C。字符變量:一個字符變量只能存放一個字符。字符串不能存放在字符變量中,只能用字符數(shù)組或指針存放字符串。例1:(2023-09-22)有以下定義語句,編譯時會出現(xiàn)編譯錯誤的是(C)A)chara=’a’;B)chara=‘\n’;C)chara=‘a(chǎn)a’;D)chara=‘\x2d’;【解析】一個字符變量只能存放一個字符,A項(xiàng)字符變量存放的是普通字符常量;B、D項(xiàng)字符變量存放的轉(zhuǎn)義字符;字符常量只能是單個字符,不能是字符串,’aa’不是單個字符,故C項(xiàng)錯誤。7.知識點(diǎn):ASCII碼‘0’的ASCII碼值為48;‘A’的ASCII碼值為65;‘a(chǎn)’的ASCII碼值為97。大寫字母與小寫字母的ASCII碼值相差32。例1:(2023-09-23)有以下程序#include<stdio.h>main(){charc1,c2;c1=’A’+’8’-‘4’;c2=’A’+’8’-‘5’;printf(“%c,%d\n”,c1,c2);}已知字母A的ASCII碼為65,程序運(yùn)營后的輸出結(jié)果是(A)A)E,68B)D,69C)E,DD)輸出無定值【解析】’A’的ASCII碼值為65,’8’的ASCII碼值為56,’4’的ASCII碼值為52,65+56-52=69,相應(yīng)于字符’E’。’5’的ASCII碼值為53,65+56-53=68,相應(yīng)于字符’D’。字符變量c1以%c格式輸出,即’E’。字符變量c2以%d格式輸出,即68。故答案是A。8.知識點(diǎn):進(jìn)制轉(zhuǎn)換十進(jìn)制轉(zhuǎn)換成二進(jìn)制、八進(jìn)制、十六進(jìn)制:將十進(jìn)制的數(shù)字除以2(8、16),得到的商數(shù)繼續(xù)除以2,直到商為0,然后將各次相除所得的余數(shù)從后往前排列。二進(jìn)制、八進(jìn)制、十六進(jìn)制轉(zhuǎn)換成十進(jìn)制:將二(八、十六)進(jìn)制數(shù)的每一位數(shù)從高位到低位乘以2的n-1次冪,n為該位所在的位數(shù)。二進(jìn)制與八進(jìn)制之間的轉(zhuǎn)換:每個八進(jìn)制數(shù)字轉(zhuǎn)換成3位二進(jìn)制數(shù)字。二進(jìn)制與十六進(jìn)制之間的轉(zhuǎn)換:每個十六進(jìn)制數(shù)字轉(zhuǎn)換成4位二進(jìn)制數(shù)字。例1:(2023-09)以下程序運(yùn)營后的輸出結(jié)果是2023。#include<stdio.h>main(){inta=200,b=010;printf(“%d%d\n”,a,b);}【解析】八進(jìn)制數(shù)010轉(zhuǎn)換成十進(jìn)制數(shù)為8,按“%d%d”格式分別輸出a、b,即2023。9.知識點(diǎn):運(yùn)算符的優(yōu)先級級別由大到?。海ㄟ壿?非>算(術(shù)運(yùn)算符)>關(guān)(系運(yùn)算符)>(邏輯)與>(邏輯)或>條(件運(yùn)算符)>賦(值運(yùn)算符)10.知識點(diǎn):強(qiáng)制類型轉(zhuǎn)換運(yùn)算符一般形式:(類型說明符)(表達(dá)式)功能:把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表達(dá)的類型例1:(2023-04-06)表達(dá)式(int)((double)(5/2)+2.5)的值是4?!窘馕觥浚╥nt)((double)(5/2)+2.5)→(int)((double)2)+2.5)→(int)(2.000000+2.5)→(int)(4.500000)→4。例2:以下程序運(yùn)營后的輸出結(jié)果是()。main(){ inta;a=(int)((double)(3/2)+0.5+(int)1.99*2);printf("%d\n",a);}答案:3【解析】(3/2)=1,(double)(3/2)+0.5=1.5,(int)1.99*2=2,所以(double)(3/2)+0.5+(int)1.99*2=3.5,故a=3。11.知識點(diǎn):算術(shù)運(yùn)算符:+、—、*、/、%%:參與運(yùn)算的量均為整型。/:當(dāng)除號左右兩邊都是整數(shù)的時候,商也要是整數(shù),假如不是整數(shù)則舍棄小數(shù)部分。當(dāng)參與運(yùn)算量有一個為實(shí)型,則商為double型。例1:(2023-09-14)若有定義語句:inta=10;doubleb=3.14;,則表達(dá)式‘A’+a+b值得類型是(C)?A.char???B.int? ?C.double??? D.float【解析】各種類型數(shù)據(jù)混合運(yùn)算時,最終結(jié)果的類型可依據(jù)以下轉(zhuǎn)換規(guī)律:char->short->int->long->float->double例1:(2023-09-15)如有定義語句:intx=12,y=8,z;,在其后執(zhí)行語句z=0.9+x/y,則z的值為(B)?A.1.9?B.1 C.2?D.2.4【解析】x,y,z均為整型變量,因此x/y結(jié)果為1,即z=0.9+1=1.9,z最終結(jié)果為1例1:(2023-09-14)有以下定義:inta;longb;doublex,y;則以下選項(xiàng)中對的的表達(dá)式是(A)A)a%(int)(x-y)B)a=x!=y;C)(a*y)%bD)y=x+y=x【解析】參與%運(yùn)算的左右操作數(shù)均為整型,故A項(xiàng)對的,C項(xiàng)錯誤。B項(xiàng)是賦值語句,不是表達(dá)式。賦值運(yùn)算符左邊必須是變量,而不是表達(dá)式,而D項(xiàng)中x+y=x,錯誤。12.知識點(diǎn):逗號表達(dá)式一般形式:表達(dá)式1,表達(dá)式2……表達(dá)式n求值過程:自左向右依次求解,最后一個表達(dá)式的值為整個逗號表達(dá)式的值。例1:(2023-04-14)設(shè)有定義:intx=2;以下表達(dá)式中,值不為6的是(D)A)x*=x+1B)x++,2*xC)x*=(1+x)D)2*x,x+=2【解析】A項(xiàng)x=x*(x+1)=2*(2+1)=6;B項(xiàng)x++后,x的值為3,2*x的值為6,整個逗號表達(dá)式的值為6;C項(xiàng)x=x*(1+x)=2*3=6;D項(xiàng)x=x+2=2+2=4,整個逗號表達(dá)式的值為4。故答案是D。13.知識點(diǎn):自增自減運(yùn)算符++ii自加1后再參與運(yùn)算i++i參與運(yùn)算后再自加1--ii自減1后再參與運(yùn)算i--i參與運(yùn)算后再自減1++和--的運(yùn)算對象只能為變量,不能是常量或表達(dá)式。例1:(2023-09-06)若有定義語句:inta=5;則表達(dá)式:a++的值是5?!窘馕觥勘磉_(dá)式a++的值是a未加1之前的值,即5。.當(dāng)++或—與printf語句結(jié)合時,若++/--x的形式,則先自增/自減,然后輸出;若x++/--的形式,則先輸出x原值,在進(jìn)行自增/自減操作。例2:(2023-03-26)有以下程序#includemain(){?intx=011;?printf("%d\n",++x);} 程序運(yùn)營后的輸出結(jié)果是(C)A)12B)11C)10D)9【解析】011是一個八進(jìn)制的數(shù),轉(zhuǎn)為十進(jìn)制則為1*8+1=9;++x是x先自增1再參與其他運(yùn)算,所以先x自增1為10再輸出即為10,故選C。14.知識點(diǎn):賦值表達(dá)式一般形式:變量名=表達(dá)式賦值運(yùn)算符左邊必須是變量,而不是表達(dá)式。例1:(2023-03-14)若有定義:doublea=22;inti=0,k=18;則不符合C語言規(guī)定的賦值語句是(C)A)a=a++,i++;B)i=(a+k)<=(i+k);C)i=a%11;D)i=!a;【解析】a為double型,參與%運(yùn)算的操作數(shù)均為整型,故C項(xiàng)錯誤。例2:(2023-03-26)若有定義語句:inta=3,b=2,c=1;,以下選項(xiàng)中錯誤的賦值表達(dá)式是(A)A)a=(b=4)=3;B)a=b=c+1;C)a=(b=4)+c;D)a=1+(b=c=4);【解析】賦值表達(dá)式的左邊必須是變量不能是表達(dá)式。而答案A中,(b=4)是一個賦值表達(dá)式。復(fù)合賦值運(yùn)算符和表達(dá)式+=、—=、*=、/=、%=、<<=、>>=、&=、^=、|=例2:(2023-09-16)表達(dá)式a+=a-=a=9的值是(D)A)9B)-9C)18D)0【解析】賦值運(yùn)算符的結(jié)合性是從右到左,a=9→a=a-9=0→a=a+0=0+0=0。故答案是D。15.知識點(diǎn):位運(yùn)算按位與運(yùn)算&規(guī)則:0&0=00&1=01&0=01&1=1按位或運(yùn)算|規(guī)則:0|0=00|1=11|0=11|1=1按位異或運(yùn)算∧規(guī)則:0∧0=00∧1=11∧0=11∧1=0求反運(yùn)算~規(guī)則:~0=1~1=0左移運(yùn)算<<規(guī)則:把<<左邊的運(yùn)算數(shù)的各二進(jìn)位所有左移若干位,高位丟棄,低位補(bǔ)0。左移一位相稱于該數(shù)乘以2。左移n位相稱于該數(shù)乘以2n。例1:(2023-09-40)有以下程序#include<stdio.h>main(){shortc=124;c=c____D____;printf(“%d\n”,c);}若要使程序的運(yùn)營結(jié)果為248,應(yīng)在下劃線處填入的是A)>>2B)|248C)&0248D)<<1【解析】左移一位相稱于該數(shù)乘以2,124>>1相稱于124乘以2,等于248。故答案是D。例2:(2023-04-39)有以下程序#include<stdio.h>main(){inta=5,b=1,t;t=(a<<2)|b;printf(“%d\n”,t);}程序運(yùn)營后的輸出結(jié)果是(A)A)21B)11C)6D)1【解析】左移2位相稱于該數(shù)乘以22。5<<2相稱于5乘以4等于20。20|1=21。故答案是A。右移運(yùn)算>>把>>左邊的運(yùn)算數(shù)的各二進(jìn)位所有右移若干位。高位補(bǔ)0,低位丟棄。右移一位相稱于該數(shù)除以2。右移n位相稱于除以2n。例3:(2023-09-39)若有以下程序段intr=8;printf(“%d\n”,r>>1);輸出結(jié)果是(C)A)16B)8C)4D)2【解析】右移一位相稱于該數(shù)除以2。8>>1相稱于除以2,等于4,故答案是C。16.知識點(diǎn):關(guān)系運(yùn)算符和表達(dá)式例1:(2023-09-08)在C語言中,當(dāng)表達(dá)式值為0時表達(dá)邏輯值“假”,當(dāng)表達(dá)式值為非0時表達(dá)邏輯值“真”。例2:(2023-03-06)設(shè)x為int型變量,請寫出一個關(guān)系表達(dá)式(x%3==0)&&(x%7==0),用以判斷x同時為3和7的倍數(shù)時,關(guān)系表達(dá)式的值為真。17.知識點(diǎn):邏輯運(yùn)算符和表達(dá)式邏輯運(yùn)算符優(yōu)先級從高到低:!、&&、||邏輯運(yùn)算的真值表aba&&ba||b!a真真真真假真假假真假假真假真真假假假假真進(jìn)行邏輯運(yùn)算時,若&&左邊的值為0,則不再對右邊的運(yùn)算對象進(jìn)行運(yùn)算,整個表達(dá)式的值為0。例1:(2023-09-17)若有定義語句:intk1=10,k2=20;,執(zhí)行表達(dá)式(k1=k1>k2)&&(k2=k2>k1)后,k1和k2的值分別為(B)A.?0和1? B.0和20? C.10和1?D.?10和20【解析】k1>k2為假,因此k1=k1>k2結(jié)果0,邏輯與左邊表達(dá)式為假,右邊表達(dá)式不再解決,因此k1結(jié)果為0,k2不變,仍為20例2:inta=2;則表達(dá)式(!a==1)&&(a++==2)的值為0,a的值為2?!窘馕觥?a為0,!a==1的值為0,&&左邊的值為0,則不再對右邊的運(yùn)算對象進(jìn)行運(yùn)算,所以a的值為2。若||左邊的運(yùn)算對象的值為1,則不再對右邊的運(yùn)算對象進(jìn)行運(yùn)算,整個表達(dá)式的值為1。例2:(2023-03-17)若a是數(shù)值類型,則邏輯表達(dá)式(a==1)||(a!=1)的值是(A)A)1B)0C)2D)不知道a的值,不能擬定【解析】a的值有兩種情況:a等于1或a不等于1。故邏輯表達(dá)式(a==1)||(a!=1)的值為1。18.知識點(diǎn):格式輸入函數(shù)printf()(1)一般形式:printf(“格式控制字符串”,輸出列表);(2)碰到控制字符,按照控制字符的規(guī)定輸出,碰到非格式字符串按原樣輸出。例1:(2023-04-07)若變量x,y已定義為int類型且x的值為99,y的值為9,請將輸出語句printf(“x/y=%d”,x/y);補(bǔ)充完整,使其輸出的計算結(jié)果形式為:x/y=11。例2:(2023-04-15)程序段:intx=12;doubley=3.141593;printf(“%d%8.6f”,x,y);的輸出結(jié)果是(A)A)123.141593B)123.141593C)12,3.141593D)123.1415930【解析】以%8.6f格式輸出,即輸出的總寬度為8,小數(shù)的位數(shù)為6。知識點(diǎn):格式輸入函數(shù)scanf()(1)一般形式:scanf(“格式控制字符串”,地址列表);(2)若格式控制字符串中有非格式字符串,則按原樣輸入。若格式控制字符串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔,則可用空格、Tab、回車作間隔。例1:(2023-09-16)若有定義:inta,b;,通過語句scanf(“%d;%d”,&a,&b);,能把整數(shù)3賦給變量a,5付給變量b的輸入數(shù)據(jù)是 A.35?B.3,5?C.3;5 D.35【解析】scanf格式字符串中兩個%d之間帶有非格式字符分號,運(yùn)營時應(yīng)原樣輸入。例1:(2023-04-19)有以下程序main(){intm,n,p;scanf(“m=%dn=%dp=%d”,&m,&n,&p);printf(“%d%d%d\n”,m,n,p);}若想從鍵盤上輸入數(shù)據(jù),使變量m中的值為123,n中的值為456,p中的值為789,則對的的輸入是(A)A)m=123n=456p=789B)m=123n=456p=789C)m=123,n=456,p=789D)123456789【解析】scanf(“m=%dn=%dp=%d”,&m,&n,&p);格式控制字符串中有非格式字符串,則按原樣輸入,故答案是A。例2:(2023-03-26)有以下程序段charname[20];intnum;scanf("name=%snum=%d",name;&num);當(dāng)執(zhí)行上述程序,并從鍵盤輸入:name=Lilinum=1001<回車>后,name的值(A)A)LiliB)name=LiliC)Lilinum=D)name=Lilinum=1001【解析】scanf中格式字符串的非格式字符串原樣輸入,如其中的‘name=’和‘num=’,所以接受到的name值是后面的Lili,num值為1001。故選A。(3)在輸入字符數(shù)據(jù)時,若格式控制字符串中無非格式字符,則認(rèn)為所有輸入的字符均為有效字符。空格會被當(dāng)作字符賦值給變量。例3:(2023-04-23)有以下程序#include<stdio.h>main(){inta1,a2;charc1,c2;scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2);printf(“%d,%c,%d,%c”,a1,c1,a2,c2);}若想通過鍵盤輸入,使得a1的值為12,a2的值為34,c1的值為字符a,c2的值為字符b,程序輸出結(jié)果是:12,a,34,b則對的的輸入格式是(以下_代表空格,<CR>代表回車)A)12a34b<CR>B)12_a_34_b<CR>C)12,a,34,b<CR>D)12_a34_b<CR>【解析】空格會被當(dāng)作字符賦值給變量,故B、D錯誤;C項(xiàng)中逗號會被當(dāng)作字符賦值給變量,故C項(xiàng)錯誤。(4)格式字符串一般形式:%[*][輸入數(shù)據(jù)寬度][長度]類型*表達(dá)該輸入項(xiàng),讀入后不賦予相應(yīng)的變量。輸入數(shù)據(jù)寬度:用十進(jìn)制數(shù)指定輸入的字符數(shù)。例4:(2023-09-07)有以下程序#include<stdio.h>main(){intx,y;scanf(“%2d%ld”,&x,&y);printf(“%d\n”x+y);}程序運(yùn)營時輸入:1234567程序的運(yùn)營結(jié)果是34579?!窘馕觥?2d輸入的數(shù)據(jù)寬度為2,x的值為12,y的值為34567,x+y=34579。例5:(2023-04-16)若有定義語句:doublex,y,*px,*py;執(zhí)行了px=&x;py=&y;之后,對的的輸入語句是(C)scanf(“%f%f”,x,y);B)scanf(“%f%f”,&x,&y);C)scanf(“%lf%le”,px,py);D)scanf(“%lf%lf”,x,y);【解析】A、D項(xiàng)地址列表,應(yīng)為&x,&y;x、y為double型,格式控制字符串不是%f%f,故B項(xiàng)錯誤。當(dāng)定義的變量類型和scanf中“格式符”類型不一致時(這里只限定在字符型和整型兩種類型,其他數(shù)據(jù)類型不可以。)整型和字符型之間通過ASCALL可以互相轉(zhuǎn)化。例6:(2023-03-12)有以下程序(說明:字符0的ASCII碼值為48)main(){ charc1,c2;scanf("%d",&c1);c2=c1+9;printf("%c%c\n",c1,c2);}若程序運(yùn)營時從鍵盤輸入48<回車>,則輸出結(jié)果為(09)?!窘馕觥枯斎耄?,則c1=48,c2=48+9,以字符輸出c1和c2,則為輸出ASCII碼為48和57相應(yīng)的字符,分別為0和9。20.知識點(diǎn):字符輸出函數(shù)putchar()一般形式:putchar(‘a(chǎn)’);putchar(‘\101’);21.知識點(diǎn):字符輸入函數(shù)getchar()一般形式:getchar();或ch=getchar();例1:(2023-03-15)有以下程序#include<stdio.h>main(){chara,b,c,d;scanf(“%c%c”,&a,&b);c=getchar();d=getchar();printf(“%c%c%c%c\n”,a,b,c,d);}當(dāng)執(zhí)行程序時,按下列方式輸入數(shù)據(jù)(從第1列開始,<CR>代表回車,注意:回車也是一個字符)12<CR>34<CR>則輸出結(jié)果是(B)A)1234B)12C)12D)12334【解析】以%c格式讀取一個字符,以getchar()形式也是讀取一個字符??崭駮划?dāng)作字符賦值給變量。所以,a=’1’,b=’2‘,c=’\n’,d=’3‘。getchar經(jīng)常作為while循環(huán)條件,判斷輸入哪一個字符時,循環(huán)結(jié)束。例如,輸入字符串,直到輸入‘0’,程序結(jié)束,則可寫成while(getchar()!='0')例2:(2023-03-26)有以下程序段main(){?…while(getchar()!='\n');…}以下敘述中對的的是(C)A)此while語句將無限循環(huán)B)getchar()不可以出現(xiàn)在while語句的條件表達(dá)式中C)當(dāng)執(zhí)行此while語句時,只有按回車鍵程序才干繼續(xù)執(zhí)行D)當(dāng)執(zhí)行此while語句時,按任意鍵程序就能繼續(xù)執(zhí)行【解析】while條件表達(dá)式getchar()!='\n'只要輸入的字符不是回車,就一直執(zhí)行循環(huán),而循環(huán)內(nèi)是一個空語句,所以按回車鍵程序才干繼續(xù)執(zhí)行,選擇C。第二課選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)本課重要知識點(diǎn):1.知識點(diǎn):if語句if(表達(dá)式),其中表達(dá)式可以是任意合法的C語言表達(dá)式。例1:(2023-09-19)下列條件語句中輸出結(jié)果與其他語句不同的是(D)A.if(a)printf(“%d\n”,x);elseprintf(“%d\n”,y); B.if(a==0)printf(“%d\n”,y);elseprintf(“%d\n”,x);?C.if(a!=0)printf(“%d\n”,x);elseprintf(“%d\n”,y);?D.if(a==0)printf(“%d\n”,x);elseprintf(“%d\n”,y); 【解析】作為if語句的條件,a等價于a!=0,因此A和C是等價的。例2:(2023-03-26)if語句的基本形式是:if(表達(dá)式)語句,以下關(guān)于“表達(dá)式”值的敘述中對的的是(D)A)必須是邏輯值B)必須是整數(shù)值C)必須是正數(shù)D)可以是任意合法的數(shù)值【解析】表達(dá)式不限于關(guān)系表達(dá)式、邏輯表達(dá)式,也可以是任意的數(shù)值類型,其中非0為真,0為假。故選D。對于單個if語句,其后跟隨的受if控制的只能是1個語句或者是1個復(fù)合語句。例1:(2023-09-17)設(shè)有定義:inta=1,b=2,c=3;以下語句中執(zhí)行效果與其它三個不同的是(C)A)if(a>b)c=a,a=b,b=c;B)if(a>b){c=a,a=b,b=c;}C)if(a>b)c=a;a=b;b=c;D)if(a>b){c=a;a=b;b=c;}【解析】對于單個if語句,其后跟隨的受if控制的只能是1個語句或者是1個復(fù)合語句。故C項(xiàng),if(a>b)條件成立時,語句c=a;才被執(zhí)行,而無論if(a>b)條件成立與否,語句a=b;b=c;都會被執(zhí)行。A、B、D項(xiàng),只有if(a>b)條件成立時,語句c=a;a=b;b=c;才被執(zhí)行。例2:(2023-03-26)以下程序運(yùn)營后的輸出結(jié)果是200main(){?intx=10,y=20,t=0;if(x==y)t=x;x=y;y=t;printf("%d%d\n",x,y);}【解析】x=10,y=20,所以x==y為false,t=x;不執(zhí)行,直接執(zhí)行x=y(tǒng);y=t;x為20,y為0。注意和if(x==y){t=x;x=y;y=t;}區(qū)別。當(dāng)多個if(表達(dá)式)單分支形式并行出現(xiàn)時,其執(zhí)行順序是:先判斷第一if單分支的條件,假如為真,執(zhí)行其后面的語句,執(zhí)行完后,繼續(xù)向下執(zhí)行。判斷第二個if單分支語句,依次類推。假如第一個if表達(dá)式的值為假,則不執(zhí)行其后的語句,而去判斷第二個if單分支條件。例1:(2023-03-26)有以下程序main(){?intx;scanf("%d",&x);if(x>15)printf("%d",x-5);if(x>10)printf("%d",x);if(x>5)printf("%d\n",x+5);}若程序運(yùn)營時從鍵盤輸入12<回車>,則輸出結(jié)果為1217【解析】輸入12,比較不大于15所以不執(zhí)行if(x>15)內(nèi)的語句;大于10執(zhí)行printf("%d",x);輸出12;大于5執(zhí)行printf("%d",x+5);輸出17。2.知識點(diǎn):if語句的嵌套內(nèi)嵌結(jié)構(gòu)中,else總是與前面最近的且未曾配對的if語句配對,組成一對if-else語句。例2:(2023-09-18)有以下程序#include<stdio.h>main(){inta=1,b=0;if(!a)b++;elseif(a==0)if(a)b+=2;elseb+=3;printf(“%d\n”,b);}程序運(yùn)營后的輸出結(jié)果是(A)A)0B)1C)2D)3【解析】else總是與前面最近的且未曾配對的if語句配對,組成一對if-else語句。即elseb+=3;與if(a)b+=2;配對。if(?。?不成立,不執(zhí)行b++;elseif(a==0)不成立,不執(zhí)行if(a)b+=2;elseb+=3;故直接執(zhí)行printf(“%d\n”,b);,輸出結(jié)果為0。3.知識點(diǎn):條件表達(dá)式一般形式:表達(dá)式1?表達(dá)式2:表達(dá)式3執(zhí)行過程:表達(dá)式1的值為真,條件表達(dá)式取表達(dá)式2的值;表達(dá)式1的值為假,條件表達(dá)式取表達(dá)式3的值。例1:(2023-09-19)以下程序段中,與語句:k=a>b?(b>c?1:0):0;功能相同的是(A)A)if((a>b)&&(b>c))k=1;B)if((a>b)||(b>c))k=1;elsek=0;elsek=0;C)if(a<=b)k=0;D)if(a>b)k=1;elseif(b<=c)k=1;elseif(b>c)k=1;elsek=0;【解析】條件運(yùn)算符的結(jié)合性是從右至左。當(dāng)b>c時,b>c?1:0的值為1,k=a>b?1:0,同時當(dāng)a>b時,a>b?1:0的值為1,此時k=1。否則k=0。故答案為A。4.知識點(diǎn):switch語句switch語句的圓括號中的表達(dá)式的值必須是整型或字符型,不能為實(shí)型。case后的表達(dá)式可以是求得整型和字符型的常量表達(dá)式,但不能具有變量。default的位置對程序的執(zhí)行沒有影響。例1:(2023-09-19)若有定義語句inta,b;doublex;則下列選項(xiàng)中沒有錯誤是(C)A)switch(x%2)B)switch((int)x%2.0){case0:a++;break;{case0:a++;break;case1:b++;break;case1:b++;break;default:a++;b++;default:a++;b++;}}C)switch((int)x%2)D)switch((int)(x)%2){case0:a++;break;{case0.0:a++;break;case1:b++;break;case1.0:b++;break;default:a++;b++;default:a++;b++;}}【解析】switch語句的圓括號中的表達(dá)式的值必須是整型或字符型,不能為實(shí)型。x是double型,x%2不合法,A項(xiàng)錯誤。(int)x%2.0不合法,B項(xiàng)錯誤。(int)x%2值為整型,故C項(xiàng)對的。case后面的表達(dá)式可以是求得整型量和字符型量的常量表達(dá)式,故D項(xiàng)錯誤。例2:(2023-09-18)有以下程序#include<stdio.h> main(){intc=0,k;for(k=1;k<3;k++)switch(k){default:c+=k;case2:c++;break;case4:c+=2;break;}printf(“%d\n”,c);}程序運(yùn)營后的輸出結(jié)果是(A)A)3B)5C)7D)9【解析】當(dāng)k=1時,沒有匹配的case,執(zhí)行default語句,c=c+k=0+1=1。繼續(xù)往下執(zhí)行case2后邊的語句,c++,c變?yōu)?,碰到break語句,于是退出內(nèi)層switch結(jié)構(gòu)。當(dāng)k=2時,找到匹配的case2,執(zhí)行c++;c變?yōu)?,碰到break語句,于是退出內(nèi)層switch結(jié)構(gòu)。執(zhí)行外層循環(huán)for結(jié)構(gòu)的k++,k變?yōu)椋?,k<3不成立,跳出for語句。最后輸出結(jié)果為3。當(dāng)switch語句和循環(huán)語句(for、while)時,要注意switch里面的break語句退出的位置。解決這一問題的方法是:一方面劃分結(jié)構(gòu),擬定循環(huán)的語句體涉及哪些語句。然后,在繼續(xù)劃分循環(huán)體內(nèi)的語句,假如循環(huán)體內(nèi)的語句只有一條switch語句,其內(nèi)部出現(xiàn)了break,碰到break,要結(jié)束當(dāng)前switch語句的執(zhí)行,繼續(xù)執(zhí)行下一次循環(huán)。例1:(2023-03-26)有以下程序main(){ ints;?scanf("%d",&s); while(s>0) {switch(s)??{case1:printf("%d",s+5);? case2:printf("%d",s+4);break; case3:printf("%d",s+3); ?default:printf("%d",s+1);break; ?} scanf("%d",&s); }}運(yùn)營時,若輸入123450<回車>,則輸出結(jié)果是(A)A)6566456B)66656C)66666D)6666656【解析】while循環(huán)s<=0時退出循環(huán),輸入123450,只有當(dāng)輸入0時退出循環(huán),switch中當(dāng)s=1時,執(zhí)行case1,case2,由于case1后面沒有break,會繼續(xù)執(zhí)行case2,碰到break,退出switch;當(dāng)s=2時,執(zhí)行case2,退出switch;當(dāng)s=3時,執(zhí)行case3,default,由于case3后面沒有break,會繼續(xù)執(zhí)行default,碰到break,退出switch;當(dāng)s=4和5時,執(zhí)行default,退出switch。所以輸入1時,輸出65;輸入2時,輸出6;輸入3時,輸出64;輸入4時,輸出5;輸入5時,輸出6。故選擇A。5.知識點(diǎn):while,do-while,for三種循環(huán)結(jié)構(gòu)例1:(2023-09-20)有以下程序:#include<stdio.h>main(){inta=7;while(a--);printf(“%d\n”,a);}程序運(yùn)營后的輸出結(jié)果是(B)?A.-1 B.0 C.1 D.7【解析】此類題一定要注意標(biāo)點(diǎn)符號的位置,while(a--);該行末尾的分號即為一條空語句,來作為while的循環(huán)體。例1:(2023-09-20)有以下程序#include<stdio.h>?main(){inta=1,b=2;while(a<6){b+=a;a+=2;b%=10;}printf(“%d,%d\n”,a,b);}程序運(yùn)營后的輸出結(jié)果是(B)A)5,11B)7,1C)7,11D)6,1例2:(2023-03)有以下程序段main(){?…while(getchar()!='\n');…}以下敘述中對的的是(C)A)此while語句將無限循環(huán)B)getchar()不可以出現(xiàn)在while語句的條件表達(dá)式中C)當(dāng)執(zhí)行此while語句時,只有按回車鍵程序才干繼續(xù)執(zhí)行D)當(dāng)執(zhí)行此while語句時,按任意鍵程序就能繼續(xù)執(zhí)行【解析】while條件表達(dá)式getchar()!='\n'只要輸入的字符不是回車,就一直執(zhí)行循環(huán),而循環(huán)內(nèi)是一個空語句,所以按回車鍵程序才干繼續(xù)執(zhí)行,選擇C。循環(huán)體部分可以只有一條空語句,不做任何操作。例3:(2023-09-21)有以下程序#include<stdio.h>?main(){inty=10;while(y--);printf(“y=%d\n”,y);}程序執(zhí)行后的輸出結(jié)果是(B)A)y=0B)y=-1C)y=1D)while構(gòu)成無限循環(huán)【解析】while(y--)后面的分號是一個空語句,當(dāng)y--不等于0時執(zhí)行空語句,當(dāng)y—等于0時,執(zhí)行printf函數(shù)輸出y值,當(dāng)y—等于0時退出循環(huán),此時y值變成-1。假如第一次判斷表達(dá)式的值為0,則循環(huán)一次也不執(zhí)行。即while循環(huán)體最少執(zhí)行0次。例4:(2023-03)當(dāng)執(zhí)行下列程序時,輸入<CR>,則其中while循環(huán)體將執(zhí)行0次。#include<stdio.h> main(){charch;while((ch=getchar()==’0’))printf(‘#’);}【解析】ch=getchar(),ch第一次讀入的值為’1’,故while((ch=getchar()==’0’))不成立,循環(huán)一次也不執(zhí)行。while循環(huán)與switch結(jié)構(gòu)例5、(2023-03)有以下程序main(){?ints; scanf("%d",&s);?while(s>0)?{switch(s)? {case1:printf("%d",s+5); ?case2:printf("%d",s+4);break; ?case3:printf("%d",s+3); default:printf("%d",s+1);break; } ?scanf("%d",&s);?}}運(yùn)營時,若輸入123450<回車>,則輸出結(jié)果是(A)A)6566456B)66656C)66666D)6666656【解析】:while循環(huán)s<=0時退出循環(huán),輸入123450,只有當(dāng)輸入0時退出循環(huán),switch中當(dāng)s=1時,執(zhí)行case1,case2,由于case1后面沒有break,會繼續(xù)執(zhí)行case2,碰到break,退出switch;當(dāng)s=2時,執(zhí)行case2,退出switch;當(dāng)s=3時,執(zhí)行case3,default,由于case3后面沒有break,會繼續(xù)執(zhí)行default,碰到break,退出switch;當(dāng)s=4和5時,執(zhí)行default,退出switch。所以輸入1時,輸出65;輸入2時,輸出6;輸入3時,輸出64;輸入4時,輸出5;輸入5時,輸出6。故選擇A。6.知識點(diǎn):do-while語句例1:(2023-09-09)以下程序運(yùn)營后的輸出結(jié)果是5。#include<stdio.h> main(){inta=1,b=7;do{b=b/2;a+=b;}while(b>1);printf(“%d\n”,a);}do-while循環(huán)體最少執(zhí)行1次。例2:(2023-09)若變量已對的定義,有以下程序段i=0;doprintf(“%d,”,i);while(i++);printf(“%d\n”,i);其輸出結(jié)果是(B)A)0,0B)0,1C)1,1D)程序進(jìn)入無限循環(huán)【解析】執(zhí)行do-while循環(huán),輸出i的值為0,接著判斷循環(huán)條件i++,i++的值為0,i的值為1,故答案是B。7.知識點(diǎn):for語句例1:(2023-03)有以下程序main(){ charb,c;inti;?b='a';c='A';?for(i=0;i<6;i++) {?if(i%2)putchar(i+b); elseputchar(i+c);?}printf("\n");}程序運(yùn)營后的輸出結(jié)果是(B)A)ABCDEFB)AbCdEfC)aBcDeFD)abcdef【解析】:for循環(huán)執(zhí)行6次,每次判斷i能否被2整除,假如不能,則輸出i+b,假如可以則輸出i+c,注意if(i%2)是求表達(dá)式i%2是否為true,即其結(jié)果是不是非0。所以i為0時,輸出0+A=A,i為1時,輸出1+a=b,i為2時,輸出2+A=C,i為3時,輸出3+a=d,i為4時,輸出4+A=E,i為5時,輸出5+a=f。故選B。表達(dá)式1、表達(dá)式2、表達(dá)式3可以缺省,但兩個分號不能省略。表達(dá)式1省略的情況如下:例2:(2023-03-21)有以下程序#include<stdio.h>main(){inta=1,b=2;for(;a<8;a++){b+=a;a+=2;}printf(“%d,%d\n”,a,b);}程序運(yùn)營后的輸出結(jié)果是(D)A)9,18B)8,11C)7,11D)10,14表達(dá)式1和表達(dá)式3也可以是逗號表達(dá)式。例3:(2023-04-20)以下程序段中的變量已對的定義for(i=0;i<4;i++,i++)for(k=1;k<3;k++)printf(“*”);程序段的輸出結(jié)果是(B)A)********B)****C)**D)*【解析】外層for循環(huán),表達(dá)式3是逗號表達(dá)式,即i自加2。.for循環(huán)與switch結(jié)構(gòu)例4:(2023-09-29)有以下程序#include<stdio.h>main(){inta[]={2,3,5,4},i;for(i=0;i<4;i++)switch(i%2){case0:switch(a[i]%2){case0:a[i]++;break;case1:a[i]--;}break;case1:a[i]=0;}for(i=0;i<4;i++)printf(“%d”,a[i]);printf(”\n”);}程序運(yùn)營后的輸出結(jié)果是(C)A)3344B)2050C)3040C)0304例5、(2023-03)有以下程序段inti,n;for(i=0;i<8;i++){ n=rand()%5;?switch(n) { case1:? case3:printf("%d\n",n);break; ?case2:? case4:printf("%d\n",n);continue; case0:exit(0); }printf("%d\n",n);}以下關(guān)于程序段執(zhí)行情況的敘述,對的的是(D)A)for循環(huán)語句固定執(zhí)行8次B)當(dāng)產(chǎn)生的隨機(jī)數(shù)n為4時結(jié)束循環(huán)操作C)當(dāng)產(chǎn)生的隨機(jī)數(shù)n為1和2時不做任何操作D)當(dāng)產(chǎn)生的隨機(jī)數(shù)n為0時結(jié)束程序運(yùn)營【解析】:rand()是隨機(jī)產(chǎn)生一個整數(shù),rand()%5即隨機(jī)得到0-4這五個數(shù)字,for循環(huán)控制隨機(jī)產(chǎn)生8次,當(dāng)?shù)玫?,3時執(zhí)行printf("%d\n",n)并退出switch,當(dāng)?shù)玫?,4時執(zhí)行printf("%d\n",n)并繼續(xù)循環(huán),當(dāng)?shù)玫?時,exit(0)正常結(jié)束程序。所以循環(huán)不一定執(zhí)行8次,故選擇D。for循環(huán)與數(shù)組例6:(2023-09-09)有以下程序#include<stdio.h>main(){inti,n[]={0,0,0,0,0};for(i=1;i<=4;i++){n[i]=n[i-1]*3+1;printf(“%d”,n[i]);}}程序運(yùn)營后的輸出結(jié)果是141340。注意區(qū)賦值語句和判斷語句例7:(2023-03)若i和k都是int類型變量,有以下for語句for(i=0,k=-1;k=1;k++)printf("*****\n");下面關(guān)于語句執(zhí)行情況的敘述中對的的是(D)A)循環(huán)體執(zhí)行兩次B)循環(huán)體執(zhí)行一次C)循環(huán)體一次也不執(zhí)行D)構(gòu)成無限循環(huán)【解析】:for循環(huán)的表達(dá)式1和表達(dá)式3可以是一個簡樸的表達(dá)式也可以是逗號表達(dá)式,本題表達(dá)式1是一個逗號表達(dá)式,i賦值為0,同時k賦值為-1。所以判斷表達(dá)式2:k=1是k賦值為1,故無限循環(huán),選擇D。8.知識點(diǎn):循環(huán)嵌套例1:(2023-03-20)有以下程序#include<stdio.h>main(){inti,j,m=1;for(i=1;i<3;i++){for(j=3;j>0;j--){if(i*j>3)break;m*=i*j;}}printf(“m=%d\n”,m);}程序運(yùn)營后的輸出結(jié)果是(A)A)m=6B)m=2C)m=4D)m=5例2:(2023-03)有以下程序main(){?intx=1,y=0;if(!x)y++;elseif(x==0)if(x)y+=2;elsey+=3;printf("%d\n",y);}程序運(yùn)營后的輸出結(jié)果是(D)A)3B)2C)1D)0【解析】:if-else的嵌套,注意else總是與前面最近的且未配對的if語句配對組合。if(!x)中x為1,?。鵀?為false,即if(!x)后的語句不執(zhí)行,elseif(x==0),x為1也不等于0,也不成立,故elseif內(nèi)的語句也不執(zhí)行,而if(x)y+=2;elsey+=3;均為elseif內(nèi)的語句。所以直接輸出y為0,故選D。9.知識點(diǎn):break語句功能:跳出整個switch語句;跳出循環(huán)體,防止死循環(huán)。break語句只能出現(xiàn)在switch、while、do-while、for循環(huán)中,不能出現(xiàn)在其他地方。作用范圍:所在循環(huán)體從屬的最內(nèi)層循環(huán),而不是外層的某個循環(huán)。6.知識點(diǎn):continue語句功能:結(jié)束本次循環(huán),接著判斷是否繼續(xù)下一次循環(huán)。continue語句只能出現(xiàn)在while、do-while、for循環(huán)中。作用范圍:所在循環(huán)體從屬的最內(nèi)層循環(huán),而不是外層的某個循環(huán)。例1:(2023-04-09)以下程序運(yùn)營后的輸出結(jié)果是s=0#include<stdio.h>main(){intk=1,s=0;do{if((k%2)!=0)continue;s+=k;k++;}while(k>10);printf(“s=%d\n”,s);}【解析】k=1,if((k%2)!=0)條件成立,執(zhí)行continue語句,結(jié)束本次循環(huán),判斷表達(dá)式k>10,值為0,故跳出do-while循環(huán),執(zhí)行printf(“s=%d\n”,s);則輸出結(jié)果為s=0。第三課數(shù)組本課重要知識點(diǎn):1.知識點(diǎn):一維數(shù)組的定義例1:(2023-03-25)下列選項(xiàng)中,能對的定義數(shù)組的語句是(D)A)intnum[0…2023];B)intnum[];C)intN=2023;D)#defineN2023intnum[N];intnum[N];【解析】數(shù)組的長度必須是一個整型常量、整型常量表達(dá)式,故A項(xiàng)錯誤。定義數(shù)組時,不能省略數(shù)組長度,B項(xiàng)錯誤。數(shù)組的長度不能是變量,C項(xiàng)錯誤。數(shù)組的長度可以是符號常量,D項(xiàng)對的。例2:(2023-09-28)若要定義一個具有5個元素的整型數(shù)組,以下錯誤的定義語句是(D)A)inta[5]={0};B)intb[]={0,0,0,0,0};C)intc[2+3];D)inti=5,d[i];【解析】可以只給數(shù)組的前面一部分元素設(shè)定初值,A項(xiàng)對的。對所有數(shù)組元素賦初值時,可以不指定數(shù)組元素的個數(shù),B項(xiàng)對的。數(shù)組的長度可以是一個整型常量表達(dá)式,C項(xiàng)對的。數(shù)組的長度不能是變量,D項(xiàng)錯誤。2.知識點(diǎn):一維數(shù)組元素的引用例1:(2023-09-21)若有定義語句:intm[]={5,4,3,2,1},i=4;則下面對m數(shù)組元素的引用中錯誤的是(C)A)m[--i]B)m[2*2]C)m[m[0]]D)m[m[i]]【解析】m數(shù)組元素的引用的下限為0,上限為4。i=4,--i的值為3,A項(xiàng)對的。B項(xiàng)沒有越界,對的。m[0]=5,超過上限,已經(jīng)越界,故C項(xiàng)錯誤。m[4]=1,沒有越界,故D項(xiàng)對的。例2:(2023-03)以下程序運(yùn)營后的輸出結(jié)果是13715main(){ inti,n[5]={0};for(i=1;i<=4;i++){n[i]==n[i-1]*2+1;printf("%d",n[i]);}printf("\n");}【解析】:n[1]=1,n[2]=1*2+1=3,n[3]=3*2+1=7,n[4]=7*2+1=153.知識點(diǎn):一維數(shù)組的初始化順序列出數(shù)組元素的所有初值,例如inta[5]={1,2,3,4,5};只給數(shù)組的前面一部分元素設(shè)定初值,未賦初值的元素自動取0值。例如,inta[5]={1,2};對所有數(shù)組元素賦初值時,可以不指定數(shù)組元素的個數(shù)。例如,inta[]={1,2,3,4,5};4.知識點(diǎn):二維數(shù)組的初始化按行分段給二維數(shù)組賦初值按行連續(xù)賦值對部分元素賦初值,未賦初值的元素自動取0值若對所有元素賦初值,則第一維的長度可以不指定例1:(2023-04-16)以下數(shù)組定義中錯誤的是(B)intx[][3]={0};intx[2][3]={{1,2},{3,4},{5,6}};intx[][3]={{1,2,3},{4,5,6}};intx[2][3]={1,2,3,4,5,6};【解析】若對所有元素賦初值,則第一維的長度可以不指定,C項(xiàng)對的。二維數(shù)組的初始化可以按行連續(xù)賦值,D項(xiàng)對的。C項(xiàng)二維數(shù)組的初始化超過第一維度長度,故錯誤。5.知識點(diǎn):二維數(shù)組和for語句例1:(2023-03-09)有以下程序#include<stdio.h>main(){inti,j,a[][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++)for(j=i;j<3;j++)printf(“%d”,a[i][j]);printf(“\n”);}程序運(yùn)營后的輸出結(jié)果是123569。6.知識點(diǎn):字符串定義:由“”引起來的,由若干個字符所組成的序列。字符串的結(jié)束標(biāo)志:’\0’如字符串“china”,在內(nèi)存中存儲形式是china\0該字符串的長度為5字節(jié),所占的存儲空間為6字節(jié)。7.知識點(diǎn):字符數(shù)組的定義及初始化字符數(shù)組名是地址常量,不能賦值給數(shù)組名。例1:(2023-04-32)以下選項(xiàng)中對的的語句組是(D)A)chars[];s=”BOOK!”;B)char*s;s={“BOOK!”};C)chars[10];s=”BOOK!”;D)char*s;s=”BOOK!”;【解析】字符數(shù)組名是地址常量,不能賦值給數(shù)組名,故A、C項(xiàng)錯誤,D項(xiàng)指針s是個變量,將字符串常量賦值給s,是對的的。B項(xiàng)中給s賦值時不能用花括號將字符串括起來。例2:(2023-09-31)下面是有關(guān)C語言字符數(shù)組的描述,其中錯誤的是(D)A)不可以用賦值語句給字符數(shù)組名賦字符串B)可以用輸入語句把字符串整體輸入給字符數(shù)組C)字符數(shù)組中的內(nèi)容不一定是字符串D)字符數(shù)組只能存放字符串8.知識點(diǎn):字符數(shù)組的輸入與輸出例1:(2023-09-13)有以下程序#include<stdio.h>main(){chara[20]=”Howareyou?”,b[20];scanf(“%s”,b);printf(“%s%s\n”,a,b);}程序運(yùn)營時從鍵盤輸入:Howareyou?<回車>則輸出結(jié)果為Howareyou?How【解析】scanf函數(shù)輸入,以空格作為字符串輸入結(jié)束的標(biāo)志,故字符數(shù)組b只接受到字符串”How”。例2:(2023-03)有以下程序main(){?chara[30],b[30];scanf("%s",a);gets(b);printf("%s\n%s\n",a,b);}程序運(yùn)營時若輸入:howareyou?Iamfine<回車>則輸出結(jié)果是(B)A)howareyou?B)howIamfine? areyou?IamfineC)howareyou?IamfineD)rowareyou?【解析】:scanf以空格作為字符串輸入結(jié)束的標(biāo)志,而gets(s)不會。所以a得到的是“how”,b得到的是剩下的“areyou?Iamfine”。故選擇B。例3:(2023-03)有以下程序main(){?chars[]="012xy\08s34f4w2";?inti,n=0; for(i=0;s[i]!=0;i++) if(s[i]>='0'&&s[i]<='9')n++;?printf("%d\n",n);}程序運(yùn)營后的輸出結(jié)果是(B)A)0B)3C)7D)8【解析】:for循環(huán)讀取字符數(shù)組s中的字符,當(dāng)讀到0時退出循環(huán),注意0和‘0’的區(qū)別,字符‘0’的ASCII碼為48,‘\0’的ASCII碼才是0,所以讀取的字符為“012xy”中的字符,for循環(huán)讀取到字符后判斷是不是數(shù)字字符,假如是n自增1,“012xy”中的數(shù)字字符只有三個,所以選擇B。9.知識點(diǎn):字符串解決函數(shù)例1:(2023-09-32)有以下程序:#include<stdio.h>#include<string.h>main(){chara[5][10]={“china”,”beijing”,”you”,”tiananmen”,”welcome”};inti,j;chart[10];for(i=0;i<4;i++)for(j=i+1;j<5;j++)if(strcmp(a[i],a[j])>0){strcpy(t,a[i]);strcpy(a[i],a[j]);strcpy(a[i],t);}puts(a[3]);}程序運(yùn)營后的輸出結(jié)果是(C)A.beijing?B.china C.welcome D.tiananmen【解析】雙層for循環(huán)部分是典型的排序方法,通過strcmp比較兩個字符串的大小,然后借助t數(shù)組作為中轉(zhuǎn)數(shù)組,通過strcpy函數(shù)完畢a[i]和a[j]兩個字符串的互換,使a數(shù)組按從小到大排序,即{”beijing”,“china”,”tiananmen”,”welcome”,”you”}例1:(2023-09-23)有以下程序#include<stdio.h>#include<string.h>main(){charx[]=”STRING”;x[0]=0;x[1]=’\0’;x[2]=’0’;printf(“%d%d\n”,sizeof(x),strlen(x));}程序運(yùn)營后的輸出結(jié)果是(B)A)61B)70C)63D)71【解析】通過x[0]=0;x[1]=’\0’;x[2]=’0’;后,x[]=”0\00ING”。strlen測字符串的實(shí)際長度,不含字符串結(jié)束標(biāo)志’\0’,故strlen(x)為0。sizeof測字符串所占的存儲空間,包含字符串結(jié)束標(biāo)志,故sizeof(x)為7。例2:(2023-09-33)有以下程序#include<stdio.h>#include<string.h>main(){chara[20]=”ABCD\0EFG\0”,b[]=”IJK”;strcat(a,b);printf(“%s\n”,a);}程序運(yùn)營后的輸出結(jié)果是(B)A)ABCDE\0FG\0IJKB)ABCDIJKC)IJKD)EFGIJK【解析】把字符數(shù)組b中的字符串連接到字符數(shù)組a中字符串的后面,并刪去字符串a(chǎn)后的第一個字符串結(jié)束標(biāo)志’\0’。故輸出結(jié)果為ABCDIJK。例3:(2023-09-31)下列選項(xiàng)中,可以滿足“若字符串s1等于字符串s2,則執(zhí)行ST”規(guī)定的是(A)A)if(strcmp(s2,s1)==0)ST;B)if(s1==s2)ST;C)if(strcpy(s1,s2)==1)ST;D)if(s1-s2==0)ST;【解析】若字符串s1等于字符串s2,strcmp(s2,s1)==0,故答案是A。第四課指針本課重要知識點(diǎn):1.知識點(diǎn):指針的概念與指針變量指針就是地址。指針變量是用來存儲地址,而一般變量是用來存儲數(shù)值。例1.(09-09-26)有如下程序輸出結(jié)果為1,2,2,1#include<stdio.h>main(){?intm=1,n=2,*p=&m,*q=&n,*r;?r=p

;p=q

;q=r

;?printf(“%d,%d,%d,%d\n”,m,n,*p,*q)

;}【解析】p、q為指針,初始化時p指向m,q指向n。執(zhí)行r=p

;p=q

;q=r

;p和q的值互換,從而p指向n,q指向m。指針的改變不會應(yīng)用m、n的值,最后輸出*p和*q的值分別為n、m的值。知識點(diǎn):指針的引用指針的引用是通過兩個運(yùn)算符實(shí)現(xiàn)“&”和“*”實(shí)現(xiàn)的&是取地址符號,它的一半格式是:&變量名。例如:inti;&i表達(dá)取i的地址。*是取值運(yùn)算符,它的一般格式:*指針變量名。例如:inti=10,*p=&i;*p表達(dá)取i的值10例1.(2023-09-25)若定義語句:intyear=2023,*p=&year;,以下不能使變量year中的值增至2023的語句是(D) A.*p+=1;? B.(*p)++;? ? C.++(*p);? D.*p++;【解析】*和++同級別,按自左向右的結(jié)合方向,因此D選項(xiàng)可轉(zhuǎn)變?yōu)?(p++),從而只是使指針發(fā)生移動,而不能將p所指變量增1例2.(06—04—24)若有說明語句:double*p,a;則能通過scanf語句對的給輸入項(xiàng)讀入數(shù)據(jù)的程序段是(D)A)*p=&a;scanf("%lf",p);B)*p=&a;scanf("%f",p);C)p=&a;scanf("%lf",*p);D)p=&a;scanf("%lf",p);【解析】對于scanf函數(shù),輸入數(shù)據(jù)列表必須是合法地址表達(dá)式(可以使地址常量、指針),A選項(xiàng)、B選項(xiàng)*使用錯誤。例3.(09-03-16)若有定義語句doulex,y,*px,*py;執(zhí)行了px=&x;py=&y;之后,對的的輸入語句是(C)?A)scanf("%f%f",x,y);? B)scanf("%f%f"&x,&y); C)scanf("%f%le",px,py);?D)scanf("%lf%lf",x,y);【解析】A,D選項(xiàng)中的x,y缺少取地址符,B項(xiàng)中&x之前缺少逗號,格式不對的。3.知識點(diǎn):指針變量的初始化指針變量在使用前必須要初始化,把一個具體的地址賦給它,否則引用時會犯錯,假如不指向任何數(shù)據(jù)就賦“空值”NULL。指針變量兩種初始化方法:方法一:inta=2,*p=&a;(定義的同時初始化)?方法二:inta=2,*p;p=&a;(先定義后初始化)例1.(07—04—29)設(shè)已有定義:float(yī)x;則以下對指針變量P進(jìn)行定義且賦初值的語句中對的的是(D)A)float*p=1034;B)int*p=(float)x;C)float(yī)p=&x;D)float*p=&x;【解析】可以給一個指針賦值的只能是一個與該指針同類型的指針(或地址值);故A、B選項(xiàng)錯誤;C選項(xiàng)聲明指針犯錯,P前面的指針說明符*不能省略。4.知識點(diǎn):指針的運(yùn)算*

溫馨提示

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

評論

0/150

提交評論