C語(yǔ)言必考點(diǎn)分析_第1頁(yè)
C語(yǔ)言必考點(diǎn)分析_第2頁(yè)
C語(yǔ)言必考點(diǎn)分析_第3頁(yè)
C語(yǔ)言必考點(diǎn)分析_第4頁(yè)
C語(yǔ)言必考點(diǎn)分析_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C語(yǔ)言筆試部分必考點(diǎn)分析整理人:吳永芬C語(yǔ)言部分.名稱的命名規(guī)則。每次必出一個(gè)選擇題。(簡(jiǎn)單題,知道標(biāo)志符的命名規(guī)則即可 )。只能由字母、數(shù)字、下劃線三種字符組成,且第一個(gè)字符不能為數(shù)字。不得使用系統(tǒng)保留字。典型例題:例1.(07年4月)按照C語(yǔ)言規(guī)定的用戶標(biāo)識(shí)符命名規(guī)則,不能出現(xiàn)在標(biāo)識(shí)符中的是 (B)A)大寫(xiě)字母B)連接符C)數(shù)字字符D)下劃線例2.(07年9月)可在C程序中用做用戶標(biāo)識(shí)符的一組標(biāo)識(shí)符是 (A)A)and B)Date C)Hi D)case_2007 y-m-d Dr.TomBigl解析:B中的一是減號(hào),C中的.號(hào)不合法,D中的case是關(guān)鍵字。.判別合法的C語(yǔ)言常量。歷年來(lái)多次重復(fù)考。合法的整型常量。十進(jìn)制、八進(jìn)制(以0開(kāi)頭,如0123合法的八進(jìn)制,0128不合法的八進(jìn)制)、十六進(jìn)制(以0x開(kāi)頭,如0x125,0xef)注意:是數(shù)字0不是字母o或O,16進(jìn)制大小寫(xiě)一樣。在整形常量末尾加L表示是長(zhǎng)整型(long,也是整型但比int型數(shù)值圍大),是合法的。如115L,就是長(zhǎng)整型常量。浮點(diǎn)型常量??梢詾槭M(jìn)制小數(shù)形式,但必須有小數(shù)點(diǎn)。如:0.10.012.0 12..12 等。還可以為指數(shù)形式,但注意字母 e或E前必須有數(shù)字,e后必須為整數(shù)。如:e3,2.e.5,e3都不合法。合法如:.5e35.5e35e3C編譯系統(tǒng)默認(rèn)將浮點(diǎn)型常量作為double型處理。因此,如0.123實(shí)際上系統(tǒng)當(dāng)成double型數(shù)據(jù),而0.123f,0.123F才按照f(shuō)loat處理。這在實(shí)際運(yùn)行中,不加f只是先按double型處理,然后轉(zhuǎn)換成float型,降低了運(yùn)行的速度,其他并無(wú)大礙。字符型常量。注意:字符型常量是用單引號(hào)括起來(lái)的單字符。合法的:‘3' ‘a(chǎn)' 'b' ' n' ' ' 'b' 't' 'r' 'f' '''‘‘ddd' 'xhh'其中的ddd是1?3個(gè)八進(jìn)制數(shù)所代表的字符,hh是1到2個(gè)十六進(jìn)制數(shù)所代表的字符。字符串常量。是用雙引號(hào)括起來(lái)的一串字符。合法的:“3”, 合法的:“3”, “3a",”3a12”等。??甲址拈L(zhǎng)度大小為多少。典型例題:例1.(07年9月)以下選項(xiàng)中,合法的一組 C語(yǔ)言數(shù)值常量是A)028 B)12. C).177D)0x8A.5e-3 0Xa23 4e1.5 10,000-0xf 4.5e0 0abc 3.e5例2.(08例2.(08年9月)以下選項(xiàng)中不能作為C語(yǔ)言合法常量的是()A)'cd'B)0.1e+6C)"\a"D)''011'例3.(08年4月)以下選項(xiàng)中不屬于字符常量的是 A)‘C'B)"C"C)'\xCC0' D)'\072'例4.(08年9月)若有定義語(yǔ)句:chars[10]="1234567\0\0"; ,貝Ustrlen(s)的值是()。A)7B)8C)9D)10解析:‘\0'是‘\ddd'形式,一個(gè)八進(jìn)制字符,注意不能超過(guò) 8.如‘\18'就不合法例5.“3a 12”的長(zhǎng)度為。解析:'\x33'是一個(gè)16進(jìn)制字符例6.(07年9月)以下正確的字符串常量是 "B)'abc'C)OlympicGamesD)""解析:字符串常量必須加”",字符常量必須是‘‘括起來(lái)的單字符答案:B,A,B,A,8,D.邏輯表達(dá)式與,或條件的真、假判斷。每次必出一個(gè)選擇題。對(duì)于&碗后的兩個(gè)表達(dá)式,若前一個(gè)表達(dá)式已為假,則后一表達(dá)式不會(huì)再判斷真假。對(duì)于||前后的兩個(gè)表達(dá)式,若前一個(gè)表達(dá)式已為真,則后一表達(dá)式不再判斷真假。典型例題:例1.(09年9月)有以下程序#include<stdio.h>main(){intn=2,k=0;while(k++&&n++>2);// 注意這里有一個(gè);表示循環(huán)體就是這條空語(yǔ)句printf( "%d%dn”,k,n);}程序運(yùn)行后的輸出結(jié)果是A)02B)13C)57D)12解析:對(duì)于表達(dá)式k++&&n++>2,前一項(xiàng)的k++已經(jīng)為假,所以n++>2不再執(zhí)行。例2.(09年3月)有以下程序#include<stdio.h>main(){inta=1,b=2,c=3,d=0;if(a==1 &&b++==2)if(b!=2||c--!=3)printf("%d,%d,%d\n",a,b,c);elseprintf("%d,%d,%d\n",a,b,c);elseprintf("%d,%d,%d\n",a,b,c);}程序運(yùn)行后輸出結(jié)果是 A)1,2,3B)1,3,2C)1,3,3D)3,2,1解析:與上題相似,b!=2為真,所以c--!=3已經(jīng)不再執(zhí)行了, a不變,b為3,c不變.關(guān)系運(yùn)算符。多個(gè)關(guān)系運(yùn)算符可以連用。如a>3>b<4,運(yùn)算時(shí)從左向右算,子表達(dá)式為真,則用1代替,最后得出這個(gè)表達(dá)式的值為 1.例1.(09年9月)以下程序運(yùn)行后的輸出結(jié)果是 [8】。#include<stdio.h>main(){intx=20;printf( "%d,0<x<20);printf( "%dn”,0<x&&x<20);}解析:0<x<20先算0<x得1,1<20為真,也是1,所以第一條輸出語(yǔ)句結(jié)果為 1.第二條輸出語(yǔ)句中的關(guān)系表達(dá)式為假,即0.所以最后輸出的結(jié)果為 10.使用多個(gè),的表達(dá)式與使用多個(gè) =、+=表達(dá)式。如:逗號(hào)表達(dá)式a=a+1,b*2,c=4;是一個(gè)表達(dá)式.應(yīng)從左往右算,整個(gè)表達(dá)式的值是最右一個(gè)分量的值,即的值如:表達(dá)式x+=x*=x+1;從右往左算,整個(gè)表達(dá)式的值是最左邊的變量。設(shè)x初值為3,最后得出x為24如:inta=3,b=4;printf( "%d,a+=b);先計(jì)算表達(dá)式 a+=b的值,然后打印最左變量 a的值,即7例1.(09年9月)有以下程序#include<stdio.h>main(){inta=1,b=0;printf( "%d,",b=a+b);//解析:先計(jì)算a+b的值賦給b,然后打印的是最左變量 b的值1printf( "%dn",a=2*b);//解析:先計(jì)算2*b的值賦給a,然后打印的是最左變量 a的值2}程序運(yùn)行后的輸出結(jié)果是 A)0,0B)1,0C)3,2 D)1,2例2.(09年9月)設(shè)有定義:inta=1,b=2,c=3;,以下語(yǔ)句中執(zhí)行效果與其它三個(gè)不同的是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;}解析:對(duì)于C來(lái)說(shuō),后面的語(yǔ)句a=b;b=c;是順序執(zhí)行,無(wú)論if語(yǔ)句執(zhí)不執(zhí)行,都會(huì)執(zhí)行。例3.(07年9月)若變量均已正確定義并賦值,以下合法的 C語(yǔ)言賦值語(yǔ)句是A)x=y==5;B)x=n%2.5;C)x+n=I;D)x=5=4+1;解析:A是從右往左算,先判斷關(guān)系表達(dá)式 y==5為真或假,只能是1或0,然后再把這個(gè)值賦給 xB先算n%2.5的值,%勺前后必須是整數(shù),不合法。 CD的=左邊不是一個(gè)單獨(dú)的變量,不合法。注意:用+=,-=,=賦值時(shí),符號(hào)左邊的必須是一個(gè)變量名,不能是常量,也不能是個(gè)計(jì)算表達(dá)式。.一條語(yǔ)句結(jié)束用;但如果無(wú)語(yǔ)句只有;則也是一條合法的語(yǔ)句,叫空語(yǔ)句。每次必出一個(gè)或兩個(gè)相關(guān)的題。例1.(09年3月)一下程序段中的變量已正確定義for(i=0;i<4;i++,j++)for(k=1;k<3;k++);printf("*");程序段的輸出結(jié)果是A)********B)****C)**D)*解析:注意第二個(gè)循環(huán)之后的;是一條合法語(yǔ)句,循環(huán)就執(zhí)行這條空語(yǔ)句。 最后一句輸出語(yǔ)句是循環(huán)結(jié)束后才執(zhí)行的。.字符數(shù)組、字符指針、字符串關(guān)系 。(1)在C語(yǔ)言中無(wú)字符串?dāng)?shù)據(jù)類型,因此存儲(chǔ)字符串只能借助字符數(shù)組 ^合法的字符串定義。chars[]="abc";chars[]={ "abc"};其中的??捎锌蔁o(wú)。字符串未尾系統(tǒng)會(huì)自動(dòng)加' \0'結(jié)束符取數(shù)組元素時(shí),可以通過(guò)下標(biāo)法也可以通過(guò)指針?lè)?。如?(s+1)與s[1]代表的都是字符‘b'但注意:*s++是不合法的,因?yàn)閟代表數(shù)組的首地址,是常量,不能變動(dòng)(2)字符數(shù)組與字符串的差別。字符串的形式賦值給字符數(shù)組,未尾自動(dòng)加'\0',而字符形式賦給字符數(shù)組不一定會(huì)加‘ 、0'charc[]={'a','b','c'};printf("%s",c);// 打印結(jié)果不是abc,而是比abc多出一些字符,原因是在未尾沒(méi)自動(dòng)加字符串結(jié)束符‘\0',沒(méi)有‘\0'就會(huì)讀出隨后存單元的容.再看一個(gè)定義。charc[5]={'a','b','c'};TOC\o"1-5"\h\zprintf("%s",c);// 得出來(lái)的打印結(jié)果為abc,因?yàn)闆](méi)有填滿時(shí),可以給剩余空間自動(dòng)加' \0'再看一個(gè)定義。charc[3]={'a','b','c'};printf("%s",c);// 得出來(lái)的打印結(jié)果為abc及亂碼,因?yàn)闆](méi)有剩余空間了,所以不會(huì)在末尾加‘ \0'(3)字符指針指向字符串或字符數(shù)組。注意此時(shí)的字符串不能加 {},因?yàn)閧}是給數(shù)組初始化元素的形式char*s="abc";//定義時(shí),將字符串常量"abc”的首地址賦給 schar*s2;s2 ="bcd”;〃將字符串常量"bcd”的首地址賦給s,注意不是將"bcd”值賦給s2,是地址賦過(guò)去charstr[]="string";s2=str;// 字符指針指向字符數(shù)組 strcharstr[]="string”;chars3[]=str;// 不合法,不能改變s3,s3是數(shù)組地址,是常量,不能改動(dòng)。

接下來(lái)的兩段代碼一段是正確的,一段是錯(cuò)誤的,請(qǐng)注意錯(cuò)誤的原因。chars[]="abc";char*p=s;//chars[]="abc";char*p=s;//通過(guò)p來(lái)遍歷輸出數(shù)組每個(gè)元素while(*p!=0)//*p!= '\0'{printf("%C,*p);p++;}//這段是正確的while(*s!=0)//*p!= '\0'{printf("%C,*s);s++;}//這段是錯(cuò)誤的,原因:s是常量不能改變(4)注意指針定義完了后,必須指向一個(gè)已存在的空間,否則指針會(huì)隨機(jī)初始化一個(gè)空間的地址,如果該空間是關(guān)鍵區(qū)域,這樣如果給該空間寫(xiě)入值,會(huì)導(dǎo)致問(wèn)題。如:執(zhí)行char*s;scanf( "%S',s);雖未提示語(yǔ)法錯(cuò)誤,但運(yùn)行會(huì)有問(wèn)題。運(yùn)行會(huì)提示該存不能為寫(xiě)。另外,區(qū)分:p,*p,&p三個(gè)值 設(shè)有如下定義:例1.(09年3月)以下選項(xiàng)中正確的語(yǔ)句組是A)chars口;s="BOOK!”; B)char*s;s={"BOOK!”};C)chars[10];s="BOOK!”;D)char*s;s="BOOK!";解析:A,C的錯(cuò)誤都是因?yàn)閿?shù)組名是常量,不能被賦值。 B的錯(cuò)誤是因?yàn)樽址羔樂(lè)x值時(shí),字符串不能加 {}.sizeof()與strlen()的使用。(1)sizeof() 可以測(cè)試數(shù)據(jù)類型的大小,也可以測(cè)試一個(gè)變量所占空間的大小,單位為字節(jié)。如:sizeof(long)結(jié)果為4 。inta[10];貝Usizeof(a)為40.(2)strlen() 為測(cè)試字符串的長(zhǎng)度。如:chara[20]="abcd";貝例1.(09年3月)以下選項(xiàng)中正確的語(yǔ)句組是A)chars口;s="BOOK!”; B)char*s;s={"BOOK!”};C)chars[10];s="BOOK!”;D)char*s;s="BOOK!";解析:A,C的錯(cuò)誤都是因?yàn)閿?shù)組名是常量,不能被賦值。 B的錯(cuò)誤是因?yàn)樽址羔樂(lè)x值時(shí),字符串不能加 {}.sizeof()與strlen()的使用。(1)sizeof() 可以測(cè)試數(shù)據(jù)類型的大小,也可以測(cè)試一個(gè)變量所占空間的大小,單位為字節(jié)。如:sizeof(long)結(jié)果為4 。inta[10];貝Usizeof(a)為40.(2)strlen() 為測(cè)試字符串的長(zhǎng)度。如:chara[20]="abcd";貝U strlen(a)為4..函數(shù)的簡(jiǎn)單嵌套調(diào)用。每次必出多題。注意,分清函數(shù)調(diào)用的兩種不同的參數(shù)傳遞方式:值傳遞、地址傳遞掌握指針類型)。(1)值傳遞時(shí),實(shí)參的值復(fù)制一份給形參,因此,運(yùn)行被調(diào)函數(shù)后,只改變了形參的值,實(shí)參值無(wú)變化。如:(只主調(diào)函數(shù):inta=3;fun(a);printf("%d,a);當(dāng)函數(shù)fun調(diào)用結(jié)束后,b的值為4,而a的值仍為3.被調(diào)函數(shù):voidfun(intb){b++;}(2)傳指針時(shí),主調(diào)函數(shù)的形參需為地址 ,被調(diào)函數(shù)的形參定義成指針形式,注意,此時(shí)形參和實(shí)參指向同一地址的對(duì)應(yīng)的存單元。例1.主調(diào)函數(shù):inta=3;fun(&a);printf( "%d,a);當(dāng)函數(shù)fun調(diào)用結(jié)束后,被調(diào)函數(shù):voidfun(int*b){*b++;}a、b的值都為4.解析:&為取地址運(yùn)算符,&a假設(shè)為1001.圖解如下。11013+1例2.(09年4月)有以下程序#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);}程序運(yùn)行后輸出的結(jié)果是 A)3,5,5,3B)3,5,3,5C)5,3,3,5D)5,3,5,3首先執(zhí)行intx=3,y=5,*p=&x,*q=&y;假設(shè)變量x,y的地址為1001,1002.1001 10011001 1001q國(guó)10021002然后執(zhí)行fun(p,q);P10011001a在函數(shù)體執(zhí)行時(shí),只是執(zhí)彳亍fun(&x,&y);后,例然后執(zhí)行fun(p,q);P10011001a在函數(shù)體執(zhí)行時(shí),只是執(zhí)彳亍fun(&x,&y);后,例3.有以下程序#include<stdio.h>a,b,c之間的交換,結(jié)果仍然不變。 答案B1002丁q的容未變,所以打印值不變,還是3,5.voidfun(int*a,int*b){intc;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);}程序運(yùn)行后輸出的結(jié)果是解析:執(zhí)行voidfun(int*a,int*b){intc;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);}程序運(yùn)行后輸出的結(jié)果是解析:執(zhí)行fun(p,q)前:aA)3,5,5,3B)3,5,3,5C)5,3,3,5D)5,3,5,3答案選Co*a取的是x,*b取的是y,兩者交換后執(zhí)彳亍fun(p,q)后:ax的值變?yōu)?,y的值變?yōu)?第二次調(diào)用fun(&x,&y)與此類推(3) 指針操縱一維數(shù)組。必考。被調(diào)函數(shù)的形參為指針變量,就可以操縱數(shù)組的元素。如:主調(diào)函數(shù):chara[]="abcdefg”;fun(a)〃 數(shù)組名a是地址,a也是實(shí)參被調(diào)函數(shù)//b是形參voidfun(char*b)// 被調(diào)用后,b指向數(shù)組a首地址{while(*b!=0)〃 同*b!=' 0'因''0'的ascII碼是0{*b+=1;b++;//*b 表示取對(duì)應(yīng)地址里存的值執(zhí)行完該程序后,數(shù)組a的容變?yōu)椤癰cdefgh"??慈缦聢D示:當(dāng)執(zhí)行到fun(a)時(shí)候,實(shí)參a送到形參b中。假設(shè)地址a為1101。b1101一卜1101110211031104110511061107abcdefg\0*b的作用是取地址里對(duì)應(yīng)的值, 所以第一次循環(huán)時(shí)取地址 1101對(duì)應(yīng)的值,即字符’a',加1后變?yōu)椤産';然后循環(huán)還沒(méi)結(jié)束,執(zhí)行語(yǔ)句 b++,將b里存的地址變成了 1102,第一次循環(huán)結(jié)束。第二次循環(huán)以此類推。典型例題:例1.(07年9月)有以下程序voidfun(intn,int*p){intf1,f2;if(n==1||n==2)*p=1;else{fun(n-1,&f1);fun(n-2,&f2);*p=f1+f2;}}main(){ints;fun(3,&s);printf("%d\n",s);}程序的運(yùn)行結(jié)果是A)2B)3C)4D)5答案:2解析:本題較難,遞歸調(diào)用。這個(gè)題目關(guān)鍵是理解第二個(gè)參數(shù)是一個(gè)指針變量,與實(shí)參指向的是同一個(gè)存單元 .fun函數(shù)總共調(diào)用了三次.而p作為形參,在三次調(diào)用中是對(duì)應(yīng)不同的存單元。例2.(09年3月)有以下程序#include<stdio.h>voidfun(char*s){while(*s){if(*s%2==0)printf("%c",*s);s++;}}main(){chara[]={"good"};fun(a);printf("\n");}注意:字母a的ASCII碼值為97,程序運(yùn)行后的^^出結(jié)果是 A)dB)goC)godD)good解析:本題中子函數(shù)fun功能是判斷字符數(shù)組中每個(gè)元素的 ASCII碼是不是偶數(shù)。關(guān)鍵是清楚:字符型可以和整型相互轉(zhuǎn)換,即字符可以當(dāng)成ASCII碼對(duì)應(yīng)的整數(shù),或整數(shù)可以轉(zhuǎn)換為 ASCII碼對(duì)應(yīng)的字符。本題只有d的ascii碼是100,偶數(shù)。答案:A例3.(09年9月)有以下程序#include<stdio.h>voidfun(intp){intd=2;p=d++;printf( "%d,p);}main(){inta=1;fun(a);printf("%dn",a);}程序運(yùn)行后的輸出結(jié)果是A)32B)12C)21D)22解析:例3主要是理解什么彳1傳遞。因此a作為實(shí)參,函數(shù)調(diào)用是值傳遞,運(yùn)行完后,a的值是不變的。答案:C例4.(09年3月)有以下程序#include<stdio.h>intf(intx,inty){return((y-x)*x);}main(){inta=3,b=4,c=5,d;d=f(f(a,b),f(a,c));printf("%d\n",d);}程序運(yùn)行后的車^出結(jié)果是 A)10B)9C)8D)7 解析:此題較簡(jiǎn)單例5.(09年3月)11.有以下程序,程序執(zhí)行后,輸出結(jié)果是【 】#include<stdio.h>voidfun(int*a){a[0]=a[1];}main(){inta[10]={10,9,8,7,6,5,4,3,2,1},i;for(i=2;i>=0;i--) fun(&a[i]);for(i=0;i<10;i++) printf("%d",a[i]);printf("\n");}解析:這里有兩個(gè) a,此時(shí)形參a中出現(xiàn)的a[0]不再是主函數(shù)中元素 10了,而是表示當(dāng)前地址對(duì)應(yīng)的值,如果當(dāng)前是8的地址,則傳過(guò)去后,子函數(shù)中的a[0]指的是8,a[1]指的是7.或者我們可以將形參中的 a改成b,不影響做題,防止混淆。答案:77765432110.函數(shù)調(diào)用時(shí)所涉及到的局部變量、全局變量、static變量。每次必出一到兩題。如存在全局變量a,而在一個(gè)子函數(shù)部又定義了局部變量 a,則在該子函數(shù)提到的變量 a指的是局部變量a。靜態(tài)變量與全局變量相似,但初始化語(yǔ)句只執(zhí)行一次,既使該語(yǔ)句被重復(fù)調(diào)用。典型例題:例1.(07年9月)有以下程序#includeinta=1;intf(intc){staticinta=2;//解析:該語(yǔ)句只執(zhí)行一次,該靜態(tài)變量適用圍在函數(shù) f,但生存周期是到整個(gè)程序的結(jié)束c=c+1;return(a++)+c;}main(){inti,k=0;for(i=0;i<2;i++){inta=3;k+=f(a);}// 解析:這里使用的 a是局部變量ak+=a;//這里的a指的是全局變量printf("%dn",k);}程序運(yùn)行結(jié)果是 A)14B)15C)16D)17例2.(09年9月)有以下程序#include<stdio.h>intf(intn);main(){inta=3,s;s=f(a);s=s+f(a);printf("%n”,s);}intf(intn){staticinta=1;n+=a++;returnn;}程序運(yùn)行以后的輸出結(jié)果是 A)7B)8C)9D)10例3.(09年9月)有以下程序#include<stdio.h>inta=5;voidfun(intb){inta=10;a+=b;printf("%d,a);}main(){intc=20;fun(c);a+=c;printf(“%dn”,a);}程序運(yùn)行后的輸出結(jié)果是.輸入scanf(),輸出printf()語(yǔ)句的語(yǔ)法。注意:在輸入非字符型的值時(shí),空格和回車一樣是分隔符。特別是在輸入字符串的時(shí)候,空格不是輸入的值,只能作為一個(gè)值輸完的結(jié)束符看待。每次必出一個(gè)以上選擇題。但例1.(09年9月)有以下程序#include<stdio.h>main(){chara[20]="Howareyou?”,b[20];scanf("%S',b);printf(" n”,a,b);}程序運(yùn)行時(shí)從鍵盤輸入: Howareyou?<回車〉則輸出結(jié)果為【 】。解析:%s時(shí)候,空格表示一個(gè)字符串的輸入結(jié)束,所以b的值為”hoW'例2.(08年9月)若整型變量a和b中的值分別為7和9,要求按以下格式輸出 a和b的值:a=7b=9請(qǐng)完成輸出語(yǔ)句:printf(" 【 】",a,b);。解析:輸出格式串中應(yīng)包含 a=b=及換行符\n。因此,答案為:a=%d\nb=%d例3.(07年9月)有以下程序段intj;floaty;charname[50];scanf("%2d%f%s",&j,&y,name);當(dāng)執(zhí)行上述程序段,從鍵盤上輸入 555667777abe后,y的值為A)55566.0B)566.0C)7777.0D)566777.0解析:2d使得只接受兩位數(shù)值,所以j為55,接下來(lái)的566后遇到空格,則一個(gè)數(shù)輸入完畢,因此,y為566,接下來(lái)的7777abe是name的值例4.若變量x,y已定義為int類型且x的值為99,y的值為9,請(qǐng)將輸出語(yǔ)句printf(1】,x/y);補(bǔ)充完整,使其輸出的計(jì)算結(jié)果形式為:x/y=11。答案:"x/y=%d”例5.定義:inta,b;scanf("%3d%3d,&a,&b);假設(shè)^^入123456,系統(tǒng)會(huì)自動(dòng)將輸入的 123賦值給a,456賦值名bo例6.定義:floata;scanf("%7.2f",&a);注意是不合法的,輸入時(shí)不能有帶小數(shù)點(diǎn)的精度。例7.定義:scanf("%d,"%d',&a,&b);輸入數(shù)據(jù)的時(shí)候必須帶 …因?yàn)榍懊嬗?,?.定義:scanf("%d"%d',&a,&b);輸入時(shí)必須中間要帶 1個(gè)及以上空格,因?yàn)橹虚g有兩個(gè)空格.例9.定義:scanf("%c%c%c,&c1,&c2,&c3);注意輸入單字符%c格式時(shí),無(wú)論輸入的是空格還是轉(zhuǎn)義字符都是有效輸入字符。本題若輸入 abc回車則a給cl,空格給c2,b給c3.實(shí)際我們輸入abc就可以把a(bǔ)給clb給c2c給c3.對(duì)于非字符型數(shù)據(jù),一般認(rèn)為遇到空格或回車或(Tab鍵)都認(rèn)為數(shù)據(jù)結(jié)束。對(duì)于指定輸入寬度的,我們無(wú)論加不加空格回車等,會(huì)按指定的長(zhǎng)度取列后結(jié)束輸入。對(duì)于非法輸入,如數(shù)值型輸入了 a,b等字符,會(huì)認(rèn)為是非法輸入,自動(dòng)結(jié)束輸入。.計(jì)算數(shù)值表達(dá)式的值,涉及到類型轉(zhuǎn)換。每次出一個(gè)以上選擇題。較簡(jiǎn)單。例1.(09年9月)(int)((double)9/2)-(9)%2 值為多少。解析:類型自動(dòng)轉(zhuǎn)換時(shí),從低往高轉(zhuǎn)換。比如doublex;intb,c;c=x/b; 執(zhí)行x/b時(shí)先把b轉(zhuǎn)換為高類型double,然后再計(jì)算x/b,最后得到的值是一個(gè)double型,又因?yàn)樵撝蒂x給c,c是int型,所以c的值是該數(shù)舍掉小數(shù)點(diǎn)后的值。例2.(09年3月)表達(dá)式(int)((double)(5/2)+2.5)的值是【 】答案:4.switch語(yǔ)句的執(zhí)行。每次出1到2題。主要是掌握該語(yǔ)法中 case語(yǔ)句只是作為一個(gè)標(biāo)號(hào),如果這個(gè)標(biāo)號(hào)執(zhí)行后,未執(zhí)行break.則繼續(xù)執(zhí)行后繼的語(yǔ)句,直到遇到break再跳出switch語(yǔ)句。(09年9月)有以下程序運(yùn)行后的輸出結(jié)果是#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");}A)3344 B)2050C)3040 D)0304(08年9月)以下程序的輸出結(jié)果是【 】。#include<stdio.h>main(){intj,a[]={1,3,5,7,9,11,13,15},*p=a+5;for(j=3;j;j--){switch(j){case1:case2:printf("%d",*p++);break;case3:printf("%d",*(--p));}}}.a>b?1:0語(yǔ)法。每次可能出一個(gè)選擇題。如a>b為真,則執(zhí)行1,否則執(zhí)行0例1(09年9月)以下程序段中,與語(yǔ)句: k=a>b?(b>c?1:0):0;功能相同的是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;解析:僅當(dāng)a>b為真且b>c為真時(shí),才將1賦給k,其他情況都是0.例2(09年3月)設(shè)有宏定義:#defineIsDIV(k,n)((k%n==1)?1:0)且變量m已正確定義并賦值,則宏調(diào)用:IsDIV(m,5)&&IsDIV(m,7) 為真時(shí)所要表達(dá)的是A)判斷m是否能被5或者7整除B)判斷m是否能被5和7整除C)判斷m被5或者7整除是否余1D)判斷m被5和7整除是否都余1答案:D例3.(07年9月)設(shè)有條件表達(dá)式:(EXP)?i++;j--,則以下表達(dá)式中(EXP)完全等價(jià)的是A)(EXP==0)B)(EXP!=0)C)(EXP==1)D)(EXP!=1)解析:一個(gè)表達(dá)式如果為真,僅需滿足 !=0即可,所以選B.字符與ASCii碼的轉(zhuǎn)換。每次必出一個(gè)以上選擇題。一個(gè)字符,可以按ascII碼的值參與運(yùn)算。大小寫(xiě)字母ASCII碼相差32.將大寫(xiě)字母x轉(zhuǎn)換為小寫(xiě)母:x+32對(duì)于一個(gè)字符可以+、-整數(shù),如charz='A';printf("%C,z+3);輸出為字符D.同樣的兩個(gè)字符相減,得到的是 ASCii碼的相差,如charz='d',x='f';printf( "%d,z-x);輸出為-2例1.有以下程序#include<stdio.h>main(){charc1,c2;scanf("%c",&c1);while(c1<65||c1>90) scanf("%c",&c1);//解析:保證輸入的是英文字符c2=c1+32;//解析將c1對(duì)應(yīng)的大寫(xiě)字母轉(zhuǎn)為小寫(xiě)字符printf("%c,%c\n",c1,c2);}程序運(yùn)行輸入65回車后,能否輸出結(jié)果,結(jié)束運(yùn)行(請(qǐng)回答能或不能)【】解析:注意輸入的格式是 c型的,所以這個(gè)65是’6''5',數(shù)字字符'6'的ascii碼是54,所以滿足循環(huán)的條件,最后的打印語(yǔ)句不能被執(zhí)行。例2.(09年3月)下列程序運(yùn)行時(shí),若輸入labcedf2df<回車〉輸出結(jié)果為【10】#include<stdio.h>main(){chara=0,ch;while((ch=getchar())!='\n'){if(a%2!=0&&(ch>='a'&&ch<='z')) ch=ch-'a'+'A';a++;putchar(ch);}printf("\n");}(07年9月)已有定義:charc;,程序前面已在命令行中包含 ctype.h文件,不能用于判斷c中的字符是否為大寫(xiě)字母的表達(dá)式是A)isupper(c)B)'A<=c<=Z'C)'A<=c&&c<=Z'D)c<=('z' -32)&&('a'-32)<=c.宏替換語(yǔ)句。每次必出一個(gè)選擇題。(09年9月)有以下程序#include<stdio.h>#definef(x)x*x*xmain(){inta=3,s,t;s=f(a+1);t=f((a+1));printf( "%d,%dn',s,t);}程序運(yùn)行后的輸出結(jié)果是 A)10,64 B)10,10 C)64,10 D)64,64解析:s的結(jié)果是a+1*a+1*a+1,t的結(jié)果是(a+1)*(a+1)*(a+1)(09年3月)有以下程序#include<stdio.h>#definePT3.5 ;#defineS(x)PT*x*x;main(){inta=1,b=2;printf("%4.1f\n",S(a+b));}程序運(yùn)行后的車^出結(jié)果是 A)14.0B)31.5C)7.5D) 程序有錯(cuò)無(wú)輸出結(jié)果.結(jié)構(gòu)體的定義及使用。合法的定義。先聲明結(jié)構(gòu)體類型再定義變量名struct 結(jié)構(gòu)體名{成員列表};注意:未尾有個(gè);結(jié)構(gòu)體名變量名;如:structstudent{intsno;charsname[20];};structstudents1,s[10];聲明類型時(shí)定義變量.struct 結(jié)構(gòu)體名{成員列表}變量名;如:structstudent{intsno;charsname[20];}s1,s[10];不出現(xiàn)結(jié)構(gòu)體名,直接定義變量。struct{intsno;charsname[20];}s1,s[10];引用某個(gè)成員時(shí)這樣引用: sl.sno,sl.sname,s1.sname[2]使用typedef給結(jié)構(gòu)體定義后重新起個(gè)類型名。typedefstructstudent{〃student 可有可無(wú)intsno;charsname[20];}stu;〃 結(jié)構(gòu)體類型名為stustus1,s[10];(2)使用見(jiàn)例題。關(guān)鍵是函數(shù)調(diào)用時(shí)如果傳的不是地址,則是值傳遞,否則是地址傳遞。例1.(09年9月)下面結(jié)構(gòu)體的定義語(yǔ)句中,錯(cuò)誤的是A)structord{intx;inty;intz;};structorda;B)structord{intx;inty;intz;}structorda;C)structord{intx;inty;intz;}a;D)struct{intx;inty;intz;}a;例2.(09年9月)有以下程序#include<stdio.h>#include<string.h>structA{inta;charb[10];doublec;};structAf(structAt);〃 解析:此行是函數(shù)的聲明main(){structAa={1001, "ZhangDa,1098.0};a=f(a);printf( "%d,%s,%6.1fn”,a.a,a.b,a.c);}structAf(structAt){t.a=1002;strcpy(t.b,"ChangRong);t.c=1202.0;returnt; }程序運(yùn)行后的輸出結(jié)果是A)1001,ZhangDa,1098.0B)1001,ZhangDa,1202.0C)1002,ChangRong,1098.0D)1002,ChangRong,1202.0解析:在主函數(shù)中調(diào)用 f(a)時(shí),因?yàn)樾螀⑹侵祩鬟f,所以改變的是 t的所有成員值,但是 return語(yǔ)句把t的值又賦給了a,所以最后a、t有相同的彳to答案:D例3.(08年4月)以下程序中函數(shù)fun的功能是:統(tǒng)計(jì)person所指結(jié)構(gòu)體數(shù)組中所有性別 (sex)為M的記錄的個(gè)數(shù),存入變量n中,并做為函數(shù)值返回。請(qǐng)?zhí)羁眨?include<stdio.h>#defineN3typedefstruct{intnum;charnam[10];charsex;}SS;intfun(SSperson口){inti,n=0;for(i=0;i<N;i++)if(【 】'M)n++;//解析:判斷成員sex的值是否為‘M答案:person[i].sex==returnn;}main(){SSW[N]={{1,"AA','F'},{2,”BB','M},{3,"CC,'M}};intn;n=fun(W);printf("n=%dn”,n);}例4.(07年9月)有以下程序(此題較難,對(duì)于難題,不會(huì)的話可放棄,難題非常少,重點(diǎn)放在較基礎(chǔ)的題目上 )structtt{intx;structtt*y;}*p;structtta[4]={20,a+1,15,a+2,30,a+3,17,a};// 注意這里是初始化,有兩個(gè)分量x,y同時(shí)初始化。main(){inti;p=a;for(i=1;i<=2;i++){printf("%d,",p->x);p=p->y;}}程序的運(yùn)行結(jié)果是A)20,30,B)30,17C)15,30,D)20,15,例5.(07年9月)有以下程序typedefstruct{charname[9];charsex;floatscore[2];}STU;STUf(STUa){STUb={"Zhao",'m',85.0,90.0};inti;strcpy(,);a.sex=b.sex;for(i=0;i<2;i++)a.score=b.score;returna;}main(){STUc={"Qian",'f,95.0,92.0},d;d=f(c);printf("%s,%c,%2.0f,%2.0f\n",,d.sex,d.score[0],d.score[1]);}程序的運(yùn)行結(jié)果是A)Qian,f,95,92B)Qian,m,85,90C)Zhao,m,85,90D)Zhao,f,95,92//解析,此題與09年9月那題考法相似(09年3月) 有以下程序#include<stdio.h>structord{intx,y;}dt[2]={1,2,3,4};main(){structord*p=dt;printf("%d,",++p->x); printf("%d\n",++p->y);}程序的運(yùn)行結(jié)果是A)1,2B)2,3C)3,4D)4,1解析:++p->x不是對(duì)指針地址加1,而是對(duì)成員x加1,p自始至終只指向數(shù)組的第0個(gè)元素,因此答案為B.位運(yùn)算符>>,<<,&,|,八,~。(1)>>是/2,<<是*2的效果。雖然區(qū)分邏輯移和算術(shù)移,但在 vc編譯下則都是邏輯移。如5>>1得2,5<<1得—4>>1得一2,-4<<1得一8(2)&是按位與,1&1=1,1&0=0,必須兩個(gè)都為1,才為1,否則為0.|是按位或,1|0=1,即有一個(gè)1就為1。(4)A是異或,兩個(gè)二進(jìn)制位做異或,相同為0,相反為1.?是取反。例1.(09年3月).有以下程序#include<stdio.h>main(){inta=5,b=1,t;t=(a<<2)|b;printf("%d\n",t);}程序運(yùn)行后的^^出結(jié)果是 A)21B)11C)6D)1解析:先對(duì)a左移,即X2X2,得20,10的二進(jìn)制為10100,然后10100與00001相|得10101即十進(jìn)制21.答案A例2.(08年9月)有以下程序#include<stdio.h>main(){chara=4;printf("%d",a=a<<1);}程序的運(yùn)彳T結(jié)果是()。A)40B)16C)8D)4解析:此題較簡(jiǎn)單,左移即X2,所以答案為8例3.(08年4月)變量a中的數(shù)據(jù)用二進(jìn)制表示的形式是01011101,變量b中的數(shù)據(jù)用二進(jìn)制表示的形式是11110000O若要求將a的高4位取反,低4位不變,所要執(zhí)行的運(yùn)算是A)aAbB)a|bC)a&bD)a<<4解析:把每個(gè)選項(xiàng)都帶一下,算算,就可以得出正確答案。答案為A19.簡(jiǎn)單的文件讀寫(xiě)。對(duì)文件student.dats以寫(xiě)的方式打開(kāi)文件: fopen("student.dat","w");以讀的方式打開(kāi)文件fopen("student.dat","r");向文件寫(xiě)入容用fprintf(). 直接在屏幕上輸出結(jié)果用 printf(),兩者的語(yǔ)法相似,前者比后者多一個(gè)參數(shù)(文件的名字)。寫(xiě):fwrite(),讀:fread(09年3月).以下程序用來(lái)判斷指定文件是否能正常打開(kāi) ,請(qǐng)?zhí)羁铡?include<stdio.h>intmax(inta,intb);main(){FILE*fp;if(((fp=fopen())==[】))printf(" 未能打開(kāi)文件!\n");elseprintf(" 文件打開(kāi)成功!\n");}解析:答案:NULL或0,一般都填NULL意義更好理解,表示空指針值(09年3月).有以下程序#include<stdio.h>main(){FILE*f;f=fopen("filea.txt","w");fprintf(f,"%s,"abc");f

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論