國家三級(數(shù)據(jù)庫技術(shù))機試模擬試卷2(共9題)_第1頁
國家三級(數(shù)據(jù)庫技術(shù))機試模擬試卷2(共9題)_第2頁
國家三級(數(shù)據(jù)庫技術(shù))機試模擬試卷2(共9題)_第3頁
國家三級(數(shù)據(jù)庫技術(shù))機試模擬試卷2(共9題)_第4頁
國家三級(數(shù)據(jù)庫技術(shù))機試模擬試卷2(共9題)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

國家三級(數(shù)據(jù)庫技術(shù))機試模擬試卷2(共9套)(共9題)國家三級(數(shù)據(jù)庫技術(shù))機試模擬試卷第1套一、程序設(shè)計題(本題共1題,每題1.0分,共1分。)1、已知在文件IN1.DAT中存有100個產(chǎn)品銷售記錄,每個產(chǎn)品銷售記錄由產(chǎn)品代碼dm(字符型4位)、產(chǎn)品名稱mc(字符型10位)、單價dj(整型)、數(shù)量sl(整型)、金額je(長整型)五部分組成。其中:金額=單價×數(shù)量。函數(shù)ReadDat()的功能是讀取這100個銷售記錄并存入結(jié)構(gòu)數(shù)組sell中。請編制函數(shù)SortDat(),其功能要求:按產(chǎn)品名稱從小到大進行排列,若產(chǎn)品名稱相同,則按金額從小到大進行排列,最終排列結(jié)果仍存入結(jié)構(gòu)數(shù)組sell中,最后調(diào)用函數(shù)WriteDat()把結(jié)果輸出到文件OUT1.DAT中。注意:部分源程序已給出。請勿改動主函數(shù)main()、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。【試題程序】#include<stdio.h>#include<memory.h>#include<string.h>#include<conio.h>#include<stdlib.h>#defineMAX100typedefstruct{chardm[5];/*產(chǎn)品代碼*/charmc[11];/*產(chǎn)品名稱*/intdj;/*單價*/intsl;/*數(shù)量*/longje;/*金額*/}PRO;PROsell[MAX];voidReadDat();voidWriteDat();voidSortDat(){}main(){memset(sell,0,sizeof(sell));ReadDat();SortDat();WriteDat();}voidReadDat({FILE*fp;charstr[80],ch[11];inti;fp=fopen("IN1.DAT","r");for(i=,0;i<100;i++){fgets(str,80,fp);memcpy(sell[i].dm,str,4);memcpy(sell[i].mc,str+4,10);memcpy(ch,str+14,4);ch[4]=0;sell[i].dj=atoi(ch);memcpy(ch,str+18,5);ch[5]=0;sell[i].sl=atoi(ch);sell[i].je=(long)sell[i].dj*sell[i].sl;}fclose(fp);}voidWriteDat(){FILE*fp;inti;fp=fopen("OUT1.DAT","w");for(i=0;i<100;i++)fprintf(fp,"%s%s%4d%5d%101d\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);fclose(fp);}標準答案:voidSortDat(){inti,j;PROxy;for(i=0;i<99;i++)for(j=i+1;j<100;j++){if(sell[i].mc>sell[j].mc)/*按產(chǎn)品名稱從小到大進行排列*/{xy=sell[i];sell[i]=sell[j];sell[j]=xy;}elseif((sell[i].mc==sell[j].mc)&&(sell[i].je>sell[j].je))/*若產(chǎn)品名稱相同則按金額從小到大進行排列*/{xy=sell[i];sell[i]=sell[j];sell[j]=xy;}}}或者直接使用庫函數(shù)中的字符串比較函數(shù)strcmp(),即voidSortDat(){inti,j;PROxy;for(i=0;i<99;i++)for(j=i+1;j<100;j++){if(strcmp(sell[i].mc,sell[j].mc)>0/*按產(chǎn)品名稱從小到大進行排列*/{xy=sell[i];sell[i]=sell[j];sell[j]=xy;}elseif(strcmp(sell[i].mc,sell[j].mc)==0)/*若產(chǎn)品名稱相同*/if(sell[i].je>sell[j].je)/*則按金額從小到大進行排列*/{xy=sell[i];sell[i]=sell[j];sell[j]=xy;}}}知識點解析:根據(jù)題目要求,先按產(chǎn)品名稱從小到大的順序進行排列,若產(chǎn)品名稱相同,則按金額從小到大進行排列。由產(chǎn)產(chǎn)品名稱是字符型,而定兩字符的大小依據(jù)是其ASCII碼值。在此就用選擇排序法來實現(xiàn),用第一個元素的產(chǎn)品名稱和它后面的元素的產(chǎn)品名稱進行比較,若發(fā)現(xiàn)當前元素的產(chǎn)品名稱比后面的某個元素的產(chǎn)品名稱對應(yīng)的ASCII碼值更大,則交換這兩個元素的位置。依次類推,最終在第一個元素中存放的是產(chǎn)品名稱最小的元素,這樣就實現(xiàn)了該函數(shù)排序的功能。編寫此函數(shù)時,對于初學(xué)者來說建議用以下函數(shù)來表達:if(sell[i].mc>sell[j].mc){t=sell[i];sell[i]=sell[j];sell[j]=t;}elseif((sell[i].mc==sell[j].mc)&&(sell[i].je>sell[j].je)){t=sell[i];sell[i]=sell[j];sell[j]=t;}而對于有一定基礎(chǔ)的編程者來說可運用下面語句來實現(xiàn):if((sell[i].mc>sell[j].mc)‖(sell[i].mc==sell[j].mc)&&(sell[i].je>sell[j].je))該語句的含義是先sell[i].mc>sell[j].mc進行比較,若產(chǎn)品名稱滿足此條件,就對這兩個數(shù)據(jù)位置調(diào)換;否則,就判斷產(chǎn)品名稱是否相等,若相等就對金額進行大小比較?最終實現(xiàn)按從小到大的順序排列。國家三級(數(shù)據(jù)庫技術(shù))機試模擬試卷第2套一、程序設(shè)計題(本題共1題,每題1.0分,共1分。)1、下列程序的功能是:計算出啟然數(shù)SIX和NINE,它們滿足的條件是SIX+SIX+SIX=NINE+NINE的個數(shù)cnt,以及滿足此條件的所有SIX與NINE的和sum。請編寫函數(shù)countValue()實現(xiàn)程序要求,最后調(diào)用函數(shù)writeDAT()把結(jié)果cnt和sum輸出到文件OUT51.DAT中。其中的S,I,X,N,I,N,E各代表一個十進制數(shù)。注意:部分源程序已給出。請勿改動主函數(shù)main()和寫函數(shù)writeDAT()的內(nèi)容。試題程序:#includeintcnt,sum;voidCountValue(){}Voidmain(){Cnt=Sum=0;COUNtValUe();printf("滿足條件的個數(shù)=%\n",cnt):printf("滿足條件的所有的SIX與NINE的和=%d\n",sum);}WriteDAT();{FILE*fp;fp=fopen("OUT51.DAT","w");fprintf(fp,"%d\n%d\n",cnt,sum);fclose(fp);}標準答案:voidcountValue(){inti=100;while(1){if(3*i%2==0&&3*i/2>1000&&3*i/2<=9999)/*如果滿足條件SIX+SIX+SIX=NINE*NINE*/{/*即一個3位數(shù)乘3再除2余數(shù)為0,且所得的數(shù)為4位數(shù)*/cnt++;/*統(tǒng)計滿足條件的數(shù)的個數(shù)*/sum+=i+3*i/2;/*求滿足此條件的所有SIX與NINE的和*/i++;}elsei++;/*如果不滿足條什,則取下一個數(shù)*/if(i>999||3*i/2>9999)break;/*當SIX不為3位數(shù)時或所得的數(shù)不為四位數(shù)時,退出循環(huán)*/}}知識點解析:本題考查的知識點如下:(1)循環(huán)與判斷的嵌套使用。(2)多條件的布爾運算。(3)“%”與“/”運算符的使用。根據(jù)題意,求的是滿足3位數(shù)乘以3等于4位數(shù)乘以2的數(shù)的個數(shù)。我們可以使用循環(huán)結(jié)構(gòu)對所有的3位數(shù)進行判斷,若某個3位數(shù)乘以3整除2所得的數(shù)是4位整數(shù),則這個3位數(shù)足滿足條件的數(shù)。當判斷的數(shù)不再是3位數(shù)或者進行處理后所得的數(shù)大于9999,則要退出循環(huán)。在這里,還要注意判斷結(jié)構(gòu)中,各條件之問是用“與”運算還是用“或”運算。國家三級(數(shù)據(jù)庫技術(shù))機試模擬試卷第3套一、程序設(shè)計題(本題共1題,每題1.0分,共1分。)1、請補充完整程序,使得程序能實現(xiàn)以下功能:從文件IN.dat中讀取200個整數(shù)至數(shù)組number中,求出最大數(shù)max及最大數(shù)的個數(shù)cnt和數(shù)組number中能被3整除或能被7整除的算術(shù)平均值ave(保留2位小數(shù))。把結(jié)果max、cnt、ave輸出到OUT.dat文件中。注意:部分程序、讀數(shù)據(jù)函數(shù)read_dat(intnumber[200])及輸出格式已給出。#include<conio.h>#include<stdio.h>#defineN200voidread_dat(intnumber[N]){inti,j;FILE*fp;fp=fopen("IN.dat","r");for(i=0;i<20;i++){for(j=0;j<10;j++){fscanf(fp,"%d,",&number[i*10+j]);printf("%d",number[i*10+j]);}printf("\n");}fclose(fp);}voidmain(){intcnt,number[N],max;floatave;FILE*fw;inti,k;’longj=0;fw=fopen("OUT.dat","w");read_dat(number);/************************************************//************************************************/printf("\n\nmax=%d,cnt=%d,ave=%6.2f\n",max,cnt,ave);fprintf(fw,"%d\n%d\n%6.2f\n",max,cnt,ave);fclose(fw);}標準答案:max=number[0];for(i=1,k=0;i<N;i++){if(number[i]>max)max=number[i];if(number[i]%3==0||number[i]%7==0){j+=number[i];k++;}}for(i=0,cnt=0;i<N;i++)if(number[i]==max)cnt++;ave=(float)(j*100/k)/100;[解題思路]用整型變量max保存數(shù)組number中元素的最大值,首先把數(shù)組number的第一個元素number[0]存入max中;然后在for循環(huán)語句中當循環(huán)變量i從1遞增到N-1時,對數(shù)組number中的每一個元素number[i]與max進行比較,如果表達式number[i]>max成立,則把數(shù)組元素number[i]的值存入變量max中;再用表達式number[i]%3==0||number[i]%7==0判斷number[i]能否被3或7整除,如果表達式結(jié)果值為真,則把數(shù)組元素number[i]的值與變量j的值相加,同時計數(shù)變量k加1。退出循環(huán)后,變量max中的值就是數(shù)組number中元素的最大值,再用for循環(huán)語句對數(shù)組number中的每一個元素與max的值進行相等的判斷,如果number[i]的值等于max,則計數(shù)變量cnt加1。最后用表達式(float)(j*100/k)/100求得數(shù)組number中能被3整除或能被7整除的算術(shù)平均值。知識點解析:暫無解析國家三級(數(shù)據(jù)庫技術(shù))機試模擬試卷第4套一、程序設(shè)計題(本題共1題,每題1.0分,共1分。)1、已知在文件IN34.DAT中存有100個產(chǎn)品銷售記錄,每個產(chǎn)品銷售記錄由產(chǎn)品代碼dm(字符型4位)、產(chǎn)品名稱mc(字符型10位)、單價dj(整型)、數(shù)量s1(整型)、金額je(長整型)幾部分組成。其中,金額=單價×數(shù)量可計算得出。函數(shù)ReadDat()的功能是讀取這100個銷售記錄并存入數(shù)組sell中。請編制函數(shù)SortDat(),其功能要求:按產(chǎn)品代碼從大到小進行排列,若產(chǎn)品代碼相同,則按金額從大到小進行排列,最終排列結(jié)果仍存入結(jié)構(gòu)數(shù)組sell中,最后調(diào)用函數(shù)WriteDat()把結(jié)果輸出到文件OUT34.DAT中。注意:部分源程序已給出。請勿改動主函數(shù)main()、讀函數(shù)ReadDat()和寫函數(shù)WriteDat()的內(nèi)容。試題程序:#include<stdio.h>#include<mem.h>#include<string.h>#include<conio.h>#include<stdlib.h>#defineMAX100typedefstruct{chardm[5];charmc[11];intdj;ints1;longje;}PRO;PROsell[MAX];voidReadDat();voidWriteDat();voidSortDat(){}voidmain(){memset(sell,0,sizeofsell));ReadDat();SortDat();WriteDat();}voidReadDat(){FILE*fp;charstr[80],ch[11];inti;fp=fopen("IN34.DAT","r");for(i=0;i<100;i++){fgets(str,80,fp);memcpy(sell[i].dm,str,4);memcpy(sell[i].mc,str+4,10;memcpy(ch,str+14,4);ch[4]=0;sell[i].dj=atoi(ch);memcpy(ch,str+18,5);ch[5]=0;sell[i].s1=atoi(ch);sell[i].je=(long)sell[i].dj*sell[i].s1;}fclose(fp);}voidWriteDat(){FILE*fp;inti;fp=fopen("OUT34.DAT","w");for(i=0;i<100;i++){fprintf(fp,"%s%s%4d%5d%101d\n",sellIi].dm,sell[i].mc,sell[i].dj,sell[i].s1,sell[i].je);}fclose(fp);}標準答案:voidSortDat(){inti,j;PROxy;for(i=0;i<99;i++)for(j=i+1;j<100;j++){if(strcmp(sell[i].dm,sell[j].dm)<0/*按產(chǎn)品代碼從大到小進行排列*/{xy=sell[i];sell[i]=sell[j];sell[j]=xy;}elseif(strcmp(sell[i].dm,sell[j].dm)==0)/*若產(chǎn)品代碼相同*/if(sell[i].je<sell[j].je)/*則按金額從大到小進行排列*/{xy=sell[i];sell[i]=sell[j];sell[j]=xy;}}}知識點解析:本題考查的知識點如下:(1)結(jié)構(gòu)體及結(jié)構(gòu)數(shù)組。(2)結(jié)構(gòu)數(shù)組的排序。(3)字符型數(shù)組的比較。本題著重考查結(jié)構(gòu)體變量的訪問、賦值,包括結(jié)構(gòu)體本身及結(jié)構(gòu)體中各個成員的訪問和賦值。根據(jù)題意要求,我們首先要比較產(chǎn)品代碼。因為產(chǎn)品代碼為字符型,所以不能使用簡單的比較運算符進行比較。在這里,我們使用了字符串處理函數(shù)strcmp(char*str11,char*str12,unsignedintcout)對其進行比較。對于比較結(jié)果,若是代碼相同,則要按照金額進行新的比較,否則可直接存入數(shù)組。因為己定義了結(jié)構(gòu)數(shù)組,就可以使用循環(huán)進行比較排序。排序同樣采用前面介紹的“選擇排序法”。國家三級(數(shù)據(jù)庫技術(shù))機試模擬試卷第5套一、程序設(shè)計題(本題共1題,每題1.0分,共1分。)1、對10個候選人進行選舉,現(xiàn)有一個100條記錄的選票文件IN84.DAT,其數(shù)據(jù)存放格式是每條記錄的長度均為10位,第一位表示第一個人的選中情況,第二位表示第二個人的選中情況,依此類推。每一位候選人的記錄內(nèi)容均為字符O或1,1表示此人被選中,0表示此人未被選中,若一張選票選中人數(shù)大于5個人時被認為無效的選票。給定函數(shù)ReadDat()的功能是把選票數(shù)據(jù)讀入到字符串數(shù)組xx中。請編制函數(shù)CoutRs()來統(tǒng)計每個人的選票數(shù)并把得票數(shù)依次存入yy[0]到y(tǒng)y[9]中,最后調(diào)用函數(shù)WfiteDat()把結(jié)果”輸出到文件OUT84.DAT中。注意:部分源程序已給出。請勿改動主函數(shù)main()、讀函數(shù)ReadDat()和寫函數(shù)WfiteDat()的內(nèi)容。試題程序:#include<Stdio.h>charxx[100][11];intYY[10];intReadDat(void);voidWriteDat(void);voidC0utRs(void){}voidmain(){inti;for(i=0;i<10;i++)yy[i]=0;if(ReadDat()){printf("數(shù)據(jù)文件IN84.DAT不能打開!\n\007");return;}CoutRs();.WriteDat();}intReadDat(void){FILE*fp;inti;chartt[13];if((fp=fopen("IN84.DAT","r")==NULL)return1;for(i=0;i<100;i++){if(fgets(tt,13,fp)==NULL)return1;memcpy(xx[i],tt,10);xx[i][10]=0;}fclose(fp);return0;}voidWriteDat){FILE*fp;inti;fp=foDen("OUT84.DAT","w");for(i=0;i<10;i++){fprintf(fp,"%dkn",yy[i]);printf(,"第%d個人的選票數(shù)=%d\n",i+1,yy[i]);}fclose(fp);}標準答案:voidCoutRs(void){inti,count,j;char*pf;for(i=0;i<10;i++)yy[i]=0;for(i=0;i<100;i++){pf=xx[i];/*指針pf指向字符串的第一個字符*/count=0;while(*pr)if(*Df==’1’){count++;/*統(tǒng)計每條記錄中1的個數(shù)*/pf++;}elsepf++;if(count<=5)/*如果每條記錄中1的個數(shù)小于等于5則為有效票*/{pf=xx[i];/*指針pf指向字符串的第一個字符*/j=0;while(*pf)/*統(tǒng)計每個人的選票數(shù)并把得票數(shù)依次存入yy[0]到y(tǒng)y[9]中*/if(*pf==’1’){yy[j]+=1;j++;pf++;}elseif(*pf==’0’){j++;pf++;}}}}知識點解析:本題考查的知識點如下:(1)二維數(shù)組的操作。(2)指向數(shù)組的指針。在本題中,要先判斷選票是否有效。因為記錄存放在一個二維數(shù)組中,為了簡便我們?yōu)閿?shù)組的一組元素定義一個指向該數(shù)組每一行數(shù)據(jù)的指針,例如,chaf*p=xx[2]。初始時該指針指向該行的第一個元素,指針地址每加1,則指向下一個元素。這樣就可以輕松地統(tǒng)計每一個選票。設(shè)一變量標記每一個選票中1的個數(shù),若其不大于5,則選票有效。若選票有效,則依次查看哪一個元素為1,在數(shù)組”相應(yīng)的元素上加1。使用循環(huán)實現(xiàn)對所有記錄的訪問。國家三級(數(shù)據(jù)庫技術(shù))機試模擬試卷第6套一、程序設(shè)計題(本題共1題,每題1.0分,共1分。)1、函數(shù)ReadDat()實現(xiàn)從文件IN.dat中讀取1000個十進制整數(shù)到數(shù)組xx中。編寫函數(shù)Compute(),其功能是:分別計算出xx數(shù)組中奇數(shù)的個數(shù)odd、奇數(shù)的平均值ave1、偶數(shù)的個數(shù)even、偶數(shù)的平均值ave2,以及所有奇數(shù)的方差totfc的值。調(diào)用函數(shù)WritcDat(),把結(jié)果輸出到OUT.dat文件中。計算方差的公式如下:式中,N為奇數(shù)的個數(shù);xx[i]為奇數(shù);ave1為奇數(shù)的平均值。原始數(shù)據(jù)文件存放的格式是:每行存放10個數(shù)(每個數(shù)均大于0且小于等于2000),并用逗號隔開。注意:部分源程序已經(jīng)給出。請勿改動主函數(shù)main()、讀函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX1000intxx[MAX],odd=0,even=0;doubleave1=0.0,ave2=0.0,totfc=0.0;voidWriteDat(void);intReadDat(void){FILE*fp;inti,j;if((fp=fopen("IN.dat","r"))==NULL)return1;for(i=0;i<100;i++){for(j=0;j<10;j++)fscanf(fp,"%d,",&xx[i*10+j]);fscanf(fp,"\n");if(feof(fp))break;}fclose(fp);return0;}voidCompute(void){}voidmain(){inti;for(i=0;i<MAX;i++)xx[i]=0;if(ReadDat()){printf("數(shù)據(jù)文件IN.dat不能打開!\007\n");return;}Compute();printf("ODD=%d\nEVEN=%d\nAVE1=%f\nAVE2=%f\nTOTFC=%f\n",odd,even,ave1,ave2,totfc);WriteDat();}voidWriteDat(void){FILE*fp;fp=fopen("OUT.dat","w");fprintf(fp,"%d\n%d\n%f\n%f\n%f\n",odd,even,ave1,ave2,totfc);fclose(fp);}標準答案:voidCompute(void){inti,yy[MAX];for(i=0;i<1000;i++)if(xx[i]%2){odd++;ave1+=xx[i];yy[odd-1]=xx[i];}else{even++;ave2+=xx[i];}ave1/=odd;ave2/=even;for(i=0;i<odd;i++)totfc+=(yy[i]-ave1)*(yy[i]-ave1)/odd;}[解題思路]對數(shù)組xx[i]中的1000個整數(shù)逐個進行掃描處理,如果xx[i]對2的余數(shù)為1,則xx[i]為奇數(shù),變量odd加1,把xx[i]的值加到變量ave1中,同時把xx[i]的值輸給數(shù)組yy:否則xx[i]為偶數(shù),變量even加1,把xx[i]的值加到變量ave2中。循環(huán)結(jié)束后,變量ave1的值即為所有奇數(shù)的和,用ave1的值除以奇數(shù)的個數(shù)odd,就得到所有奇數(shù)的平均值;變量ave2的值即為所有偶數(shù)的和,用ave2的值除以偶數(shù)的個數(shù)even,就得到所有偶數(shù)的平均值。最后在for循環(huán)語句中根據(jù)方差的公式求出所有奇數(shù)的方差。知識點解析:暫無解析國家三級(數(shù)據(jù)庫技術(shù))機試模擬試卷第7套一、程序設(shè)計題(本題共1題,每題1.0分,共1分。)1、已知數(shù)據(jù)文件IN85.DAT中存有200個4位數(shù),并已調(diào)用讀函數(shù)readDat()把這些數(shù)存入數(shù)組a中,請編制一函gtjsVal(),其功能是:如果一個4位數(shù)的千位數(shù)字上的值加十位數(shù)字上的值恰好等于百位數(shù)字上的值加上個位數(shù)字上的值,并且此4位數(shù)是偶數(shù),則統(tǒng)計出滿足此條件的數(shù)的個數(shù)cnt并把這些4位數(shù)按從小到大的順序存入數(shù)組b中,最后調(diào)用寫函數(shù)writeDat()把結(jié)果cnt及數(shù)組b中符合條件的4位數(shù)輸出到OUT85.DAT文件中。注意:部分源程序已給出。程序中已定義數(shù)組:a[200],b[200],已定義變量:cnt。請勿改動主函數(shù)main()、讀函數(shù)readDat()和寫函數(shù)writeDat()的內(nèi)容。試題程序:#include#defineMAX200inta[MAX],b[MAX],cnt=0;voidjsVal(){}voidreadDat(){inti;FILE*fp;fp=fopen("IN85.DAT","r");for(i=0;i<MAX;i++)fscanf(fp,"%d",&a[i]);fclose(fp);}main(){inti;readDat();jsVal();printf("滿足條件的數(shù)=%d\n",cnt);for(i=0;i<cnt;i++)printf("%d",b[i]);printf("\n");writeDat();}writeD&t(){FILE*fp;inti;fp=fopen("OUT85.DAT","w");fprintf(fp,"%d\n",cnt);for(i=0;i<cnt;i++)fprintf(fp,"%d\n",b[i]);fclose(fp);}標準答案:voidjsVal(){inti,thou,hun,ten,data,j;for(i=0;i<200;i++){thou=a[i]/1000;/*求四位數(shù)的千位數(shù)字*/hun=a[i]%1000/100;/*求四位數(shù)的百位數(shù)字*/ten=a[i]%100/10;/*求四位數(shù)的十位數(shù)字*/data=a[i]%10;/*求四位數(shù)的個位數(shù)字*/if(thou+ten==hun+data&&a[i]%2!=1){/*如果千位數(shù)加十位數(shù)等于百位數(shù)加上個位數(shù),并且此數(shù)是偶數(shù)*/b[cnt]=a[i];/*則將滿足條件的數(shù)存入數(shù)組b中*/cnt++;/*統(tǒng)計滿足條件的數(shù)的個數(shù)*/}}for(i=0;i<cnt-1;i++)/*將數(shù)組b中的數(shù)按從小到大的順序排列*/for(j=i+1;j<cnt;j++)if(b[i]>b[j]){data=b[i];b[i]=b[j];b[j]=data;}}知識點解析:本題考查的知識點如下:(1)運算符“%”及“/”的使用。(2)選擇結(jié)構(gòu)中多個條件的布爾運算。(3)數(shù)據(jù)的排序。在本題中,首先要將一個4位數(shù)的千位、百位、十位、個位拆成獨立的數(shù)字。這里借助特殊運算符號“%”(取余)和“/”(整除),拆分方法略。題中給出的兩個條件必須同時滿足,所以兩條件之間用“與”運算。將符合條件的數(shù)先存入數(shù)組b中,再對b中的數(shù)據(jù)進行排序。排序使用“選擇排序法”。國家三級(數(shù)據(jù)庫技術(shù))機試模擬試卷第8套一、程序設(shè)計題(本題共1題,每題1.0分,共1分。)1、函數(shù)ReadDat()的功能是實現(xiàn)從文件ENG62.IN中讀取一篇英文文章,存入到字符串數(shù)組xx中。請編制函數(shù)encryChar(),按給定的替代關(guān)系對數(shù)組xx中所有字符進行替代,仍存入數(shù)組xx的對應(yīng)的位置上,最后調(diào)用函數(shù)WriteDat()把結(jié)果xx輸出到文件PS62.DAT中。替代關(guān)系:f(p)=p*13mod256(p是數(shù)組xx中某一個字符的ASCII值,f(p)是計算后新字符的ASCII值),如果計算后f(p)的值小于等于32或其ASCH值是偶數(shù),則該字符不變,否則將f(p)所對應(yīng)的字符進行替代。注意:部分源程序已給出。原始數(shù)據(jù)文件的存放格式是每行的寬度均小于80個字符。請勿改動主函數(shù)main()、讀函數(shù)ReadDat()和寫函數(shù)WriteDat()的內(nèi)容。試題程序:#include<conio.h>#include<stdio.h>#include<string.h>#include<ctype.h>unsignedcharxx[50][80];intmaxline=0;intReadDat(void);voidWriteDat(void);voidencryChar(){}voidmain(){clrscr();if(ReadDat()){printf("數(shù)據(jù)文件ENG62.IN不能打開!\n\007");return;}encryChar();WriteDat();}intReadDat(void){FILE*fp;inti=0;unsignedchar*p;if((fp=fopen("ENG62.IN","r")==NULL)return1;while(fgets(xx[i],80,fp)!=NULL){p=strchr(xx[i],’\n’);if(p)*p=0;i++;}maxline=i;fclose(fp);return0;}voidWriteDat(){FILE*fp;inti;fp=fopen("ps62.dat","w");for(i=0;i<maxline;i++){printf("%s\n",xx[i]);fprintf(fp,"%s\n",xx[i]);}fclose(fp);}標準答案:voidencryChar(){inti;char*pf;for(i=0;i<maxline;i++){pf=xx[i];/*指針pf指向該行的首地址*/while(*pf!=0){if(((*pf*13%256)%2==0)||(*pf*13%256<=32))/*如果計算后的值小于等于32或其ASCII值是偶數(shù)*/{pf++;/*則該字符不變,去取下一個字符*/continue;/*退出此次循環(huán)*/}*pf=*pf*13%256;/*否則將新字符替代原字符*/pf++;/*去取下一個字符*/}}}知識點解析:本題考查的知識點如下:(1)字符對應(yīng)的ASCII碼。(2)判斷結(jié)構(gòu)中多個條件的“或”運算。(3)退出一次循環(huán)。在C語言中,字符可參與任何整數(shù)運算。實際上,是字符的ASCII碼參與了運算。所以可以直接用字符代入f(p)的關(guān)系式中求出替換字符。若f(p)≤32或其ASCII值是偶數(shù),則該字符不變。兩個條件滿足一個即可,所以這兩個條件之間用“或”運算。若字符不變,則可不必計算替換字符,使用continue跳出本次循環(huán),進入下一次循環(huán)的條件判斷中。因為這里不是直接退出本層循環(huán)結(jié)構(gòu),所以不能使用break語句。國家三級(數(shù)據(jù)庫技術(shù))機試模擬試卷第9套一、程序設(shè)計題(本題共1題,每題1.0分,共1分。)1、函數(shù)ReadDat()的功能是實現(xiàn)從文件IN74.DAT中讀

溫馨提示

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

評論

0/150

提交評論