國家二級(C語言)機試模擬試卷6(共384題)_第1頁
國家二級(C語言)機試模擬試卷6(共384題)_第2頁
國家二級(C語言)機試模擬試卷6(共384題)_第3頁
國家二級(C語言)機試模擬試卷6(共384題)_第4頁
國家二級(C語言)機試模擬試卷6(共384題)_第5頁
已閱讀5頁,還剩114頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

國家二級(C語言)機試模擬試卷6(共9套)(共384題)國家二級(C語言)機試模擬試卷第1套一、選擇題(本題共40題,每題1.0分,共40分。)1、下列敘述中正確的是A、一個算法的空間復雜度大,則其時間復雜度也必定大B、一個算法的空間復雜度大,則其時間復雜度必定小C、一個算法的時間復雜度大,則其空間復雜度必定小D、算法的時間復雜度與空間復雜度沒有直接關系標準答案:D知識點解析:算法的空間復雜度是指算法在執(zhí)行過程中所需要的內存空間,算法的時間復雜度,是指執(zhí)行算法所需要的計算工作量,兩者之間并沒有直接關系,答案為D。2、下列敘述中正確的是A、循環(huán)隊列中的元素個數隨隊頭指針與隊尾指針的變化而動態(tài)變化B、循環(huán)隊列中的元素個數隨隊頭指針的變化而動態(tài)變化C、循環(huán)隊列中的元素個數隨隊尾指針的變化而動態(tài)變化D、以上說法都不對標準答案:A知識點解析:在循環(huán)隊列中,用隊尾指針rear指向隊列中的隊尾元素,用排頭指針front指向排頭元素的前一個位置。因此,從排頭指針front指向的后一個位置直到隊尾指針rear指向的位置之間所有的元素均為隊列中的元素。所以循環(huán)隊列中的元素個數與隊頭指針和隊尾指針的變化而變化,A正確。3、一棵二叉樹中共有80個葉子結點與70個度為1的結點,則該二叉樹中的總結點數為A、219B、229C、230D、231標準答案:B知識點解析:二叉樹中,度為0的節(jié)點數等于度為2的節(jié)點數加1,即n2=n0-1,葉子節(jié)點即度為0,則n2=79,總結點數為n0+n1+n2=80+70+79=229,答案為B。4、對長度為10的線性表進行冒泡排序,最壞情況下需要比較的次數為A、9B、10C、45D、90標準答案:C知識點解析:冒泡法是在掃描過程中逐次比較相鄰兩個元素的大小,最壞的情況是每次比較都要將相鄰的兩個元素互換,需要互換的次數為9+8+7+6+5+4+3+2+1=45,選C。5、構成計算機軟件的是A、源代碼B、程序和數據C、程序和文檔D、程序、數據及相關文檔標準答案:D知識點解析:軟件指的是計算機系統(tǒng)中與硬件相互依賴的另一部分,包括程序、數據和有關的文檔,選D。6、軟件生命周期可分為定義階段、開發(fā)階段和維護階段,下面不屬于開發(fā)階段任務的是A、測試B、設計C、可行性研究D、實現標準答案:C知識點解析:開發(fā)階段包括分析、設計和實施兩類任務。其中分析、設計包括需求分析、總體設計和詳細設計3個階段,實施則包括編碼和測試兩個階段,C不屬于開發(fā)階段。7、下面不能作為結構化方法軟件需求分析工具的是A、系統(tǒng)結構圖B、數據字典(DD)C、數據流程圖(DFD圖)D、判定表標準答案:A知識點解析:結構化方法軟件需求分析工具主要有數據流圖、數據字典、判定樹和判定表。8、在關系模型中,每一個二維表稱為一個A、關系B、屬性C、元組D、主碼(鍵)標準答案:A知識點解析:關系模型采用二維表來表示,即每個二維表稱為一個關系。9、若實體A和B是一對多的聯(lián)系,實體B和C是一對一的聯(lián)系,則實體A和C的聯(lián)系是A、一對一B、一對多C、多對一D、多對多標準答案:B知識點解析:A和B為一對多的聯(lián)系,則對于A中的每一個實體,B中有多個實體與之聯(lián)系,而B與C為一對一聯(lián)系,則對于B中的每一個實體,C中之多有一個實體與之聯(lián)系,則可推出對于A中的每一個實體,C中有多個實體與聯(lián)系,所以為一對多聯(lián)系。10、有三個關系R、S和T如下:則由關系R和S得到關系T的操作是A、選擇B、投影C、交D、并標準答案:D知識點解析:關系T中的元素與關系R和關系S中不同元素的總和,因此為并操作。11、以下敘述中正確的是A、C語言程序所調用的函數必須放在main函數的前面B、C語言程序總是從最前面的函數開始執(zhí)行C、C語言程序中main函數必須放在程序的開始位置D、C語言程序總是從main函數開始執(zhí)行標準答案:D知識點解析:C語言所調用的函數可以放在調用它的函數前,也可以放在調用它的函數后,所以A錯誤,C語言程序總是從main函數開始執(zhí)行,所以B錯誤,main函數的位置可以放在開始,也可以放在中間,也可以放在最后,所以C錯誤。12、C語言程序中,運算對象必須是整型數的運算符是A、&&B、/C、%D、*標準答案:C知識點解析:%取余運算是二目運算符,且要求運算對象必須為整數,所以選C。13、有以下程序#include<stdio.h>main(){intsum,pad,pAd;sum=pad=5;pAd=++sum,pAd++,++pad;printf("%d\n",pad);}程序的輸出結果是A、5B、6C、7D、8標準答案:B知識點解析:C語言區(qū)分大小寫,pad與pAd是兩個不同的變量,首先將5賦值給兩個變量,由于賦值運算符的優(yōu)先級高于逗號運算符,所以計算pAd=++sum,此時pAd為6,sum也為6,然后計算pAd++,pAd的值變?yōu)?,++pad,pad的值變?yōu)?,所以選擇B。14、有以下程序#include<stdio.h>main(){inta=3;a+=a-=a*a;printf("%d\n",a);}程序的輸出結果是A、0B、9C、3D、-12標準答案:D知識點解析:首先計算a*a結果為9,執(zhí)行a=a-9,a的值為-6,然后執(zhí)行a+=a,即a=a+a=-6+(-6),所以值為-12。15、sizeof(double)是A、一個整型表達式B、一個雙精度型表達式C、一個不合法的表達式D、一種函數調用標準答案:A知識點解析:sizeof是C語言中的一個操作符(operator),不是函數調用,簡單的說其作用就是返回一個對象或者類型所占的內存字節(jié)數,所以選擇A。16、有以下程序#include<stdio.h>main(){inta=2,c=5;printf("a=%%d,b=%%d\n",a,c);}程序的輸出結果是A、a=2,b=5B、a=%2,b=%5C、a=%d,b=%dD、a=%%d,b=%%d標準答案:C知識點解析:C語言中用"%%"打印輸出字符"%",所以%%d,輸出為%d兩個普通字符,而不是格式控制符"%d"的含義,所以打印結果為C。17、若有定義語句:chara=’\82’;則變量aA、說明不合法B、包含1個字符C、包含2個字符D、包含3個字符標準答案:A知識點解析:定義語句:chara=’\82’;反斜杠’\’后面跟三位八進制數據表示一個ASCII碼,八進制沒有數字8,因此A選項正確。18、有以下程序#include<stdio.h>main(){charc1=’A’,c2=’Y’;printf("%d,%d\n",c1,c2);}程序的輸出結果是A、輸出格式不合法,輸出出錯信息B、65,89C、65,90D、A,Y標準答案:B知識點解析:本題重點考察字符變量的相關知識。分別給字符型變量a和b分別賦值為’A’和’Y’,即A和Y的ASSCII碼,因此輸出結果為65,89,因此B選項正確。19、若變量已正確定義for(x=0,y=0;(y!=99&&x<4);x++)則以上for循環(huán)A、執(zhí)行3次B、執(zhí)行4次C、執(zhí)行無限次D、執(zhí)行次數不定標準答案:B知識點解析:本題重點考察for語句的循環(huán)次數,for(x=0,y=0;(y!=99&&x<4);x++),y!=99&&x<4即循環(huán)條件當y不等于99以及x<4時,執(zhí)行循環(huán)語句,當有一個條件不成立時,均結束循環(huán),因此循環(huán)4次,B選項正確。20、對于while(!E)s;,若要執(zhí)行循環(huán)體s,則E的取值應為:A、E等于1B、E不等于0C、E不等于1D、E等于0標準答案:D知識點解析:while語句的一般形式為:while(表達式)語句;其中表達式是循環(huán)條件,語句為循環(huán)體。while語句的語義是:計算表達式的值,當值為真(非0)時,執(zhí)行循環(huán)體語句。該題中如要執(zhí)行語句s,則!E應為真,因此E應等于0,D選項正確。21、有以下程序#include<stdio.h>main(){intx;for(x=3;x<6;x++)printf((x%2):("*%d"):("#%d"),x);printf("\n");}程序的輸出結果是A、*3#4*5B、#3*4#5C、*3*4#5D、*3#4#5標準答案:A知識點解析:條件運算符組成條件表達式的一般形式為:表達式1:表達式2:表達式3。其求值規(guī)則為:如果表達式1的值為真,則以表達式2的值作為條件表達式的值,否則以表達式2的值作為整個條件表達式的值。本題中語句printf((x%2):("*%d"):("#%d"),x);含義為變量x對2求余,如果結果為真,則按照"*%d"格式輸出,否則按照#%d輸出。因此A選項正確。22、有以下程序#include<stdio.h>main(){inta,b;for(a=1,b=1;a<=100;a++){if(b>=20)break;if(b%3==1){b=b+3;continue;}b=b-5;}printf("%d\n",a);}程序的輸出結果是A、10B、9C、8D、7標準答案:C知識點解析:首先注意for循環(huán)的控制條件當b>=20或者a>100則跳出for循環(huán)也即b<20且a<=100時執(zhí)行for循環(huán);第一次進入循環(huán)a=1,b=1均滿足循環(huán)條件,但b%3==1條件滿足,故執(zhí)行b=b+3,得到b=4,注意有continue,所以后面語句不執(zhí)行,直接跳轉到a++這個語句,所以第一次循環(huán)完之后a=2,b=4;進入第二輪循環(huán),b%3==1也是滿足的,故再次b=b+3,此輪循環(huán)執(zhí)行之后a=3,b=7,進入下一輪。此后和前面循環(huán)同理,都是b%3==1滿足,因為每次都是加3,而之后又去模3,且都跳過for后面語句直接執(zhí)行a++,所以,一直循環(huán)到b=22跳出for循環(huán)。此時a為8.綜合起來就是,每次循環(huán)b增加3,a增加1,且當b>22時跳出循環(huán),結束程序。所以b從1增加到22,有(22-1)/3=7,所以a=1+7=8.因此C選項正確。23、有以下程序#include<stdio.h>voidfun(intx,inty,int*c,int*d){*c=x+y;*d=x-y;}main(){inta=4,b=3,c=0,d=0;fun(a,b,&c,&d);printf("%d%d\n",c,d);}程序的輸出結果是A、00B、43C、34D、71標準答案:D知識點解析:主函數中首先初始化整型變量a、b、c、d分別為4、3、0、0。調用函數fun,將實參傳遞給形參。在fun函數內,*c=7、*d=1。返回主函數,最后輸出7和1。因此D選項正確。24、有以下程序#include<stdio.h>voidfun(int*p,int*q){intt;t=*p;*p=*q;*q=t;*q=*p;}main(){inta=0,b=9;fun(&a,&b);printf("%d%d\n",a,b);}程序的輸出結果是A、90B、00C、99D、09標準答案:C知識點解析:主函數中定義整型變量a、b,分別賦值0和9。將a和b的地址傳遞給指針變量p和q,函數fun中將a和b的值互換后,又將a的值賦給b。返回主函數,最后輸出9和9。因此C選項正確。25、有以下程序#include<stdio.h>main(){inta[]={2,4,6,8,10},x,*p,y=1;p=&a[1];for(x=0;x<3;x++)y+=*(p+x);printf("%d\n",y);}程序的輸出結果是A、13B、19C、11D、15標準答案:B知識點解析:本題通過語句"p=&a[1]"將指針變量p指向了存儲單元a[1],即使得p[0]的值為4,y的初始值為1,然后通過3次for循環(huán),使得y的值分別加上p[0]、p[1]和p[2],那么y=1+4+6+8,所以輸出的y的值為19。26、有以下程序#include<stdio.h>main(){inti,x[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++)printf("%d",x[i][2-i]);printf("\n");}程序的輸出結果是A、150B、357C、147D、369標準答案:B知識點解析:程序首先初始化二維數組x[3][3],然后通過3次for循環(huán),輸出x[0][2]、x[1][1]和x[2][0]的值,即3、5、7。因此B選項正確。27、設有某函數的說明為int*func(inta[10],intn);則下列敘述中,正確的是A、形參a對應的實參只能是數組名B、說明中的a[10]寫成a[]或*a效果完全一樣C、func的函數體中不能對a進行移動指針(如a++)的操作D、只有指向10個整數內存單元的指針,才能作為實參傳給a標準答案:B知識點解析:本題重點考察返回指針值的函數相關知識,返回指針值的函數,一般定義形式為:類型名*函數名(參數列表)。func函數被定義為指針型函數,它的形參inta[10]和intn,分別指一維數組a[0]和整型變量n。28、有以下程序#include<stdio.h>charfun(char*c){if(*c<=’Z’&&*c>=’A’)*c-=’A’-’a’;return*c;}main(){chars[81],*p=s;gets(s);while(*p){*p=fun(p);putchar(*p);p++;}printf("\n");}若運行時從鍵盤上輸入OPENTHEDOOR<回車>,程序的輸出結果是A、OPENTHEDOORB、oPENtHEdOORC、openthedoorD、OpenTheDoor標準答案:C知識點解析:字符串輸入函數gets的功能是從標準輸入設備鍵盤上輸入一個字符串。首先使指針變量p指向字符串的首字母,while循環(huán)語句中對字符串的每個字符進行fun函數操作。fun函數的功能是,將字符串中的大寫字母變小寫字母。將處理結果返回主函數,主函數通過putchar()字符輸出函數進行輸出。因此C選項正確。29、設有定義語句:char*aa[2]={"abcd","ABCD"};則以下敘述正確的是A、aa[0]存放了字符串"abcd"的首地址B、aa數組的兩個元素只能存放含有4個字符的一維數組的首地址C、aa數組的值分別是字符串"abcd"和"ABCD"D、aa是指針變量,它指向含有兩個元素的字符型數組標準答案:A知識點解析:本題中定義了一個指針數組,數組中存放的是字符指針,aa數組的兩個元素分別包含了5個字符,所以可以存放5個字符的一維數組的首地址,所以B選項錯誤。aa數組的值是指向那兩個字符串的字符指針,而不是那兩個字符串,所以C選項錯誤。aa本身是一個指向兩個字符指針的指針,所以D選項錯誤。30、有以下程序#include<stdio.h>intfun(char*s){char*p=s;while(*p!=0)p++;return(p-s);}main(){printf("%d\n",fun("goodbey!"));}程序的輸出結果是A、0B、6C、7D、8標準答案:D知識點解析:本題主要考查了函數定義及調用,以及while循環(huán)語句,執(zhí)行fun函數后,首先是找到最后一個字符的地址,然后減去第一個地址得到的就是這個字符串的長度,所以本題答案為8。答案為D選項。31、有以下程序#include<stdio.h>intfun(intn){inta;if(n==1)return1;a=n+fun(n-1);return(a);}main(){printf("%d\n",fun(5));}程序的輸出結果是A、9B、14C、10D、15標準答案:D知識點解析:考查函數的遞歸調用,只需要一步一步遞歸調用fun函數即可,執(zhí)行fun(5)=5+(4+(3+(2+fun(1))))=15,所以答案為D選項。32、有以下程序#include<stdio.h>intd=1;voidfun(intp){intd=5;d+=p++;printf("%d",d);}main(){inta=3;fun(a);d+=a++;printf("%d\n",d);}程序的輸出結果是A、84B、96C、94D、85標準答案:A知識點解析:本題主要考查局部變量和全局變量的區(qū)別,題目中函數之外定義的d為全局變量,函數fun內定義的d為局部變量,所以執(zhí)行fun函數后,打印出8,執(zhí)行完d+=a++;后d變?yōu)?,所以答案為A。33、有以下程序#include<stdio.h>intfun(intA){intb=0;staticintc=3;a=(c++,b++);return(a);}main(){inta=2,i,k;for(i=0;i<2;i++)k=fun(a++);printf("%d\n",k);}程序的輸出結果是A、4B、0C、1D、2標準答案:B知識點解析:題目中fun函數被執(zhí)行了兩次,兩次執(zhí)行后,都是返回了函數內部的b值,所以答案為0,即B選項正確。34、有以下程序#include<stdio.h>main(){charc[2][5]={"6934","8254"},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=c[i];for(i=0;i<2;i++)for(j=0;p[i][j]>0&&p[i][j]<=’9’;j+=2)s=10*s+p[i][j]-’0’;printf("%d\n",s);}程序的輸出結果是A、693825B、69825C、63825D、6385標準答案:D知識點解析:本題的意圖在于將c中兩個字符串的偶數位置的數字組成一個新數,找到的四個數字分別為6、3、8、5,組成的數為6385,所以答案為D選項。35、有以下程序#include<stdio.h>#defineSQR(X)X*Xmain(){inta=10,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf("%d\n",a);}程序的輸出結果是A、0B、1C、9D、10標準答案:B知識點解析:本題考查宏定義,宏定義只是做個簡單的替換,執(zhí)行SQR(k+m)/SQR(k+m)=k+m*k+m/k+m*k+m=15/2,a/=SQR(k+m)/SQR(k+m)的結果為1,選項B正確。36、有以下程序#include<stdio.h>main(){charx=2,y=2,z;z=(y<<1)&(x>>1);printf("%d\n",z);}程序的輸出結果是A、1B、0C、4D、8標準答案:B知識點解析:本題考查位運算<<、&。y<<1為4,x>>1為1,二者與一下為0,所以B選項正確。37、有以下程序#include<stdio.h>structS{inta;intb;};main(){structSa,*p=&a;a.a=99;printf("%d\n",__________);}程序要求輸出結構體中成員a的數據,以下不能填入橫線處的內容是A、a.aB、*p.aC、p->aD、(*p).a標準答案:B知識點解析:本題考查結構體變量的引用,題目中要求輸出結構體中成員a的數據,p為指針,*p為結構體變量,那么*p.a可以表示為結構體中成員a的數據。38、有以下程序#include<stdio.h>#include<stdlib.h>voidfun(double*p1,double*p2,double*s){s=(double*)calloc(1,sizeof(double));*s=*p1+*(p2+1);}main(){doublea[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;fun(a,b,s);printf("%5.2f\n",*s);}程序的輸出結果是A、21.10B、11.1C、12.1D、1.1標準答案:D知識點解析:本題考查把數組名作為函數參數,執(zhí)行fun函數后,s的值并沒有發(fā)生變化,仍然是指向a,所以輸出結果為1.10,選項D正確。39、若已建立以下鏈表結構,指針p、s分別指向如圖所示結點則不能將s所指結點插入到鏈表末尾的語句組是A、p=p->next;s->next=p;p->next=s;B、s->next=’\0’;p=p->next;p->next=s;C、p=p->next;s->next=p->next;p->next=s;D、p=(*p).next;(*s).next=(*p).next;(*p).next=s;標準答案:A知識點解析:本題考查向鏈表中插入節(jié)點,A選項語句錯誤,不能夠實現在鏈表末尾插入。40、若fp已定義為指向某文件的指針,且沒有讀到該文件的末尾,則C語言函數feof(fp)的函數返回值是A、EOFB、非0C、-1D、0標準答案:D知識點解析:本題考查文件的定位,feof函數的用法是從輸入流讀取數據,如果到達文件末尾(遇文件結束符),eof函數值為非零值,否則為0,所以選項D正確。二、程序填空題(本題共1題,每題1.0分,共1分。)41、給定程序中,函數fun的功能是:將參數給定的字符串、整數、浮點數寫到文本文件中,再用字符串方式從此文本文件中逐個讀入,并調用庫函數atoi和atof將字符申轉換成相應的整數、浮點數,然后將其顯示在屏幕上。請在程序的下畫線處填入正確的內容并把下畫線刪除,使程序得出正確的結果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結構!試題程序:#inClucle<stdio.h>#include<stdlib.h>voidfun(char*s,inta,doublef){/**********found***********/【1】fp;charstr[100],str1[100],str2[100];inta1;doublef1;fp=fopen(“filel.txt”,“W”);fprintf(fp,“%S%d%f\n”,S,a,f);/**********found***********/【2】;fp=fopen(“filel.txt”,“r”);/**********found***********/fscanf(【3】,“%s%s%S”,str,str1,Str2),fclose(fp);a1=atoi(str1),f1=atof(str2),printf(“\nTheresult:\n\n%S%d%f\n”,str,a1,f1);}main(){chara[10]=“Hello!”;intb=12345;cloublec=98.76;fun(a,b,c);}標準答案:(1)FILE*(2)fclose(fp)(3)fp知識點解析:填空1:從使用fp=fopen(“filel.txt”,“w”)可知fp應該是文件類型指針,因此本空應該填寫FILE*。填空2:當對fp作打開操作的時候,并進行不同的操作前,應該對其關閉,因為在第一次打開時是對fp進行寫操作,而在第二次打開后進行的是讀操作,因此應該先對fp進行關閉,本空填fclose(fp)。填空3:fscanf()是把文本文件輸出,因此本空只能填寫fp。三、程序修改題(本題共1題,每題1.0分,共1分。)42、下列給定程序中函數fun的功能是:刪除s所指字符中所有的小寫字母c。請改正程序中的錯誤,使它能得出正確的結果。注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!試題程序:#include<stdio.h>voidfun(char*s){inti,j,for(i=j=0;S[i]!=‘\0’;i++)if(S[i]!=’c’)/**********found***********/S[j]=S[i];/**********found***********/s[i]=‘\0’;}voidmain(){chars[80];printf(“\nEnterastring:”);gets(s);printf(“Theoriginalstring:”),puts(s);fun(s);printf(“Thestringafterdeleted:”);puts(S),printf(“\n\n”),}標準答案:(1)s[j++]=s[i];或{s[j]=s[i];j++;}(2)s[j]=‘\0’;知識點解析:由循環(huán)條件if(s[i]!=‘c’)可知,如果字符串中的字符不是‘c’,則將保留該寧符到s[j]位置,然后下標j進行加1操作。循環(huán)結束后要在新串的結尾加上‘\0’。四、程序設計題(本題共1題,每題1.0分,共1分。)43、編寫函數fun,其功能是:實現B=A+A’,即將矩陣A加上A的轉置,存放在矩陣B中。計算結果在mmn函數中輸出。例如,輸入下面的矩陣:123456789其轉置矩陣為:147258369程序輸出:261061014101418注意:部分源程序給出如下。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#include<COnio.h>#include<stdlib.h>voidfun(inta[3][3],intb[3][3]){}voidmain(){inta[3][3]=f{1,2,3},{4,5,6},{7,8,9}},t[3][3];inti,j;system(“CLS”),fun(a,t);for(i=0;i<3;i++){for(j=0,j<3;j++)printf(“%7d”,t[i][j]);printf(“\n”),}}標準答案:voidfun(inta[3][3],intb[3][3]){inti,j;for(i=0,i<3;i++)for(j=0,j<3;j++)b[i][j]=a[i][j]+a[j][i];/*把矩陣a加上a的持置,存放在矩陣b中*/}知識點解析:行列數相等的二維數組的轉置就是行列互換,即轉置后的第i行第j列正好對應原矩陣的第j行第i列。本題使用雙層循環(huán)實現矩陣的轉置,并將計算結果存入矩陣b中,外層循環(huán)控制矩陣的行下標,內層循環(huán)控制矩陣的列下標。國家二級(C語言)機試模擬試卷第2套一、選擇題(本題共40題,每題1.0分,共40分。)1、下列關于棧敘述正確的是()。A、棧頂元素最先能被刪除B、棧頂元素最后才能被刪除C、棧底元素永遠不能被刪除D、棧底元素最先被刪除標準答案:A知識點解析:棧是先進后出的數據結構,所以棧頂元素最后入棧卻最先被刪除。棧底元素最先人棧卻最后被刪除。所以選擇A。2、下列敘述中正確的是()。A、在棧中,棧中元素隨棧底指針與棧頂指針的變化而動態(tài)變化B、在棧中,棧頂指針不變,棧中元素隨棧底指針的變化而動態(tài)變化C、在棧中,棧底指針不變,棧中元素隨棧頂指針的變化而動態(tài)變化D、以上說法都不正確標準答案:C知識點解析:棧是先進后出的數據結構,在整個過程中,棧底指針不變,入棧與出棧操作均由棧頂指針的變化來操作,所以選擇C3、某二叉樹共有7個結點,其中葉子結點只有1個,則該二叉樹的深度為(假設根結點在第1層)()。A、3B、4C、6D、7標準答案:D知識點解析:根據二叉樹的基本性質3:在任意一棵二義樹中,多為0的葉子結點總比度為2的結點多一個,所以本題中度為2的結點為1-1=0個,所以可以知道本題目中的二義樹的每一個結點都有一個分支,所以共7個結點共7層,即度為7。4、軟件按功能可以分為應用軟件、系統(tǒng)軟件和支撐軟件(或工具軟件)。下面屬于應用軟件的是()。A、學生成績管理系統(tǒng)B、C語言編譯程序C、UNIX操作系統(tǒng)D、數據庫管理系統(tǒng)標準答案:A知識點解析:軟件按功能町以分為:應用軟件、系統(tǒng)軟件、支撐軟件。操作系統(tǒng)、編譯程序、匯編程序、網絡軟件、數據庫管理系統(tǒng)部屬于系統(tǒng)軟件。所以B、C、D都是系統(tǒng)軟件,只有A是應用軟件。5、結構化程序所要求的基本結構不包括()。A、順序結構B、GOTO跳轉C、選擇(分支)結構D、重復(循環(huán))結構標準答案:B知識點解析:1966年Boehm和Jacopini證明了程序設計語言僅僅使用順序、選擇和重復三種基本控制結構就足以表達出各種其他形式結構的程序設計方法。6、下面描述中錯誤的是()。A、系統(tǒng)總體結構圖支持軟件系統(tǒng)的詳細設計B、軟件設計是將軟件需求轉換為軟件表示的過程C、數據結構與數據庫設計是軟件設計的任務之一D、PAD圖是軟件詳細設計的表示工具標準答案:A知識點解析:詳細設計的任務是為軟件結構圖中而非總體結構圖中的每一個模塊確定實現算法和局部數據結構,剛某種選定的表達工具表示算法和數據結構的細節(jié),所以A錯誤。7、負責數據庫中查詢操作的數據庫語言是()。A、數據定義語言B、數據管理語言C、數據操縱語言D、數據控制語言標準答案:C知識點解析:數據定義語言:負責數據的模式定義與數據的物理存取構建;數據操縱語言:負責數據的操縱,包括查詢及增、刪、改等操作;數據控制語言:負責數據完整性、安全性的定義與檢查以及并發(fā)控制、故障恢復等功能。8、一個教師可講授多門課程,一門課程可由多個教師講授。則實體教師和課程間的聯(lián)系是()。A、1:1聯(lián)系B、1:m聯(lián)系C、m:1聯(lián)系D、m:n聯(lián)系標準答案:D知識點解析:因為一個教師可講授多門課程,而一門課程又能由多個老師講授所以他們之間是多對多的關系,可以表爪為m:n。9、有三個關系R、S和T如下:則由關系R和S得到關系T的操作是()。A、自然連接B、并C、交D、差標準答案:D知識點解析:關系T中的元組是關系R中有而關系S中沒有的元組的集合,即從關系R中除去與關系S中相同元組后得到的關系T。所以做的是差運算。10、定義無符號整數類為UInt,下面可以作為類UInt實例化值的是()。A、-369B、369C、0.369D、整數集合{1,2,3,4,5}標準答案:B知識點解析:只有B選項369可以用無符號整數來表示和存儲。A選項-369有負號,選項C0.369是小數都不能用無符號整數類存儲。選項D是一個整數集合得用數組來存儲。11、以下敘述中錯誤的是()。A、C程序在運行過程中所有計算都以二進制方式進行B、C程序在運行過程中所有計算都以十進制方式進行C、所有C程序都需要編譯鏈接無誤后才能運行D、C程序中字符變量存放的是字符的ASCII碼值標準答案:B知識點解析:C程序在運行過程中的所有計算都以二進制方式進行,所以B選項錯誤12、以下關于C語言的敘述中正確的是()。A、C語言的數值常量中夾帶空格不影響常量值的正確表示B、C語言中的變量可以在使用之前的任何位置進行定義C、在C語言算術表達式的書寫中,運算符兩側的運算數類型必須一致D、C語言中的注釋不可以夾在變量名或關鍵字的中間標準答案:D知識點解析:C語言的數值常量中不能夾帶空格,所以A錯誤。C語言中的變量都必須先定義再使川,對變量的定義通常放在甬數體內的前部,但也可以放往函數外部或復合語句的開頭,不能隨便放置,所以B錯誤.在Ci語言中運算符兩側的運算數據類型可以不一致,且結果與精度較高的保持一致,所以C錯誤。13、以下不合法的字符常量是()。A、’\\’B、’\"’C、’\018’D、’\xcc’標準答案:C知識點解析:轉義字符中,八進制的表示形式為\ddd,但是八進制中不能包含數字8,所以C選項不合法。14、以下選項中正確的定義語句是()。A、double,a,b;B、doublea=b=7;C、doublea;b;D、doublea=7,b=7;標準答案:D知識點解析:A選項中變量類型符double后面不能有逗號。B選項中變量b不能先使用再定義,應該寫成選項D中的格式。C選項中變量a后面應該是逗號而不是分號。15、若有定義語句:inta=3,b=2,c=1;以下選項中錯誤的賦值表達式是()。A、a=(b=4)=3;B、a=b=c+1;C、a=(b=4)+c;D、a=1+(b=c=4);標準答案:A知識點解析:不能將變量或常量賦給一個表達式,所以A選項中(b=4)=3是錯誤的。16、若有定義:inta,b;通過語句:scanf("%d;%d",&a,&b);能把整數3賦給變量a,5賦給變量b的輸入數據是()。A、35B、3,5C、3;5D、35標準答案:C知識點解析:輸入數據的格式必須與scanf()的格式控制串完全匹配,所以輸入時必須在3和5之間輸入“;”。17、已知大寫字母A的ASCII碼值是65,小寫字母a的ASCII碼值是97。以下不能將變量c中的大寫字母轉換為對應小寫字母的語句是()。A、c=(’A’+c)%26-’a’B、c=c+32C、c=c-’A’+’a’D、c=(c-’A’)%26+’a’標準答案:A知識點解析:根據題意可知,小寫字母比與之對應的大寫字母的ASCII碼大32。A選項中字符A加上c表示的大寫字符再對字母個數26取余,本身這個表達式沒有任何含義,所以選擇A選項。18、在以下給出的表達式中,與while(E)中的(E)不等價的表達式是()。A、(E>0||E<0)B、(E==0)C、(!E==0)D、(E!=0)標準答案:B知識點解析:while語句中條件表達式E的值不為0即為真,認為滿足條件,所以與B選項中表達式的含義正好相反,選擇B選項。19、以下程序段中,與語句:k=a>b?(b>c?1:0):0;功能相同的是()。A、if((a>h)||(b>c))k=1;elsek=0;B、if((a>b)&&(b>c))k=1;else!k=0;C、if(a<=b)k=0;elseif(b<=c)k=1;D、if(a>h)k=1;elseif(h>c)k=1;elsek=0;標準答案:B知識點解析:條件表達式的含義是,如果表達式1成立,結果為表達式2的值,如果不成立為表達式3的值。所以題干中k的值這樣取值:如果a>b且b>c,k值結果為1,如果a>b,且b<c則值為0。如果a<b,k值為0。也就是只要a>b與b>c中只要有一個條件不成立,k的值就為0,所以選擇B選項。20、有以下程序:#include<stdio.h>main(){inta=1,}1=2;for(;a<8;a++){b+=a;a+=2;}printf("%d,%d\n",a,b);}程序運行后的輸出結果是()。A、9,18B、8,11C、7,11D、10.14標準答案:D知識點解析:第一次循環(huán)a的值為1,滿足條件,執(zhí)行b+=a,與a+=2,則b的值變?yōu)?,a的值變?yōu)?。執(zhí)行a++,a的值為4,滿足條件進入第二次循環(huán),執(zhí)行完循環(huán)體后b的值為7,a的值為6。執(zhí)行a++,a的值為7,滿足條件進入第三次循環(huán),執(zhí)行完循環(huán)體后b的值為14,a的值為9。執(zhí)行a++,a的值變?yōu)?0,不滿足條件,循環(huán)結束。所以選擇D選項。21、有以下程序:#include<stdio.h>main(){inti,j,m=55;for(i=1;i<=3;i++)for(j=3;j<=i;j++)m=m%j;printf("%d\n",m);}程序運行后的輸出結果是()。A、0B、1C、2D、3標準答案:B知識點解析:第一次執(zhí)行外循環(huán)i的值為1,滿足條件,判斷第一次內循環(huán),j的值為3,不滿足條件,跳出內循環(huán)。第二次執(zhí)行外循環(huán)i的值為2,同理也不滿足內循環(huán)條件,跳出內循環(huán)。第三次執(zhí)行外循環(huán)i的值為3,此時進入內循環(huán)判斷條件時,條件成立,執(zhí)行m=m%j,m的值為1,跳出內循環(huán),跳出外循環(huán)打印m的值。22、有以下程序:#inelude<stdio.h>main(){intx=8:for(;x>0;x--){if(x%3){printf("%d,",x--);continue;}printf("%d,",--x);}}程序運行后的輸出結果是()。A、7,4,2,B、8,7,5,2,C、9,7,6,4,D、8,5,4,2,標準答案:D知識點解析:coutinue的作用是跳出循環(huán)體中剩余的語句而進行下一次循環(huán)。第一次循環(huán)x的值為8,循環(huán)體中if條件成直,打印x的值8后將x減1,再執(zhí)行continue語句,跳出本次循環(huán)。第二次判斷循環(huán)條件時,x的值變?yōu)?,不滿足循環(huán)體內if條件,執(zhí)行打印--x的操作,即打印5后跳出循環(huán)。第三次判斷循環(huán)條件時x的值為4,滿足循環(huán)體中if條件,執(zhí)行打印x--的操作,即打印4,后將x值減一,執(zhí)行continue語句,跳出本次循環(huán)。第四次判斷循環(huán)條件時x的為2,滿足循環(huán)體中if條件,打印x--,即打印2后將x減一,執(zhí)行continue語句,跳出本次循環(huán)。在進行for條件表達式中第三個表達式x--的操作后x的值為0,不滿足條件結束循環(huán)。所以打印結果為8,5,4,2,。23、以下敘述中錯誤的是()。A、C程序必須由一個或一個以上的函數組成B、函數調用可以作為一個獨立的語句存在C、若函數有返回值,必須通過return語句返回D、函數形參的值也可以傳回給對應的實參標準答案:D知識點解析:形參是函數定義時由川戶定義的形式上的變量,實參是函數調用時,主調函數為被調函數提供的原始數據。在C語言中,實參向形參傳送數據的方式是“值傳遞”。因此D選項正確。24、有以下程序:#include<stdio.h>main(){inta=1,b=3,c=5;int*p1=&a,*p2=&b,*p=&c;*p=*p1*(*p2);printf("%d\n",c);}程序執(zhí)行后的輸出結果是()。A、1B、2C、3D、4標準答案:C知識點解析:該程序中int*p1=&a,*p2=&h,*p=&c;指定義三個指針變量,并賦值,即使p1指向a;p2指向b;p指向c。*p=*p1*(*p2);該條語句是給p所指的存儲單元c賦值,就是p1所指的存儲單元的值,即a的值,與p2所指的存儲單元b的值相乘,也就是c=a*b,等價于c=1*3=3;因此C選項正確。25、有以下程序:#include<stdio.h>voidf(int*p,int*q);main(){intm=1,n=2,*r=&m;f(r,&n);printf("%d,%d",m,n);}voidf(int*p,int*q){p=p+1;*q=*q+1:}程序運行后的輸出結果是()。A、2,3B、1,3C、1,4D、1,2標準答案:B知識點解析:在f(int*p,int*q)函數中,執(zhí)行p=p+1是將p所對應的地址加1,而*q=*q+1是將q所指向的n的地址所對應的值加1,所以m的得知所對應的值沒有變,而n的值則為3了。因此B選項正確。26、若有定義語句:inta[2][3],*p[3];則以下語句中正確的是()。A、p=a;B、p[0]=a;C、p[0]=&[1][2];D、p[1]=&a;標準答案:C知識點解析:A選項錯誤,因為p是指向一個指針數組,作為數組名,不能指向別的地方。B選項錯誤,因為p[0]是一個int指針,也就是int*;而a是一個指向指針的指針int**。選項正確,因為p[0]是一個int*,a[1][2]是int,&a[1][2]是int*,類型吻合。D選項錯誤,因為a作為數組名,不能取地址。即使能取,p[1]是int*,&a是int=***,類型不對。因此C選項正確。27、以下程序中函數f的功能是:當flag為1時,進行由小到大排序;當flag為0時,進行由大到小排序。#include<stdio.h>voidf(intb[],intn,intflag){inti,j,t;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(flag?b[i]>b[j]:b[i]<b[j]){t=b[i];b[i]=b[j];b[j]=t;}}main(){inta[10]={5,4,3,2,1,6,7,8,9,10},i;f(&a[2],5,0);f(a,5,1);for(i=0;i<10;i++)printf("%d,",a[i]);}程序運行后的輸出結果是()。A、1,2,3,4,5,6,7,8,9,10,B、3,4,5,6,7,2,1,8,9,10,C、5,4,3,2,1,6,7,8,9,10,D、10,9,8,7,6,5,4,3,2,1,標準答案:B知識點解析:本題重點考察函數的參數傳遞,函數的參數傳遞分為傳值和傳地址兩種情況。本題就是結合數組考查參數傳遞的情形。函數f完成的功能是對數據進行排序,語句f(&a[2],5,0)的作用是對從a[2]開始的5個元素進行從大到小排序。注意:這里傳遞的是地址&a[2],所以排序操作可看作是直接對數組a操作,執(zhí)行后的結果為5,4,7,6,3,2,1,8,9,10。語句f(a,5,1)對數組a的前5個元素從小到大排序,排序后數組為:3,4,5,6,7,2,1,8,9,10。因此B選項正確。28、有以下程序:#include<stdio.h>main(){ints[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;for(i=0;i<12;i++)c[s[i]]++;for(i=1;i<5;i++)printf("%d",c[i]);printf("\n");}程序運行后的輸出結果是()。A、2344B、4332C、1234D、1123標準答案:B知識點解析:在for(i=0;i<12;i++)c[s[i]]++中,數組元素s[i]的值作為數組c的下標,當退出循環(huán)時,數組c的4個元素的值分別為4、3、3、2。因此B選項正確。29、以下能正確定義字符串的語句是()。A、charstr:"\x43";B、charstr[]="\0";C、charstr=’’;D、charstr[]={’\064’};標準答案:B知識點解析:C語言中,字符串是用一對雙引號括起來的字符序列,并用字符型數組來存放,故C選項和D選項不屬于字符串,A選項定義的是一個字符變量str,卻用來存放字符串,顯然也不正確,岡此B選項正確。30、以下關于字符串的敘述中正確的是()。A、空串比空格打頭的字符串小B、兩個字符串中的字符個數相同時才能進行字符串大小的比較C、可以用關系運算符對字符串的大小進行比較D、C語言中有字符串類型的常量和變量標準答案:A知識點解析:字符串比較大小是以第1個不相同字符的大小為標準的,跟長度沒有關系,B選項不正確;字符串比較大小除了使用庫函數strcmp()以外,就只能靠自己寫代碼來實現了,而不能通過關系運算符來比較大小。因為字符串在表達式中相當于constchar*,即常字符指針,代表的是字符串的首地址,關系運算符會將兩個字符串的首地址值比較大小,這是毫無意義的。C選項不正確。C語言中只有字符串常量而沒有字符串變量,D選項描述不正確;空串的長度為0,而以空格打頭的字符串的長度至少為1,因此A選項是正確的。31、有以下程序:#include<stdio。h>voidfun(ehar*a,char*b){while(*a==’*’)a++;while(*b=*a){b++;a++;}}main(){char*s="*****a*b****",t[80];fun(s,t);puts(t);}}程序運行后的輸出結果是()。A、abB、a*bC、*****a*bD、a*b****標準答案:D知識點解析:在函數fun(char*a,char*b)中,while(*a==’*’)a++的功能是:如果*a的內容為‘*’則a指針向后移動,卣到遇到非’*’字符為止,退出循環(huán)進入下一個whik循環(huán),在while(*b=*a){b++;a++;}中,把字符數組a中的字符逐個賦給字符數組b。所以在主函數中,執(zhí)行fun(s,t)語句后,字符數組t中的內容為“a*b****”。因此D選項正確。32、下列函數的功能是()。voidfun(char*a,char*b){while((*b=*a)!=’\0’){a++;b++;}}A、將a所指字符串賦給b所指空間B、使指針b指向a所指字符串C、將a所指字符串和b所指字符串進行比較D、檢查a和b所指字符串中是否有’\0’標準答案:A知識點解析:While循環(huán)條件為:(*b=*a)!=’\0’,執(zhí)行時先把指針a所指向的字符賦給指針h所在內存單元,如果該字符不是結束標識‘\0’,執(zhí)行循環(huán)體a++;h++;,指針a、b分別指向下一個字符單元。再判斷循環(huán)條件,如果成立,繼續(xù)把指針a所指向的字符賦給指針b所在內存單元,直到遇到結束標識為止。因此A選項正確。33、有以下程序:#include<stdio.h>intfun(intx)intp;if(x==0||x==1)return(3):p=x-fun(x-2);returnp;}main()}printf("%d\n",fun(7));干旱序執(zhí)行后的輸出結果是()。A、2B、3C、7D、0標準答案:A知識點解析:因為fun(intx)是一個遞歸函數,所以主函數中fun(7)經過3次遞歸調用,其過程可以描述為“fun(7)=7-fun(5)=7-(5-fun(3))=7-(5-(3-fun(1)))=7-(5-(3-3))=7-5=2”,所以最后輸出結果為2。因此A選項正確。34、有以下程序:#include<stdio.h>intfun(){staticintx=1;x*=2;returnx;main(){inti,s=1:for(i=1;i<=2;i++)s=fun();printf("%din",s);}程序運行后的輸出結果是()。A、0B、1C、4D、8標準答案:C知識點解析:fun函數中的x為靜態(tài)局部變量,占用固定的內存單元,下一次調用時仍可保留上次調用時的值。也就是說,如果多次調用fun函數,x的定義只在第一次調用時有效,從第二次調用開始,x的定義相當于不存在,直接使用x的值。主函數中調用兩次fun函數:第一次調用:x=1,x=x*2=2,s=2;第二次調用:(直接用上次x的值)x=x*2=4,s=4。因此C選項正確。35、以下結構體類型說明和變量定義中正確的是()。A、structREC;{intn;charc;};RECt1,t2;B、typedefstruct{intn;charc;}REC;RECt1,t2;C、typedefstructREC;{intn=0;charc=’A’;}t1,t2;D、struct{intn;charc;}REC;RECt1,t2;標準答案:B知識點解析:本題考查結構體的相關知識,選項A中structREC后面不能有分號,C選項中typedefstructREC的后面也不能有分號,選項D中REC已經是結構體變量,不能當做結構體類型來使用。36、似定已建立以下鏈表結構,且指針p和q已指向如圖所示的結點:則以下選項中可將q所指結點從鏈表中刪除并釋放該結點的語句組是()。A、p->next=q->next;free(q);B、p=q->next;free(q);C、p=q;free(q);D、(*p).next=(*q).next;free(p);標準答案:A知識點解析:本題考查刪除鏈表中的結點操作,其方法是將要刪除結點的上個結點的下個結點指向要刪除結點的下個結點,然后釋放該要刪除結點,所以選項A正確。37、有以下程序:#include<stdio.h>#include<string.h>structA{inta;charb[10];doublec;};voidf(structAt);main()structAa={1001,"ZhangDa",1098.0};f(a);printf("%d,%s,%6.1f\n",a.a,a.b,a.c);}voidf(structAt){t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;}程序運行后的輸出結果是()。A、1002,ZhangDa,1202.0B、1002,ChangRong,1202.0C、1001,ChangRong,1098.0D、1001,ZhangDa,1098.0標準答案:D知識點解析:本題考查結構體的相關操作以及傳值、傳址的區(qū)別,該題中調用f函數后,會生成參數a的一個副本,而不會改變a的值,所以a值維持原值,選項D正確。38、有以下程序:#include<stdio.h>#defineN5#defineMN+l#definef(x)(x*M)main(){inti1,i2:i1=f(2):i2=f(1+1);printf("%d%d\n",i1,i2);}程序運行后的輸出結果是()。A、127B、1212C、1111D、117標準答案:D知識點解析:本題考查宏定義的用法,宏定義只是做個簡單的替換,所以本題中執(zhí)行f(2)=(2*N+1)=11,執(zhí)行f(1+1)=(1+1*N+1)=7。選項D正確。39、有以下程序:#include<stdio.h>main()inta=5,b=1,t:t=(a<<2)|b:printf("%d\n",t);}程序運行后的輸出結果是()。A、1B、11C、6D、21標準答案:D知識點解析:本題考查位運算,以及按位或操作,將a左移一位相當于是將a乘以了4,所以a<<2等于20,二進制表示為00010100,與b按位或得到00010101,即21,所以選項D正確。40、設fp為指向某二進制文件的指針,且已讀到此文件末尾,則函數feof(fp)的返回值為()。A、0B、’\0’C、非0值D、NULL標準答案:C知識點解析:本題考查文件的定位,feof函數的用法是從輸入流讀取數據,如果到達文件末尾(遇文件結束符),eof函數值為非零值,否則為0,所以選項C正確。二、程序填空題(本題共1題,每題1.0分,共1分。)41、下列給定程序中,函數fun的功能是進行數字字符轉換。若形參ch中是數字字符‘0’~‘9’,則將‘0’轉換成‘9’,‘1’轉換成‘8’,‘2’轉換成‘7’,……,‘9’轉換成‘0’;若是其他字符則保持不變;并將轉換后的結果作為函數值返回。請在程序的下劃線處填入止確的內容并將下劃線刪除,使程序得出正確的結果。注意:部分源程序在文件BLANK1.C中。不得增行或刪行,也不得更改程序的結構!#include<stdio.h>/**********found**********/[1]fun(charch){/**********found**********/if(ch>=‘0’&&[2])/**********found**********/return‘9’-(ch-[3]);returnch;main(){charc1,c2;printf("\nTheresult:\n");c1=’2’;c2=fun(c1);printf("c1=%cc2=%c\n",c1,c2);c1=’8’;c2=fun(c1);printf("c1=%cc2=%c\n",c1,c2);c1=’a’;c2=fun(c1);printf("c1=%cc2=%c\n",c1,c2);}標準答案:(1)char(2)ch<=’9’(3)’0’。知識點解析:本題考查:函數定義,注意函數定義的一般形式以及有參函數和無參函數的區(qū)別;if語句條件表達式,本題的條件表達式是判斷數字字符;函數返回值,其一般形式為“retum表達式:”。有參函數定義,其一般形式為:類型標識符函數名(形式參數表列){聲明部分語句}在形參表中給出的參數稱為形式參數,它們可以是各種類型的變量,各參數之間用逗號間隔。在進行函數調用時,主調函數將賦予這些形式參數實際的值。形參既然是變量,必須在形參列表中給出類型說明。三、程序修改題(本題共1題,每題1.0分,共1分。)42、給定程序MODI1.C中,函數fun的功能是:判斷輸入的任何一個正整數n,是否等于某個連續(xù)正整數序列之和。若是,則輸出所有可能的序列,否則輸出“不能分解”。例如:當輸入100時,輸出:100=9+10+11+12+13+14+15+16100=18+19+20+21+22請改正函數fun中指定部位的錯誤,使它能得出正確的結果。注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。試題程序:#include<stdio.h>voidfun(intn){intj,b,c,m,flag=0;for(b=1;b<=n/2;b++){/**********found**********/n=m:c=b;while(m!=0&&m>=c){/**********found**********/m=m-c;c++}/**********found**********/if(m!=0){printf("%d=",n);for(j=b;j<c-1;j++)printf("%d+",j);printf("%d\n",j);flag=1;}if(flag==0)printf("不能分解\n");}main(){intn;printf("請輸入一個整數:");seailf("%d",&n);fun(n);}標準答案:(1)m:n;(2)m:m-c;c++;(3)if(m==0)。知識點解析:(1)每次循環(huán),程序需要對n執(zhí)行減去連續(xù)的正整數序列來判斷n是否剛好為0,即n是否是連續(xù)的正整數序列之和,所以需要使用臨時變量m寄存n的值,每次循環(huán)對m執(zhí)行減運算操作,不滿足繼續(xù)下一輪。另外,程序聲明變量m時,未初始化它的值,所以此處應該修改為:m=n。(2)語法錯誤。C語言中每個語句必須以分號結束,所以應修改為:m=m-c;c++;。(3)題目判斷n是否是連續(xù)的正整數序列之和,若是,則輸出所有序列,程序中m依次減去連續(xù)的正整數,當m為0時,表示m(即n)滿足條件,再輸出當前序列中的每個正整數,所以此處判斷條件反了,應修改為:if(m==0)。四、程序設計題(本題共1題,每題1.0分,共1分。)43、編寫函數fun,其功能是:求ss所指字符串中指定字符的個數,并返回此值。例如,若輸入字符串123412132,輸入字符為1,則輸出3。注意:部分源程序在文件PROG1.C中。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。#include<stdio.h>#include<string.h>#defineM81intfun(char*ss,charc){}main(){chara[M],ch;voidNONO();printf("\nPleaseenterastring:");gets(a);printf("\nPleaseenterachar:");ch=getchar();printf("\nThenumberofthecharis:%d\n",fun(a,ch));NONO();}voidNONO(){/*本函數用于打開文件,輸人測試數據,調用fun函數,輸出數據,關閉文件。*/inti;FILE*rf,*wf;chara[M],b[M],ch;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",a);fscanf(rf,"%s",b);ch=*b:fprintf(wf,"%c=%d\n",ch,fun(a,ch));}fclose(rf);fclose(wf);}標準答案:intflun(char*ss,charc){inti=0:for(;*ss!=’\0’;ss++)if(*ss==c)i++;/*求出ss所指字符串中指定字符的個數*/returni:}。知識點解析:本題考查:for循環(huán)語句遍歷字符串,并通過if條件語句,判斷字符串是否結束。從字符串中查找指定字符,需要使用循環(huán)判斷結構,循環(huán)語句用來遍歷字符串,循環(huán)條件為字符串沒有結束,即當前字符不是‘\0’,判斷語句用來判斷當前字符是否為指定字符。最后返回指定字符的個數。國家二級(C語言)機試模擬試卷第3套一、選擇題(本題共40題,每題1.0分,共40分。)1、程序流程圖中帶有箭頭的線段表示的是()。A、圖元關系B、數據流C、控制流D、調用關系標準答案:C知識點解析:在數據流圖中,用標有名字的箭頭表示數據流。在程序流程圖中,用標有名字的箭頭表示控制流。所以選擇C。2、結構化程序設計的基本原則不包括()。A、多態(tài)性B、自頂向下C、模塊化D、逐步求精標準答案:A知識點解析:結構化程序設計的思想包括:自頂向下、逐步求精、模塊化、限制使用goto語句,所以選擇A。3、軟件設計中模塊劃分應遵循的準則是()。A、低內聚低耦合B、高內聚低耦合C、低內聚高耦合D、高內聚高耦合標準答案:B知識點解析:軟件設計中模塊劃分應遵循的準則是高內聚低偶合、模塊大小規(guī)模適當、模塊的依賴關系適當等。模塊的劃分應遵循一定的要求,以保證模塊劃分合理,并進一步保證以此為依據開發(fā)出的軟件系統(tǒng)可靠性強,易于理解和維護。模塊之間的耦合應盡可能的低,模塊的內聚度應盡可能的高。4、在軟件開發(fā)中,需求分析階段產生的主要文檔是()。A、可行性分析報告B、軟件需求規(guī)格說明書C、概要設計說明書D、集成測試計劃標準答案:B知識點解析:A錯誤,可行性分析階段產生可行性分析報告。C錯誤,概要設計說明書是總體設計階段產生的文檔。D錯誤,集成測試計劃是在概要設計階段編寫的文檔。B正確,需求規(guī)格說明書是后續(xù)工作如設計、編碼等需要的重要參考文檔。5、算法的有窮性是指()。A、算法程序的運行時間是有限的B、算法程序所處理的數據量是有限的C、算法程序的長度是有限的D、算法只能被有限的用戶使用標準答案:A知識點解析:算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算后即可完成。有窮性是指算法程序的運行時間是有限的。6、對長度為n的線性表排序,在最壞情況下,比較次數不是n(n一1)/2的排序方法是()。A、快速排序B、冒泡排序C、直接插入排序D、堆排序標準答案:D知識點解析:除了堆排序算法的比較次數是O(nlog2n),其他的都是n(n—1)/2。7、下列關于棧的敘述正確的是()。A、棧按“先進先出”組織數據B、棧按“先進后出”組織數據C、只能在棧底插入數據D、不能刪除數據標準答案:B知識點解析:棧是按“先進后出”的原則組織數據的,數據的插入和刪除都在棧頂進行操作。8、在數據庫設計中,將E-R圖轉換成關系數據模型的過程屬于()。A、需求分析階段B、概念設計階段C、邏輯設計階段D、物理設計階段標準答案:C知識點解析:E—R圖轉換成關系模型數據則是把圖形分析出來的聯(lián)系反映到數據庫中,即設計出表,所以屬于邏輯設計階段。9、有三個關系R、S和T如下:由關系R和S通過運算得到關系T,則所使用的運算為()。A、并B、自然連接C、笛卡爾積D、交標準答案:D知識點解析:自然連接是一種特殊的等值連接,它要求兩個關系中進行比較的分量必須是相同的屬性組,并且在結果中把重復的屬性列去掉,所以B錯誤。笛卡爾積是用R集合中元素為第一元素,s集合中元素為第二元素構成的有序對,所以C錯誤。根據關系T可以很明顯地看出是從關系R與關系s中取得相同的關系組所以取得是交運算,選擇D。10、設有表示學生選課的三張表,學生S(學號,姓名,性別,年齡,身份證號),課程C(課號,課名),選課SC(學號,課號,成績),則表SC的關鍵字(鍵或碼)為()。A、課號,成績B、學號,成績C、學號,課號D、學號,姓名,成績標準答案:C知識點解析:學號是學生表s的主鍵,課號是課程表c的主鍵,所以選課表SC的關鍵字就應該是與前兩個表能夠直接聯(lián)系且能唯一定義的學號和課號,所以選擇C。11、以下敘述中錯誤的是()。A、C語言中的每條可執(zhí)行語句和非執(zhí)行語句最終都將被轉換成二進制的機器指令B、C程序經過編譯、連接步驟之后才能形成一個真正可執(zhí)行的二進制機器指令文件C、用C語言編寫的程序稱為源程序,它以ASCII代碼形式存放在一個文本文件中D、C語言源程序經編譯后生成后綴為.obj的目標程序標準答案:A知識點解析:C語言中的非執(zhí)行語句不會被編譯,不會生成二進制的機器指令,所以A錯誤。由C語言構成的指令序列稱C源程序,C源程序經過C語言編譯程序編譯之后生成一個后綴為,OBJ的二進制文件(稱為目標文件);最后要由“連接程序”把此.OBJ文件與C語言提供的各種庫函數連接起來生成一個后綴為,EXE的可執(zhí)行文件。12、以下選項中,合法的一組C語言數值常量是()。A、12.0Xa234.5e0B、028.5e一3-Oxf。C、.1774e1.50abeD、0x8A10.0003.e5標準答案:A知識點解析:C語言中八進制整型常量的開頭是數字0,十六進制整型常量的數字開頭是0x。C語言中的實型常量有兩種表示形式:小數形式,小數形式表示的實型常量必須要有小數點;指數形式,以“e”或“E”后跟一個整數來表示以10為底數的冪數,且規(guī)定字母e或E之前必須要有數字,且e或E后面的指數必須為整數。B選項中028錯誤,八進制中沒有數字8。C選項中4e1.5中e后面的指數不是整數。D選項中3.e5小數點后面缺少數字。13、以下選項中不合法的標識符是()。A、&aB、FORC、13rintD、_00標準答案:A知識點解析:C語言中標識符由字母、下劃線、數字組成,且開頭必須是字母或下劃線。另外,關鍵字不能作為標識符。因為C語言中區(qū)分大小寫,所以B選項中的“FOR”可以作為標識符來用。A選項中含有非法字符&,所以選擇A。14、若有代數式(其中e僅代表自然對數的底數,不是變量),則以下能夠正確表示該代數式的C語言表達式是()。A、sqrt(fabs(pow(n,x)+exp(x)))B、sqrt(fabs(pow(n,x)+pow(x,e)))C、sqrt(abs(n^x+e^x))D、sqrt(fabs(pow(x,n)+exp(x)))標準答案:A知識點解析:B選項中函數pow(x,e)錯誤應該直接使用exp(x)函數。C選項中函數abs(n^x+e^x)錯誤,應該使用fabs()返回浮點數的絕對值。D選項中pow(x,n)參數順序錯誤。15、若有定義:d

溫馨提示

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

評論

0/150

提交評論