全國計算機等級考試二級c語言試題分析_第1頁
全國計算機等級考試二級c語言試題分析_第2頁
全國計算機等級考試二級c語言試題分析_第3頁
全國計算機等級考試二級c語言試題分析_第4頁
全國計算機等級考試二級c語言試題分析_第5頁
已閱讀5頁,還剩14頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

全國計算機等級考試〔二級c語言〕試卷分析一、選擇題(每題140小題,共40分)前面的10道題涉及計算機根底學問〔程等方面學問〕,在這里就不針對計算機根底學問局部進展分析。11.在C語言程序中,main函數必需放在其他函數的最前面每個后綴為CC語言源程序都可以單獨進展編譯在C語言程序中,只有main函數才可單獨進展編譯每個后綴為.C的C語言源程序都應當包含一個main函數【解析】BC語言是一種成功的系統描述語言,具有良好的移植性,每個后綴為.C的C語言源程序都可以單獨進展編譯;C語言程序中,不管包含多少個后綴為.Cmain函數,而且main函數在程序中可以放在任何其他函數之前或之后。語言中的標識符分為關鍵字、預定義標識符和用戶標識符,以下表達正確的選項是()。預定義標識符(如庫函數中的函數名)可用做用戶標識符,但失去原有含義用戶標識符可以由字母和數字任意挨次組成在標識符中大寫字母和小寫字母被認為是一樣的字符關鍵字可用做用戶標識符,但失去原有含義【解析】A。用戶標識符不能以數字開頭,C語言中標識符是區分大小寫的,關鍵字不能用做用戶標識符。13.99B。當用指數形式表示浮點數據時,E后都要有數據,并且E的后面數要為整數;整型常量:0123表示八進制整型常量,0xab表示十六進制整型常量,123為十進制整型常量,123L表示長整型常量,123U表示無符號整型常量,123UL表示無符號長整型A沒有這種常量,假設加上雙引號是可以表示字符串常量。語言主要是借助以下哪個功能來實現程序模塊化?()A.定義函數 B.定義常量和外部變量C.三種根本構造語句 D.豐富的數據類型【解析】A。C語言是由函數組成的,函數是C語言的根本單位。所以可以說C語言主要是借助定義函數來實現程序模塊化。以下表達中錯誤的選項是()。非零的數值型常量有正值和負值的區分常量是在程序運行過程中值不能被轉變的量定義符號常量必需用類型名來設定常量的類型用符號名表示的常量叫符號常量【解析】C。在C語言中,可以用一個標識符來表示一個常量,稱之為符號常量。符號常量在使用之前必需先定義,其一般形式為:#define標識符常量。假設有定義和語句:intab;scanf(“%d,%d“&a&b);項中的輸人數據,不能把值3賦給變量a、5賦給變量b,5, ,5,45 ,5【解析】C。在輸入3和5之間除逗號外不能有其他字符。答案BA是可以的,緣由是用scanf函數輸入時,從左往右對應給值,右邊多余的值不輸入進去。語言中char類型數據占字節數為()。【解析】C。在標準C〔ANSI-C〕char類型數據占1個字節。A.(3+4)>6 B.(3!=4)>2<=4‖3 D.(3<4)=1B。在一個表達式中,括號的優先級高,先計算3!=4真即是l1>2為假。假設以下選項中的變量全部為整型變量,且已正確定義并賦值,則語法正確的switch語句是()。(a+9)}a*b}(a+b)case0:case4:y=a-b;}(a*a+b*b){default:break;case2:y=a-b;break;}D。選項A,switch語句中要求case后面必需是常量,不能是變量;選項Ba*bCcase與后面的數字用空格隔開。留意switch語句語句完畢的方式:一是見到break執行到}自然完畢。有以下程序:#includemain{inta=-2,b=0;while(a++&&++b);printf(“%d,%d\n“,a,b);}程序運行后的輸出結果是()。,3 ,2 ,3 ,2【解析】D。while循環第一次完畢后a,b取值為:-11;其次次完畢后ab02;第三次沒有執行循環體〔空語句〕,了一下a++是否為真,因a0,所以a++a1,所以a的值變成1&&運算符的第一個表達式為假時,其次個表達式不計算,所以++b不執行,故b的值還是2。所以,最終a,b的值為1,2。設有定義:x=0=x; B.*p=x; =NULL;D.*p=NULL;【解析】C。對于指針變量p,假設沒有把p指向一個指定的值,則說明指針變量p內的值是NULL,即空值,也就是說沒有存放任何存儲空間的地址,所以*p是不能被賦值的。定義指針變量不賦初始值時默認為NULL以下表達中正確的選項是()。可以用關系運算符比較字符串的大小空字符串不占用內存,其內存空間大小是0兩個連續的單引號是合法的字符常量兩個連續的雙引號是合法的字符串常量【解析】D。比較兩個字符串大小用函數strcomp(s,t)系運算符比較字符串的大小;空字符串有完畢符〔\0〕,所以也要占用1字節;兩個連續的單引號是不合法,單引號中間必需有一個字符〔一般字符或轉義字符〕;兩個連續的雙引號表示的是空字符串。有以下程序:#includemain{rhara=’H’;a=(a>=’A’&&a<=’2’)?(a-’A’+’a’):a;printf(“%c\n“,a);}程序運行后的輸出結果是()。【解析】D。多元運算符問號前面表達式為真,所以(a-’A’+’a’)賦值給a,括號里的運算是把大寫字母變成小寫字母,所以答案應為選D。有以下程序:#includeintf(intx);main{inta,b=0;for(a=0;a<3;a++){b=b+f(a);putchar(’A’ +b);}}intf(intx){returnx*xl;}程序運行后的輸出結果是()。B。第一次循環時,b=1B;其次次循環時,b=3,輸出結果為D;第三次循環時,b=8,輸出結果為I。設有定義:intx[2][3];,則以下關于二維數組X的表達錯誤的選項是[0]可看做是由3個整型元素組成的一維數組[0]x[l]是數組名,分別代表不同的地址常量C.X包含6個元素D.可以用語句x[0]=0;為數組全部元素賦初值0【解析】D。對于二維數組來說,數組的名字x是一個二級指針常量;第一維表示行地址,比方:x[0]表示第一行的地址,而且是個地址〔一級指針〕常量,所以x[0]是不能賦值的。設變量P是指針變量,語句P=NULL;是給指針變量賦NULL值,它等價于()。=““; =“0“; =0; =“;【解析】C。在C語言中NULL等價于整數0。有以下程序:#include <>main,40},*p=a,j;for(i=0;i<=3;i++){a[i]=*p;p++;}printf(“%d\n“,a[2]);}程序運行后的輸出結果是()。【解析】A。for循環中第一次循環時,a[0]=*p,由于有p=a;當于a[0]=*a;依據一維數組的定式:a[i]=*(a+i),說明每次循環是將數組的當前元素賦值給自己,后面每次循環依此類推。所以,for循環完畢后,數組a的值并沒有變化,由于數組下標是由0開頭,所以a[2]的值是30有以下程序:#include<>#defineN3voidfun(inta[][N],intb[]){inti,j;for(i=0;i<N;i++){b[i]=a[i][0];for(j=0;j<N;j++)if(a[i][j]>b[i]) b[i]=a[i][j];}}main{intx[N][N]={1,2,3,4,5,6,7,8,9},y[N],i;fun(x,y);for(i=0;i<N;i++)printf(“%d,”,y[i]);}程序運行后的輸出結果是()。,4,8, ,6,9,,5,7, ,3,5,B。fun函數功能是把數組a的每一行的最大值賦給ba的第一行的最大值是3,其次行的最大值是6,第三行的最大值是9,所以答案是369。有以下程序(strcpy為字符串復制函數,strcat為字符串連接函數):#include<>#include<>mainb[10]=“012“,c[10]=“xyz“;strcpy(a+1,b+2);puts(strcat(a,c+1));}程序運行后的輸出結果是()。【解析】C。第一次執行字符串的復制函數后,字符串a中的值是a2a字符串變成了a2yz再輸出,所以運行結果為a2yz。此題最主要的是了解字符串名加一個整型常量所代表的字符串是什么,比方:有chara[10]=“abc“;定義,則字符串aabc;而字符串a+1的值是bca+2的值是c;字符串b+3的值是\0,即不空串。以下選項中,合法的是()。str3[]={’d’,’e’,’b’,’u’,’g’,’\0’};str4;str4=“helloworld“;name[10];name=“china“;A。選項B不能把一個字符串賦值給一個字符變量str4選項C和D犯了同樣的錯誤是把字符串賦給了數組名,數組名是一個指針常量,常量是不能被賦值的。有以下程序:#include<>main{char*s=“[2]34“;intk=0 while(s[k+1]!=’\0’){k++;if(k%2==0){a=a+(s[k]- a=a+(s[k]-’0’);printf(“k=%da=%d\n“ ,k,a);}程序運行后的輸出結果是()。=6a=11 =3a=14=4a=12 =5a=15C。輸出結果:k=1a=2k=2a=4k=3a=7k=4a=12有以下程序:#include<>main{chara[5][10]={“one“ ,“two“,“three“,“four“,“five“};chart:for(i=0;i<4;i++)for(j=i+1;j<5;j++)if(a[i][0]>a[j][0]){t=a[i][0];a[i][0]=a[j][0];a[j][0]=t;}puts(a[1]);}程序運行后的輸出結果是()。【解析】Afor循環完成的功能是把二維數組a的第一列的字母按從小到大排序,其他列的字母不變。排序方法是類冒泡排序。有以下程序:#include<>inta=1,b=2;voidfunl(inta,intb){printf(“%d%d“,a,b);}voidfun2{a=3;b=4;}main{funl(5,6);fun2;printf(“%d%d\n“,a,b);}程序運行后的輸出結果是()。256634612456【解析】B。funl是輸出局部變量的值,fun2是把全局變量的值改34,所以輸出的結果是5634。當全局變量與局部變量同名時,在重疊的作用域中,局部變量起作用〔可憐原則,即誰的作用域小誰就在重疊的作用域中起作用〕有以下程序:#includevoidfunc(intn){staticintnum=1;num=num+n;printf(“%d“ }main{func(3);func(4);printf(“\n“);}程序運行后的輸出結果是()。8 4 5 5【解析】A。第一調用func函數時輸出4,其次次調用func函數時num的值并不會釋放,仍舊是上次〔第一次調用func函數時〕修改后的4,其次次調用結果為8,所以輸出結果是48。此題考的是靜態局部變量的作用域與生存期〔存放在靜態存儲區〕不一致的狀況,第一次調用完后,靜態局部變量num的值為4,存放到靜態存儲區,函數func執行完畢,其作用域消逝,但存放在靜態存儲區的num變量的值4但仍舊不能拿出來用,只能等下次再進入作用域時,即第二次調用函數func時,又進入靜態局部變量num的作用域,此時,變量num又可以拿出來使用,由于已經存在靜態存儲區,所以不用重定義該變量,可以直接從靜態存儲區取出變量num的值〔4〕來使用,所以其次次調用后,num的值變成了8。有以下程序:#include<>#include<>voidfun(int*pl,int*p2,int*s){s=(int*)malloc(sizeof(int));*s=*pl+*p2;free(s);}main{inta=1,b=40,*q=&a;fun(&a,&b,q);printf(“%d\n“,*q);}程序運行后的輸出結果是()。C。fun函數功能是開拓內存空間〔地址s〕ab的值〔&a、&b將地址復制給p1p2〕,q的地址并沒有變化,所以應當還是指向地址a。有以下程序:#include<>structSTU{charname[9];charsex;intscore[2];};voidf(structSTUa[]){structSTUb={“Zhao“ ,’m’,85,90);a[1]=b;}mainSTUc[2]={{“Qian“,’f’,95,92},{“Sun“,’m’98,99}};f(c);c[o].score[1]);c[1].score[1]);}程序運行后的輸出結果是()。,m,85,90,Sun,m,98,99,m,85,90,Qian,f,95,92,f,95,92,Sun,m,98,99,f,95,92,Zhao,m,85,90【解析】D。f函數是為構造體數組的其次個元素〔構造體類型的元素〕賦值,數組的第一個元素沒有變化,所以正確答案應選D。以下表達中錯誤的選項是()。A.typedef說明的類型名來定義變量說明的類型名必需使用大寫字母,否則會出編譯錯誤C.typedef可以為根本數據類型說明一個名稱D.typedef說明類型的作用是用一個的標識符來代表已存在的類型名【解析】Btypedef是用來定義類型,或定義原有類型的別名〔名稱〕typedef說明的類型不是必需用大寫,而是習慣上用大寫。以下表達中錯誤的選項是()。函數的返回值類型不能是構造體類型,只能是簡潔類型函數可以返回指向構造體變量的指針可以通過指向構造體變量的指針訪問所指構造體變量的任何成員只要類型一樣,構造體變量之間可以整體賦值A。函數返回值類型可以是簡潔類型和構造體類型。假設有定義語句intb=2;,則表達式(b<<2)/(3‖b)B。2的二進制數為010,移兩位后的二進制數為01000轉成十制數為8,(3||2)為真即18/1=88。有以下程序:#include<>main{FILE*fp;inti,a[6]={1,2,3,4,5,6};fp=fopen(““,“w+“);for=(i=0;i<6;i++)fpintf(fp ,“%d\n“,a[i]);rewind(fp);for(i=0;i<6;i++)fscanf(fp ,“%d“,&a[5-i]);fclose(fp);for(i=0;i%6;i++)printf(“%d ,“,a[i]);}程序運行后的輸出結果是()。,5,6,1,2,3,,2,3,3,2,1,,2,3,4,5,6,,5,4,3,2,1,D。這個是對文件的操作,把數組的數寫到文件里,然后再從文件里倒序讀出。所以輸出結果為654321。二、根本操作題(共18分)str是一個由數字和字母字符組成的字符串,由變量num傳入字符串長度。請補充函數proc,該函數的功能是:把字符串str中的數字字符轉換成數字并存放到整型數組bb中,函數返回數組bb的長度。str=“abcl23de45f967“,結果為:l234567留意:局部源程序給出如下。請勿改動main函數和其他函數中的任何內容,僅在函數proc的橫線上填入所編寫的假設干表達式或語句。試題程序:#include<>#defineM80intbb[M];intproc(charstr[],intbb[],intnum){inti,n=0;if(【1】){bb[n]=2】;n++;}}return 【3】;}voidmain{charstr[M];intnum=0,n,i;printf(“Enterastring :\n“);gets(str);while(str[num]) n=proc(str,bb,num);printf(“\nbb=“);for(i=0;i<n;i++)printf(“%d“ ,bb[i]);}1】str[i]>=’0’&&str[i]<=’9’【2】str[i]-’O’3】n【解析】題目中要求把字符串str中的數字字符轉換成數字并存放到整型數組bb中。首先,應推斷字符串str中每個字符是否是數字字符。因此,【1】處填“str[i]>=’0’&&str[i]<=’9’”將每一個數字字符轉化為數字放在整型數組bb2“str[i]-’0’;由函數proc可知,變量n中存放整型數組bb中的元素個數,最終要返回到主函數當中,因此,【3n’三、程序改錯題(共24分)以下給定程序中,函數proc的功能是:讀入一個字符串(長度<20),將該字符串中的全部字符按ASCIl碼升序排序后輸出。例如,輸入opdyedeopy請修改程序中的錯誤,使它能得到正確結果。main函數,不得增行或刪行,也不得更改程序的構造。試題程序:#include<>#include<>#include//****found****intproc(charstr[]){charc;for(i=0;i<strlen(str)-1;i++)for(j=i+1;j<strlen(str);j++)if(str[i]>str[j]){c=str[j]://****found****str[j]=str[i++];str[i]=c;}}voidmain{charstr[81];system(“CLS“);printf(“\nPleaseenteracharacterstring :“);gets(str);printf(“\nk

溫馨提示

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

評論

0/150

提交評論