版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
國家二級(C語言)機試模擬試卷9(共9套)(共262題)國家二級(C語言)機試模擬試卷第1套一、選擇題(本題共39題,每題1.0分,共39分。)1、下面關于數據庫三級模式結構的敘述中,正確的是()。A、內模式可以有多個,外模式和模式只有一個B、外模式可以有多個,內模式和模式只有一個C、內模式只有一個,模式和外模式可以有多個D、模式只有一個,外模式和內模式可以有多個標準答案:B知識點解析:數據庫的三級模式結構是指數據庫系統(tǒng)的外模式、模式和內模式。一個數據庫可以有多個外模式,但只有一個模式和一個內模式。2、有以下程序:#include<stdio.h>main(){intx=1,y=0,a=0,b=0;switch(x){ease1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf("a=%d,b=%d\n",a,b);}程序運行后的輸出結果是()。A、a=2,b=2B、a=2,b=1C、a=1,b=1D、a=1,b=0標準答案:B知識點解析:case常量表達式只是起語句標號作用,并不是該處進行條件判斷。在執(zhí)行switch語句時,根據switch的表達式,找到與之匹配的case語句,就從此case子句執(zhí)行下去。不在進行判斷,直到碰到break或函數結束為止。所以執(zhí)行內層switch(y)時只執(zhí)行了a++,此時a的值為1。然后執(zhí)行外層case2語句的a++;b++;a為2,b為1。所以結果為B。3、定義如下變量和數組: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]);A、159B、147C、357D、369標準答案:C知識點解析:本題主要考查二維數組的使用。題中利用for循環(huán)來輸出x數組中的指定元素:①當i=0時,輸出x[0][2]=3;②當i=1時,輸出x[1][1]=5;③當i=2時,輸出x[2][0]=7。4、下列數據結構中,能夠按照“先進后出”原則存取數據的是()。A、循環(huán)隊列B、棧C、隊列D、二叉樹標準答案:B知識點解析:棧是按“先進后出”的原則組織數據的。隊列是按“先進先出”的原則組織數據的。5、下面程序的運行結果是()。#includemain(){inti;for(i=1;i<=5;i++){if(i%2)printf("*");elseprintf("#");}}A、*#*#*B、#*#*#*C、*#*#D、#*#*標準答案:A知識點解析:分析程序可知,程序循環(huán)5次,然后利用if語句決定每次循環(huán)時輸出的字符。當i為奇數時,i%2=1,if(i%2)為真,輸出“*”:當i為偶數時,i%2=0,if(i%2)為假,執(zhí)行else語句,輸出“#”,所以當i取1、3、5值時輸出“*”,當i取2、4值時輸出“#”。6、設已有定義:floatx;,則以下對指針變量P進行定義且賦初值的語句中正確的是()。A、int*p=(float)x;B、float*p=&x;C、floatp=&x;D、float*p=1024;標準答案:B知識點解析:指針是用來存放地址的變量,用(類型名*指針變量名)的形式定義。賦值時應將某個變量地址即&x賦給指針變量,所以選擇B。7、執(zhí)行以下語句段后,xv的值是()。int*pt,xy;xy=200;pt=&xy;xy=*pt+30;A、200B、170C、260D、230標準答案:D知識點解析:本題考查指針的運用。通過pt=&xy,將pt指向xy所占的內存地址,而*pt是指針pt所指向內存單元中的內容,即200,所以最后xy的值為230。8、已知函數的調用形式:fread(buffer,size,count,fp);其中buffer代表的是()。A、一個整型變量,代表要讀入的數據項總數B、一個文件指針,指向要讀的文件C、一個指針,是指向的輸入數據放在內存中的起始位置D、一個存儲區(qū),存放要讀的數據項標準答案:C知識點解析:數據塊輸入/輸出函數的調用形式為:fread(bufrer,size,count,fp)。fread函數參數說明:“buffer”是一個指針,對fread來說,它是讀入數據的存放地址:“size”是要讀寫的字節(jié)數:“count”是要進行讀寫多少個size字節(jié)的數據項;“fp”是指文件型指針。9、數據獨立性是數據庫技術的重要特點之一。所謂數據獨立性是指()。A、數據與程序獨立存放B、不同的數據被存放在不同的文件中C、不同的數據只能被對應的應用程序所使用D、以上三種說法都不對標準答案:D知識點解析:數據獨立性是數據與程序間的互不依賴性,即數據庫中數據獨立于應用程序而不依賴于應用程序。所以選項A),選項B)和選項C)都不正確。10、算法的空間復雜度是指()。A、算法在執(zhí)行過程中所需要的計算機存儲空間B、算法所處理的數據量C、算法程序中的語句或指令條數D、算法在執(zhí)行過程中所需要的臨時工作單元數標準答案:A知識點解析:算法的空間復雜度是指算法在執(zhí)行過程中所需要的內存空間,因此本題答案為A。11、對序線性表(23,29,34,55,60,70,78)用二分法查找值為60的元素時,需要比較次數為()。A、1B、2C、3D、4標準答案:C知識點解析:根據二分法查找法需要兩次:①首先將60與表中間的元素55進行比較,由于60大于55,所以在線性表的后半部分查找。②第二次比較的元素是后半部分的中間元素,將60與表中間的元素70進行比較,由于60小于70,所以在線性表的前半部分查找。③第三次比較的元素是前半部分的中間元素,即60,這時兩者相等,即查找成功。12、下列描述中,正確的是()。A、線性鏈表是線性表的鏈式存儲結構B、棧與隊列是非線性結構C、雙向鏈表是非線性結構D、只有根結點的二叉樹是線性結構標準答案:A知識點解析:根據數據結構中各數據元素之間前后關系的復雜程度,一般將數據結構分為兩大類型:線性結構與非線性結構。如果一個非空的數據結構滿足下列兩個條件:①有且只有一個根結點;②每個結點最多有一個前件,也最多有一個后件。則稱該數據結構為線性結構,又稱線性表。所以線性表、棧與隊列、線性鏈表都是線性結構,而二叉樹是非線性結構。13、以下敘述中正確的是()。A、C語言規(guī)定必須用main作為主函數名,程序將從此開始執(zhí)行B、可以在程序中由用戶指定任意一個函數作為主函數,程序將從此開始執(zhí)行C、C語言程序將從源程序中第一個函數開始執(zhí)行D、main的各種大小寫拼寫形式都可以作為主函數名,如MAIN,Main等標準答案:A知識點解析:C語言中的主函數只能是main()函數,不能任意指定,所以B選項錯誤。C語言從主函數main()開始,到主函數main()結束,所以C選項錯誤。主函數必須寫成小寫的main,不能混淆大小寫,所以D選項錯誤。14、若有以下程序:#includecharf(charx){returnx*x+’a’;}main(){chara,b=0;for(a=0;a<4;a+=1){b=fa;putcharb;}}則程序的輸出結果是()。A、abcdB、ABEJC、abejD、ABCD標準答案:C知識點解析:該題目首先初始化變量a和b,通過for循環(huán)語句使a取值為0、1、2、3,f函數的功能是將a*a+’a’的值返回給b,即b為a、b、e、j。最后通過字符輸出函數putchar()將b輸出。因此c選項正確。15、下列選項中屬于面向對象設計方法主要特征的是()。A、繼承B、自頂向下C、模塊化D、逐步求精標準答案:A知識點解析:面向對象基本方法的基本概念有對象、類和實例、消息、繼承與多態(tài)性,所以選擇A、16、以下對C語言中聯(lián)合類型數據的正確敘述是()。A、定義了聯(lián)合變量后,即可引用該變量或該變量中的任意成員B、一個聯(lián)合變量中可以同時存放其所有成員C、聯(lián)合中的各個成員使用共同的存儲區(qū)域D、在向聯(lián)合中的一個成員進行賦值時,聯(lián)合中其他成員的值不會改變標準答案:C知識點解析:聯(lián)合體的幾個特點:①聯(lián)合體所占用的內存空間為最長的成員所占用的空間;②各個成員分量全部是從低地址方向開始使用內存單元;③聯(lián)合體中的空間在某一時刻只能保存某一個成員的數據;④聯(lián)合體和結構體可以任意嵌套。17、下面描述中,不屬于軟件危機表現的是()。A、軟件過程不規(guī)范B、軟件開發(fā)生產率低C、軟件質量難以控制D、軟件成本不斷提高標準答案:A知識點解析:軟件危機主要表現在:軟件需求的增長得不到滿足;軟件開發(fā)成本和進度無法控制;軟件質量難以保證;軟件不可維護或維護程度非常低;軟件的成本不斷提高;軟件開發(fā)生產率的提高趕不上硬件的發(fā)展和應用需求的增長。所以選擇A。18、以下能正確輸出字符a的語句是()。A、printf("%s","a");B、printf("%s",’a’);C、printf("%c","a");D、printf("%d",’a’);標準答案:A知識點解析:暫無解析19、負責數據庫中查詢操作的數據庫語言是()。A、數據定義語言B、數據管理語言C、數據操縱語言D、數據控制語言標準答案:C知識點解析:數據定義語言:負責數據的模式定義與數據的物理存取構建;數據操縱語言:負責數據的操縱,包括查詢及增、刪、改等操作;數據控制語言:負責數據完整性、安全性的定義與檢查以及并發(fā)控制、故障恢復等功能。20、下列關于棧的敘述正確的是()。A、棧按"先進先出"組織數據B、棧按"先進后出"組織數據C、只能在棧底插入數據D、不能刪除數據標準答案:B知識點解析:棧是按照"先進后出"的原則組織數據的,只能在棧頂插入或刪除數據,所以選擇B)。21、有以下程序:#includeintfun-.(inta,intb){returna+b;}intfunt,(inta,intb){returna-b;}intsss(int(*t)(),intx,inty){return((*t)(x,y));}main(){intx;x=sss(funa,9,3);x+=858(funb,8,3);printf("%d\n",x);}程序運行后的輸出結果是()。A、24B、23C、17D、22標準答案:C知識點解析:本題主要考查函數作為形參時的使用。由x=sss(funa,9,3);可得到x=9+3=12,而后直接傳人函數funb,x=x+8-3=12+5=17。因此C選項正確。22、已定義以下函數:intfun(int*p){return*p;}fun函數的返回值是()。A、一個整數B、不確定的值C、形參P中存放的值D、形參P的地址值標準答案:A知識點解析:返回值為指針變量指向的數據,該數據已被定義為整型。因此A選項正確。23、設有宏定義:#defineIsDIV(k,n)((k%n==1)?1:0)且變量m已正確定義并賦值,則宏調用:IsDIV(m,5)&&IsDIV(m,7)為真時所要表達的是()。A、判斷m是否能被5和7整除B、判斷m被5和7整除是否都余1C、判斷m被5或者7整除是否余1D、判斷m是否能被5或者7整除標準答案:B知識點解析:本題考查邏輯運算符的相關概念,邏輯與若要為真,那么兩邊都要為真,即m都能被5和7整除都余1,所以選項B正確。24、設有如下語句:typedefstructDate{intyear;intmonth;intday;}DATE;則以下敘述中錯誤的是()。A、DATE是用戶定義的結構體變量B、structDate是用戶定義的結構體類型C、DATE是用戶說明的新結構體類型名D、struct是結構體類型的關鍵字標準答案:A知識點解析:C語言允許用typedef說明一種新類型名,其一般形式如下:typedef類型名新類型名;,題目中定義了新類型Date,這種類型變量包含3個成員,DATE是這種新類型的名字。DATE是用戶說明的新結構體類型名,不是結構體變量,C項正確,A項錯誤。structDate是用戶定義的結構體類型,B項正確。struct是結構體類型的關鍵字,D項正確。25、若有以下程序#include<stdio.h>main(){chara[20],b[]="Theskyisblue.";inti;for(i=0;i<7;i++)scanf("%c",&b[i]);gets(a);printf("%s%s\n",a,b);}執(zhí)行時若輸入:(其中<Enter>表示回車符)Figflowerisred.<Enter>則輸出結果是A、werisred.Figfloisblue.B、werisred.FigfloC、werisred.Theskyisblue.D、Figflowerisred.Theskyisblue.標準答案:A知識點解析:程序首先初始化字符數組b[],執(zhí)行for循環(huán)語句,循環(huán)變量i的取值范圍從0到6?在for循環(huán)語句中通過scanf函數將從鍵盤上輸入的數據輸入到b[]中,即b的值為Figfloisblue.?退出for循環(huán)語句,執(zhí)行語句gets(a);,gets()函數的調用形式為:gets(str_adr),其中str_adr是存放輸入字符串的起始地址,可以是字符數組名?字符數組元素的地址或字符指針變量?gets函數用來從終端鍵盤讀入字符串(包括空格符),直到讀入一個換行符為止,即a的值為werisred.?因此A選項正確?26、在使用scanf(’’%2d%f’’,&a,&b);語句并從鍵盤輸入123456<回車>后,a和b的值分別是()。A、12和3.0B、123和456.0C、12和456.0D、12和3456.0標準答案:A知識點解析:scanf是嚴格執(zhí)照格式輸入的,2d指只輸入兩位數字,所以a=12,b=3,另外,題目中沒有%c格式用來輸入字符,所以空格將會被看作是分隔符(此處為結束符)。27、有以下程序#include<stdio.h>main(){inti=0;i=~i;printf("%d\n",i);}程序運行后的輸出結果是A、8B、0C、1D、-1標準答案:D知識點解析:本題考查位運算中按位取反,0按位取反就是-1,所以選項D正確。28、有三個關系R和S如下:則由關系R得到關系S的操作是A、選擇B、投影C、自然連接D、并標準答案:A知識點解析:由關系R到關系S為一元運算,排除C和D。關系S是關系R的一部分,是通過選擇之后的結果,因此選A。29、有以下程序:#includevoidfun(int*p,int*q);main(){intm=1,n=2,*r=&m;fun(r,&n);printf(’’%d,%d’’,m,n);}voidfun(int*P,int*q){P=p+1;*q=*q*5;}程序運行后的輸出結果是()。A、1,5B、1,10C、2,5D、2,10標準答案:B知識點解析:函數是地址傳遞,所以子函數中的變化會反映到主函數中的變量上,但要注意的是,在指針引用時必須在前面加上*,否則操作的是地址本身,而不是其指向的變量的值,因此p=p+1會將p指向下一個整型地址,*q=*q*5會操作n的值,m的值沒有變化,所以結果是1,10。30、下列隊列的描述中,正確的是()。A、隊列屬于非線性表B、隊列在隊尾刪除數據C、隊列按“先進后出”進行數據操作D、隊列按“先進先出”進行數據操作標準答案:D知識點解析:隊列是只允許在一端刪除,在另一端插入的順序表,允許刪除的一端叫做隊頭,允許插入的一端叫做隊尾。隊列的操作數是依據先進先出的原則進行的。因此隊列亦稱作先進先出的線性表,或后進后出的線性表。31、有如下程序#include<stdio.h>#include<string.h>structS{charname[10];};voidchange(structS*data,intvalue){strcpy(data->name,"****");value=13;}main(){structSinput;intnum=4;strcpy(,"THIS");change(&input,num);printf("%s,%d\n",,num);}程序運行后的輸出結果是A、****,4B、****,13C、THIS,4D、THIS,13標準答案:A知識點解析:程序執(zhí)行過程為:定義結構體變量input,調用strcpy(,"THIS"),使="THIS",調用函數change(&input,4),將結構體地址傳入函數,執(zhí)行函數體,調用strcpy(data->name,"****")使="****",而4是值傳遞,并沒有改變num的值。輸出結構體成員為:****,4,A選項正確。32、下面對軟件測試描述錯誤的是A、嚴格執(zhí)行測試計劃,排除測試的隨意性B、隨機地選取測試數據C、隨機地選取測試數據D、軟件測試是保證軟件質量的重要手段標準答案:B知識點解析:在測試之前制定測試計劃,并嚴格執(zhí)行,測試用例的選擇不可隨意,應選擇有代表性的,盡可能發(fā)現迄今為止尚未發(fā)現的錯誤,A選項敘述正確,B選項敘述錯誤。測試根本目的是盡可能多地發(fā)現并排除軟件中隱藏的錯誤,C選項敘述正確。軟件測試是保證軟件質量、可靠性的關鍵步驟,D選項敘述正確。故正確答案為B選項。33、有如下程序#include<stdio.h>structpair{intfirst,second;};structpairget_min_max(int*array,intlen){inti;structpairres;res.first=array[0];res.second=array[0];for(i=1;i<len;i++){if(array[i]<res.first)res.first=array[i];if(array[i]>res.second)res.second=array[i];}returnres;}main(){intarray[6]={19,21,3,4};structpairmin_max=get_min_max(array,6);printf("min=%d,max=%d\n",min_max.first,min_max.second);}程序運行后的輸出結果是A、min=0,max=6B、min=1,max=20C、min=1,max=19D、min=0,max=21標準答案:D知識點解析:本題首先在main函數定義一個數組array,然后定義了一個結構變量min_max,min_max使用函數get_min_max的返回值初始化,函數get_min_max的功能就是將數組中的最小值和最大值取出來后分別賦值給結構變量min_max中的first,second兩個整形變量,數組長度為6個單位,初始化4個數據,剩下2個默認為0,因此答案為D選項。34、以下選項中與(!a==0)的邏輯值不等價的表達式是A、(a==!0)B、aC、(a>0||a<0)D、(a!=0)標準答案:A知識點解析:!與==運算,!的優(yōu)先級高于==,即等價于(!a)==0。如果a0,則表達式為真,否則表達式為假,因此可以驗證選項,只有選項A不符合。故答案為A選項。35、若有定義:inta,b,c;以下程序段的輸出結果是a=11;b=3;c=0;printf("%d\n",c=(a/b,a%b));A、2B、0C、3D、1標準答案:A知識點解析:C語言中,逗號運算符可以把兩個以上(包含兩個)的表達式連接成一個表達式。逗號運算符的優(yōu)先級是所有運算符中級別最低的,逗號運算符保證左邊的子表達式運算結束后才進行右邊的子表達式的運算。也就是說,逗號運算符是一個序列點,其左邊所有副作用都結束后,才對其右邊的子表達式進行運算,并以最右邊表達式值作為整個逗號表達式的值。因此c的值為a%b即11%3=2,故答案為A選項。36、以下程序段中的變量已正確定義for(i=0;i<4;i++,i++)for(k=1;k<3;k++);printf("*");該程序段的輸出結果是A、*B、****C、**D、********標準答案:A知識點解析:C語言約定分號為一條語句的結束。因此for(i=0;i<4;i++,i++)for(k=1;k<3;k++);是完整的語句,對printf();沒有任何影響,最后printf("*"),執(zhí)行一次。因此答案為A選項37、以下敘述正確的是A、charc1,*c2,*c3[10];是合法的變量定義語句B、數組說明符的一對方括號中不能使用表達式C、數組元素下標可以是非整數D、若有定義chararray[4];則語句printf("%c",array["3"]);是合法的標準答案:A知識點解析:C語言規(guī)定定義數組時,數組的長度必須是整型常量,數組說明符的一對方括號中表達式只要是常量即合法,因此選項B錯誤。C語言規(guī)定,數組元素下標必須是非負整數,因此選項C錯誤。選項Dchararray[4]數組的長度為4,array["3"],其中"3"常量字符串,與C語言規(guī)定數組的下標必須是非負整數不符,故答案為A選項38、以下敘述中正確的是()。A、charcl,c2,*c3,c2[40];是合法的變量定義語句B、數組下標的下限由數組中第一個非零元素的位置決定C、數組下標的下限由數組中第一個彼賦值元素的位置決定D、數組下標的下限是標準答案:A知識點解析:A正確,charc1,c2,*c3,c4[40]表示定義了兩個字符變量cl、c2,一個字符指針c3,一個字符數組c4。數組的下限永遠為O,選項B、C、D錯,答案選A。39、有以下程序:#include<stdio.h>main(){intc=0,k:for(k=1;k<3;k++)switch(k){default:c+=k;case2:c++;break;case4:c+=2;break:}printf("%d\n",c);}程序運行后的輸出結果是()。A、3B、5C、7D、9標準答案:A知識點解析:本題中for語句的主體為一個switch語句,switch語句的判斷條件k==2時執(zhí)行“case2”,然后終止本層switch;否則執(zhí)行“default”語句,然后再執(zhí)行“case2”語句,并終止本層switch語句。所以當k==1時:c=0→1→2;當k==2時:c=2→3;當k==3時for循環(huán)結束。結果為3。二、程序填空題(本題共1題,每題1.0分,共1分。)40、給定程序中,函數fun的功能是將帶頭結點的單向鏈表逆置,即若原鏈表中從頭至尾結點數據域依次為2、4、6、8、10,逆置后,從頭至尾結點數據域依次為10、8、6、4、2。請在程序的下畫線處填入正確的內容并把下畫線刪除,使程序得出正確的結果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結構!試題程序:#include<stdio.h>#include<stdlib.h>#defineN5typedefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*P,*q,*r;/*********found*********/P=h->【1】;/*********found*********/if(p==【2】)return;q=P->next;P->next=NULL;while(q){r=q->next;q->next=p;/*********found*********/p=q;q=【3】;}h->next=P;}NODE*creatlist(inta[]){NODE*h,*P,*q;inti;h=(NODE*)malloc(sizeof(NODE));h->next=NULL;for(i=0;i<N;i++){q=(NODE*)malloc(sizeof(NODE));q->data=a[i];q->next=NULL;if(h->next==NULL)h->next=p=q;else{P->next=q;p=q;)}returnh;}voidoutlist(NODE*h){NODE*P;P=h->next;if(P==NULL)printf("ThelistisNULL!\n");else{printf("\nttead");do{printf("->%d",P->data);p=P->next;)while(P!=NULL);printf("->End\n");}}main(){NODE*head;inta[N]={2,4,6,8,10};head=creatlist(a);printf("\nTheoriginallist:\n");outlist(head);fun(head);printf("\nThelistafterinverting:\n");outlist(head);}標準答案:(1)next(2)NULL(3)r知識點解析:填空1:本空考查了為p賦初值,根據題目的要求是將帶頭結點的單向鏈表逆置可知,p的初值應該為h->next。填空2:if判斷語句表明當p等于什么時就要返回,因此只能當p等于NULL時返回,不用做后面的鏈表的逆置了。填空3:把q的指針向后移動,才能實現將帶頭結點的單向鏈表逆置。因此本空填寫r。三、程序修改題(本題共1題,每題1.0分,共1分。)41、下列給定程序中,函數fun的功能是:用下面的公式求π的近似值,直到最后一項的絕對值小于指定的數(參數num)為止。例如,程序運行后,輸入0.0001,則程序輸出3.1414。請改正程序中的錯誤,使它能得出正確的結果。注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!試題程序:#include<stdlib.h>#include<math.h>#include<stdio.h>floatfun(floatnum){ints;floatn,t,pi;t=1;pi=0;n=1;s=1;/*********found*********/while(t>=num){pi=pi+t;n=n+2;s=-s;/*********found*********/t=s%n;}pi=pi*4;returnpi;}voidmain(){floatn1,n2;system("CLS");printf("Enterafloatnumbet:");scanf("%f",&n1);n2=fun(n1);printf("%6.4f\n",n2);}標準答案:(1)while(fabs(t)>=num)(2)t=s/n;知識點解析:(1)函數fun中while語句的作用是,當新的一項大于給定參數時,循環(huán)累計計算s的值。題目要求最后一項的絕對值小于給定參數,因此循環(huán)條件應當是while(fabs(t)>=num)。(2)變量t用來存放最后一項的值,因為每一項均為1或一1除以一個數,所以此處應使用除法運算符“/”。四、程序設計題(本題共1題,每題1.0分,共1分。)42、編寫函數fun,其功能是:刪除一個字符串中指定下標的字符。其中,a指向原字符串,刪除指定字符后的字符串存放在b所指的數組中,n中存放指定的下標。例如,輸入一個字符串“World”,然后輸入3,則調用該函數后的結果為“Word”。注意:部分源程序給出如下。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。試題程序:#include<stdlib.h>#inclLlde<stdio.h>#include<conio.h>#defineLEN20voidfun(chara[],charb[],intr1){}voidmain(){charstr1[LEN],str2[LEN];intn;system("CLS");printf("Enterthestring:\n");gets(str1);printf("Enterthepositionofthestringdeleted:");scanf("%d",&n);fun(str1,str2,n);printf("Thenewstringis:%s、n",str2);}標準答案:voidfun(chara[],charb[],intn){inti,k=0;for(i=0;a[i]!=’\0’;i++)if(i!=n)/*將不是指定下標的字符存入數組b中*/b[k++]=a[i];b[k]=’\0’;/*在字符串最后加上結束標識*/}知識點解析:本題要求刪除字符串中指定下標的字符,即把非指定下標的字符保留,所以if語句條件表達式的內容是if(i!=n)。字符串最后不要忘記加上字符串結束標識’\0’。國家二級(C語言)機試模擬試卷第2套一、選擇題(本題共39題,每題1.0分,共39分。)1、以下程序段完全正確的是()。A、int*p;seanf("%d",&p);B、int*p;searrf("%d",P);C、intk,*p=&k;seanf("%d",p);D、intk,*p;*p=&k;seanf("%d",p);標準答案:C知識點解析:A選項中錯在沒有對指針進行初始化,是無效指針,并且在scanf("%d",&p)中無需再進行取地址操作;B選項中沒有對指針進行初始化,是無效指針;D選項中語句*p=&k;的左端*p是指針所指內存空間的值,&k是地址,應為p=&k。因此C選項正確。2、有以下程序:#includevoidfun(inta[],intn){inti,t;for(i=0;iA、321678B、876543C、1098765D、345678標準答案:A知識點解析:本題中的函數fun()的功能是將數組k中前5個元素倒序,所以返回后數組k中的元素排列是5,4,3,2,1,6,7,8,9,10。所以打印輸出k[2]到k[7]元素的值,即321678,所以選擇A。3、下面結構體的定義語句中,錯誤的是()。A、structord{intx;inty;intz;}struct》orda;B、structord{intx;inty;intz;};structorda;C、structord{intx;inty;intz;}a;D、struct{intx;inty;intz;}a;標準答案:A知識點解析:A選項structord{intx;inty;intz;}structorda;錯誤,不能在定義結構體的同時,又用結構體類型名定義變量。應該寫成B選項或者D選項的格式。4、以下選項中,能用作數據常量的是()。A、115LB、0118C、1.5e1.5D、0115標準答案:A知識點解析:A選項中115L表示115是長整型數據,合法。B選項是八進制常量的表示方法,但是在八進制中不能含有數字8,所以B錯誤。C選項中e后面應該是整數不能是小數1.5,所以C錯誤。D選項中八進制常量應該是數字“0”開始,而不是字母“o”開始。5、若i、j已定義成int型,則以下程序段中內循環(huán)體的總執(zhí)行次數是()。for(i=6;i>0;i--)for(j=0.j<4.j++){…}A、20B、24C、25D、30標準答案:B知識點解析:本題考查的是嵌套for循環(huán)執(zhí)行次數。對于外層i的循環(huán)中任何一個i,內層i的循環(huán)中的j都要從0變化到3,i=4時退出循環(huán);然后外層i循環(huán)的i減少1,內層循環(huán)的j仍要從0變化到3,j=4時退出循環(huán)……直到外層i循環(huán)的i變?yōu)?,退出i循環(huán)。所以執(zhí)行多重循環(huán)時,對外層循環(huán)變量的每一個值,內層循環(huán)的循環(huán)變量都要從初始值變化到終值。對外層循環(huán)的每一次循環(huán),內層循環(huán)要執(zhí)行完整的循環(huán)語句。外層for語句執(zhí)行6次,內層for語句執(zhí)行4次,所以內循環(huán)體執(zhí)行6*4=24次。6、若要求從鍵盤讀入含有空格字符的字符串,應使用函數()。A、getc()B、gets()C、getchar()D、scanf()標準答案:B知識點解析:scarlf()語句中用“空格”間隔不同的字符串,空格將被全部忽略掉,所以用scanf()函數不能輸入空格;getchavO函數用于輸入字符,其調用形式為:ch=getehar(),getchar()函數從終端讀入一個字符作為函數值,把讀入的字符賦給變量ch。在輸入時,空格、回車符都將作為字符讀入,而且只有在用戶敲入Enter鍵時,讀入才開始執(zhí)行。gets()函數的調用形式為:gets(str_adr),其中str_adr是存放輸入字符串的起始地址,可以是字符數組名、字符數組元素的地址或字符指針變量。gets函數用來從終端鍵盤讀入字符串(包括空格符),直到讀入一個換行符為止。getc()函數的調用形式為:ch=getc(pf)其中pf是文件指針。函數的功能是從pf指定的文件中讀入一個字符,并把它作為函數值返回。7、有三個關系R、S和T如下:則由關系R和S得到關系T的操作是()。A、選擇B、差C、交D、并標準答案:B知識點解析:關系T是關系R的一部分,并且將關系R去掉了R和S相同的元素,符合差操作。8、在結構化方法中,用數據流程圖(DFD)作為描述工具的軟件開發(fā)階段是()。A、邏輯設計B、需求分析C、詳細設計D、物理設計標準答案:B知識點解析:軟件開發(fā)階段包括需求分析、總體設計、詳細設計、編碼和測試五個階段。其中需求分析階段常用的工具是數據流圖和數據字典。9、若有定義語句:intyear=2009,*p=&year;以下不能使變量year中的值增至2010的語句是()。A、(*P)++;B、*P++;C、++(*P);D、*P+=1;標準答案:B知識點解析:由于自加運算符++的運算級別高于間接運算*的運算級別,所以B選項的表達式*p++不能使變量year中的值增至2010。因此B選項正確。10、有以下程序#include<stdio.h>main(){intk=5;while(--k)printf("%d",k-=3);printf("\n");}執(zhí)行后的輸出結果是A、1B、2C、4D、死循環(huán)標準答案:A知識點解析:暫無解析11、執(zhí)行以下程序段后,w的值為()。intw=’A’,x=14,y=15;w=((x||y)&&(w<’a’));A、.1B、NULLC、1D、0標準答案:C知識點解析:字符變量w的初值為字符’A’,其ASCII碼值為65,字符’a’的ASCII碼值為97,所以關系表達式w<’a’的值為1;變量x=14,變量y=15,x||y為或,x、y均為真,所以x||y的結果1。因而邏輯表達式(x1ly)&&(w<’a’)的值為1。12、下面敘述中錯誤的是()。A、軟件測試的目的是發(fā)現錯誤并改正錯誤B、對被調試的程序進行“錯誤定位”是程序調試的必要步驟C、程序調試通常也稱為DebugD、軟件測試應嚴格執(zhí)行測試計劃,排除測試的隨意性標準答案:A知識點解析:軟件測試是為了發(fā)現軟件中的錯誤,開發(fā)出高質量的完全符合用戶需要的軟件。13、在下列選項中,沒有構成死循環(huán)的程序段是()。A、inti=100;for(;;){i=i%10+1;B、while(1);if(i>10)break;}C、intk=0;do{++k;}while(k<=10);D、ints=12;while(s);--s;標準答案:C知識點解析:本題考查死循環(huán)的知識。選項A)中,for。循環(huán)沒有任何控制語句就會一直執(zhí)行下去,所以不可能通過控制表達式的值結束循環(huán)。循環(huán)體內,i=i%10+l這個表達式的值永遠不會大于10,所以永遠不會跳出循環(huán),是死循環(huán):選項B)中,while中表達式永遠是非O,不會結束循環(huán);選項C)中,當k>10時,結束循環(huán):選項D)中,while(s);后面沒有任何表達式而是直接加了一個分號,會一直執(zhí)行,形成死循環(huán)。14、有以下程序:#inc1ude#defineN8voidfun(int*x,inti){*x=*(x+i)+1;}main(){inta[N]={1,2,3,4,5,6,7,8),i;fun(a,2);for(i=0;iA、1313B、3234C、4234D、1234標準答案:C知識點解析:函數“fun(int*x,inti)”的功能是把數組元素x[i]的值加1賦給x[0]。所以在主函數中執(zhí)行fun(a,2)后,數組元數a[0]的值等于4。然后在for循環(huán)語句中,輸出數組a中的前4個元素的值,分別是4、2、3、4。15、以下選項中,合法的是()。A、charstr3[]={’d’,’e’,’b’,’u’,’g’,’0’};B、charstr4;str4="helloworld";C、charname[10];name=’china";D、charstd[5]="pass",str2[6];str2=std;標準答案:A知識點解析:選項B不能把一個字符串賦值給一個字符變量,選項C和D犯了同樣的錯誤是把字符串賦給了數組名。16、若有定義語句:chars[10]="1234567\0\0";,則strlen(s)的值是()。A、7B、8C、9D、10標準答案:A知識點解析:C語言規(guī)定以字符’\0’作為字符串結束的標識符。strlen函數返回的是字符串的長度,不包含字符’\0’,所以值是7。17、以下選項中正確的語句組是()。A、chars[];s="HELLO!";B、char*s;s={"HELLO!"};C、chars[10];s=:"HELLO!";D、char*s;s="HELLO!";標準答案:D知識點解析:本題考查數組和字符串的賦值。選項A)中數組s沒有明確其大小就賦值是錯誤的。選項B)中不能有大括號,選項C)中的寫法應該為{’H’’E’’L’’L’O’’!’}。18、以下程序段中,與語句: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選項。19、設fp為指向某二進制文件的指針,且已讀到此文件末尾,則函數feof(fp)的返回值為()。A、0B、‘\0’C、非0值D、NULL標準答案:C知識點解析:本題考查文件的定位,feof函數的用法是從輸入流讀取數據,如果到達文件末尾(遇文件結束符),eof函數值為非零值,否則為0,所以選項C正確。20、有以下程序段inti,n;for(i=0;i<8;i++){n=rand()%5;switch(n){case1:case3:printf("%d\n",n);break;case2:case4:printf("%d\n",n);continue;case0:exit(0);}printf("%d\n",n);}以下關于程序段執(zhí)行情況的敘述,正確的是A、for循環(huán)語句固定執(zhí)行8次B、當產生的隨機數n為4時結束循環(huán)操作C、當產生的隨機數n為1和2時不做任何操作D、當產生的隨機數n為0時結束程序運行標準答案:D知識點解析:當產生的隨機數為4時,對5取余結果為4,執(zhí)行case4后面語句,見到continue結束本次循環(huán),而非結束程序運行,所以B選項錯誤,當產生的隨機數為1時,執(zhí)行case1后面的所有語句,直到遇到break語句跳出switch結構;當隨機數為2時,執(zhí)行case2后面的所有語句,直到遇到continue語句跳出本次循環(huán),所以C選項錯誤,由于循環(huán)體中含有exit(0)語句,該語句的功能是終止程序的執(zhí)行,所以不是固定執(zhí)行8次,A選項錯誤。21、有以下程序#include<stdio.h>intfun(chars[]){intn=0;while(*s<=’9’&&*s>=’0’){n=10*n+*s-’0’;s++;}return(n);}main(){chars[10]={’6’,’1’,’*’,’4’,’*’,’9’,’*’,’0’,’*’};printf("%d\n",fun(s));}程序的運行結果是A、5B、9C、61D、61490標準答案:C知識點解析:在fun函數中,while循環(huán)的功能是:逐個取字符數組s的字符判斷其是否是數字。若是則將其作為個位數字保存到變量n中,n的原數據的各個數位將相應左移一個10進制位。當指針s指向數組的第3位時,循環(huán)條件不成立,循環(huán)結束,返回n的值,輸出n的值為61。因此C選項正確。22、有以下程序:#includemain(){intc,d;c=(13>>1)|1;d=(13>1)||1;printf("%d,%d\n",c,d);}程序運行后的輸出結果是()。A、6,1B、1,1C、7,1D、7,2標準答案:C知識點解析:表達式c=(13>>1)|1中,>>是右移符號,數字13換算成二進制后右移1位,再和1進行按位或運算,結果為7;表達式d=(13>1)||1中,首先判斷13是否大于1,此時條件成立返回1后,再和1進行或運算,結果為1。23、下面結構體的定義語句中,錯誤的是()。A、struetord{intx;inty;intz;}struetorda;B、structord{intx;intY;intz;};struetorda;C、struetord{intx;intY;intz;}a;D、struct{intx;inty;intz;}a;標準答案:A知識點解析:A選項錯誤,不能在定義結構體的同時,又用結構體類型名定義變量。B、C、D選項是定義結構體類型變量的三種形式:B選項是先定義結構體類型,再定義結構體類型變量。C選項是直接定義結構體類型變量。D選項是在定義結構體類型的同時定義結構體類型變量。24、若想定義int型變量a,b,c,d并都賦值為1,以下寫法中錯誤的是()。A、inta=b=c=d=1;B、inta=1,b=1,c=1,d=1;C、inta,b,c,d;a=b=c=d=1;D、inta,b,c,d=1;a=b=c=d;標準答案:A知識點解析:C語言賦值運算符的結合方向是從右向左,使用的變量必須已經定義了,inta=b=c=d=1;本條語句首先執(zhí)行賦值運算d=1,由于b并未定義,故編譯不通過,提示沒有定義標識符b、c、d,故A選項錯誤。答案為A選項。25、若有以下程序#include<stdio.h>main(){inta=1,b=2,c=3,d=4;if((a=2)&&(b=1))c=2;if((c==3)||(d=-1))a=5;printf("%d,%d,%d,%d\n",a,b,c,d);}則程序的輸出結果是A、2,2,2,4B、2,1,2,-1C、5,1,2,-1D、1,2,3,4標準答案:C知識點解析:第一個if語句的判斷條件中是邏輯與表達式,只有運算對象均非零結果才為真,執(zhí)行第一個if判斷條件,均為賦值表達式,第一個運算對象a=2非零,判斷第二個表達式b=1也非零,所以條件成立執(zhí)行c=2的賦值操作,執(zhí)行第二個if判斷條件中的邏輯或表達式,只要有一個對象非零結果就是真,本條件中c==3運算對象為假,所以需要判斷第二個運算對象d=-1,結果為-1非零,所以條件成立,執(zhí)行a=5,的操作,所以a值為5,b值為1,c值為2,d值為-1。26、軟件的需求分析主要產生的文檔是()。A、可行性分析報告B、軟件需求規(guī)格說明書C、概要設計說明書D、集成測試計劃標準答案:B知識點解析:A錯誤,可行性分析階段產生可行性分析報告。C錯誤,概要設計說明書是總體設計階段產生的文檔。D錯誤,集成測試計劃是在概要設計階段編寫的文檔。B正確,需求規(guī)格說明書是后續(xù)工作如設計、編碼等需要的重要參考文檔。27、下列關于棧的敘述中,正確的是A、棧底元素一定是最后入棧的元素B、棧頂元素一定是最先入棧的元素C、棧操作遵循先進后出的原則D、以上說法均錯誤標準答案:C知識點解析:棧頂元素總是后被插入的元素,從而也是最先被刪除的元素;棧底元素總是最先被插入的元素,從而也是最后才能被刪除的元素。棧的修改是按后進先出的原則進行的。因此,棧稱為先進后出表,或"后進先出"表,所以選擇C。28、設x=021,y=012,則z=x|y的值是()。A、1B、0C、00011011D、1.1e+007標準答案:C知識點解析:本題主要考查按位或運算。按位或是對兩個運算對象相應的位進行邏輯或運算,其運算規(guī)則和邏輯或相同,兩個運算對象只要有一個是1,則結果為1。29、以下語句中存在語法錯誤的是()。A、charss[6][20];ss[1]=’’right?’’;B、charss[][20]={’’fight’’};C、char*ss[6];ss[1]=’’right?’’;D、char*ss[]={’’right?’’};標準答案:A知識點解析:此題考查字符數組的定義及賦值。字符串數組可以先定義再賦值,也可以在定義的同時賦值。30、有以下程序:#include#defineN4voidfun(inta[][N]int,b[]){inti;for(i=0;i<N;i++)b[i]=a[i][N一1一i]一a[i][i];}main(){intx[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},y[N],i;fun(x,y);for(i=0;i<N;i++)printf(’’%d,’’,y[i]);printf(’’\n’’);}程序運行后的輸出結果是()。A、一3,一1,1,3B、一12,一3,0,0C、3,1,一1,一3D、一3,一3,一3,一3標準答案:C知識點解析:仔細分析子函數的功能是以數組反對角線上的元素減去同行上對角線上的元素。31、關系數據庫管理系統(tǒng)能實現的專門關系運算包括()。A、排序、索引、統(tǒng)計B、選擇、投影、連接C、關聯(lián)、更新、排序D、顯示、打印、制表標準答案:B知識點解析:關系數據庫管理系統(tǒng)的專門關系運算包括選擇運算、投影運算和連接運算。32、若有以下定義,則對a數組元素地址的正確引用是()。inta[5],*p=a;A、p+5B、*a+1C、&a+D、&a[0]標準答案:D知識點解析:本題考查如何引用數組元素的地址。選項A中,p+5引用的是a[5]的地址,而數組a只有5個元素,即a[0]、a[1]、a[2]、a[3]、a[4],所以引用錯誤;選項B中,*a+1指的是將數組a的第一個元素加1;選項C中,這種引用方式錯誤;選項D中,&a[0]引用的是數組的首地址。33、若有定義語句:inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;,以下選項中錯誤引用a數組元素的是(其中0≤i<10)A、*(*(a+i))B、a[p-a]C、p[i]D、*(&a[i])標準答案:A知識點解析:*p=a,將數組a的首地址賦給指針p。a+i表示數組a中第i個元素的地址,引用其中元素為*(a+i),A選項引用錯誤。p-a=0,B選項引用的元素為a[0]。C選項中p[i]表示p后i個地址的元素a[i]。D選項中&a[i]取a[i]地址,*(&a[i])取這個地址內的元素,即為a[i]。本題選擇A選項。34、定義結構體數組structstu{intnum;charname[20];}x[5]={1,"ZHAO",2,"QIAN",3,"SUN",4,"LEE",5,"ZHOU"};for(i=1;i<5;i++)printf("%d%c",x[i].num,x[i].name[2]);程序執(zhí)行后的輸出結果是()。A、2A3N4E5OB、1H213U4EC、1A2N3E4OD、1A2N3E4O標準答案:A知識點解析:本題主要考查結構體數組。x[i].num是結構體x[i]中的num成員,x[i].name[2]是結構體x[il中name成員的第3個元素。第一次循環(huán),i=1,輸出x[1].num,x[1].name[2]的值,即2A;第二次循環(huán),i=2,輸出x[2].num,x[2].name[2]的值,即3N;第三次循環(huán),i=3,輸出x[3].num,x[3].name[2]的值,即4E;第四次循環(huán),i=4,輸出x[4].num,x[4].name[2]的值,即50。35、有以下說明語句char*s="\"Name\\Address\n";指針s所指字符串的長度是A、17B、15C、14D、說明語句不合法標準答案:C知識點解析:以"\"開頭的轉義字符也是字符常量。用一對雙引號括起來的多個字符為字符串。"\""\\""\n"為轉義字符,所以字符串長度為14,C選項正確。36、有以下程序#include<stdio.h>voidf(intx[],intn){if(n>1){printf("%d,",x[n-1]);f(x,n-1);printf("%d,",x[n-1]);}elseprintf("%d,",x[0]);}main(){intz[3]={1,2,3};f(z,3);printf("\n");}程序運行后的輸出結果是A、3,1,3,B、3,2,1,2,3,C、1,2,3,1,2,3,D、1,2,3,2,1,標準答案:B知識點解析:本題考查了函數的遞歸調用,在main函數中調用f(z,3)后,系統(tǒng)進入f()函數,隨后進入if語句,輸出x[2],再進入f()函數,輸出x[1],再進入f函數,輸出x[0],隨后結束返回輸出上一個f()函數,輸出x[n-1],程序運行后的結果是:3,2,1,2,3。答案為B選項。37、有如下程序段intk;for(k=2;k==0;)printf("%d",k--);則for循環(huán)體執(zhí)行的次數是A、0次B、1次C、2次D、無限次標準答案:A知識點解析:for(k=2;k==0;)表示給k賦值2,如果k等于0,則進入循環(huán),但是k不滿足條件,因此循環(huán)體不執(zhí)行。正確答案為A選項。38、醫(yī)生可以為病人開不同的藥,而同一種藥也可由不同醫(yī)生開給病人,則實體醫(yī)生和實體藥之間的聯(lián)系是A、多對多B、一對一C、多對一D、一對多標準答案:A知識點解析:實體集之間通過聯(lián)系來建立聯(lián)接關系分為三類:一對一聯(lián)系(1:1)、一對多聯(lián)系(1:m)、多對多聯(lián)系(m:n)。由于醫(yī)生可以為病人開不同的藥,而同一種藥也可由不同醫(yī)生開給病人,所以兩者的聯(lián)系屬于多對多。故選A選項39、算法的空間復雜度是指()。A、算法在執(zhí)行過程中所需要的計算機存儲空間B、算法所處理的數據量C、算法程序中的語句或指令條數D、算法在執(zhí)行過程中所需要的臨時工作單元數標準答案:A知識點解析:算法的空間復雜度是指算法在執(zhí)行過程中所需要的計算機存儲空間。通常用o()來表示。二、程序填空題(本題共1題,每題1.0分,共1分。)40、給定程序中,函數fun的功能是將a和b所指的兩個字符串轉換成面值相同的整數,并進行相加作為函數值返回,規(guī)定字符串中只含9個以下數字字符。例如,主函數中輸入字符串:32486和12345,在主函數中輸出的函數值為:4483l。請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結構!#include{}include#include#defiheN9longctod(char*s){longd=0;while(*s)if(isdigit(*s)){/**********found**********/d=d*10+*s—_____1_____;/**********found**********/_____2_____;}returnd;}longfun(char*a,char*b){/**********found**********/return_____3_____;}main(){chars1[N],s2[N];do{printf("Inputstrings1:");gets(s1);)while(strlen(s1)>N);do{printf("Inputstrings2:");gets(s2);}while(strlen(s2)>N);printf("Theresultis:%ld\n",fun(s1,s2));}標準答案:(1)’0’(2)s++(3)ctod(a)+ctod(b)知識點解析:第一空:舉例說明ctod內循環(huán)的作用,例如將字符串“123”轉換為數字時:第一次進入循環(huán)時,*s等于字符“1”,d應等于0*10+1,第一空處是將字符變成數字,字符“1”變成數字1可由字符“1”減去字符“0”得到,故第二空處應為“’0’”。;第二空:s是數組指針,在循環(huán)中s不斷往后移動直至到達數組結束,故第二空處應為“s++”。第三空:由審題分析可知,在fun函數內兩次調用ctod函數完成字符串到整數的變換,然后求和,故第三空處為“ctod(a)+ctod(b)”。三、程序修改題(本題共1題,每題1.0分,共1分。)41、以下給定程序中,函數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("請輸入一個整數:");scanf("%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分。)42、請編寫函數fun,其功能是:計算并輸出給定數組(長度為9)中每相鄰兩個元素的平均值的平方根之和。例如,若給定數組中的9個元素依次為12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0,11.0,則輸出應為S=35.951014。注意:請勿改主動函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。#include<stdio.h>#include<math.h>doublefun(doublex[9]){}main(){doubles,a[9]={12.0,34.0,4.0,23.0,34.0,45.0,18.0,3.0,11.0};inti;FILE*out;printf("\nTheoriginaldatais:");for(i=0;i<9;i++)printf("%6.1f",a[i]);printf("\n");s=fun(a):printf("s=%f\n",s);/************/out=fopen("out.dat","w");fprintf(out,"%f",s);fclose(out);/************/}標準答案:doublefun(doublex[9]){doublesum=0.0;inti,j=1;for(i=0;i<9;i++)if(j<=8){sum+=sqrt((x[i]+x[i+1])/2.0);/*相鄰兩個元素之平均值的平方根之和*/j++;}returnsum:}知識點解析:本題考查:for循環(huán);sqrt函數(平方根的計算);復合賦值運算。計算數組相鄰兩個元素的平均值,首先要取出數組中相鄰兩個元素,即x[i]和X[i+1]。本程序使用循環(huán)語句遍歷整個數組,在條件語句中計算相鄰兩個元素的平均值,并累加其平方根。國家二級(C語言)機試模擬試卷第3套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項目中包含一個源程序文件blank1.c。在此程序中,函數fun的功能是將不帶頭節(jié)點的單向鏈表逆置,即若原鏈表中從頭至尾節(jié)點數據域依次為2、4、6、8、10,逆置后,從頭至尾節(jié)點數據域依次為10、8、6、4、2。請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結構!試題程序:#include<stdio.h>#include<stdlib.h>#defineN5typedefstructnode{intdata;structnode*next;}NODE;/*********found*********/[1]*fun(NODE*h){NODE*p,*q,*r;p=h;if(P==NULL)returnNULL;q=p->next;P->next=NULL:while(q){/*********found*********/r=q->【2】;q->next=p;p=q;/*********found*********/q=【3】;}returnp;}NODE*creatlist(inta[]){NODE*h,*p,*q;inti;h=NULL;for(i=0;i<N;i++){q=(NODE*)malloc(sizeof(NODE));q->data=a[i];q->next=NULL;if(h==NULL)h=p=q;else{P->next=q;p=q,)}returnh;}voidoutlist;(NODE*h){NODE*p;p=h;if(p=NULL)printf("ThelistisNULL!\n");else{printf("\nHead");do{printf("->%d",p->data);p=p->next;}while(p!=NULL);printf("->End\n");}}main(){NODE*head;inta[N]={2,4,6,8,10};head=creatlist(a);printf("\nTheoriginallist:\n");outlist(head);head=fun(head);printf("\nThelistafterinverting:\n");outlist(head);}標準答案:(1)NODE(2)next(3)r知識點解析:填空1:本題考查了函數指針變量的函數返回值的類型,*fun(NODE*h)的返回值為p,而p的數據類型為NODE,因此本空應該填寫NODE。填空2:從此空的形式p->可知本空應該填寫next。填空3:本題要求將不帶頭節(jié)點的單向鏈表逆置,為了使q的指針向后移,此空應該填寫r。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中,函數fun的功能是:將s所指字符串中位于奇數位置的字符或ASCII碼值為偶數的字符依次放人t所指數組中。例如,字符串中的數據為“AABBCCDDEEFF”,則輸出應當是“ABBCDDEFF”。請改正程序中的錯誤,使它能得出正確的結果。注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!試題程序:#include<conio.h>#include<stdio.h>#include<string.h>#defineN80voidfun(char*s,chart[]){inti,j=0;for(i=0;i<(int)strlen(s);i++)/*********found*********/if(i%2&&s[i]%2==0)t[j++]=s[i];/*********found*********/t[i]=’\0’;}main(){chars[N],t[N];printf("\nPleaseentherstrings:");gets(s);fun(s,t),printf("nTheresultis:&s\n",t);}標準答案:(1)if(i%2||s[i]%2==0)或if(i%2!=0||s[i]%2==0)(2)t[j]=’\0’;或t[j]=0;知識點解析:(1)根據題意,將字符串s中位于奇數位置的字符或ASCII碼值為偶數的字符,依次放入字符串t中,所以if條件中要使用“或”運算。(2)變量j控制字符串t的下標,所以是t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024蘋果產業(yè)鏈金融風險防控合作協(xié)議3篇
- 2025年度林地林木種植與生態(tài)修復合同2篇
- 2024食堂食材的采購合同協(xié)議
- 2025賓館客房銷售數據共享與處理合同模板3篇
- 2025年度特色美食研發(fā)與酒店合作合同3篇
- 2025年度豬欄工程總承包及生態(tài)環(huán)保合同4篇
- 2025年度智能家居與安防系統(tǒng)一體化合同2篇
- 2025年4-甲基咪唑項目可行性研究報告
- 2025個人收藏品交易合同參考樣本4篇
- PEP小學六年級英語上冊選詞填空專題訓練
- 古建筑修繕項目施工規(guī)程(試行)
- GA 844-2018防砸透明材料
- 化學元素周期表記憶與讀音 元素周期表口訣順口溜
- 非人力資源經理的人力資源管理培訓(新版)課件
- MSDS物質安全技術資料-201膠水
- 鉬氧化物還原過程中的物相轉變規(guī)律及其動力學機理研究
- (完整word)2019注冊消防工程師繼續(xù)教育三科試習題及答案
- 《調試件現場管理制度》
- 社區(qū)治理現代化課件
- 代持房屋協(xié)議書
評論
0/150
提交評論