国家三级信息管理技术机试模拟试卷3(共9题)_第1页
国家三级信息管理技术机试模拟试卷3(共9题)_第2页
国家三级信息管理技术机试模拟试卷3(共9题)_第3页
国家三级信息管理技术机试模拟试卷3(共9题)_第4页
国家三级信息管理技术机试模拟试卷3(共9题)_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

家三级信息管理技术机试模拟试卷3

(共9套)

(共9题)

明家三级信息管理技术机试模拟试卷第

1套

一、程序设计题(本题共1题,每题1.0分,共1分。)

1、已知IN7.DAT中存有200个4位数,并已调用读函数readDat。把这些数存入数

组a中,请编制一函数jsVal(),其功能是:依次从数组a中取出一个数,如果该4

位数连续大丁该4位数以后的5个数且该数是奇数,则统订出满足此条件的数的个

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

writeDat()把结果ent及数组b中符合条件的4位数输出到OUT7.DAT文件中。注

意:部分源程序已给出。程序中已定义数组:al200],”200],已定义变量:ent。

请勿改动主函数main。、读函数readDat。和写函数writeDat。的内容。试题程序:

#include<stdio.h>#defineMAX200inta[MAX],b[MAX],cn(=0;voidwriteDat();

voidjsVal(){voidreadDat(){inti;FILE*fp;fp=fopen("IN7.DAT","r");for(i=0;i

<MAX;i++)fscanf(fp,"%d",&a[i]);close(fp);)main(){inti;readDat();jsVal();

printf("满足条件的数二%d\n\ent);for(i=0;i<ent;i++)printf("%d",b[i]);printf

("\n");writeDat();}voidwriteDat(){FILE*fp;inti;fp=fopcn("OUT7.DAT'\"w");

fprintf(fp,"%d\n",ent);for(i=0;i<ent;i++)fprintf(fp,"%d\n",bfi]);fclose(fp);)

标准答案:voidjsVal(){inti,j,flag=O;intk;for(i=0;i<MAX-5;i++){for(j=i+l;j

V=i+5;j++)/*如果当前数比后面的5个数都大,则给标志变量flag赋值1*/{if

(a[i]>afjl)flag=l;else{flag=O;break;}/*否则给标志变量ilag赋值0并退出循环*/

if(a[i]%2=0)/*如果该数是偶数,也给标志变量flag赋值0*/flag=0;}if(flag==l>

/*将满足条件的数存入数组b中,并统计满足条件的数的个数*/

{b[cnt]=a[i];cnt++;}}for(i=0;i<cnt-l;i++)/*利用选择法对b数组中的元素进行

从小到大的排序*/for(j=i+l;jVcnt;j++)if(b[i]>b[j]){k=b[i];b[i]=b[j];b[j]=k;))

知识点解析:根据题意可知,要编制函数的功能有两部分:一是找出满足条件的4

位数,二是对找出的数进行从小到大排序。首先利用一个for循环来依次从数组中

取得4位数,接着用当前得到的4位数与该数后面的5个数依次进行比较,如果该

数比后面的5个数都大,则给标志变量flag赋值1,接着对flag进行判断,如果不

为I,则该数肯定不符合条件,直接去取下一个数。若flag值为1,再来判断该数

是否是奇数,如果该数又是奇数,则把该数加入到数组b中。这样就可以依次取出

符合条件的数。然后利用选择法对b数组中的元素进行从小到大的排序。

国家三级信息管理技术机试模拟试卷第

2套

一、程序设计题(本题共7题,每题7.0分,共I分。)

1、已知数据文件IN87.DAT中存有300个4位数,并已调用函数readDal。把这些

数存入数组a中,请编制一函数jsVakie。,其功能是:求出千位数.卜.的数加个位数

上的数等于百位数上的数加十位数上的数的个数cnl,再求出所有满足此条件的4

位数平均值pjzl,以及所有不满足此条件的4位数的平均值pjz2,最后调用函数

wrileDat。把结果ent,pjzl,pjz2,输出到oul87.dat文件中。例如:6712,

6+2=7+1,则该数满足条件,计算平均值pjzl,且个数cr」=cnl+l。8129,

8+9/1+2,则该数不满足条件,计算平均值pjz2。注意:部分源程序己给出。程

序中已定义数组:a[300],b[300b已定义变量:ent,pjzl,pjz2.请勿改动主函

数main。、读函数readDatQ和写函数writedat。的内容。试题程序:#include<

stdio.h>inta[300],cnt=O;doublepjz1=0.0,pjz2=0.0;voidjsValue(){}main(){inti;

readDatO;jsValue();writeDat();printf("cnt=%(.l\n满足条件的平均值pjzl=%7.21f\n不

n

满足条件的平均值pjz2=%7521f\n,ent,pjzl,pjz2);}readDat(){FILE*fp;inti;

fp=fopen("in87.dat","r");for(i=0;i<300;i++)fscanf(fp,"%d,'\&a[i]);fclose(fp);}

writcDat(){FILE*fp;inti;fp=fopcn("out87.dat,',"wH);

fprintf(fp,"%d\n%7.2IAn%7.21f\n",cnt.pjzl,pjz2);fclosc(fp);}

标准答奈:voidjsValue(){inti,thou,hun,ten,data,n=0;for(i=0;i<300;i++)

{thou=a[i]/1000;/*求四位数的T•位数字*/hun=a[i]%1000/l00;/*求四位数的百位数

字*/ten=a[i]%100/10:/*求四位数的十位数字*/data=a[i]%10:/*求四位数的个位数字

*/if(lhou+da[a==hun+len)/*如果千位数加个位数等于百位数加十位数*/(cnl++;/*

则统计满足条件的数的个数*/pjzl+=a[i];/*将满足条件的数求和*/}else{n++;/*否

则统计不满足条件的数的个数*/pjz2+=a[i];/*将不满足条件的数求和*/}}

pizl/=cm;/*求满足条件的数的平均值*/pjz2/=n;/*求不满足条件的数的平均值*/}

知识点解析:本题考查的知识点如下:⑴运算符"%''及个的使用。(2)循环结构

及选择结构的使用。在本题中,首先要将一个4位数的千位、百位、十位、个位

拆成独立的数字。这里借助特殊运算符号“%”(取余)和“尸(整除),拆分方法略。然

后判断符合千位数十个位数二百位数+十位数的数的个数。依次求得符合各种条件的

数的和及其平均值。

国家三级信息管理技术机试模拟试卷第

3套

一、程序设计题(本题共[题,每题7.0分,共7分。)

1、已知数据文件INI4.DAT中存有200个4位数,并已调用读函数readDal()把

这些数存入数组a中,请编制•个函数jsVal(),其功能是:把千位数字和卜位数

字重新组成一个新的十位数ab(新十位数的十位数字是原4位数的千位数字,新十

位数的个位数字是原4位数的十位数字),以及把个位数字和百位数字组成另一个

新的十位数cd(新十位数的十位数字是原4位数的个位数字,新十位数的个位数字

是原4位数的百位数字),如果新组成两个十位数ab-cd>=0且ab-cd<=10且两个

数均是奇数,同时两个新十位数字均不为零,则将满足此条件的4位数按从大到小

的顺序存入数组b中,并要计算满足上述条件的4位数的个数ent,最后调用写函

数writeDat。把结果ent及数组b中符合条件的4位数输出到OUT14.DAT文件

中。注意:部分源程序已给出。程序中己定义数组:a[200],hf200],已定义变

fi::onto请勿改动主函数main。、读函数readDat。和写函数writeDat。的内容。

试题程序:#include<stdio.h>#defineMAX200intalMAXJ,b[MAX],ent=0;

voidjsVal(){}voidreadDati){inti;FILE*fp;ip=fopen("lN14.DAT”,T);ior(i=0;

i<MAX;i++)fscanf(fp,"%d",&a[i]);fclosc(fp);}main(){inti;readDat();jsVal();

printf("满足条件的数二%(1\11",ent);for(i=0;i<ent;i++)printf("%d",b[i]);

printf("\n");writeDatO;}writeDat(){FILE*fp;inti;fp=fopen("OUT14.DAT","w");

fprintf(fp,"%d\nH,ent);for(i=0;i<ent;i++)fprintf(fp,"%d\n",b[i]);fclose(fp);}

标准答菱:voidjsVal(){inti,thou,hun,ten,data,j;intab,cd;for(i=0;i<200;i++)

{thou=a[i]/1000:/*求四位数的千位数字为hun=a[i]%1000/100;/*求四位数的百位

数字*/ten=a[i]%i00/10:/*求四位数的十位数字*/data=a|i]%10;/*求四位数的个位

数字*/ab=10*thou+ten;/*把千位数字和十位数字重新组成一个新的十位数ab*/

cd=10*data+hun;/*把个位数字和百位数字组成另一个新的十位数cd*/if((ab-cd)>

=0&&(ab-cd)<=10&&ab%2==1&&cd%2==1&&ab!=0&&cd!=0)/*如果ab-cd

>=0且ab-cd<=10且两个数均是奇数同时两个新十位数字均不为零*/{b[ent]=a

用;/*则把满足条件的数存入数组b中*/cnl++;/*统计满足条件的数的个数*/}}for

(i=0;i<cnt-l;i++)/*将数组b中的数按从大到小的顺序排列*/for(j=i+i;jVent;j++)

if(b[i]<b[j]){data=b[i];b[i]=b[j];b[j]:data;})

知识点解析:本题看起来似乎比较烦琐,但只要仔细分析,把思路理清,还是不难

解决的。由题意可以列出解题步骤如下:(1)求得当前所取得的整数的千位、百

位、十位、个位上的数字值,可以借助使用(除法)与"%''(取余)两个运算符。

(2)按照要求(第一个十位数;新十位数的十位数字是原4位数的千位数字,新十位

数的个位数字是原4位数的十位数;第二个十位数:新十位数的十位数字是原4位

数的个位数字,新十位数的个位数字是原4位数的百位数字)把求得的各个位上的

数字值组成两个新的十位数。(3)对新组成的两个十位数进行条件判断(判断条件的

语句是“if((ab-cd)>=0&&(ab-cd)<=10&&ab%2==1&&cd%2==1&&ab!=O&&

cd!=O)"),如果满足条件,则把原来的4位数放到数组b中,同时用一个计数器变

量ent求出满足条件的4位数的个数。(4)对数组b中的4位数用选择法进行从大到

小排序。

盟家三级信息管理技术机试模拟试卷第

4套

一、程序设计题(本题共[题,每题7.0分,共7分。)

1、已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代

码dm(字符型4位)、产品名称me(字符型10位)、单价dj(整型)、数量si(整型)、

金额je(长整型)5部分组成。其中:金额=单价x数量。函数ReadDatO读取这100个

销售记录并存入结构数组sell中。请编制函数SoriDatO,其功能要求:按产品代码

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

仍存入结构数组sell中,最后调用函数WriteDatO把结果输出到文件OUT10.DAT

中。部分程序已经给出。请勿改动主函数main。、读数据函数ReadDat。和输出数

据函数WriteDat。的内容。#inckide<stdio.h>#include<mem.h>#include<

string.h>#include<conio.h>#include<s(dlib.h>#definsMAX100typedef

struct)chardm[5];/*产品代码*/char/*产品名称*/intdj;/*单价*/intsi;/*数

量*/longje;/*金额*/}PRO;PROsell[MAX];voidReadDat();voidWriteDatO;void

SortDat(){}voidmain(){memset(sell,0,sizeof(sell));ReadDat();SortDat();

WriteDatO;)voidRcadDat(){FILE*fp;charstr[80],ch[l1];inti;fp=fopcn

("IN.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);memepy(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(void){FILE*fp;inti;fp=fopen("OUT10.DAT","w");

for(i=0;i<IOO:i++)

{printf("%s%s%4d%5d%5d\n,',sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i],je);

fprintf(fp,"%s%s%4d%5d%5d\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(strcmp(sell[i].dm,sell[j].dm)<0){xy=sell[i];sell[i]=sell[j];sell[j]=xy;)else

if(strcmp(sell[i].dm,sei1[j].dm)==0)if(sell[i].je<sell[j].je){\y=sell[i];sell[i]=sell[j];

sell|j]=xy;}}

知识点解析:该程序属于结构体数据的应用,考核的知识点为:(1)结构体类型成

员变量的基本概念;(2)比较排序的算法。本题的解题思路是;先按产品代码进行

降序排列,若代码相同则按金额进行降序排列。排序的算法为:每次选定一个位置

的元素的代码和它后面所有.元.索的代码相比较,如果前者小于•后者则两者交换,

如果两者代码相等则按金额比较。完成比较i趟后,此位置元素的代码就不小于其

后面所有元素的代码。比较一直进行到所有元素均被访问后结束,一共需,要比较

100趟,每趟需要比较100-j次。在C语言中字符串比较不能直接通过“V”或者

实现,必须调用strcmpO函数来实现。此类题目都涉及结构体变量的分量预算

符号’…。关于结构体变量与分量的概念是三级考试的一个重点,考生在编写程序

的时候一定要留心此处。程序的流程是:首先调用mcmset。函数,该函数的功能

是将sell数组的前sizeof(sell)个字节的值赋为0。然后调用ReadDat。函数读入数

据。由SorlDal。函数处理后,再由WriieDat()函数写回文件OUT.DAT中。答案解

析如下:voidSoitDat(){inti,j;PROxy;/*定义结构体变量xy*/for(i=0;i<99;i++)

产双重tor循环将sell数组元素中的dm两两进行比较,进行降序排列学tor(j=i+l;j

<100;j++)if(strcmp(sen[i].dm,sell(j]dm)VO){/*判断前者产品代码是否小于后者*/

xy=sell[i];/*若小于两条记录交换位置*/sell[i]=seH[j];seH[j]=xy;}else

if(strcmp(sell[il.dm,sell[j].dm)=0)/*否则再判断前者产品代码是否等于后者列

if(sell|i].jeVse川j].je)/*若相等,则判断前者的金额是否小于后者*/(xy=seH[i];/*若

小于两彖记录位置*/sell[i]:seH[j];二xy;}}

家三级信息管理技术机试模拟试卷第

5套

一、程序设计题(本题共7题,每题7.0分,共7分。)

1、请编制程序,要求:将文件IN92.DAT中的200个整数读入数组xx中,求出数

组xx中最大数max及最大数的个数ent和数组xx中值能被3整除或能被7整除的

数的算术平均值pj(保留两位小数),结果max,cnl,pj输出到out92.dar中。部分

程序、读函数read_dal(inlxx[200])及输出格式已给出。试题程序:#include<

conio.h>#includestdio.h>#defineN200voidread_dat(intxx[N]){inti,j;FILE

*fp;fp=fopen("IN92.DAT",,,r");for(i=0;i<20;i++){for(j=0:j<10;j++)

{fscanf(f]3,"%d,",&xx[i*10+j]);printf("%d",xx[i*10+j]);}printf("\n");}fclose(fp);}

voidmain(){inti,k,cnt,xx[N],max:floatpj;FILE*fw;longj=0;clrscr();

fw=fopen("out92.dat","w");read_dat(xx);

printf("\n\nmax=%d,cnt=%d,pj=%6.2f/n",max,cnt,pj);

fprintf(fw,"%d\n%d\n%6.2f\n",max,cnt,pj);fclose(fw);)

标准答案:voidmain(){inti,k,cnt,xx[N],max;floatpj;FILE*fw;longj=0;clrscr();

fw=fopen(,,out92.dar,\"w");read_dar(xx);max=xx[0];for(i=l,k=0;i<N;i++){if(xx[i]>

max)max=xx[i];求出数组xx中最大数max*/if(xx[i]%3==0||xx[i]%7==0)

{j+=xx[i];/*求出数组xx中值能被3整除或能被7整除的数的总和*/k++;}}

for(i=0,cnt=0;i<N;i++)if(xx[i]==max)cnt++;/*求出数组xx中最大数max的个数*/

pj=(float)0*IOO/k)/iOO;尸求出数组xx中值能被3整除或衩7整除的数的平均值列

printf("\n\nmax=%d,cnt=%d,pj=%6.2f\n'\max,cnt,pj);

fprin(f(fw,,'%d\n%d\n%6.2i\n",max,cn(,pj);fclose(fw);}

知以点解析:本题考杳的知识点如下:⑴运算符“%”的使用。(2)判断结构中多个

条件的布尔运算。首先,要找出数组中最大的元素。先定义第1个元素为最大的

元素,然后依次和后面的元素比较,若后面的数中有大于第1个元素的,则将这个

数定义为最大的元素。再和后面的数进行比较。一个数a除以b取余所得的数为

0,则a能被b整除。根据题意可知,被3整除和被7整除两个条件满足一个即

可,所以两个条件之间用“或”运算。在本题中,要求算术平均值保留两位小数。使

用的方法是:将和乘以100除以个数强制类型转换后再除以100。为了保证和有

效,我们定义了一个长整型变量来记录和。因为个数也为整型,运算符“二在这里

的含义是整除,而我们要保留小数,所以要使用强制类型转换将和乘以100的结果

转换为浮点类型,这样就可以实现保留两位小数。

家三级信息管理技术机试模拟试卷第

6套

一、程序设计题(本题共7题,每题7.0分,共7分。)

1、函数ReadDatO的功能是实现从文件ENG95.IN中读取一篇英文文章,存入到字

符串数组xx中。请编制函数encryChar(),按给定的替代关系对数组xx中所有字符

进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat。把结果xx输

出到文件PS95.DAT中。替代关系:f(p)=p*llmod256(p是数组xx中某一个字符

的ASCCH,f(p)是计算后新字符的ASCH值),如果计算后f(p)的值小于等于32或

f(p)对应的字符是大写字母,则该字符不变,否则将f(p)所对应的字符进行替代。

注意;部分源程序已给出。原始数据文件的存放格式是每行的宽度均小于80个字

符。请勿改动主函数main。、读函数ReadDatO和写函数WriteDaK)的内容。试题

程序:#include<conio.h>#include<sldio.h>#include<string.h>#include<

ctypc.h>unsignedcharxx[50][80];intmaxline=0;intRcadDat(void);void

WriteDat(void);voidencryChar(){}voidmain(){clrscr();if(ReadDat()){printf("数据

文件ENG95.IN不能打开!\n'007");return;)encryChar();WriteDatO;)int

ReadDat(void){FILE*fp;inti=0;unsignedchar*p;

if((fp=fopen("ENG95.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(Hps95.dat","\v");for(i=0;i<maxline;i++)

{printf(n%s\n",xx[i]);fprintf(fp,"%s\n",xx[i]);}fclose(fp);}

标准答案:voidcncryChar(){inti;char*pf;for(i=0;i<maxline;i++){pf=xx[i];/*指

针pf指向该行第一个字符*,while(*pf!=0){1%256>=,A,&&*pf*ll%256

<=N,)||*pf*ll%256<=32)产如果计算的值小丁•等于32或刈成的字符是大写字母

*/{pf++;/则不做改变,指向下一个字符*/continue;/*退出本次循环*/}

*pf=*p#ll%256;/*否则用新字符取代原有字符*/pf++;/*指向下一个字符*/}}}

知识点解析:本题考杳的知识点如卜;(1)字符对应的ASCII码。(2)判断结构中多

个条件的“或”运算。(3)退出一次循环。(4)二维数组的访问。本题中,将数据存放

在一个二维数组中,可以定义一个指向数组每一行的指针。初始时,指针指向该行

的第一个元素,随着地址增加,指针指向后面的元素。在C语言中,字符可参与

任何整数运算。实际上,是字符的ASCH码参与了运算。所以可以直接用字符代

入f(p)的关系式中求出替换字符。若f(p)对应的字符是大写字母或f(p)W32,则该字

符不变。只有当字符大于等于A小于等于Z时,才是大写字母,所以这两个条件

之间用''与"运算。而字符是大写字母与t(p)W32两条件满足一个即可,所以这两个

条件之间用“或”运算。若字符不变,则可不必计算替换字符,使用continue跳出本

次循环,进入下一次循环的条件判断中。因为这里不是直接退出循环结构,所以不

能使用break语句。

国家三级信息管理技术机试模拟试卷第

7套

一、程序设计题(本题共7题,每题7.0分,共7分。)

1、已知数据文件IN86.DAT中存有200个4位数,并己调用读函数readDat。把这

些数存入数组a中,请编制一函数jsVal(),其功能是;把千位数字和十位数字重新

组合成一个新的十位数ab(新十位数的H立数字是原4位数的千位数字,新十位数

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

十位数cd(新十位数的十位数字是原4位数的个位数字,新十位数的个位数字是原

4位数的百位数字),如果新组成的两个十位数ab>cd,a5必须是偶数且能被5整

除,cd必须是奇数,同时两个新十位数字均不为0,则将满足此条件的4位数按从

大到小的顺序存入数组b中,并要计算满足上述条件的4位数的个数ent,最后调

用写函数writeDat。把结果ent及数组b中符合条件的4位数输出到OUT86.DAT文

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

量:cnl。请勿改动主函main。、读函数readDal。和写函数wrileDat。的内容。试

题程序:#include<stdio.h>#defineMAX200inta[MAX],b[MAX],cnt=0;void

jsVal(){}voidreadDat(){inti;FILE*fp;fp=fopen("IN86DAT","r'')for(i=0;i<

MAX;i++)fscanf(fp,"%d",&a[i]);fclose(fp);}main(){inti;readDat();jsval();printf("

满足条件的数=%d\n”,ent);for(i=0;i<cnt;i++)prinlf("%d"<b[i]);prin(f("\n");

writeDat();}writeDat(){FILE*fp:inti;fp=fopen("OUT86.DAT";,w");

fprintf(fp."%d\n".cnt):for(i=0:i<cnt:i++)fprintf(fp,"%d\n".b[i]):fclose(fp):}

标准答案:voidjsVal(){inii,thou,hun,ten,data,j;intab,cd;for(i=0;i<200;i++)

{thou=a[i]/1000;/*求四位数的千位数字*/hun=a[i]%1000/100;/*求四位数的百位数

字*/ten=a[i]%100/10;/*求四位数的十位数字*/data=a[i]%10;/*求四位数的个位数字

*/ab=chou*IO+ten;/*把千位数和十位数重新组合成一个新的十位数ab*/

cd=data*10+hun;/*把个位数和百位数组成另一个新的十位数cd*/if((ab-cd>

0)&&(ab%2!=l&&ab%5==0)&&cd%2==l&&ab!=0&&cd!=0)/*如果ab>cd,ab是

偶数且能被5整除,cd是变数,且两个数均不为0*/{b〔cnt]=a[i];/*将满足条件的

数存入数组b中*/cnt++;/*统计满足条件的数的个数}}for(i=0;iVcnt-l;i++)/*将

数组b中的数按从大到小的顺序排列*/for(j=i+l;j〈cni;j++)if(b[i]〈b[j]){data=b[i];

b[i]=b[j];b[j]=data;})

知识点解析:本题考查的知识点如下:(1)将一个4位整数各位上的数转变成单独

的个位数。(2)判断结构中多个条件的布尔运算。(3)循环的使用.(4)数据的排

序。在本题中,首先要将一4位数的千位、百位、十位、个位拆成独立的数字。

这里借助特殊运算符号“%”——取余和一整除.将1个4位数整除1000则可

得到其千位上的数字,将其除以1000取余再整除100则可得百位上的数字,除以

100取余再整除10则可得十位上的数字,除以10取余则得个位上的数字。若一个

数除以2取余为0,则这个数是偶数。由题意可知,各个条件必须同时满足,所以

各条件之间用"与''运算。先将符合条件的数存入数组b中,再对b中的数据进行排

序。排序采用“选择排序法

国家三级信息管理技术机试模拟试卷第

8套

一、程序设计题(本题共1题,每题].0分,共I分。)

1、函数ReadDat。实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx

中:请编制函数encryp〔Char(),按给定的替代关系对数组xx中的所有字符进行替

代,仍存入数组xx的对应的位置上,最后调用函数WritcDal()把结果xx输出到文

件PS1.DAT中。替代关系:f(p)=p*llmod256(p是数组中某一个字符的ASCII

值,f(p)是计算后新字符的ASCII值),如果计算后即)值小于等于32或大于130,

则该字符不变,否则将f(p)所对应的字符进行替代。原始数据文件存放的格式是:

每行的宽度均小于80个字符。部分程序已经给出。请勿改动主函数main。、读数

据函数ReadDal。和输出数据函数WriteDat。的内容。#include<stdio.h>#include

<string.h>#include<conio.h>#include<ctype.h>unsignedcharxx[50][80];int

maxline=0;/*文章的总行数intReadDat(void);voidWriteDat(void);void

cncryptChar(){}voidmain(i{clrscr();if(RcadDat()){printf("数据文件ENG.IN不能

打开!\n\007");return;}encryptChar();WriteDat();}intReadDat(void){FILE*fp;int

i=0;unsignedchar*p;if((fp=fopcn(,,cng.in","r"))==NULL)return1;

while(fgets(xx[i],80,fp)!=NULL){p=strchr(xx[i],'\n');if(p)*p=O;i+十;}maxline=i;

fclose(fp);return0;}voidWriteDat(void){FILE*fp;inti;fp=fopen("psl.dat",,"w");

for(i=0;i<maxline;i++){printf("%s\n",xx[i]);fprintf(fp,"%s\n",xx[i]);}fclose(fp);}

标准答案:voidcncryptChar(){inti;char*pf;for(i=0;i<maxline;i++){pf=xx[i];

while(*pr!=0){if(*pPll%256>130||*pf*l1%256<=32);else*pf=*pfH1%256;

pf++;})}

知识点解析:该程序属于对字符串处理类型的题目,考核的知识点为:(1)按给定

关系计算字符的新ASCH值;(2)根据条件进行判断;(3)根据判断的结果进行替

换。本题的解题思路是:先将数组中的元素逐个进行计算,若计算后的结果满足

题目中的条件则不进行替换,直接对下一个元素进行判断,否则按给定的替换关系

进行替换,替换关系在题目中已经给出“程序的流程是:首先调用ReadDat()函

数,把数据读入到数组xx中,然后调用函数encryplChar。对数据进行处理后,由

WriieDat。函数写回文件ps1.dat中去。答案解析如卜.:voidencryptChar(){inti;

char*pf;/*定义字符型指针pf*/for(i=0;iVmaxline;i++){/*遍历文章的所有行*/

pf=xx[i];/*将二维数组第i行首地址赋给指针变量*/while(*pf!=0){/*pf的内容不

为0时进入循环*/if(*pf*l1%256>l30||*pf*l1%256V=32);/*判断如果

*pf*U%256大于130或不大于32时,就执行一条空语句*/else*pf=*p或11%256;/*

否则就将pf所指的字符改为*pf*ll%256后的值*/pf++;/*指向下一个字符*/}}}

国家三级信息管

温馨提示

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

评论

0/150

提交评论