




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、選擇題(第一部分)1、有以下程序void fun(int a,int i,int j) int t; if(i<j) t=ai;ai=aj;aj=t; i+; j-; fun(a,i,j); main() int x=2,6,1,8,i; fun(x,0,3); for(i=0;i<4;i+) printf("%2d",xi); printf("n");程序運行后的輸出結果是_。A:1 2 6 8B:8 6 2 1C:8 1 6 2D:8 6 1 2答案:C評析: 本題考的是函數參數的傳遞。 當用數組名作函數參數時,數組名代表數組的首地址。f
2、un(x,0,3);是將數組名x作為實參,把數組x的首地址傳送給形參(指針a),這樣數組x與形參指針a共占同一段內存單元,所以在調用函數期間,如果改變了形參數組x的值,也就改變了實參指針a的值。 另外此題還考了個函數自身的調用,下面是調用fun()函數的運行過程: a=x,i=0,j=3,判斷i<j,交換ai,aj,此時a0到a3里面的數分別為8,6,1,2,也即是 x0到x3中的數值,因為它們共用存儲單元;i+; j-后繼續調用fun(),此時i,j分別為1,2,交換a1,a2的值后a所指向的存儲單元中的數據為8,1,6,2;繼續i+; j-后判斷i<j不成立,返回主函數,輸出x
3、i即指針a所指向的數據8,1,6,2。 故本題答案為C。2、有以下說明和定義語句struct student int age; char num8;struct student stu3=20,"200401",21,"200402",19,"200403"struct student *p=stu;以下選項中引用結構體變量成員的表達式錯誤的是_。A:(p+)->numB:p->numC:(*p).numD:stu3.age答案:D評析: 本題考的是結構體變量的引用。 引用形式有以下三種:結構體變量. 成員名;(*p).成
4、員名;p成員名。所以A,B,C答案都是正確的。 故本題答案為D。3、有如下程序#include <stdio.h>main()FILE *fp1; fp1=fopen("f1.txt","w"); fprintf(fp1,"abc"); fclose(fp1);若文本文件f1.txt中原有內容為:good,則運行以上程序后文件f1.txt中的內容為_。A:goodabcB:abcdC:abcD:abcgood答案:C評析: 本題考的是文件類型指針。 fp1=fopen("f1.txt","w&
5、quot;)表示打開名為f1.txt 的文件,使用文件方式為向該文件寫數據,如果原來不存在該文件,則在打開時新建一個以指定的名字命名的文件;如果原來已存在一個以該文件命名的文件,則在打開時將該文件刪去,然后重新建立一個新文件,所以本題中f1.txt中原有內容good被刪去了,fopen函數帶回指向fp1文件的指針并賦給fp1。fprintf(fp1,"abc")的作用是將字符串abc輸出到fp1指向的文件上。 故本題答案為C。4、以下不合法的用戶標識符是_。A:j2_KEYB:DoubleC:4dD:_8_答案:C評析: 本題考查的是標識符。 C語言規定標識符只能由字母、數
6、字和下劃線三種符號組成,而且第一個字符必須是字母或下劃線。大寫字母和小寫字母被認為是兩個不同的字符,用戶在定義標識符時應做到"見名知意",且不允許使用關鍵字作標識符。 故本題答案為C。5、以下不合法的數值常量是_。A:011B:le1C:8.0E0.5D:0xabcd答案:C評析: 本題考查的是數值常量的定義。 數值常量區分為不同的類型,如12、0、-3為整型常量,4.6、-1.23為實型常量,'a','A'為字符常量。實數常量有兩種表示形式:十進制小數形式和指數形式。用指數形式表示必須注意字母e(或E)之前必須有數字,且e(或E)后面的指數
7、必須為整數。如:e3、7e3.5、8.0E0.5都是不合法的。 故本題答案為C。6、以下能正確定義字符串的語句是_。A:char str='064'B:char str="x43"C:char str=''D:char str="0"答案:D評析: 本題考查的是字符串的定義。 C語言中,字符串是用一對雙引號括起來的字符序列,并用字符型數組來存放,故選項A、C不屬于字符串, 選項B定義的是一個字符變量str,卻用來存放字符串,顯然也不正確,所以選項D正確。 故本題答案為D。7、若要求從鍵盤讀入含有空格字符的字符串,應該使用函
8、數_。A:getc()B:gets()C:getchar()D:scanf()答案:B評析: 本題考查的是字符串的讀寫。 函數getchar( )的作用是從終端(或系統隱含指定的輸入設備)輸入一個字符,且只能接受一個字符(回車符也算是一個字符),所以getchar()不能用來讀入字符串。scanf()函數要求按一定的格式來輸入,若同時輸入多個字符串,則以空格或回車分割,所以空格不能被識別為一個字符,也就無法讀入空格字符。函數gets()的作用是從終端輸入一個字符串(包括空格)到字符數組,直到遇到換行符為止,所以可以用來鍵盤讀入空格字符。 故本題答案為B。8、以下四個程序中,完全正確的是_。A:
9、#include <stdio.h>main(); /*programming*/ printf("programming!n");B:#include<stdio.h>main() /*/programming/*/ printf("programming!n");C:#include <stdio.h>main() /*programming*/ printf("programming!n"); D:include<stdio.h> main() /*/*programming*/*
10、/ printf("programming!n");答案:C評析: 本題考查的是C語言中注釋的格式。 C語言中注釋用"/*"和"*/"括起來,它可以出現在程序中任何合適的地方。選項A 中"main();"是一個函數聲明語句,下面的大括號及其內容作為一個語句塊,應放在程序的大括號中,故選取項A錯誤;選項B中的注釋語句不正確,因為程序在編譯時認別到兩次"/*"作為注釋的開始,但未識別到"*/"作為注釋的結束,故選項B錯誤;選項D的"include"前缺少&qu
11、ot;#",故選項D錯誤。 故本題答案為C。9、若各選項中所有變量已正確定義,函數fun中通過return語句返回一個函數值,以下選項中錯誤的程序是_。A:main() x=fun(2,10); float fun(int a,int b) B:float fun(int a,int b)main() x=fun(i,j); C:float fun(int int);main() x=fun(2,10); float fun(int a,int b) D:main() float fun(int i, int j); x=fun(i,j); float fun(int a,int b
12、) 答案:A評析: 本題考查的是函數的調用。 C語言程序是由一個主函數和若干個其他函數組成的,主函數的函數名為:main(),main()函數在程序中的位置是任意的。C語言程序是從main()函數開始執行,當程序中定義了多個函數時,通常情況下是先定義后調用,若被調函數定義在主調函數之后,則必須先聲明后調用。在選項A中,先執行main()函數,此時對fun()函數進行調用,由于fun函數在此調用之前無定義也無聲明,故無法正常識別調用,所以選項A的程序錯誤。 故本題答案為A。10、在以下給出的表達式中,與while(E)中的(E)不等價的表達式是_。 A:(!E=0) B:(E>0|E<
13、;0) C:(E=0)D:(E!=0)答案:C評析: 本題考查的是while條件表達式的判斷。 while(表達式)語句用來實現"當型"循環結構,當表達式為非0值時,執行while語句中的內嵌語句。選項A非零即為1,選項B與選項D的結果也為1,只有選項C為0。 故本題答案為C。11、已定義以下函數int fun(int *p)return *p;fun函數返回值是_。A:不確定的值B:一個整數C:形參p中存放的值D:形參p的地址值答案:B評析: 本題考查的是函數的返回值。 函數值的類型應當是在定義函數時指定的。在定義函數時對函數值說明的類型一般和return語句中的表達式類
14、型一致,即函數類型決定返回值的類型。此題中定義函數類型為int型,故函數返回值也為整型。 故本題答案為B。12、若有說明語句:double *p,a;則能通過scanf語句正確給輸入項讀入數據的程序段是_。A:*p=&a; scanf("%lf",p);B:*p=&a; scanf("%f",p);C:p=&a; scanf("%lf",*p);D:p=&a; scanf("%lf",p);答案:D評析: 本題考查的是數據輸入。 p=&a的意思是指將a的地址賦給指針變量p。*
15、p=&a是錯誤的書寫方式,其正確的表達形式為"int *p=&a;",它等效于:int *p; p=&a;, scanf()語句的格式是"scanf(格式控制,地址列表)", 在選項D中,"p"本身就代表著一個地址。 故本題答案為D。13、現有以下結構體說明和變量定義,如圖所示,指針p、q、r分別指向一個鏈表中連續的三個結點。struct node char data; struct node *next;*p,*q,*r;現要將q和r 所指結點交換前后位置,同時要保持鏈表的連續,以下不能完成此操作的語句是_。
16、 A:q->next=r->next;p->next=r;r->next=q; B:p->next=r;q->next=->next;r->next=q; C:q->next=r->next;r->next=q;p->next=r; D:r->next=q;p->next=r;q->next=r->next;答案:D評析: 本題考查的是鏈表。 選項D中首先將q賦給r->next,也就是將結點q的地址存放在結點r的指針域中;接著將r賦給p->next,也就是將結點r的地址存放在結點p的指針
17、域中,此時完成了q和r所指結點的交換。q->next=r->next的目的是想將q的指針域指向下一個結點的數據地址,但由于一開始執行了r->next=q,即已將r的指針域中存放了q結點的地址,所以再做操作"q->next=r->next"就相當于將q指向了其本身,也就是和下一個結點斷開了,所以選項D操作錯誤。 故本題答案為D。14、有以下程序段struct stint x;int *y;*pt; int a=1,2,b=3,4; struct st c2=10,a,20,b; pt=c;以下選項中表達式的值為11的是_。 A:*pt->y
18、 B:pt->x C:+pt->x D:(pt+)->x答案:C評析: 本題考查的是結構體類型的指針。 題目中定義了一個st結構體類型,然后定義了st型的結構體指針變量*pt及結構體數組c,并對結構體數組進行了初始化,且將結構體指針變量pt指向了數組c,則pt->x的值為10,則+pt->x的值為11(注:"->"運算符的優先級高于"+"),故選項C正確。 故本題答案為C。15、設有以下語句int a=1,b=2,c;c=a(b<<2);執行后,c的值為_。 A:6 B:7 C:8 D:9答案:D評析: 本
19、題考查的是位運算。 有括號的先算括號內的數據,所以先對b進行左移運算:b換算成二進制0000 0010,左移后變為0000 1000,然后再與a進行異或運算(參與運算的兩個對應位相同,則為0,相異則為1)結果為0000 1001,換算成十進制數結果為9。對于左移運算也可直接用此規則:左移1位相當于該數乘以2,左移2位相當于該數乘以22=4,依此類推。 故本題答案為D。16、#include <stdio.h>main() char c1,c2,c3,c4,c5,c6; scanf("%c%c%c%c",&c1,&c2,&c3,&c
20、4); c5=getchar(); c6=getchar(); putchar(c1); putchar(c2); printf("%c%cn",c5,c6);程序運行后,若從鍵盤輸入(從第1列開始)123<回車>45678<回車>則輸出結果是_。 A:1267 B:1256 C:1278 D:1245答案:D評析: 本題考查的是字符輸入輸出函數的應用。 getchar()函數只能接收一個字符,即使輸入多個字符后再按回車還是只能將第一個字符讀入。scanf()和printf()是按格式輸入輸出的函數,當輸入123<回車>,scanf()分
21、別讀入字符"1"、"2"、"3"、"<回車>";接下來輸入45678<回車>,則getchar()讀入字符"4"賦值給c5,字符"5" 賦值給c6,所以輸出語句輸出結果為1245。 故本題答案為D。17、有以下程序main() int i,j,x=0; for(i=0;i<2;i+) x+; for(j=0;j<=3;j+) if(j%2) continue; x+; x+; printf("x=%dn",x);程序執行
22、后的輸出結果是_。 A:x=4 B:x=8 C:x=6 D:x=12答案:B評析: 本題考查的是循環嵌套和continue語句的應用。 continue語句的作用是用于結束本次循環,即跳過循環體中下面尚未執行的語句,接著進行下一次是否執行循環的判定。當外層循環for(i=0;i<2;i+)滿足條件的情況下執行循環體,循環體中包含了嵌套的內層循環for(j=0;j<=3,j+),在內層循環中,當if條件語句不成立時執行continue語句,其作用是跳過"x+;",繼續執行內層循環的for語句,直到內層循環條件不滿足,則執行跳出內層循環,執行外層循環的"x
23、+;"語句,然后再對i進行判斷,直到外層循環條件不滿足,跳出外層循環,執行輸出語句,結果為8。 故本題答案為B。18、有以下程序int fun1(double a)return a*=a;int fun2(double x,double y) double a=0,b=0; a=fun1(x);b=fun1(y); return(int)(a+b);main()double w;w=fun2(1.1,2.0);程序執行后變量w中的值是_。 A:5.21 B:5 C:5.0 D:0.0答案:C評析: 本題考查的是數值類型的定義與強制轉換。 本題在進行調用函數fun2()時,又對函數fu
24、n1()進行了調用,由于函數fun1()定義為整型,所以第一次調用fun1()時返回的值為1,然后再將1賦值給a,此時由于a為double型,則系統自動類型轉換,將1轉換成了1.000000賦值給了變量a,以此類推,得b的值為4.000000,然后通過"return(int)(a+b);"將a+b的值強制轉換為int型5返回給主函數,此時又由w的類型為double,所以返回的整型值5又被轉換為double型。故輸出結果為5.0。 故本題答案為C。19、有以下程序main() int i,t3=9,8,7,6,5,4,3,2,1; for(i=0;i<3;i+) pri
25、ntf("%d ",t2-ii);程序執行后的輸出結果是_。 A:7 5 3 B:3 5 7 C:3 6 9 D:7 5 1答案:B評析: 本題考查的是二維數組的應用。 將初始值放在一對大括號內,按數組元素排列的順序對各元素賦值,二維數組中行下標可以省略,但列下標必須要指定,由此題可以看出數組t是一個三行三列的二維數組,執行for循環語句t2-ii分別為t20,t11,t02,得出輸出結果為3 5 7。 故本題答案為B。20、有以下程序fun(char p10) int n=0,i; for(i=0;i<7;i+) if(pi0= 'T')n+; re
26、turn n;main() char str10= "Mon","Tue","Wed","Thu","Fri","Sat","Sun" printf("%dn",fun(str);程序執行后的輸出結果是_。 A:1 B:2 C:3 D:0答案:B評析: 本題考查的是數組名作為函數參數。 當數組名作為函數參數時,是將實參數組的起始地址傳送給形參數組,作為形參數組的首地址,當形參發生變化主函數中的實參數組也發生變化。調用fun()函數執行f
27、or循環語句,n=2,傳遞給實參其輸出值相應的也為2。 故本題答案為B。21、有以下程序void fun1(char *p) char *q; q=p; while(*q!= '0') (*q)+;q+;main() char a="Program",*p; p=&a3;fun1(p); printf("%sn",a);程序執行后的輸出結果是_。 A:Prohsbn B:Prphsbn C:Progsbn D:Program答案:A評析: 本題考查的是指向數組的指針作為函數的參數及指針的運算。 如果形參數組中的元素發生變化,實參也
28、將發生相應變化。指針p指向數組的第三位地址(即字符"g"的地址),q=p也就相當于指針q指向數組的第三位地址。表達式(*q)+,首先根據()的優先級得到a3的值"g",再進行加1運算,所以g也就變成了h;表達式q+是將地址加1,也就是指向下一個地址a4。然后再執行while()語句,直到遇到'0'結束循環,返回形參。 故本題答案為A。22、有以下程序void swap(char *x,char *y) char t; t=*x;*x=*y;*y=t;main() char s1="abc",s2="123&q
29、uot; swap(s1,s2); printf("%s,%sn",s1,s2);程序執行后的輸出結果是_。 A:123,abc B:abc,123 C:1bc,a23 D:321,cba答案:C評析: 本題考查的是指針變量值的交換。 C語言中,字符串常量在內存中是以字符數組的形式進行存放的,因此字符指針x和y指向的是各字符串的首地址,也就是字符串第一個字符的地址,則*x與*y交換的是字符串的第一個字符,即字符"a"與"1"的交換,而字符串中其它字符保持不變。 故本題答案為C。23、有以下程序int fun(int n) if(n=1
30、) return 1; else return(n+fun(n-1);main() int x; scanf("%d",&x);x=fun(x);printf("%dn",x);執行程序時,給變量x輸入10,程序的輸出結果是_。 A:55 B:54 C:65 D:45答案:A評析: 本題考查的是函數的遞歸調用。 在調用一個函數的過程中又出現直接或間接地調用該函數本身。函數調用中因為實參x=10不符合條件語句n=1,所以執行else語句,調用fun函數。fun函數共被調用8次,即fun(9)、fun(8)、fun(7)、fun(6)、fun(5)、
31、fun(4) 、fun(3) 、fun(2),n=10+9+8+7+6+5+4+3+2+1=55, 所以x=55。 故本題答案為A。24、有以下程序main() union char ch2; int d; s; s.d=0x4321; printf("%x,%xn",s.ch0,s.ch1);在16位編譯系統上,程序執行后的輸出結果是_。 A:21,43 B:43,21 C:43,00 D:21,00答案:A評析: 本題考查的是共用體。 int類型變量和字符數組ch共用兩個字節的相同的存儲單元,通常ch0位于低字節,ch1位于高字節,所以s.ch0=21,s.ch1=43
32、。 故本題答案為A。25、有以下程序main() char p5="3697","2548" int i,j; long num=0; for(i=0;i<2;i+) j=0; while(pij!= '0') if(pij- '0')%2) num=10*num+pij- '0' j+=2; printf("%dn",num);程序執行后的輸出結果上_。 A:35 B:37 C:39 D:3975答案:C評析: 本題考查的是數組。 題目中定義的數組"p4"相當
33、于一個兩行四列的數組。執行for()語句i=0,j=0,pij=p00=3,滿足while循環條件,執行循環體中的if語句得num=3,j=2,此時pij=p02=9,滿足循環條件,執行while循環體得num=39,j=4,判斷while條件且不符合并退出while循環;再次執行for()語句i=1,j=0,pij=p10=2,滿足while條件,執行循環體中的if語句,但不符合if條件,所以num不進行運算, j進行加2運算j=2,此時pij=p12=4,if條件還是為假,num不進行運算,j進行加2運算j=4,再執行while語句,條件不符合退出循環。所以結果為39。 故本題答案為C。2
34、6、執行以下程序后,test.txt文件的內容是(若文件能正常打開)_。#include <stdio.h>main() FILE *fp; char *s1="Fortran",*s2="Basic" if(fp=fopen("test.txt","wb")=NULL) printf("Can't open test.txt filen"); exit(1); fwrite(s1,7,1,fp); /*把從地址s1開始的7個字符寫到fp所指文件中*/ fseek(fp, 0
35、L,SEEK_SET); /*文件位置指針移到文件開頭*/ fwrite(s2,5,1,fp); fclose(fp); A:Basican B:BasicFortran C:Basic D:FortranBasic答案:A評析: 本題考查的是文件的讀寫。 定義一個FILE類型結構體的指針fp,以"只寫"方式打開一個test.txt文件,并向文件輸入指針變量s1指向的7個字符,則文件內的內容為"Fortran",執行fseek函數文件位置指針移到文件的開頭,再次向文件輸入指針變量s2指向的5個字符,雖然此時的文件前5個字符字符已被"Forta&
36、quot;所占用,但當向文件輸入"Basic"這五個字符時,系統會覆蓋原有的內容"Forta",所以最后test.txt里的內容為:Basican。 故本題答案為A。27、以下敘述中錯誤的是_。 A:可以通過typedef增加新的類型 B:可以用typedef將已存在的類型用新的名字來代表 C:用typedef定義新的類型名后,原有類型名仍有效 D:用typedef可以為各種類型起別名,但不能為變量起別名答案:A評析: 本題考查的是C語言程序的基本組成。 在C語言中,注釋是用于協助讀者更好地理解程序,它不會被系統轉換成二進制,所以非執行語句是不會被轉換成
37、二進制的機器指令。 故本題答案為D。28、設有以下定義和語句char str20= "Program",*p;p=str;則以下敘述中正確的是_。 A:*P與str0中的值相等 B:str與p的類型完全相同 C:str數組長度和p所指向的字符串長度相等 D:數組str中存放的內容和指針變量p中存放的內容相同答案:A評析: 本題考查的是指針變量對數組的引用。 選項A正確,原因是語句p=str表示指針變量p指向數組str20的首地址也就是str0。所以*p與str0中的值相等。 29、以下敘述中正確的是_。 A:預處理命令行必須位于C源程序的起始位置 B:在C語言中,預處理命令
38、行都以"#"開頭 C:每個C程序必須在開頭包含預處理命令行:#include<stdio.h> D:C語言的預處理不能實現宏定義和條件編譯的功能答案:B評析: 本題考查的是預處理命令。 選項B正確,原因是這部分語句與C程序其他部分的語句是有區別的,所以在每個預處理語句之前都有一個"#"符號以示區別。C提供三種預處理語句:(1)宏替換,(2)文件包含,(3)條件編譯。如果一個文件中要引用另外一個文件時才需要在開頭包含預處理命令行:#include<stdio.h>。 故本題答案為B。30、下列敘述錯誤的是_。 A:一個C語言程序只能
39、實現一種算法 B:C程序可以由多個程序文件組成 C:C程序可以由一個或多個函數組成 D:一個C函數可以單獨作為一個C程序文件存在答案:A評析: 本題考查的是C程序的構成。 一個C語言程序可以實現多種算法。一個C程序可以由一個或多個源程序文件組成,一個源程序文件由一個或多個函數組成,構成C語言程序的基本單位是函數,函數也是C程序中模塊化程序設計的基礎,C函數可分為標準庫函數和用戶定義函數兩類。 故本題答案為A。31、下列敘述中正確的是_。 A:每一個C程序文件中都必須要有一個main()函數 B:在C程序中main()函數的位置是固定的 C:C程序中所有函數之間都可以相互調用,與函數所在位置無關
40、 D:在C程序的函數中不能定義另一個函數答案:D評析: 本題考查的是函數的定義方法。 每一個C程序由多個C程序文件組成,而每個C程序都必須有一個main()函數,故每一個C程序文件中都必須有一個main()函數的說法是錯誤的。在C程序中所有函數都是平行的,即在定義函數時是相互獨立的,一個函數并不能從屬于另一個函數,即函數不能嵌套定義,函數間可以相互調用,但不能調用main()函數,main()函數的位置也不是固定的。 故本題答案為D。32、下列定義變量的語句中錯誤的是_。 A:int _int; B:double int_; C:char For; D:float US$;答案:D評析: 本題
41、考查的是C數據類型及其定義。 C語言中用來標識變量名、符號常量名、函數名、數組名、類型名、文件名的有效字符序列稱為標識符,C語言規定標識符只能由字母、數字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。選項D中含有"$",故不符合標識符的定義。 故本題答案為D。33、以下關于邏輯運算符兩側運算對象的敘述中正確的是_。 A:只能是整數0或1 B:只能是整數0或非0整數 C:可以是結構體類型的數據 D:可以是任意合法的表達式答案:D評析: 本題考查的是C語言運算符的基本應用。 邏輯運算符兩側的運算對象不但可以是0和1,也可以是任意基本類型或指針類型的數據,還可以是任意合法
42、表達式。 故本題答案為D。 34、有以下程序 main() int x, y, z; x=y=1; z=x+,y+,+y; printf("%d,%d,%dn",x, y, z); 程序運行后的輸出結果是_。 A:2,3,3 B:2,3,2 C:2,3,1 D:2,2,1答案:C評析: 本題考查的是C語言的運算規則。 x+:表示在使用x之后,使x的值加1;y+:表示在使用y之后,使y的值加1;+y:表示在使用y之前,使y的值加1。此題中執行z=x+,是將x的值先賦給z,所以z=1,接下來x自行加1,其結果為2;執行y+后,y=2,執行+y后,y=3。 故本題答案為C。35、
43、在嵌套使用if語句時,C語言規定else總是_。 A:和之前與其具有相同縮進位置的if配對 B:和之前與其最近的if配對 C:和之前與其最近的且不帶else的if配對 D:和之前的第一個if配對答案:C評析: 本題考查的是IF語句的使用規則。 在嵌套使用if語句時,C語言規定else總是和之前與其最近的且不帶else的if配對。 故本題答案為C。 36、有以下程序main(int argc,char *argv)int n=0,i; for(i=1;i<argc;i+) n=n*10+*argvi-'0' printf("%dn",n);編譯連接后生成
44、可執行文件tt.exe。若運行時輸入以下命令行tt 12 345 678程序運行后的輸出結果是_。 A:12 B:12345 C:12345678 D:136答案:D評析:本題考查的是帶參數的main()函數。main()函數可以帶參數,并且參數只能有兩個,第1個參數(argc)類型為整型,用來記下命令行的參數個數,第2個參數(argv)為一個字符型指針數組,其各個元素用來記下命令行各參數字符串的首地址。題目中argc的值為4,循環中依次求出argv1、argv2、argv3指向的字符串("12"、"345"、"678")首字符。其中
45、*argvi用于指向求出的字符串的首地址的值,即分別為:1、3、6;n=n*10+*argvi-'0'語句用于連接各字符串首字符,所以結果為136。 故本題答案選D。37、有以下程序int a=4;int f(int n) int t=0; static int a=5; if(n%2) int a=6; t+=a+; else int a=7; t+=a+; return t+a+;main() int s=a,i=0; for(;i<2;i+) s+=f(i); printf("%dn",s);程序運行后的輸出結果是_。 A:24 B:28 C:3
46、2 D:36答案:B評析:本題考查的是函數調用和變量的作用域。在主函數main()中定義了兩個變量s和i,同時給s賦初值a=4,i賦初值0。當i=0時,執行"s+=f(i);"語句,調用f()函數并將i的初值0傳遞給形參n。首先執行if語句中的條件:n%3,條件為假,執行else下的語句,a=7,t=7+0=7,使用return返回t,t=7+(a+)=7+5=12,此時a運算完后自行加1為6;返回主函數中,s=4+12=16。當i=1時,執行"s+=f(i);"語句,調用f()函數并將i的初值1傳遞給形參n。首先執行if語句中的條件: n%3,條件為真
47、,執行if下的語句,t=0,a=6,t=0+6=6,使用return返回t,t=6+6=12,返回主函數中,s=16+12=28。最后的輸出結果為28。 故本題答案選B。38、有一個名為init.txt的文件,內容如下:#define HDY(A,B) A/B#define PRINT(Y) printf("y=%dn",Y)有以下程序#include "init.txt"main() int a=1,b=2,c=3,d=4,k; k=HDY(a+c,b+d); PRINT(k);下面針對該程序的敘述正確的是_。 A:編譯出錯 B:運行出錯 C:運行結果
48、為 y=0 D:運行結果為 y=6答案:D評析:本題考查的是帶參數的宏定義。宏替換后,表達式k=HDY(a+c,b+d)即變為k=a+c/b+d=1+3/2+4=6。故本題答案選D。39、有以下程序main() char ch="uvwxyz",*pc; pc=ch; printf("%cn",*(pc+5);程序運行后的輸出結果是_。 A:z B:0 C:元素ch5的地址 D:字符y的地址答案:A評析:本題考查的是指向數組的指針。本題中定義了一個字符串數組和指針,并將指針pc指向該數組的首地址,執行輸出語句"printf("%cn&
49、quot;,*(pc+5);"。語句中的*(pc+5)指的就是pc5的值,所以最后輸出的結果為z。 故本題答案選A。40、有以下程序struct Sint n; int a20;void f(struct S *p) int i,j,t; for(i=0;i<p->n-1;i+) for(j=i+1;j<p->n;j+) if(p->ai>p->aj) t=p->ai; p->ai=p->aj; p->aj=t;main() int i; struct S s=10,2,3,1,6,8,7,5,4,10,9; f(&a
50、mp;s); for(i=0;i<s.n;i+)printf("%d,",s.ai);程序運行后的輸出結果是_。 A:1,2,3,4,5,6,7,8,9,10, B:10,9,8,7,6,5,4,3,2,1, C:2,3,1,6,8,7,5,4,10,9, D:10,9,8,7,6,1,2,3,4,5,答案:A評析:本題考查的是結構體成員的引用。在主函數main()中定義了一個整型變量i和一個結構體變量s。f()函數中,定義了一個結構體類型的指針p,外層循環變量i表示數組的第i個元素,內層循環變量j表示數組的第i+1個元素,調用f()函數,通過指針變量p來引用結構體成
51、員。執行if語句,當p->ai>p->aj時進行互換,其作用就是從小到大進行排序,最后將排序后的元素輸出:1,2,3,4,5,6,7,8,9,10,。 故本題答案選A。41、有以下程序struct Sint n; int a20;void f(int *a, int n) int i; for(i=0;i<n-1;i+) ai+=i;main() int i; struct S s=10,2,3,1,6,8,7,5,4,10,9; f(s.a,s.n); for(i=0;i<s.n;i+) printf("%d,",s.ai);程序運行后的輸出
52、結果是_。 A:2,4,3,9,12,12,11,11,18,9, B:3,4,2,7,9,8,6,5,11,10, C:2,3,1,6,8,7,5,4,10,9, D:1,2,3,6,8,7,5,4,10,9,答案:A評析:本題考查的是結構體成員的引用。在主函數main()中定義了一個整型變量i和一個結構體變量s。f()函數中,通過指針a來引用數組中的元素;通過for循環語句將數組中除最后一個元素外的其它元素(由條件i<n-1決定的)分別加上由0開始的遞增數據(即0、1、28),所以最后的輸出結果為2,4,3,9,12,12,11,11,18,9,。 故本題答案選A。42、有以下程序段
53、typedef struct nodeint data; struct node *next; *NODE;NODE p; 以下敘述中正確的是_。 A:p是指向struct node結構變量的指針的指針 B:NODE p;語句出錯 C:p是指向struct node結構變量的指針 D:p是struct node結構變量答案:C評析:本題考查的是對用戶自定義類型的理解。本題中定義了一個指針類型的"用戶類型名" NODE,通過"用戶類型名"可以定義該類型的結構體變量,所以選項C的敘述是正確的。 故本題答案選C。43、有以下程序main() unsigned
54、char a=2,b=4,c=5,d; d=a|b; d&=c; printf("%dn",d);程序運行后的輸出結果是_。 A:3 B:4 C:5 D:6答案:B評析: 本題考查的是邏輯運算。 本題中主要是進行位的邏輯運算。將a的值轉換為二進制為:0000 0010,b的值轉換為二進制為:0000 0100,將a、b進行按位或運算(參加計算的兩個位只要有一個為1,那么運算結果為1),因此此時d的二進制為:0000 0110,c的值轉換為二進制為:0000 0101,接下來將d和c進行按位與運算(參加計算的兩個位都為1,則結果為1,否則為0),結果為:0000 01
55、00,轉換成十進制數結果為4。 故本題答案選B。44、有以下程序_。#include <stdio.h>main() FILE *fp; int k,n,a6=1,2,3,4,5,6; fp=fopen("d2.dat","w"); fprintf(fp,"%d%d%dn",a0,a1,a2); fprintf(fp,"%d%d%dn",a3,a4,a5); fclose(fp); fp=fopen("d2.dat","r"); fscanf(fp,"%d%d",&k,&n); printf("%d %dn",k,n); close(fp);程序運行后的輸出結果是_。 A:1 2 B:1 4 C:123 4 D:123 456答案:D評析:本題考查的是文件的綜合應用。本題首先以創建方式打開文件"d2.d
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025江蘇揚州中國大運河博物館招聘4人筆試備考題庫及1套完整答案詳解
- 2025年寶雞市公務員考試行測試卷歷年真題及答案詳解(奪冠)
- 2024 - 2025學年湘藝版小學音樂三年級下冊期末考試卷及答案
- 山西省長治市部分學校2024-2025學年高一下學期3月月考物理試卷(解析版)
- 河南天一大聯考2025年高二下學期期末學業質量監測英語試題
- 新型建筑材料與BIM技術的應用
- 重要場合完美修容教學全解析
- 數學 第八章 實數單元試卷+2024-2025學年人教版(2024)數學七年級下冊
- 環境經濟審計重點基礎知識點歸納
- 《礦圖》教學課件
- 國開中國當代文學專題形考任務2-3-5-6答案
- 醫療安全(不良)事件匯總登記表(科室)
- 成都市雙流縣2022-2023學年四年級數學第二學期期末統考試題含答案
- 中藥陰道灌洗技術
- 解讀血氣分析-課件
- 設備點檢記錄表
- 2023年副主任醫師(副高)-耳鼻咽喉科學(副高)歷年考試真題(易錯與難點匯編)帶答案
- 思想意識形態滲透-就在你我身邊
- 鑄造企業安全生產歸檔資料匯編(2022-2023版企業安全生產歸檔制度)
- 鋼屋架安裝施工吊裝方案
- 社團兼職審批表和備案表
評論
0/150
提交評論