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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

溫馨提示

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

評論

0/150

提交評論