3级上机试题题库_第1页
3级上机试题题库_第2页
3级上机试题题库_第3页
3级上机试题题库_第4页
3级上机试题题库_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

笫1套上机考试试题

已知数据文件IN.dat中存有200个四位数,并已调用读函数Rdata()把这些数存入数组a

中,请编写函数spellNumO,其功能足:把千位数字和十位数字重新组成一个新的二位数

ab(新二位数的十位数字是原四位数的千位数宁,新二位数的个位数字是原四位数的十位数

字),以及把个位数字和百位数字组成另一个新的二位数cd(新二位数的十位数字是原四位数

的个位数字,新二位数的个位数字是原四位数的丙位数字),如果ab<cd,ab必须是奇数且

小能被5整除,cd必须是偶数,同时两个新数的十位数宁均不为0,则将满足此条件的四位

数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数counto最后

main()函数调用写函数Wdata(),把结果count以及数组b中符合条件的四位数输出到OUT.dat

注意:部分源程序已经给出。程序中已定义数组:a[200],b[200]:已定义变量count。

请勿改动数据文件IN.dat中的任何数据及主函数main。、读函数Rdata。和写函数Wdata()的

内容。

1iinclude<stdio.h>

2IdefineMAX200

3intrcount-0;

4voidspeliNum()

5(

6

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套试题答案及详解

【审题分析】分析题目可知,本题只要实现spellNum。函数的功能即可。spellNum()要

实现的功能是:

将个位数的每位拆分成单个数字,然后将这4个数字组合成两个二位数ab和cd。如果

ab<cd,ab必须是奇数且不能被5整除,cd必须是偶数,同时两个新数的十位数字均不为零,

则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数

的个数count。因此解答本题的关键在于如何将一个四位数拆分成单个数字,如何将两个数

字组合成一个二位数,以及判断二位数的奇偶性。

【解题思路】对于每一个四位数,用这个四位数除以1000,可得到这个四位数千位卜

的数字输给变量thou:这个四位数对1000求余然后再除以100,可得到这个四位数百位上

的数字输给变量hun;这个四位数对•100求余然后再除以10,可得到这个四位数的十位上的

数字输给变量ten;这个四位数对10求余,可得到这个四位数个位上的数字输给变量data。

因为thou和hun作为重新组成新的两个二位数的十位上数字,所以其值不能为0,因而

在组建两个二位数之前,首先判断thou和hun这两个数字是否为0。然后用逻辑表达式

ab<cd&&ab%2==l&&ab%5!=0&&cd%2==0来判断新组成的两个二位数ab和cd是否

满足ab<cd,ab必须是奇数且不能被5整除,并且cd必须是偶数的条件。如果上述逻辑表

达式成立,则这个四位数是符合题目条件的一个数字,把其存入数组b中,同时计数变量

countilllo最后利用一个双重循环对数组b中的数字进行从大到小的排序。

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套上机考试试题

在文什IN.dat中有200组数据,每组有3个数,每个数均是三位数。函数Rdata()读取

这200组数据存放到结构数组aa中,请编写函数numSort(),其功能是:要求在200组数据

中找出条件为每组中的第2个数大于第1个数加第3个数之和,其中满足条件的组数作为函

数numSort()的返回值,同时把满足条件的数据存入结构数组bb中,再对bb中的数据按照

每组数据的第2个数加第3个数之和的大小进行降序排列(第2个数加第3个数的和均不相

等),排序后的结果仍重新存入结构数组bb中。最后调用函数Wdata(),把结果bb输出到文

件OUT.dat中。

注意:部分源程序已经给出。请勿改动主函数main。、读数据函数Rdata()和输出数据

函数Wdata。的内容。

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套试题答案及详解

【审题分析】分析题目可知,本题只要实现numsort。函数的功能即可。numSort。要实

现的功能是:要求在200组数据中找出条件为每组中的第2个数大于第1个数加第3个数之

和,其中满足条件的组数作为函数numsort()的返回值,同时把满足条件的数据存入结构数

组bb中,再对bb中的数据按照每组数据的第2个数加第3个之和的大小进行降序排列(第

2个数加第3个数的和均不相等),排序后的结果仍重新存入结构数组bb中。因此解答本题

的关键在于如何将一个数拆分出前面的3何数字成单个数字,并比较大小以及排序。

【解题思路】在for循环语句巾,自变量i从0递增到200,判断每组中的第2个数大

于第1个数加第3数之和即表达式aa[i].x2>aa[i].xl+aa[i].x3是否成立,如果表达式成立,即

把aa|i]赋给数组变量bb,同时计数变量ent自加。最后用两重循环对数组bb中的数据按照

每组数据的第2个数加第3个之和的大小进行降序排列。

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套上机考试试题

已知数据文件IN.dat中存有200个四位数,并已调用读函数rDataO把这些数存入数组a

中,清编写函数CalVal(),其功能是:把一个四位数的千位数字上的值加上十位数字上的值

恰好等于百位数字上的值加上个位数字上的值,并且原四位数是偶数,则统计出满足此条件

的四位数的个数counl,并把这些四位数按从小到大的顺序存入数组b中。最后调用写函数

wData(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。

注意:部分源程序已经给出。程序巾已定义数组a[200]、b[200],已定义变量count。请

勿改动数据文件IN.dat中的仟何数据及主函数main。、读函数rData()和写函数wData()的内

容。

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套试题答案及详解

【审题分析】分析题目可知,本题只要实现calVal()函数的功能即可。calVal()要实现的

功能是:把一个四位数的各位数字拆分成单个数字,然后按指定方式相加,如果相等且原四

位数是偶数,则统计出满足此条件的个数count并把这些四位数按从小到大的顺序存入数组

b中。因此解答本题的关键在于如何将一个四位数的每位数拆分成单个数字以及如何判断一

个四位数是否为偶数。

【解题思路】对于每一个四位数,用这个四位数除以1000,可得到这个四位数千位上

的数字输给变量thou;这个四位数对1000求余数然后再除以100,可得到这个四位数百位

上的数字输给变量hun;这个四位数对•100求余数然后再除以10,可得到这个四位数十位上

的数字输给变量ten;这个四位数对10求余数,可得到这个四位数个位上的数字输给变量

data。

然后判断表这式thou+ten=data+hun&&a|i]%2!=1是否成立,如果成立,则把这个数

赋给数组b,同时计数变量count加1。最后对数组b中元素进行从小到大的排序。

【参考答案】

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

[易错分析】用求余运算和除法运算得到一个四位数

第4套上机考试试题

已知在文件IN.dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字

符型4位)、产品名称name(字符型10位)、朝介uprice(整型)、舞amount(整型)、通sum(长

整型)5部分组成其中:金额=单价x数最。函数ReadDat()是读取这100个销售记录并存入

结构数组sell中。请编写函数SortDat(),其功能要求:按金额从小到人进行排列,若金额相

同,则按产晶代码从人到小进行排列,最终排列结果仍存入结构数组sell中。最后调用函数

WriteDatO,把结果输出到OUT.dat文件中。

注意:部分源程序已经给出。请勿改动主函数main。、读数据晒数ReadDat。和输出数

据两数WriteDatO的内容。

•include<stdio*h>

Iinclude<string.h>

3Iinclude<conio.h>

q♦includbe<stdlib.h>

5・defineMAX100

6typectefstruct

7Ichaicode[51;/*F仲,

8char111;/*,"品名称”

9int□price:/*单价•/

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套试题答案及详解

【审题分析】分析题目可知,本题只要实现SortDat。函数的功能即可。SortDat。要实现

的功能是:按金额从小到大进行排列,若金额相同,则按产品代码从人到小进行排列,最终

排列结果仍存入结构数组sell中。因此解答本题的关键在于如何通过自定义类型读取‘条销

售记录,并交换它的成员以及排序。

【解题思路】在双重for循环中首先比较两个产晶的金额,如果前一个产品的金额大于

后一个产晶的金额,则这两个产品进行数据交换。如果两个产品的金额相等,则用字符串比

较函数strcmp比较两个产品的代码,如果返回的值小于0,则这两个产品进行数据交换。

【参考答案】

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套上机考试试题

已知文件IN.dat中存有若干个(不多于200个)四位数字的正整数,函数ReadDat()读取

这若干个正整数并存入数组number中。请编写函数CalValue(),其功能要求是:①求出文

件中所有的正整数个数totNum.(求求这些数中的各位数字之和是奇数的个数totCnt,以及

满足此条件的这些数的算术平均值totaveo最后调用函数writeDat。把所求的结果输出到

OUT.dat文件中。

注意:部分源程序已经给出。清勿改动主函数main。、熊|数ReadDat。和函数writeDat()

的内容。

1#include<stdio.h>

2♦include<conio.h>

3tdefineMAXNJM200

4intnumber(MAXNIJMJ;

5inrtotNum=0;/•文件IN.dat中共有的1T.姑数个数•/

6inttotCnt30;.,♦符合条fl"川尊数的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!\007\n">;

20return;

21\

22CalValueO;

23「n口“(”文件3.31中我书的正碎(个故=,<1个\八",

24prinlf/济合条fl的il的个数M.d个\炉,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套试题答案及详解

【审题分析】分析题曰可知,本题只要实现calValue。函数的功能即可。calValue。要实

现的功能是:①求出文件中共有的正整数个数totNum;②求这些数中的各位数字之和是奇

数的个数totCnt,以及满足此条件的这些数的算术平均值totave。因此解答本题的关键在于

如何判断一个数是否为正整数。

【解题思路】在for循环语句中,自变最i从()递增到MAXNUM对数组number中的

每个数进行判断,如果mumber[i]的值大于0,说明number[i]的值为正整数,统计正整数个

数的变量totNum加1;然后用除法和求余的方法对numbers的值求出其各个位上的数字,

分别记录到变量thou、hun、ten、data中,这些数字的和对2求余数,如果余数不为零,则

统计变量totCnt加1,同时把number|i]的值加到totave上,得到这些数的和。退出循环后,

用totave的值除以totCnt,就得到了这些数的算术平均值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}

【易错分析】用number[i]除以1000得到number[i]千位上的数字,用number[i]对1000

求余然后再除以100得至ljnumber[i]百位上的数字,用number[i]对100求余然后再除以10

得至ijnumber[i]十位上的数字,用numbcr[i]对10求余数得到nlll=nber[i]个位上的数字。在求

算术平均值时,要把整型转换成双精度型数据。

第6套上机考试试题

下列程序的功能是:计算500〜800区问内素数的个数count,并按所求素数的值从大到

小的顺序排序内.计算其间隔加、减之和,即第1个素数.第2个素数+第3个素数.第4

个素数+第5个素数……的值sumo

请编写函数primeValue。实现程序的要求。最后调用函数writeDat。,僻果count和sum

输出剑OUT.dat文件中。

注意:部分源程序已给出。请勿改动丰函数main()和输出数据函数writeDat。的内容。

1Jinclude<stdio.h>

2intcountsutiu

3voidprimeValue()

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(■索数的个珈*d\n,count);

17printsL按要求sum);

18writeDat();

19)

第6套试题答案及详解

【审题分析】分析题目可知,本题只要实现primeValue。函数的功能即可。primeValue。

要实现的功能是:计算指定区域内素数的个数count,并排序,再根据指定的运算关系计算

sum值。因此解答本题的关键在于如何判断一个数是否为素数。

【解题思路】判断一个数是否是素数的算法是:如果存在一个从2开始到这个数的一半

之间的数能被这个数整除,则这个数不是素数;否则这个数是素数。

题中,循环变量i从800递减到500,如果存在小于i/2的一个数j,使表达式i%j的

值等丁P,则当前数i不是素数,否则i是素数。计数数变量count加1,把变量i的值加到

变量数组yy中。在求这些素数的间隔加、减之和时,采用了标志变最j,每循环一次变量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,

【易错分析】判断一个数是否是素数时,自变量循环变量i从2递增到i/2

第7套上机考试试题

下列程序的功能是:选出5000以卜符合条件的自然数。条件是:千位数字与百位数字

之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位数字之

差的10倍。计算并输出这些四位自然数的个数count以及这些数的和sum。请编写函数

calValueO实现程序的要求,最后调用函数writeDat(),把结果count和sum输出到OUT.dat

文件中。

注意:部分源程序已经给出。请勿改动主函数main()和输出数据函数writeDat()的内容。

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套试题答案及详解

【审题分析】分析题目可知,本题只要实现calValue。函数的功能即可。calValue。要实

现的功能是:选出5000以下符合条件的自然数。因此解答本题的关键在于如何将指定的条

件转换成C语言表达武。

【解题思路】对于每个四位数,用这个四位数除以1000,可得到这个四位数千位上的

数字输给变量thou;这个四位数对1000求余然后再除以100,可得到这个四位数百位上的

数字输给变量hum这个四位数对100求余然后再除以10,可得到这个四位数十位卜-的数

字输给变量ten;这个四位数对10求余,可得到这个四位数个位卜的数字输给变量data。

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

成立,则把这个数回到变量sum上.得到这些数的和,同时计数变餐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

【易错分析】用求余运算和除法运算得到一个四位数的各个位上的数字。

【考点链接】求余运算、除法运算。

第8套上机考试试题

已知数据文件IN.dat中存有200个四位数,并已渊用读函数readDat。把这些数存入数

组a中,请编写函数primecount(),其功能是:如果四位数各个位上的数字均是奇数,则统

计出满足此条件的个数count并把这些四位数按从人到小的顺序存入数组b中。最后main()

函数调用写函数writeDat(),把结果count以及数组b中符合条件的四位数输出到OUT.dat

文件中。

注意:部分源程序已经给出。程序中已定义数组a[200]、b[200J,已定义变量count。请

勿改动数据文件IN.dat中的任何数据及主函数main。、读函数readDat()和写函数writeDat()

的内容。

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套试题答案及详解

【审题分析】分析题目可知,本题只要实现primeCount。函数的功能即可。primeCount。

要实现的功能是:如果四位数各位上的数字均是奇数,则统计出满足此条件的个数count并

把这些四位数按从大到小的顺序存入数组b中。因此解答本题的关键在于如何将一个四位数

拆分成单个数字,并判断这些数字是否为奇数。

【解题思路】对于每一个四位数,用这个四位数除以1000,可得到这个四位数千位上

的数字输给变量thou;这个四位数对1000求余然后再除以100,可得剑这个四位数百位上

的数字输给变量hun;这个四位数对100求余然后再除以10,可得到这个四位数十位上的数

宁输给变量ten;这个四位数对10求余,可得到这个四位数个位上的数宁输给变量data。

然后判断表达式thou%2!=0&&hun%2l=0&&ten%2!=0&&data%2!=0是否成立,

如果成立,则把这个数赋给数组b,同时计数变最count加1。最后用双重循环对数组b进

行从大到小的排序。

【参考答案】

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)

【易错分析】用求余运算和除法运算得到一个四位数的各个位上的数字。

第9套上机考试试题

函数RData()实现从文件IN.dat中读取一篇英文文章,存入到字符串数组original中:

请编写函数encryptChar(),其功能是:按给定的替代关系对数组original中的所有字符进行

替代后,仍存入数组original的对麻的位置上。最后调用函数WData(),把结果original输出

到OUT.dat文件中。

替代关系:f(p)=p*llmod256(p是数组中某一个字符的ASCH值,f(p)是计算后新字符

的ASCII值),如果原字符的ASCII值是偶数或计算后f(p)值小于等于32,则该字符不变,

否则将f(p)所对应的字符进行替代。

原始数据义件存放的格式是:每行的宽度均小于80个字符。

注意:部分程序已给出。请勿改动主函数main()、读数据函数RData()和输出数据函数

WData()的内容。

第9套试题答案及详解

【审题分析】分析题目可知,题中需要解决的问题就是实现encryptChar函数的功能问

题,而encryptChar函数的功能是:按给定的替代关系对数组original中的所有字符进行替

代后,仍存入数组original的对应的位置上。因此本题的关键在于如何用C程序实现替代关

系的运算。

【解题思路】题13中的“如果原字符的ASCII值是偶数或计算后f(p)值小于等于32,

则该字符不变,否则将f(p)所对应的字符进行替代”,可转化为:如果原字符的ASCI值是奇

数且计算后f(p)值大于32,则该字符用f(p)所对应的字符进行替代,否则不变。在程序中的

语句是: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

【易错分析】在“if(*pP/o2&&*pPMl%256>32)*pf=*pf*ll%256;”这句中表达式*pf%

2和表达式“*p/11%256>32”是与的关系,而不是或的关系

1Iinclude<stdio.h>

2tinclude《string.h)

3Sinclude<conio.h>

4linclude<etype.h>

5unsignedcharoriginal[50][80|;

6intmaxline=0;/•文草1Kli6打数•/

7intRData(void);

8voidWl^ta(void);

9voidencryptChar()

101

11

12)

13voidmain()

14{if(RDataO)

15{prints”数抑;文件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套上机考试试题

已知数据文件lN.dat中存有200个四位数,并已调用读函数起adDat()把这些数存入数

组a中,请编写函数diffVal(),其功能是:把一个四位数的千位数字上的值,减去百位数字

上的值,再减去十位数字上的值,最后减去个位数字上的值,如果得出的值大于等于0且原

四位数是奇数,则统计出满足此条件的个数count并把这些四位数按从小到大的顺序存入数

组b中。最后调用写函数writeDat(),把缔果count以及数组b中符合条件的四位数输出到

OUT.dat文件中。

注意:部分源程序已经给出。程序中己定义数组a[200]、b|2001,已定义变量count。

请勿改动数据文件IN.dat中的任何数据及主函数main。、阖数readDat。和写函数writeDat。

的内容。

•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的数-*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等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论