全国计算机等级三级网络技术上机题库100套_第1页
全国计算机等级三级网络技术上机题库100套_第2页
全国计算机等级三级网络技术上机题库100套_第3页
全国计算机等级三级网络技术上机题库100套_第4页
全国计算机等级三级网络技术上机题库100套_第5页
已阅读5页,还剩181页未读 继续免费阅读

下载本文档

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

文档简介

小金itft徽三级嘱魅MB莉魂

第1套上机考试试题

调用函数rwdata。,从IN.dat文件中读取10组数据(m和k值),并嵌套调用primenum函数分别得出arraylJ

数组。请编写函数primenum(intm,intk,intarray[]),该函数的功能是:将紧靠m的k个素数存入数组array

并在屏幕上显示。最后把结果输出到文件OUT.dat中。

例如,若输入39,则应输出5711131719232931。

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

1Iinclude<conio.h>

2Iinclude<stdio.h>

3voidrwdata();

4voidprimenum(intm#inck,intarray[fj

5i

6

7)

8main(>

9Iinim.n,array11000];

TOprintf(M\nl?leaseentertwointegers:**);

11s3nme;

12primenu?n(mrn,array);

13for1*0;m<n;)

14printf(w^dM,array[mJ);

15printf;

16rwdata(>;

17)

18voidrwdaca()

19fintm.nfarray(1000Jri;

20FILE-rgdfile.•writefile;

21readfile-lopen("in,datH«;

22writefile»fopenCovt.dat**,HwH>;

23for(i*0;i<10;i*T

24Ifscanf(readfile,"%dtd”,Sn):

25primenum(m,nrarray);

26for(nr-O;m<n;

27fprintf{writefile,"$darrayIm]>;

H

28fprintf(writefiler°\n);

29I

30fclos^(read!ile);

31fclose(wntefilel;

32I

第1套试题答案及详解

【知识点播】素数的定义:如果一个数的正因子只有1和这个数本身,那么这个数就是素数。

【审题分析】分析题目可知,题中需要解决的问题就是Primenum函数的功能问题(rwdata函数功

能题中已经给出),而Primenum函数的功能是求在指定数m之后的k个素数,因此本题的关键在于

如何判断一个数是素数,之后就可以通过一个for循环来求得在m之后的k个素数了。

【解题思路】根据素数的定义,本题采用的算法是:首先定义一个变量Value,并把m之后的数

逐个赋值给该变量:然后用2~value/2数除value,如果value能被2〜value/2之中的任何一个整

数整除,则value不是素数,结束循环;如果value小能被2〜value/2之间的任一整数整除,则退出

循环,然后判断循环变量i是否大于value/2,如果大于,则value是素数,并将value值赋给array[n|,

然后n++;再判断n是否大于等于k,如果大于等于k,就完成了程序要求的功能,退出循环,否则

value加1,根据以上算法继续进行。

【参考答案】

1voidprimenum(IarrayI])

2Iintvalue■

3inthalf,n«0ri;

4whiled)

5\half-value/2;

6for(i=2;1++)

7if(value%130)

8break;

9if(£>halfI

10(array(nl-value;

11

121

13if(nxk)

14break;

15value**;

16)

171

【易错分析】判断一个数m(大于1)是否素数的简单的算法:枚举2到m/2之间的整数,看能

否被ni整除,如果能整除,就不是素数,否则是素数。

【考点链接】c语言中循环语句、if语句的应用和素数的算法。

第2套上机考试试题

在文件IN.dat中有200个正整数,且每个数均在1000-9999之间。函数RData()读取这200个数存放到数

组Original中。请编写函数numAscend。,其功能是:要求按每个数的后3位的大小进行升序排列,然后取出

满足此条件的前10个数依次存入数组result中,如果后3位的数值相等,则按原先的数值进行降序排列。最

后调用函数WData(),把结果result输出到文件OUT.dat中。

例如,处理前:60125099901270258088

处理后:90126012702580885099

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

tlnclude<stdio.h>

•include<string.h>

•include<conio.h>

4intoriginal|200]rresult(10J;

5voidnumascend()

6\

7

8)

9voidRData<)

10<FILE♦in;

11inti;

w

12in-fopen(IN.daffF”);

13for(i=0;i<200;i**)

14fscanf(infrd.",&original(i])

15fclose(in);

16I

17voidWData()

181FILE*out;

19inti;

20out*•fopen(wOUT.datw,3];

21for(iw0;i<10;

22Iprintf(*result[ij);

23fprintf(out,“3d\n",result[1J>

241

25fclose(out);

26)

27voidmain(>

28(RDataO;

29numascend();

30WDataO;

31}

第2套试题答案及详解

【审题分析】首先我们来看看题中要求我们解决的问题有哪些。①按original数组中各元素数字的后3

位数的大小进行升序排列,如果数值相等,则按原先的数值进行降序排列;②取出排序后的。riginal数组中的

前10个数依次存入result数组中。

【解题思路】根据上面的分析,编写程序有以下儿个步骤:

第1步:首先分解出数组中两个元素的后三位,这里采用在两次循环中求出止整数original[i]矛noriginal[j]

对1000的余数的方法;

第2步:然后比较两个数余数的大小,如果正整数Original国和original[j]对1000的余数不相同,则按照

升序进行排序,如果相同,则比较origina*和original^的大小,按照降序进行排序;

第3步:利用•个for循环语句把original数组中的前10个数输出给result数组。

【参考答案】

1voidnumascendO

2IintLj,data;

3for(i-0;i<199;

4forj<200;

5<if(originaH£J%1000>original[j]%LCOO)

6{data«original[1];

7original[1]-originalljl;

8original[j)=data;

9)

10elseif(original[i]%1000==original(jI%1000)

11(if(originalli]<original(j])

12{data-original(iJ;

13original[il=originalj);

14original(jJ=data;

15I

16}

17)

18for(i=0;i<10;"+)

19result[ij*original[i];

20}

【易错分析】数组origina】「]中两个数的位置交换要借助中间变量data。

【考点链接】for循环语句、止整数的求余运算。

第3套上机考试试题

已知文件lN.dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4位)、产品名

称name(字符型10位)、单价uprice(整型)、数量amount(整型)、金额sum(长整型)5部分组成。其中:金额二

单价x数量。函数RDataO读取这100个销售记录并存入结构数组sell中。请编写函数DescSortO,其功能要求:

按产品代码从大Nd,进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数

组sell中,最后调用函数WDataO,把结果输出到文件OUT.dat中。

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

1linclude<stdxo.h>

2linclude<5tring.h>

3Iinclude<conio.h>

#include<stdlib.h>

5idefineMAX100

6typedefstruct

Icharcode[5];/•产品代网•/

8charname(11j;/*广招匕称•/

9intuprice;八升价・/

10intamount;!,依端•/

11longsum;'•金福•/

12)PRO;

13PROsell[MAX];

14voidRData();

15voidWData();

16voidDescSorr)

17

16

19

20voidtoain()

211memset(seilrf)r(s^>1M;

22RData();

23DescSorr(i;

24WData(I;

25I

26voidRData(>

2?(FILE♦tp;

28charstr[«0|,ch111J;

29inti;

30fp«fop«n("IN.dat*,,,r");

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

32(fqets(str,80.fp);

33memcpy(sei1(iJ.cod«,5t1.4);

34memcpy(sell(i].name,10);

35memcpy(ch,stir,14.4);

36ch[4)*0;

37sell[i].uprice=atoi(ch);

38memcpy(chrstr+18,5);

39ch(5]=»0;

40sell(i]-amount=atoi(chj;

41sell(i].sum-(longIsell!i].uprice*sell[i]tamount;

42}

43fclose(fp);

44)

45voidWData(void)

46《FILE*fp;

47inti;

48fp•=fopen("OUT.datM,;

49for(i*0;i<100;£♦+)

H

50{printf(%s%s%4d%5d%5d\n-r

51sellfi).ccKie,sell(i).name,sell(i).uprice,

seiI(iJ.amount,sell{1J.sum);

52fprintf(fp,M%s%SQ4d*5d%5d\n*,

53se11(i].codersell{i].name,sell(i).uprfce,

sell(i].amount,sell[1).sum);

54

55fclose(fp);

56

第3套试题答案及详解

【审题分析】首先我们来看看题中要求我们解决的问题有哪些。①按产品代码从大到小进行排列,若产

品代码相同,则按金额从大到小进行排列;②将排列结果存入结构数组sell巾。分析题目可知,本题中使用

结构数组sell来保存销售记录。产品代码存储在sell结构数组中的code成员中,金额存储存sum成员中。

【解题思路】我们可以利用两个for循环结构对产品销售记录(strcmp(sell[i].code.sell[j].code))两两进行循

环比较,如果这个表达式返回结果值小于0,则进行两个数据的交换,实现产品代码从大到小进行排序。如

果上面的表达式的返回值等于0,说明这两个产品的代码相司,则比较seH[i].sumbsell[j].sum的值。如果

sellfi].sumU].sum,则进行两个数据的交换,实现金额从大到小进行排序。

【参考答案】

1voidDescSort()

2(int1/j;

3PROtemp;

4for(1=0;i<99;

5forj<100;>+♦)

6if(5tremp(sell(i]<code/sell[j).co<le><0)

7{temp=sellIiJ;

8-sell(j);

9sell[j)■tamp;

10»

11elseif(strcmp(seil(i|.code,sei11j1.code}0)

12(if(sell[i).sum<seilljl.sum)

13(tempnsell[il:

】4sell(i)-selllj];

15selltj)-temp;

161

171

181

【易错分析】数组sell[i]中两个数的位置交换要借助中间变量temp。

【考点链接】数组中两个数的交换、字符串比较函数strcmp。

第4套上机考试试题

函数RData()实现从文件IN.dat中读取一篇英文文章,存入到字符串数组str中;请编写encryptChar()函数,

其功能是:按给定的替代关系对数组str中的所有字符进行替代,仍存入数组sir对•应的位置上,最后调用函

数WData(),把缔果str输出到文件OUT.dat中。

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

果计算后f(p)值小于1等于32或大于130,则该字符小变,否则将f(p)所对应的字符进行替代。始数据文件

存放的格式是:每行的宽度均小于80个字符。

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

2fanclud^<strinq.h>

3lineludt«:ccni.c.h>

4#include

5unsignedct»ar写tr[50][80);

6AOtrnaxlir^二0;八£Q的侬,故*/

7intRDat<i(-/old);

8voidWD4tafvoid);

9voidenrryprCh-»rO

10(

li

12I

13voidmain。

141if(RDataO)

15(prxntf(-WifiIN.-Jar不阖;'用UAML):

16return;

17I

18encr/ptCharO;

19WOataO;

20,

21intRDdra(vnid)

221FILE・fp;

23inti•D;

24unsignedchai*p;

25it(tfp-toper(UN.dat。f))MULL)

26return〕:

27while(fgets(str(i|/80,fp)!-NULt)

1

28{p=strchr(str;i)#,Xn>;

29if(p)

30*p«0;

31

32)

33maxline«1;

34fclose(fp);

35xeturn0;

36I

37voidWData<void)

38IFILE*fp;

39inci;

MM

40tp=fopen<0U7.dat"/w");

第4套试题答案及详解

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

函数的功能是:实现“按照指定的替代关系将数组str中的所有字符进行替代,替代后仍存入数组str的对应位

置上”。因此本题的关键在于用什么样的C程序语言实现指定的替代关系,之后就可以通过一个双重循环来将

这篇文章中的所有字符逐个替换。

【解题思路】首先通过for循环对数组sir[i]巾的每一个英文字符按照题目给定的替代算法*pPHl%256计

算出其对应的字符的ASCII值,然后把这个ASCII值与130和32进行比较,如果这个值小于等于130且人

于32,则用这个ASCII值代替代原值。

【参考答案】

1voidencryptChar()

2(inti;

3char*pf;

4fori<maxline;i+-f)

5(pt«str[i];

6while(*pf!-0)

7(if(*pf*ll%256<-130“*pfwlli256>32,

8*pf-♦pf>ll%256;

9pff

10)

11]

121

【易错分析】题目中的条件是:如果计算后f(p)值小于等于32或大于130,则该字符不变。在程序中这

个条件写成:*pf*11%256<=130&&*pf*11%256>32。

【考点链接】按照规定的算法f(p)=p*11mod1256进行字符的相互替换。

第5套上机考试试题

函数RDataO实现从文件IN.dat中读取一篇英文文章存入到宁符串数组str中,请编写函数DescSort。,

其功能是:以行为甲单位对字符按从人到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组str

中,最后调用函数WData(),把结果str输出到文件OUT.dat中。原始数据文件存放的格式是:每行的宽度均

小于80个宁符(含标点符号和空格)。

例如,原文:dAeBfC.

CcbbAA

结果:fedCBA.

cbbCAA

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

1>include<stdio.h>

2tinclude<string.b>

3♦include<ccnio.h>

4charstr[50](80];

5intiraxlme-0;/*文制相iiftt*/

6£ntFData(void);

7void(void);

8voidDescSort(void)

9

10

11)

12voidmainO

13(if(RDataO)

14(printf「数据文件IN.dat不能打开!\n\007");

15return;

16)

17DescSort();

18WData();

19]

20intRData(void>

21{FILE*fp;

22inti■0;

23char*p;

H

24if({fp-fopenriN.dat-rr*))=WLL)

25return1;

26while(fgetslstr[i]r80,fp)!=NULL)

27Ip,strchr(str[i],*\n*);

28if(P)

29*p,0;

30

31

32maxline=1;

33fclo3e(fp);

34return0;

35}

36voidW^ata(void)

37IFILE*fp;

38inti;

39fp□fopenLOOT.daL・Mww);

4cfor(i*0;Kmaxline;if

41w

printfr%s\n,str(ij);

42fprintf(fp,str[i]

43I

44fclose(fp);

45

第5套试题答案及详解

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

的功能是:实现“以行为单位对字符按从火到小的顺序进行排序,排序后韵结果仍按行重新存入字符串数组str

中”。因此本题的关键在于如何判断将字符串拆分成单独的字母,之后就可以通过一个三重循环来将所有字符

逐个比较字母的大小,并存入数组str中。

【解题思路】首先利用三重循环中的第一层循环将字符读入数组strl中,然后利用内层的二重循环对文

章中每一行的字符进行两两比较,较小的字符往行后放,较大的字符往行前放,这样就实现了以行为单位对

字符从大到小的排序。在程序中的语句是if(str[i][jKstr[i][kD成立,st咽和str皿k]就交换数据。

【参考答案】

1voidDescSoit(void)

2(intj,k.strl;

3charch;

4for(i*0;i<maxline;

5I5trl=strlen(stc(i));

6for(j-0;

7for(k-j+1;k<strl;k,+)

8if(strliHU<strtll[kJ)

9(ch-str(ij(j);

10str(1)(jl-strfi][k];

11str[ij(kJ*ch;

12I

13}

14)

【易错分析】变量j的取值范围是0到strl-h而变量k的取值范围是j+1到strl。

【考点链接】C语言的for循环语句的用法、两个字符的交换。

第6套上机考试试题

函数RData()实现从文件lN.dat中读取一篇英文文章存入字符串数组original中,请编写StrChai-Move()

函数,其功能是:以行为单位把字符串中所有字符的ASCII值右移4位,然后把右移后的字符ASCII值再加

卜原字符的ASCH值,得到新的字符仍存入原字符串对应的位置上。最后把已处理的字符串仍按行重新存入

字符串数组Original中。最后调用函数WData(),把结果Original输出到文件OUT.dat中。原始数据文件存放

的格式是:每行的宽度均小于80个字符(含标点符弓和空格)。

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

finclude<stdio.h>

#include<string.h>

3,include<conio.h>

4charoriginal(50][80];

5intmaxiine=0;/*文和摩6行教•/

6intRData(void);

7voidWData(void>;

3voidStrCharMove(void)

9

10

11

12voidmin《)

13(if(RDataO)

14lprintf("明文件TN.dat不能打开!\n\007”);

15return;

16)

X7StrCharMove();

18WData(};

19)

20intRData(void)

21(FILE*fp;

22int1-0;

23char*p;

24Hw

if((fp-fc^en(lN.dat/"r"))=NULL)

25return1;

2。while(fgets(original90,fp)!*NULL)

21f

.pqscrchr(oriqtn»51{i:r*\n*J;

28if(p)

29*P”0;

30j

31)

32n^xlme•i;

33fclosc(fp);

•4return0;

35I

36voidWData(void)

37(FILE-fp;

38inti;

39fp-fooen("OUT.dat",W;

40for(i»0;i<ma幻Lie;iT

41Iprint1criain^lliJI;

42fpiinlf(fp,73moriginal(i]);

43j

44

45

第6套试题答案及详解

【知识点播】ASCH码值的右移运算可以通过运算符(>>)束实现,左移运算符为(<<)。

【审题分析】分析题日可知,题中需要解决的问题是实现StrtZharMove函数的功能问题,而StrCharMove

函数的功能是:以行为单位把字符串中所有字符的ASCII值右移4位,然后把右移后的字符ASCII值再加上

原字符的ASCII值,得到新的字符仍存入原字符串对应的位置上,最后把已处理的字符串仍按行重新存入字

符串数组original中。因此本题的关键在于如何进行ASCII值的右移运算。

【解题思路】苜先用字符串函数strlen求出每行的长度,然后在for循环语句中将将每个字符转换成ASCII

码值:接着右移4位,即original[i皿>>4;再和original[i皿的值相力口;最后将得到的ASCII码值转换成字符

并存入数组original中。

【参考答案】

1voidStrCharMove(void)

2!int和strL;

3tor(i-0;Kmaxline;)

4\strI*strlen(originalIiI);

Sfor(j»0;jot.rl;

6otigina){iMj)**original(i!Ij]»4;

7I

8)

【易错分析】字符的ASCII码值右移4位,再和原值相加,用语句original[i|[j]+=original[i][j]>>4实现。

【考点链接】每个字符的ASCII码值存移4位,即ofiginal[i][j]>>4

第7套上机考试试题

编写函数findStr。,其功能足:统计一个长度为2的子字符串在另一个字符串中出现的次数。例如,似

定输入的宁符串为"asdasasdfgasdaszx67asdmklO”,子字符串为"as”,函数返I可值是6。

函数ReadWrite。实现从文件IN.dat中读取两个字符串,并调用函数findStr(),最后,把结果输出到文件

OUT._dat中。

注意:部分程序已经给出。请勿改动主函数main()和其他函数中的任何内容,仅住函数AndStr()的花括号

中填入编写的若干语句。

1#include<stdio.h>

2tinclude<strLnq.h>

3#include<conio.h>

4intfindStr<chax*stxrchar*substr)

士•

6

7)

8voidReadWrite()

9Iclurstrf81Jrsubstr[10|,ch;

10intn.len,i«0;

11FILE*4,*wf;

12rf-fopeni-IH.dat*,;

13wf-fopen(-0UT.dat",Mww);

14while(1<25)

15(fgets(str/81,rf);

16fgets(substr,10,rf);

17len-strlen(substr)-1;

18ch=sunstr|len];

19if11chDxla)

20substr[len]»0;

21n»findStr(str#substr);

22tprdntl(wf,r

23

24

25fclose(rt);

26fclos^(wf);

27

28rwinO

291charijtrlSlbsubstr1101;

30intn;

31priMf("谕入夙字?叫D;

32qets(str),

33prinr.f(”愉人广字符小:力;

34qprs(sub.^rr);

35puts(Sir);

36puts(substr);

37n-tindStrr,sub^trl;

38piintfn);

39BetxiWrile();

40I

第7套试题答案及详解

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

能是:统计满足“一个长度为2的子字符串在另一一个字符串”条件的字符串出现的次数。因此木题的关键在

于如何判断•个字符串在另外一个字符串中。

【解题思路】这里用字符指针P和r分别指向字符串和予字符串,在while循环中比较*r和+p的值,如

果两者的值相等,则r和P分别加1:如果两者不相等,则对*r的值进行判断。如果*r的值等于、0,,则说

明在字符串*str中找到了一个与*substr相匹配的字符串,所以n加1。然后str加1,进入下,个寻找与子字

符相匹配循环,直到退出while(*str)循环,返回的整数n值就是与子字符串相匹配字符串的个数。

【参考答案】

1intfindStr(char*Str,char*subStr)

2(intn;

3char*p,

4nw0;

5while

6(p-str;

7r-substr;

8while(*r)

9if(*r■■*p)

101r*4;

11pf

12}

13else

14{break/

15I

16if

17m;

18str4>;

19I

20returnn;

211

【易错分析】字符串的最后一个字符是null,所以当字符串指针str和r达到字符串的结尾时,就自动退

出while循环。

[考点链接】在字符串中寻找与子字符串相匹配的字符串个数。

第8套上机考试试题

请编写函数CountValue。,它的功能是:求n以内(不包括n),同时能被3与-7整除的所有自然数之和的

平方根S,并作为函数值返回。主函数最后调用函数progReadWriteO从IN.dat文件中读取10组数据,分别得

出结果,旦把结果输出到文件0UT.dat中。

例如,若n为1000时,函数值应为:8=153.9090640

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

1#intrude<conio.h>

2#include<nath.h>

3Iinclude<stdio.h>

4doubleCountValue(intn)

5(

6

7}

BvoidprogHeac>jiite()

9(FILE*fp,*wf;

10intirn;

11floats;

12fp-fopen「in・daL,*'rH);

13if(fp-NULL)

14{printfLSfclK文件in.dat:dWM口

15return;

16I

17wfmfopen(**out*datH,”");

18for(i=0;i<10;i+t)

19(fscanf(fp,"id,",&n);

209={float)countvalue(n);

21fprintfMfs);

22|

23fclose(fp);

24fclose(wf);

25I

26mainO

27(printf,”1000加在介轴的「I然磔他的?力根-fs“,CountValue(1000));

28progReadWrite0;

29}

第8套试题答案及详解

【审题分析】分析题目可知,CountValue。函数要实现3个功能:①求出n以内所有能被3和7整除的整

数;②将这些整数相加求它们的和;③对这个和求平方根。

【解题思路】这里我们先通过for循环语句来求出12以内所有能被3和7整除的整数同时对这些数求和;

然后把和转化为双精度型数据,利用开平方函数sqrt()求出这个和数的平方根。

【参考答案】

1doublecountVaJue(intn)

2(double;xy=0.0;

3inti;

4for(i-l;l<n;

5if(i%3^=0“i47-»0)

6xy+・i;

7xy«sqrt{(double)xy);

8returnxy;

91

【易错分析】能被3和7整除的整数的条件为:i%3==O&&i%7=0;在求和的平方根之前,首先要把

和数的类型转化为双精度型。

【考点链接】求余运算、C语言中数据类型的相互转换。

第9套上机考试试题

已知在文件IN.dat中存有N个(N<200)实数,函数RDataO读取这N个实数并存入数组original中。请编

写函数CalValueO,

要求实现的功能有:

①求出这N个实数的平均值(aver);

②分别求出这N个实数的整数部分之和(sumint)以及小数部分之和(sumdec),最后调用函数wData()把所

求的结果输出到文件OUT.dat中。

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

1^include<stdio.h>

2#include<conio-h>

3IdefineMAXNEM200

4floatoriginallMAXNUMl;

5doubleaver•0.0;

6longsurdnt-0;

7doublesumdec=0.0;

8intRData(void);

9voidWOata(void);

10voidCalVaiije(void)

11(

12

13I

14voidmain()

15(inti;

16for(i-0;i<MAXNUM;W)

17original[i]=0;

18if(RDataO)

19(printf「数据文件IN.dat开八0075-);

20return;

21I

22CalValueO;

23printf(”平均值7.21f\n”,aver);

24pdntf分之sumint);

25printf分之机*.21八n”,sumdec);

26KDataO;

27)

28intRData(void)

29(FILE*fp;

30inti=0;

31if((fp»fopen("IN.dat*,T)J=NULL)

32return1;

33while(!feof(fp))

w

34fscanf(fpr%fr"rlioriginal[i-*-*]);

35fclose(fp);

36return0;

371

38voidWData(void)

39(FILE*fp;

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

41fprintf(fp,.21八n”,aver,sumintrsumdec);

42fclose(fp);

43I

第9套试题答案及详解

【审题分析】分析题目可知,函数CalValue。函数要实现2个功能:

①求出这N个实数的平均值(aver);

②分别求出这N个实数的整数部分之和(sumint)以及小数部分之和(sumdec)。

【解题思路】这里我们可以利用for循环语句对数组original。中的每一个实数逐个进行处理。对于每一

个实数original^],在其数据前面加上(int)就得到这个实数的整数部分;用original[i]减去(int)original[i]就得至I]

这个实数的小数部分。然后分别求出MAXNUM个实数的和(sum)、整数部分的和(sumint)、小数部分的和

(sumdec)«最后用sum除以MAXNUM就得到平均值(aver)。

【参考答案】

1voidCalValue(void)

21inti;

3doublex,sctn-0;

4for(i-0;KMAXNUM;i++)

5{sumint•sumint*(int)original(ij;

6x=>original[iJ-(int)oiiginal[ij;

7smndec-sumd・5x;

8sum-Bum4-original[x];

9,•

10aver=sum/MAXNUM;

11J

【易错分析】实数分成整数部分和小数部分,在实数前面加上(int)就得到这个实数的整数部分,实数减

去整数部分就得到小数部分。

【考点链接】数据类型的转换。

第10套上机考试试题

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

primeNum(),其功能是:求出所有这些四位数中素数的个数count,再把所有满足此条件的四位数依次存入数

组b中,然后对数组b的四位数按从小到大的顺序进行排序。最后调用写函数Wdata(),把结果输出到OUT.dat

文件中。

例如,5591是素数,则该数满足条件存入数组b中,且个数count=count+l。9812足非素数,则该数不

满足条件,不存入数组b中,count值也不加1。

注意:部分源程序已经给出。程序中已定义数组a[3OO],b[3OOJ,已定义变量count。请勿改动主函数main。、

读函数Rdata()和写函数Wdata()的内容。

1finclude<stdxo.h>

2inta(300)9b[300],count-0;

3intm)

4(int1;

5for(i-2;i<m;

6if(m*i••0)

7return0;

8return1;

9}

10voidprimeNumO

11f

12

131

14voidRdata()

151FILE*fp;

16inti;

R,

17fp-fopen{in.dat*/

18for(i-0;i<300;i4♦)

19fscanf(fp#

20fclode(fp);

21I

22voidWdata(>

23(FILE*fp;

24inti;

25fp•fopenCout,dar,-,X”);

26fprintf(fp#count):

27for(i«0;i<count;1**)

28fprintf(fprb[i));

29fclose{fp);

温馨提示

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

评论

0/150

提交评论