3級(jí)上機(jī)試題題庫_第1頁
3級(jí)上機(jī)試題題庫_第2頁
3級(jí)上機(jī)試題題庫_第3頁
3級(jí)上機(jī)試題題庫_第4頁
3級(jí)上機(jī)試題題庫_第5頁
已閱讀5頁,還剩123頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

笫1套上機(jī)考試試題

已知數(shù)據(jù)文件IN.dat中存有200個(gè)四位數(shù),并已調(diào)用讀函數(shù)Rdata()把這些數(shù)存入數(shù)組a

中,請(qǐng)編寫函數(shù)spellNumO,其功能足:把千位數(shù)字和十位數(shù)字重新組成一個(gè)新的二位數(shù)

ab(新二位數(shù)的十位數(shù)字是原四位數(shù)的千位數(shù)寧,新二位數(shù)的個(gè)位數(shù)字是原四位數(shù)的十位數(shù)

字),以及把個(gè)位數(shù)字和百位數(shù)字組成另一個(gè)新的二位數(shù)cd(新二位數(shù)的十位數(shù)字是原四位數(shù)

的個(gè)位數(shù)字,新二位數(shù)的個(gè)位數(shù)字是原四位數(shù)的丙位數(shù)字),如果ab<cd,ab必須是奇數(shù)且

小能被5整除,cd必須是偶數(shù),同時(shí)兩個(gè)新數(shù)的十位數(shù)寧均不為0,則將滿足此條件的四位

數(shù)按從大到小的順序存入數(shù)組b中,并要計(jì)算滿足上述條件的四位數(shù)的個(gè)數(shù)counto最后

main()函數(shù)調(diào)用寫函數(shù)Wdata(),把結(jié)果count以及數(shù)組b中符合條件的四位數(shù)輸出到OUT.dat

注意:部分源程序已經(jīng)給出。程序中已定義數(shù)組:a[200],b[200]:已定義變量count。

請(qǐng)勿改動(dòng)數(shù)據(jù)文件IN.dat中的任何數(shù)據(jù)及主函數(shù)main。、讀函數(shù)Rdata。和寫函數(shù)Wdata()的

內(nèi)容。

1iinclude<stdio.h>

2IdefineMAX200

3intrcount-0;

4voidspeliNum()

5(

6

7?

8voidRdata()

9Iinti;

10FILE*fp;

11fp*fopenCfIN.dat,\Mrn);

12tor(i-0;

13fscanf(fp/"'dj,Ii]);

14fclos?(fp);

15j

16voidWdataO

17<FILE*fp;

18inti;

19fp=fopenPOUT.oaf,3);

20fprxntf(fp,count);

21for(i-0;i<count;if)

22fprintf(fp,b[l));

23fclose(fp);

24]

25voidmainO

26(inti;

27RdataO;

28spellNusnO;

29prints斜蟠做count);

30for(i=0;i<count;

31printf(*W-,b(i]);

32printfC\n");

33WdataO;

34)

第1套試題答案及詳解

【審題分析】分析題目可知,本題只要實(shí)現(xiàn)spellNum。函數(shù)的功能即可。spellNum()要

實(shí)現(xiàn)的功能是:

將個(gè)位數(shù)的每位拆分成單個(gè)數(shù)字,然后將這4個(gè)數(shù)字組合成兩個(gè)二位數(shù)ab和cd。如果

ab<cd,ab必須是奇數(shù)且不能被5整除,cd必須是偶數(shù),同時(shí)兩個(gè)新數(shù)的十位數(shù)字均不為零,

則將滿足此條件的四位數(shù)按從大到小的順序存入數(shù)組b中,并要計(jì)算滿足上述條件的四位數(shù)

的個(gè)數(shù)count。因此解答本題的關(guān)鍵在于如何將一個(gè)四位數(shù)拆分成單個(gè)數(shù)字,如何將兩個(gè)數(shù)

字組合成一個(gè)二位數(shù),以及判斷二位數(shù)的奇偶性。

【解題思路】對(duì)于每一個(gè)四位數(shù),用這個(gè)四位數(shù)除以1000,可得到這個(gè)四位數(shù)千位卜

的數(shù)字輸給變量thou:這個(gè)四位數(shù)對(duì)1000求余然后再除以100,可得到這個(gè)四位數(shù)百位上

的數(shù)字輸給變量hun;這個(gè)四位數(shù)對(duì)?100求余然后再除以10,可得到這個(gè)四位數(shù)的十位上的

數(shù)字輸給變量ten;這個(gè)四位數(shù)對(duì)10求余,可得到這個(gè)四位數(shù)個(gè)位上的數(shù)字輸給變量data。

因?yàn)閠hou和hun作為重新組成新的兩個(gè)二位數(shù)的十位上數(shù)字,所以其值不能為0,因而

在組建兩個(gè)二位數(shù)之前,首先判斷thou和hun這兩個(gè)數(shù)字是否為0。然后用邏輯表達(dá)式

ab<cd&&ab%2==l&&ab%5!=0&&cd%2==0來判斷新組成的兩個(gè)二位數(shù)ab和cd是否

滿足ab<cd,ab必須是奇數(shù)且不能被5整除,并且cd必須是偶數(shù)的條件。如果上述邏輯表

達(dá)式成立,則這個(gè)四位數(shù)是符合題目條件的一個(gè)數(shù)字,把其存入數(shù)組b中,同時(shí)計(jì)數(shù)變量

countilllo最后利用一個(gè)雙重循環(huán)對(duì)數(shù)組b中的數(shù)字進(jìn)行從大到小的排序。

1voidspellNum()

21inti,thourhun,ten,data,j;

3intab,cd;

4for(i-0;i<200;if

5[thou.a[11/1000;

6hun*a(i]%1000/100;

7tena[i]%100/10;

8dataa

9if(thou-??011

10continue;

11ab=10*thou+ten;

12cd-10*data-*-hun;

13If(ab<cd&&ab%2==l4&abt5!?0&&

14(b[count]=a(1];

15count*>;

16}

171

18.tor(i=0;l<count-l;

19for(j=i+l;j<count;j+十)

20if(bli]<b(j])

21(data,b(iJ;

22b[i]-b[j];

23b[j]-data;

24)

251

2套上機(jī)考試試題

在文什IN.dat中有200組數(shù)據(jù),每組有3個(gè)數(shù),每個(gè)數(shù)均是三位數(shù)。函數(shù)Rdata()讀取

這200組數(shù)據(jù)存放到結(jié)構(gòu)數(shù)組aa中,請(qǐng)編寫函數(shù)numSort(),其功能是:要求在200組數(shù)據(jù)

中找出條件為每組中的第2個(gè)數(shù)大于第1個(gè)數(shù)加第3個(gè)數(shù)之和,其中滿足條件的組數(shù)作為函

數(shù)numSort()的返回值,同時(shí)把滿足條件的數(shù)據(jù)存入結(jié)構(gòu)數(shù)組bb中,再對(duì)bb中的數(shù)據(jù)按照

每組數(shù)據(jù)的第2個(gè)數(shù)加第3個(gè)數(shù)之和的大小進(jìn)行降序排列(第2個(gè)數(shù)加第3個(gè)數(shù)的和均不相

等),排序后的結(jié)果仍重新存入結(jié)構(gòu)數(shù)組bb中。最后調(diào)用函數(shù)Wdata(),把結(jié)果bb輸出到文

件OUT.dat中。

注意:部分源程序已經(jīng)給出。請(qǐng)勿改動(dòng)主函數(shù)main。、讀數(shù)據(jù)函數(shù)Rdata()和輸出數(shù)據(jù)

函數(shù)Wdata。的內(nèi)容。

1iinclude<3tdio.h>

2linclude<string.h>

3*include<conio.h>

4typedefstruct

5|intxLx2.x3;

6|data;

7dataaa[200]tbb(200];

8intnumSort()

91

10

n)

12voidRdataO

13(FILE*in;

14inti;

Hw

15in?fcpen<"IN.datrr*);

16for(i=0;i<200;i++)

17fscanf(in,fd,8d,bd",iaalij.xl,&aa[ij.x2,4aa(i).x3);

18fclose(in);

19J

20void陽ata(intcount)

21|FILE*out;

22inti;

23cut=fqpen("CXJT?daL,"一”);

24for(if;i<count;i”)

25{printf第第7MsMd\n",bb(i1.xl,bb(i].x2,

bb(ihx3,bb[i].x2.bb(i].x3);

ww

26fprintf(out,%d%d%d\nrbb(i).xlrbb(i).x2,bb[i].x3);

27I

28fclose(out);

29)

30voidmainO

31\intcount;

32RdataO;

33count-nimSorto;/?7

34Wdata(count);

35)

第2套試題答案及詳解

【審題分析】分析題目可知,本題只要實(shí)現(xiàn)numsort。函數(shù)的功能即可。numSort。要實(shí)

現(xiàn)的功能是:要求在200組數(shù)據(jù)中找出條件為每組中的第2個(gè)數(shù)大于第1個(gè)數(shù)加第3個(gè)數(shù)之

和,其中滿足條件的組數(shù)作為函數(shù)numsort()的返回值,同時(shí)把滿足條件的數(shù)據(jù)存入結(jié)構(gòu)數(shù)

組bb中,再對(duì)bb中的數(shù)據(jù)按照每組數(shù)據(jù)的第2個(gè)數(shù)加第3個(gè)之和的大小進(jìn)行降序排列(第

2個(gè)數(shù)加第3個(gè)數(shù)的和均不相等),排序后的結(jié)果仍重新存入結(jié)構(gòu)數(shù)組bb中。因此解答本題

的關(guān)鍵在于如何將一個(gè)數(shù)拆分出前面的3何數(shù)字成單個(gè)數(shù)字,并比較大小以及排序。

【解題思路】在for循環(huán)語句巾,自變量i從0遞增到200,判斷每組中的第2個(gè)數(shù)大

于第1個(gè)數(shù)加第3數(shù)之和即表達(dá)式aa[i].x2>aa[i].xl+aa[i].x3是否成立,如果表達(dá)式成立,即

把a(bǔ)a|i]賦給數(shù)組變量bb,同時(shí)計(jì)數(shù)變量ent自加。最后用兩重循環(huán)對(duì)數(shù)組bb中的數(shù)據(jù)按照

每組數(shù)據(jù)的第2個(gè)數(shù)加第3個(gè)之和的大小進(jìn)行降序排列。

1intnumSort()

2(intirent=0,j;

3datach;

4for(1-0;i<200;"+)

5if(aa[i].x2>aa(l].xl+aa(ij.x3)

6(bbfcntj-aaril;

7cnt++;

8)

9for(1=0;i<cnt-l;i++)

10forj<ent;j*+)

I】if(bb[i].x2*bb[i].x3<bb[j],x2+bb{jJ,x3)

12(ch?bb(ij;

13bb(i]mbb[j];

14bb[j]*ch;

15)

16returnent;

171

第3套上機(jī)考試試題

已知數(shù)據(jù)文件IN.dat中存有200個(gè)四位數(shù),并已調(diào)用讀函數(shù)rDataO把這些數(shù)存入數(shù)組a

中,清編寫函數(shù)CalVal(),其功能是:把一個(gè)四位數(shù)的千位數(shù)字上的值加上十位數(shù)字上的值

恰好等于百位數(shù)字上的值加上個(gè)位數(shù)字上的值,并且原四位數(shù)是偶數(shù),則統(tǒng)計(jì)出滿足此條件

的四位數(shù)的個(gè)數(shù)counl,并把這些四位數(shù)按從小到大的順序存入數(shù)組b中。最后調(diào)用寫函數(shù)

wData(),把結(jié)果count以及數(shù)組b中符合條件的四位數(shù)輸出到OUT.dat文件中。

注意:部分源程序已經(jīng)給出。程序巾已定義數(shù)組a[200]、b[200],已定義變量count。請(qǐng)

勿改動(dòng)數(shù)據(jù)文件IN.dat中的仟何數(shù)據(jù)及主函數(shù)main。、讀函數(shù)rData()和寫函數(shù)wData()的內(nèi)

容。

1finclude<stdio.h>

2tdefineMMC200

3inta[MAX|,b(MAXhcount-0;

4voidCalValO

5(

6

7I

8voidrDataf)

9Iinti;

10FILE?fp;

11fp-fopen(-IN.dat°,wrw);

12for(i?0;i<MAX;i+,)

13fscanf(fp,"%d,",[i]);

14fclose(fp);

16voidwData()

17{FILE*fp;

18int1;

19fp-fopen(-OUT.daf,3);

20fprintf(fprrd'rT,count);

21for(1=0;i<count;

R

22fprintf(fpr%cl\n**rb[i]);

23fclose(fp);

24}

25voidmain()

26(inti;

27rDataO;

28CalValO;

29printf是條ft的效?*d\rr,count);

30for(i?O;Kcount;

31printf("%d,

32printf("\nw);

33wData();

34)

第3套試題答案及詳解

【審題分析】分析題目可知,本題只要實(shí)現(xiàn)calVal()函數(shù)的功能即可。calVal()要實(shí)現(xiàn)的

功能是:把一個(gè)四位數(shù)的各位數(shù)字拆分成單個(gè)數(shù)字,然后按指定方式相加,如果相等且原四

位數(shù)是偶數(shù),則統(tǒng)計(jì)出滿足此條件的個(gè)數(shù)count并把這些四位數(shù)按從小到大的順序存入數(shù)組

b中。因此解答本題的關(guān)鍵在于如何將一個(gè)四位數(shù)的每位數(shù)拆分成單個(gè)數(shù)字以及如何判斷一

個(gè)四位數(shù)是否為偶數(shù)。

【解題思路】對(duì)于每一個(gè)四位數(shù),用這個(gè)四位數(shù)除以1000,可得到這個(gè)四位數(shù)千位上

的數(shù)字輸給變量thou;這個(gè)四位數(shù)對(duì)1000求余數(shù)然后再除以100,可得到這個(gè)四位數(shù)百位

上的數(shù)字輸給變量hun;這個(gè)四位數(shù)對(duì)?100求余數(shù)然后再除以10,可得到這個(gè)四位數(shù)十位上

的數(shù)字輸給變量ten;這個(gè)四位數(shù)對(duì)10求余數(shù),可得到這個(gè)四位數(shù)個(gè)位上的數(shù)字輸給變量

data。

然后判斷表這式thou+ten=data+hun&&a|i]%2!=1是否成立,如果成立,則把這個(gè)數(shù)

賦給數(shù)組b,同時(shí)計(jì)數(shù)變量count加1。最后對(duì)數(shù)組b中元素進(jìn)行從小到大的排序。

【參考答案】

voidCalValO

(int1.thou,hun,tan,data,j;

for(i-0;i<MAX;if)

q(thou-分⑴八。。。;

5hun,a[i)%1000/100;

6ten,a[i]%100/10;

7data■a(i]%10;

8if(<thou*ten^-hun+data)&aa⑴

9(b(count)Qa[i3;

10count**;

11

12

13for(i-0;i<count-l;i++)

14forj<count;j++)

15if(b[il>b[jj)

16data■b[i];

17blU-b(j];

10bIj]=data;

19

20I

[易錯(cuò)分析】用求余運(yùn)算和除法運(yùn)算得到一個(gè)四位數(shù)

第4套上機(jī)考試試題

已知在文件IN.dat中存有100個(gè)產(chǎn)品銷售記錄,每個(gè)產(chǎn)品銷售記錄由產(chǎn)品代碼code(字

符型4位)、產(chǎn)品名稱name(字符型10位)、朝介uprice(整型)、舞amount(整型)、通sum(長

整型)5部分組成其中:金額=單價(jià)x數(shù)最。函數(shù)ReadDat()是讀取這100個(gè)銷售記錄并存入

結(jié)構(gòu)數(shù)組sell中。請(qǐng)編寫函數(shù)SortDat(),其功能要求:按金額從小到人進(jìn)行排列,若金額相

同,則按產(chǎn)晶代碼從人到小進(jìn)行排列,最終排列結(jié)果仍存入結(jié)構(gòu)數(shù)組sell中。最后調(diào)用函數(shù)

WriteDatO,把結(jié)果輸出到OUT.dat文件中。

注意:部分源程序已經(jīng)給出。請(qǐng)勿改動(dòng)主函數(shù)main。、讀數(shù)據(jù)曬數(shù)ReadDat。和輸出數(shù)

據(jù)兩數(shù)WriteDatO的內(nèi)容。

?include<stdio*h>

Iinclude<string.h>

3Iinclude<conio.h>

q?includbe<stdlib.h>

5?defineMAX100

6typectefstruct

7Ichaicode[51;/*F仲,

8char111;/*,"品名稱”

9int□price:/*單價(jià)?/

10intamount;卜政嫉*/

iilogsum;/?金,/

12JPRO;

13PROsell[MAX];

14voidReadDat0;

15voidWriteDat0;

16voidSortDat0

17

18

19

20voidmain0

21{memset(seli/0,sizeof(sell));

22ReadDat();

23SortDat0;

2AWriceDat();

25)

26voidReadDat(>

27<FILE*fp;

28charstr[80|rchill];

29inti;

30£p=fcpenC4N.dat",wr");

31for(i*0;i<100;if)

32tfgets(str/80,fp);

33memcpy(sell|ij.code,str,4);

34meJncpy(selHi].naire,str+4,10);

35memcpy(ch,str+14,4);

36ch[4J=0;

37selili].uprice?atoi(ch);

38memcpy(chrstr+18,5);

39ch(5]■0;

40sell(i).amount?atoi(ch);?

41sell[i].sum,(long)sell(i).uprice*sell(i}.amount;

421

43fclose(fp);

441

45voidWriteDat(void)

46IFILE*fp;...:;??J?:.-1?,,J??r-.?.?

47Inti;?

48fp-fopen(*OUT.<1A12,nWw);

49for(i*0;i<100;vH)

50{printf(w%s%s*4d%5d$5d\n”,sel!4i].code,soil(i[.naine,

sell(i].upricetselldl.acnount/sellfi).sum);

51fprintf(fp#nt3%sMd電5d%Sd\n-,sell(i].code,wsll[,

sell(i|.uprice,sellfi).amountrsell[i]<sum);

521

53felose(fp);

54

第4套試題答案及詳解

【審題分析】分析題目可知,本題只要實(shí)現(xiàn)SortDat。函數(shù)的功能即可。SortDat。要實(shí)現(xiàn)

的功能是:按金額從小到大進(jìn)行排列,若金額相同,則按產(chǎn)品代碼從人到小進(jìn)行排列,最終

排列結(jié)果仍存入結(jié)構(gòu)數(shù)組sell中。因此解答本題的關(guān)鍵在于如何通過自定義類型讀取‘條銷

售記錄,并交換它的成員以及排序。

【解題思路】在雙重for循環(huán)中首先比較兩個(gè)產(chǎn)晶的金額,如果前一個(gè)產(chǎn)品的金額大于

后一個(gè)產(chǎn)晶的金額,則這兩個(gè)產(chǎn)品進(jìn)行數(shù)據(jù)交換。如果兩個(gè)產(chǎn)品的金額相等,則用字符串比

較函數(shù)strcmp比較兩個(gè)產(chǎn)品的代碼,如果返回的值小于0,則這兩個(gè)產(chǎn)品進(jìn)行數(shù)據(jù)交換。

【參考答案】

1voidSortDat()

inti,j;

3PROtemp;

4for(i?0;i<99;i”)

5for(j<100;:)?+)

6i£(sell(i).sum>selllj).sum)

7(temp=sell(i);

8sell(i)-j];

9sell[j)■temp;

101

11elseif.sum-3?11(j].sum)

121if(strcmp(sell(i).codersell[j).code)<0)

13(temp?selHi]7

143ell(i]?selUjj;

15sellf4)),temp;

16I

17)

18I

第5套上機(jī)考試試題

已知文件IN.dat中存有若干個(gè)(不多于200個(gè))四位數(shù)字的正整數(shù),函數(shù)ReadDat()讀取

這若干個(gè)正整數(shù)并存入數(shù)組number中。請(qǐng)編寫函數(shù)CalValue(),其功能要求是:①求出文

件中所有的正整數(shù)個(gè)數(shù)totNum.(求求這些數(shù)中的各位數(shù)字之和是奇數(shù)的個(gè)數(shù)totCnt,以及

滿足此條件的這些數(shù)的算術(shù)平均值totaveo最后調(diào)用函數(shù)writeDat。把所求的結(jié)果輸出到

OUT.dat文件中。

注意:部分源程序已經(jīng)給出。清勿改動(dòng)主函數(shù)main。、熊|數(shù)ReadDat。和函數(shù)writeDat()

的內(nèi)容。

1#include<stdio.h>

2?include<conio.h>

3tdefineMAXNJM200

4intnumber(MAXNIJMJ;

5inrtotNum=0;/?文件IN.dat中共有的1T.姑數(shù)個(gè)數(shù)?/

6inttotCnt30;.,?符合條fl"川尊數(shù)的Ti*/

7doubletotave-0.0;/*+R舶.”/

8hitReadDat(void);

9voidwtireDat<void);

10voidCalValue(void)

11I

12

13|

14voidmain()

15(inti;

16for(i-0;i<MAXNi則;

17nwfoer⑴=0;

18if(ReadDatO)

19(printfLISA;文件IN.datN恕“l(fā)!\007\n">;

20return;

21\

22CalValueO;

23「n口“(”文件3.31中我書的正碎(個(gè)故=,<1個(gè)\八",

24prinlf/濟(jì)合條fl的il的個(gè)數(shù)M.d個(gè)\爐,tcrCnt);

M

25printf(.2f\n"rstave”

26writeDatO;

27>

28incReadDac(void)

291FILE*fp;

30inti-0;

31if((fp-fopenLiN.cbL,""))-NULL)

32return1;

33while(!feof(fp))

34fscanf(fprfd,",Animber[i-w-j);

35fclose(fp);

36return0;

371

38voidwriteDat(void)

39(FILE*fp;

40fp=fopenLOUT.daL,"w");

41fprintf(fp,w%dl\n%d\n%6.2f\n**,totNum,totCnt,totave);

42fclose(fp);

43?

第5套試題答案及詳解

【審題分析】分析題曰可知,本題只要實(shí)現(xiàn)calValue。函數(shù)的功能即可。calValue。要實(shí)

現(xiàn)的功能是:①求出文件中共有的正整數(shù)個(gè)數(shù)totNum;②求這些數(shù)中的各位數(shù)字之和是奇

數(shù)的個(gè)數(shù)totCnt,以及滿足此條件的這些數(shù)的算術(shù)平均值totave。因此解答本題的關(guān)鍵在于

如何判斷一個(gè)數(shù)是否為正整數(shù)。

【解題思路】在for循環(huán)語句中,自變最i從()遞增到MAXNUM對(duì)數(shù)組number中的

每個(gè)數(shù)進(jìn)行判斷,如果mumber[i]的值大于0,說明number[i]的值為正整數(shù),統(tǒng)計(jì)正整數(shù)個(gè)

數(shù)的變量totNum加1;然后用除法和求余的方法對(duì)numbers的值求出其各個(gè)位上的數(shù)字,

分別記錄到變量thou、hun、ten、data中,這些數(shù)字的和對(duì)2求余數(shù),如果余數(shù)不為零,則

統(tǒng)計(jì)變量totCnt加1,同時(shí)把number|i]的值加到totave上,得到這些數(shù)的和。退出循環(huán)后,

用totave的值除以totCnt,就得到了這些數(shù)的算術(shù)平均值totaveo

【參考答案】

1voidCalVaiue(void)

2Iinti*thouihun,ten,data;

3for(i?0;i<MAXNUM;14+)

4|if(Inumberfil)

5break;

6if(number(1)>0)

7totNum4*;

8thou?nuffiberjil/1000;

9hun?numberji)%1000/100;

10ten,number(1)%100/10;

11data?number|i)^10;

12if((thou+hvn*ten<ddta)

13(totCnt**;

14totave?,number|i];

15》

16)

17totave/=totCnt;

18}

【易錯(cuò)分析】用number[i]除以1000得到number[i]千位上的數(shù)字,用number[i]對(duì)1000

求余然后再除以100得至ljnumber[i]百位上的數(shù)字,用number[i]對(duì)100求余然后再除以10

得至ijnumber[i]十位上的數(shù)字,用numbcr[i]對(duì)10求余數(shù)得到nlll=nber[i]個(gè)位上的數(shù)字。在求

算術(shù)平均值時(shí),要把整型轉(zhuǎn)換成雙精度型數(shù)據(jù)。

第6套上機(jī)考試試題

下列程序的功能是:計(jì)算500?800區(qū)問內(nèi)素?cái)?shù)的個(gè)數(shù)count,并按所求素?cái)?shù)的值從大到

小的順序排序內(nèi).計(jì)算其間隔加、減之和,即第1個(gè)素?cái)?shù).第2個(gè)素?cái)?shù)+第3個(gè)素?cái)?shù).第4

個(gè)素?cái)?shù)+第5個(gè)素?cái)?shù)……的值sumo

請(qǐng)編寫函數(shù)primeValue。實(shí)現(xiàn)程序的要求。最后調(diào)用函數(shù)writeDat。,僻果count和sum

輸出劍OUT.dat文件中。

注意:部分源程序已給出。請(qǐng)勿改動(dòng)豐函數(shù)main()和輸出數(shù)據(jù)函數(shù)writeDat。的內(nèi)容。

1Jinclude<stdio.h>

2intcountsutiu

3voidprimeValue()

4?

5

6I

7voidwnteDat()

8{FI1£*fp;

9fp?topen(',OUT.dat*,;

10fprintf(£p<"%d\n^d\n*#count,sun);

11fclose(fp>;

121

13voidmain。

14{count=sum?0;

15primeValueO;

16printf(■索數(shù)的個(gè)珈*d\n,count);

17printsL按要求sum);

18writeDat();

19)

第6套試題答案及詳解

【審題分析】分析題目可知,本題只要實(shí)現(xiàn)primeValue。函數(shù)的功能即可。primeValue。

要實(shí)現(xiàn)的功能是:計(jì)算指定區(qū)域內(nèi)素?cái)?shù)的個(gè)數(shù)count,并排序,再根據(jù)指定的運(yùn)算關(guān)系計(jì)算

sum值。因此解答本題的關(guān)鍵在于如何判斷一個(gè)數(shù)是否為素?cái)?shù)。

【解題思路】判斷一個(gè)數(shù)是否是素?cái)?shù)的算法是:如果存在一個(gè)從2開始到這個(gè)數(shù)的一半

之間的數(shù)能被這個(gè)數(shù)整除,則這個(gè)數(shù)不是素?cái)?shù);否則這個(gè)數(shù)是素?cái)?shù)。

題中,循環(huán)變量i從800遞減到500,如果存在小于i/2的一個(gè)數(shù)j,使表達(dá)式i%j的

值等丁P,則當(dāng)前數(shù)i不是素?cái)?shù),否則i是素?cái)?shù)。計(jì)數(shù)數(shù)變量count加1,把變量i的值加到

變量數(shù)組yy中。在求這些素?cái)?shù)的間隔加、減之和時(shí),采用了標(biāo)志變最j,每循環(huán)一次變量i

都乘以一1。

【參考答案】

1voidprimeValue()

2(mti,j,half,yyllOO];

3tor(i?800;i>-500;i

4{half=i/2;

5for(3=2;"half:

6if0)

7break;

Bif(j>?half)

91yy(countI-i;

10count**;

111

12I

13for(1-0,j-1;i<count;

14(sum"jeyy11);

15j-ja-l;

161

17,

【易錯(cuò)分析】判斷一個(gè)數(shù)是否是素?cái)?shù)時(shí),自變量循環(huán)變量i從2遞增到i/2

第7套上機(jī)考試試題

下列程序的功能是:選出5000以卜符合條件的自然數(shù)。條件是:千位數(shù)字與百位數(shù)字

之和等于十位數(shù)字與個(gè)位數(shù)字之和,且千位數(shù)字與百位數(shù)字之和等于個(gè)位數(shù)字與千位數(shù)字之

差的10倍。計(jì)算并輸出這些四位自然數(shù)的個(gè)數(shù)count以及這些數(shù)的和sum。請(qǐng)編寫函數(shù)

calValueO實(shí)現(xiàn)程序的要求,最后調(diào)用函數(shù)writeDat(),把結(jié)果count和sum輸出到OUT.dat

文件中。

注意:部分源程序已經(jīng)給出。請(qǐng)勿改動(dòng)主函數(shù)main()和輸出數(shù)據(jù)函數(shù)writeDat()的內(nèi)容。

I?include<stdio.h>

2intcount,sum;

3voidcalValueO

4(

5

6}

7voidwriteDat()

81FILE*fp;

9fp"(open(??OOT.dat**,"***);

10fprintf(fp,"%d\n%d\n”,count,sum);

11fclosetfp);

12)

13voidmain"

14{count=sum=0;

15caXValuef);

16printf("iWi豺i的fl然count);

17printfZ足知的自然加好叼idW,sum);

18wri.teDatO;

191

第7套試題答案及詳解

【審題分析】分析題目可知,本題只要實(shí)現(xiàn)calValue。函數(shù)的功能即可。calValue。要實(shí)

現(xiàn)的功能是:選出5000以下符合條件的自然數(shù)。因此解答本題的關(guān)鍵在于如何將指定的條

件轉(zhuǎn)換成C語言表達(dá)武。

【解題思路】對(duì)于每個(gè)四位數(shù),用這個(gè)四位數(shù)除以1000,可得到這個(gè)四位數(shù)千位上的

數(shù)字輸給變量thou;這個(gè)四位數(shù)對(duì)1000求余然后再除以100,可得到這個(gè)四位數(shù)百位上的

數(shù)字輸給變量hum這個(gè)四位數(shù)對(duì)100求余然后再除以10,可得到這個(gè)四位數(shù)十位卜-的數(shù)

字輸給變量ten;這個(gè)四位數(shù)對(duì)10求余,可得到這個(gè)四位數(shù)個(gè)位卜的數(shù)字輸給變量data。

然后判斷表達(dá)式thou+hun==data+ten&&thou+hun==(data—thou)*10是否成立,如果

成立,則把這個(gè)數(shù)回到變量sum上.得到這些數(shù)的和,同時(shí)計(jì)數(shù)變餐count加1。

【參考答案】

1voidcaXValue()

2<inti,thou,hur?rten,data;

3tor(1=5000;i>-lOOC;i—)

44thou-1/lOCO;

5hun-iliOaO/lCO;

6ten-i1100/20;

7data?i110;

8if(thou+hun?=ten+data&&thou*hun-<data-thou)*10)

9(countff;

10gucn;

11I

121

13I

【易錯(cuò)分析】用求余運(yùn)算和除法運(yùn)算得到一個(gè)四位數(shù)的各個(gè)位上的數(shù)字。

【考點(diǎn)鏈接】求余運(yùn)算、除法運(yùn)算。

第8套上機(jī)考試試題

已知數(shù)據(jù)文件IN.dat中存有200個(gè)四位數(shù),并已淵用讀函數(shù)readDat。把這些數(shù)存入數(shù)

組a中,請(qǐng)編寫函數(shù)primecount(),其功能是:如果四位數(shù)各個(gè)位上的數(shù)字均是奇數(shù),則統(tǒng)

計(jì)出滿足此條件的個(gè)數(shù)count并把這些四位數(shù)按從人到小的順序存入數(shù)組b中。最后main()

函數(shù)調(diào)用寫函數(shù)writeDat(),把結(jié)果count以及數(shù)組b中符合條件的四位數(shù)輸出到OUT.dat

文件中。

注意:部分源程序已經(jīng)給出。程序中已定義數(shù)組a[200]、b[200J,已定義變量count。請(qǐng)

勿改動(dòng)數(shù)據(jù)文件IN.dat中的任何數(shù)據(jù)及主函數(shù)main。、讀函數(shù)readDat()和寫函數(shù)writeDat()

的內(nèi)容。

1linclude<stdio.h>

2tdefineMftX200

3inta[MAX],b]MAX)rcount=0;

4voidprimecountO

5(

6

71

8voidreadDarI)

9{mti;

10FILE*fp;

11fp?fopen(RIH.(iatw,"rn);

12for(i?*0;i*)

13fscant(fp.fd,",&a[i]);

14fclose(fp);

15I

16voidwrxteDat0

17|FILE*fp;

18inti;

19fp=fopenLOOT.&tl=“”);

,,

20fprintf(fpr%d\n**rcount);

21for(i?0;Ivcomt;[?+)

22fprintf(fpr”d\Z,b(i]);

23fclojse(fp);

24|

25voidn?in()

261inti;

27readDat();

28primecount0;

29printf("Wd蝴在做TdVT,count);

30for(i=0;i<count;i++)

31printf(-%db[i]);

32printf(w\n*);

33writeQat0;

34J

第8套試題答案及詳解

【審題分析】分析題目可知,本題只要實(shí)現(xiàn)primeCount。函數(shù)的功能即可。primeCount。

要實(shí)現(xiàn)的功能是:如果四位數(shù)各位上的數(shù)字均是奇數(shù),則統(tǒng)計(jì)出滿足此條件的個(gè)數(shù)count并

把這些四位數(shù)按從大到小的順序存入數(shù)組b中。因此解答本題的關(guān)鍵在于如何將一個(gè)四位數(shù)

拆分成單個(gè)數(shù)字,并判斷這些數(shù)字是否為奇數(shù)。

【解題思路】對(duì)于每一個(gè)四位數(shù),用這個(gè)四位數(shù)除以1000,可得到這個(gè)四位數(shù)千位上

的數(shù)字輸給變量thou;這個(gè)四位數(shù)對(duì)1000求余然后再除以100,可得劍這個(gè)四位數(shù)百位上

的數(shù)字輸給變量hun;這個(gè)四位數(shù)對(duì)100求余然后再除以10,可得到這個(gè)四位數(shù)十位上的數(shù)

寧輸給變量ten;這個(gè)四位數(shù)對(duì)10求余,可得到這個(gè)四位數(shù)個(gè)位上的數(shù)寧輸給變量data。

然后判斷表達(dá)式thou%2!=0&&hun%2l=0&&ten%2!=0&&data%2!=0是否成立,

如果成立,則把這個(gè)數(shù)賦給數(shù)組b,同時(shí)計(jì)數(shù)變最count加1。最后用雙重循環(huán)對(duì)數(shù)組b進(jìn)

行從大到小的排序。

【參考答案】

voidpri/necount()

inti.thou,hue,ten,data,j;

3for(i-0;i<200;

4Chou=a(i]/1000;

5hun=a(i)%1000/100;

6ten=a(i]%100/10;

7data-a|i]%10;

8if(thou%?ahun%2!=0&&ten%21?0&&data%2!-0)

9(b(count]=a[i];

10count";

111

12

13for(i-0;i<count-l;i+4)

14for(j=i*l;j<count;

15if(b[i]<b[jj)

16{data=b[i];

17b[i]-blj];

18b[j]-data;

19}

20)

【易錯(cuò)分析】用求余運(yùn)算和除法運(yùn)算得到一個(gè)四位數(shù)的各個(gè)位上的數(shù)字。

第9套上機(jī)考試試題

函數(shù)RData()實(shí)現(xiàn)從文件IN.dat中讀取一篇英文文章,存入到字符串?dāng)?shù)組original中:

請(qǐng)編寫函數(shù)encryptChar(),其功能是:按給定的替代關(guān)系對(duì)數(shù)組original中的所有字符進(jìn)行

替代后,仍存入數(shù)組original的對(duì)麻的位置上。最后調(diào)用函數(shù)WData(),把結(jié)果original輸出

到OUT.dat文件中。

替代關(guān)系:f(p)=p*llmod256(p是數(shù)組中某一個(gè)字符的ASCH值,f(p)是計(jì)算后新字符

的ASCII值),如果原字符的ASCII值是偶數(shù)或計(jì)算后f(p)值小于等于32,則該字符不變,

否則將f(p)所對(duì)應(yīng)的字符進(jìn)行替代。

原始數(shù)據(jù)義件存放的格式是:每行的寬度均小于80個(gè)字符。

注意:部分程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main()、讀數(shù)據(jù)函數(shù)RData()和輸出數(shù)據(jù)函數(shù)

WData()的內(nèi)容。

第9套試題答案及詳解

【審題分析】分析題目可知,題中需要解決的問題就是實(shí)現(xiàn)encryptChar函數(shù)的功能問

題,而encryptChar函數(shù)的功能是:按給定的替代關(guān)系對(duì)數(shù)組original中的所有字符進(jìn)行替

代后,仍存入數(shù)組original的對(duì)應(yīng)的位置上。因此本題的關(guān)鍵在于如何用C程序?qū)崿F(xiàn)替代關(guān)

系的運(yùn)算。

【解題思路】題13中的“如果原字符的ASCII值是偶數(shù)或計(jì)算后f(p)值小于等于32,

則該字符不變,否則將f(p)所對(duì)應(yīng)的字符進(jìn)行替代”,可轉(zhuǎn)化為:如果原字符的ASCI值是奇

數(shù)且計(jì)算后f(p)值大于32,則該字符用f(p)所對(duì)應(yīng)的字符進(jìn)行替代,否則不變。在程序中的

語句是:if(*pf%2&&*pf*11%256>32)*pf=*pf*11%256。

【參考答案】

1voidencryptChar()

21inti;

3chait*pf;

4for(i=0;KmaxLine;i++)

5pf=original[iJ;

6while(*pf!0)

7(if<*pf%2“*pfll%256>32)

8,pf-*p£*ll%256;

9pf

10)

11

121

【易錯(cuò)分析】在“if(*pP/o2&&*pPMl%256>32)*pf=*pf*ll%256;”這句中表達(dá)式*pf%

2和表達(dá)式“*p/11%256>32”是與的關(guān)系,而不是或的關(guān)系

1Iinclude<stdio.h>

2tinclude《string.h)

3Sinclude<conio.h>

4linclude<etype.h>

5unsignedcharoriginal[50][80|;

6intmaxline=0;/?文草1Kli6打數(shù)?/

7intRData(void);

8voidWl^ta(void);

9voidencryptChar()

101

11

12)

13voidmain()

14{if(RDataO)

15{prints”數(shù)抑;文件IN.dat不能JPf!\n\007”):

16return;

17]

18encryptChar();

19WDataO;

20|

21intRData(void)

22(FILE*fp;

23inti-0;

24unsignedchar*p;

2Sif((fp?fopenClN.dat-r)—MULL)

第10套上機(jī)考試試題

已知數(shù)據(jù)文件lN.dat中存有200個(gè)四位數(shù),并已調(diào)用讀函數(shù)起adDat()把這些數(shù)存入數(shù)

組a中,請(qǐng)編寫函數(shù)diffVal(),其功能是:把一個(gè)四位數(shù)的千位數(shù)字上的值,減去百位數(shù)字

上的值,再減去十位數(shù)字上的值,最后減去個(gè)位數(shù)字上的值,如果得出的值大于等于0且原

四位數(shù)是奇數(shù),則統(tǒng)計(jì)出滿足此條件的個(gè)數(shù)count并把這些四位數(shù)按從小到大的順序存入數(shù)

組b中。最后調(diào)用寫函數(shù)writeDat(),把締果count以及數(shù)組b中符合條件的四位數(shù)輸出到

OUT.dat文件中。

注意:部分源程序已經(jīng)給出。程序中己定義數(shù)組a[200]、b|2001,已定義變量count。

請(qǐng)勿改動(dòng)數(shù)據(jù)文件IN.dat中的任何數(shù)據(jù)及主函數(shù)main。、闔數(shù)readDat。和寫函數(shù)writeDat。

的內(nèi)容。

?include?<stdio.h>

2fdefineMAX200

3inta(MAX)tbfMAXJ,count?0;

4voiddiffValO

5

6

7

8voidreadDdt()

9(inti;

10FILE*fp;

11fp■fopenriN.dat*,

12for(i?0;i<MAX;"?)

13fscanf(fp,"d,”,ia(i]);

14fclose(fp);

15]

16voidwriteDa^O

17(FILE.fp;

18int1;

19fp-fopenLOUT.dat,"w");

R

20fprint1(fpr%d\n"rcount);

21for(i=-0;i<count;i")

22fprintf(fpr"%d\n*rb[i]);

23fclose(fp);

24I

25voidMin()

26Iinti;

27ceadDatO;

28diXfValO;

29printf(嘴是條fl的數(shù)-*d\n”,count);

30for(i?0;i<count;i*+)

31printf(M%d,b(i|);

32printf(*\nw);

33writeDatO;

34)

26return1;

27while(fgets(original[ih80.fp)!口HULL)

28(p*strehr(original[i]r'\n');

29iffp>

30*p?0;

31i+1

32)

33maxline7;

34fclose(fp);

35return0;

36I

37voidWESata(void)

38{FILE*£p;

39mti;

40£p=fopen("OUT.dar*/%”;

42for(i-0;i<fnaxline;i*+)

42(prints(*is\n*,originalfil);

43fprintf(fp,

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論