三级机试南开一百题_第1页
三级机试南开一百题_第2页
三级机试南开一百题_第3页
三级机试南开一百题_第4页
三级机试南开一百题_第5页
已阅读5页,还剩190页未读 继续免费阅读

下载本文档

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

文档简介

全国计算机等级考试

三级C语言程序设计

题目1(无忧id14、id27(提供isP()函数;捷成id23题)

请编写一个函数jsValue(intm,intk,intxx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入数组xx传回。

最后调用函数writeDatO读取10组数据,分别得出结果且把结果输出到文件out.dat中。

部分源程序存在文件progl.c中。

例如:若输入175则应输出:19,23,29,31,37。

请勿改动主函数main()和写函数writeDat()的内容。

#include<conio.h>

#include<stdio.h>

voidreadwriteDat();

intisP(intm)

(

inti;

for(i=2;i<m;i++)

if(m%i==0)return0;

return1;

)

voidnum(intm,intk,intxx[])

{ints=0;

for(m=m+l;k>0;m++)

if(isP(m)){xx[s++]=m;k-;}

)

main()

(

intm,n,xx[1000];

clrscr();

printf(〃\nPleaseentertwointegers:,z);

scanf(〃%d%d〃,&m,&n);

num(m,n,xx);

for(m=0;m〈n;ni++)

printf(,z%d〃,xx[m]);

printf(〃\n〃);

readwriteDat();

}

voidreadwriteDat()

(

intm,n,xx[1000],i;

FILE*rf,*wf;

rf=fopen(,zin.dat〃,〃r〃);

wf=fopen(z,out.datz,,〃w〃);

for(i=0;i<10;i++){

fscanf(rf,,z%d%d,z,&m,&n);

num(m,n,xx);

for(m=0;m<n;m++)fprintf(wf,〃%d",xx[m]);

fprintf(wf,〃\n〃);

)

fclose(rf);

fclose(wf);

)

无忧id14题(无isP()函数)

#include<stdio.h>

voidjsValue(intm,intk,intxx[])

{inti,j,s=0;

for(i=m+l;k>0;i++)

{for(j=2;j<i;j++)

if(i%j==0)break;

if(i==j){xx[s++]=i;k—;}

}

main()

(

intm,n,zz[100];

printf(〃\n请输入两个整数:〃);

scanf&m,&n);

jsValue(m,n,zz);

for(m=0;m<n;m++)printf(,z%d〃,zz[m]);

printf(〃\n〃);

writeDat();

)

writeDat()

(

intm,n,zz[100],i;

FILE*in,*out;

in=iopen(in.dat,r);

out=fopen(z,out.dat〃,〃w");

for(i=0;i<10;i++){

fscanf(in,〃%d%d”,&m,&n);

jsValue(m,n,zz);

for(m=0;m<n;m++)fprintf(out,",zz[m]);

fprintf(out,"\n");

)

fclose(in);

fclose(out);

另一解法:

voidnum(intm,intk,intxx[])

intn=0,data=m+l;

while(n<k){

if(isP(data))xx[n++]=data;

data++;}

)

★题目2(无忧id143整数排序题)

已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDatO把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:如果四位数各位

上的数字均是0或2或4或6或8,则统计出满足此条件的个数ent,并把这些四位数按从大到小的顺序存入数组b中。最后main()函数调用写函数

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

注意:部分源程序存在文件progl.c中。

程序中已定义数组:a[200],b[200],已定义变量:ent

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

#include<stdio.h>

#defineMAX200

inta[MAX],b[MAX],ent=0;

voidjsVal()

{inti,j,qw,bw,sw,gw;

for(i=0;i<MAX;i++)

{qw=a[i]/1000;bw=a[i]/100%10;

sw=a[i]%100/10;gw=a[i]%10;

if(qw&&qw%2==0&&bw%2==0&&sw%2==0&&gw%2==0)b[cnt++]=a[i];

)

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

for(j=i+l;j<cnt;j++)

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

)

voidreadDat()

inti;

FILE*fp;

fp=fopen(〃in.dat〃,〃r〃);

for(i=0;i<MAX;i++)fscanf(fp,〃%d”,&a[i]);

fclose(fp);

)

voidmain()

{

inti;

readDat();

jsVal();

printf(〃满足条件的数二%d\n〃,ent);

for(i=0;i<ent;i++)printf(z,%db[i]);

printfC\n");

writeDat();

)

writeDat()

(

FILE*fp;

inti;

fp=fopen("out.dat〃,〃w〃);

fprintf(fp,〃%d\n〃,ent);

for(i=0;i<ent;i++)fprintf(fp,〃%d\n”,b[i]);

fclose(fp);

}

★☆题目3(无忧id133题;捷成id59、99字符串位置倒置题)

函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrOR(),其函数的功能是:以行为单位依次把字符串中

所有小写字母。左边的字符串内容移到该串的右边存放,然后把小写字母。删除,余下的字符串内容移到已处理字符串的左边存放,之后把已处理的字符

串仍按行重新存入字符串数组xx中。最后rnainO函数调用函数WriteDat()把结果xx输出到文件OUT5.DAT中。

例如:原文:nanyfield.Yucancreateanindex

youhavethecorrectrecord.

结果:nanyfield.Yucancreateanindex

rd.yuhavethecrrectrec

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

注意:部分源程序存放在文件progl.c中。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

#include<stdio.h>

#include<string.h>

#include<conio.h>

charxx[50][80];

intmaxline=0;/*文章的总行数*/

intReadDat(void);

voidWriteDat(void);

voidStrOR(void)

{inti,righto,j,s,k;

chartem[80];

for(i=0;i<maxline;i++)/*倒序循环*/

for(j=strlen(xx[i])-l;j>=0;j­)

{k=0;

memset(tem,0,80);/*初始化字符串数组tem*/

if(xx[i][j]==,o*)/*如果当前字符为‘o',进入以下语句*/

{righto=j;/*则将此字符中位置j的值赋给righto*/

for(s=righto+l;s<strlen(xx[i]);s++)

tem[k++]=xx[i][s];/*从righto的卜一跳开始将其后所有的字符都存入到tem中*/

for(s=0;s<righto;s++),磷昌前行首部开始到出现字符'o'的位置(righoto)之前开始循环*/

if(xx[i][s]!=*o')tem[k++]=xx[i][s];/*将不是字符'o'的字符全存入到tem中*/

strcpy(xx[i],tem);/*将当前已处理的字符币:新存入当前行xx*/

}

elsecontinue;

}

}

voidmain()

{

clrscr();

if(ReadDat()){

printf(〃数据文件1\。八丁不能打开!\。\007〃);

return;

)

StrOR();

WriteDat();

}

intReadDat(void)

{

FILE*fp;

inti=0;

char*p;

if((fp二fopen(〃IN.DAT",〃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(void)

(

FILE*fp;

inti;

clrscr()

fp=fopen(〃0UT5.DAT",〃w");

for(i=0;i<maxline;i++){

printf(z/%s\n/z,xx[i]);

fprintf(fp,〃%s\n〃,xx[i]);

)

fclose(fp);

)

解法二:

voidStrOR(void)

{inti;

chara[80],*p;

for(i=0;i<maxline;i++)

{p=strchr(xx[i],Jo,);

while(p)

{memset(a,0,80);

memcpy(a,xx[i],p-xx[i]);

strcpy(xx[i],p+1);

strcat(xx[i],a);

p=strchr(xx[i],'o');

)

)

解法

voidStrOR(void)

{inti,j;charyy[80],*p;

for(i=0;i<maxline;i++)

for(j=0;j<strlen(xx[i]);j++)

if(xx[i][j]==,o')

{p=&xx[i][j+1];

strcpy(yy,p);/*将指针p所指向的字符串拷贝到字符串yy中去*/

strncat(yy,xx[i],j);/*将字符串xx[i]中前j个字符连接到yy4

strcpy(xx[i],yy);/*将字符串yy重新拷贝到字符串xx[i]中去*/

j=0;/*开始下一次的扫描。*/

}

}

相关库函数解释:

char*strncat(char*dest,constchar*src,size,tmaxlen)

功能:将字符串src中前maxlen个字符连接到dest中

相关头文件:string.h

char*strcpy(char*dest,constchar*src)

功能:将字符串src拷贝到字符串dest中去

相关头文件:string.h

★☆题目4(无忧id24题捷成id9字符串单词倒置题)

函数ReadDatO实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx>|',请编制函数StrOL(),其函数的功能是:以行为单位对行中以空格或标

点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数writeDatO把结果xx输

出到文件OUT6.DAT中。

例如:原文:YouHeMe

Iamastudent.

结果:MeHeYou

studentaamI

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

部分源程序存在文件progl.c中。

请勿改动主函数main()>读数据函数ReadDat()和输出数据函数writeDat()的内容。

#include<stdio.h>

#include<string.h>

#include<conio.h>

#include<ctype.h>

charxx[50][80];

intmaxline=0;/*文章的总行数*/

intReadDat(void);

voidWriteDat(void);

/*在无忧及捷成版模拟系统中都通过测试(输入文件句末有标点的在输出文件中句前有空格*/

voidStrOL(void)

{inti,j,k,s,m,strl;

charstr[80];

for(i=0;i<maxline;i++)

{strl=strlen(xx[i]);

memset(str,0,80);/*初始化这字符串数组str*/

s=k=0;

for(j=strl-l;j>=0;j—)/*从当前字符串尾部开始向前倒序循环,实现题意要求的倒排*/

{if(isalpha(xx[i][j]))k++;/*如果当前字符是字母a~z或/则k加一*/

else{for(m=l;m<=k;m++)/*否则将长度为k的单词顺序存入到字符串数组str中,s值加1*/

str[s++]=xx[i][j+m];

k=0;/*将k值清0,以方便下一个单词的长度计数*/

}

if(!isalpha(xx[i][j]))str[s++]=>;/*如果当前字符不是字母或A~Z,则以空格代之存入到字符串数组strd1,s值加*/

)

for(m=l;m<=k;m++)/*此时的k值为、与前一字符中中笫一个单词的长度,但在上一个for循环中没能存:入到字符串数组str中,所以在这里将其存入到

str中*/

str[s++]=xx[i][j+m];

strEs]^\0J;/*在当前行尾加0以标记此行的结束*/

strcpy(xx[i],str);/*将倒排好的当前字符串重新存回到当前行xx中*/

)

voidmain()

(

clrscr();

if(ReadDatO){

printf(〃数据文件IN.DAT不能打开!\n\007〃);

return;

)

StrOL();

WriteDat();

intReadDat(void)

FILE*fp;

inti=0;

char*p;

if((fp=fopen(,ZIN.DAT",〃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(void)

(

FILE*fp;

inti;

clrscr();

fp=fopenC0UT6.DAT","w");

for(i=0;i<maxline;i++){

printf("%s\n〃,xx[i]);

fprintf(fp,z/%s\nzz,xx[i]);

)

fclose(fp);

捷成版模拟系统中的解法

/*在无忧模拟系统中没通过测试(输入文件句末有标点的在输出文件中句前无空格*/

voidStrOL(void)

inti,j;

charword[21],yy[80],zz[80],*p;

for(i=0;i<maxline;i++){

P=xx[i];

j=0;

memset(word,0,21);

memset(yy,0,80);

while(*p){

if(isalpha(*p)){

word[j++]=*p++;

if(*p)continue;

)

strcpy(zz,yy);

sprintf(yy,"%s%s”,word,zz);

j=0;

memset(word,0,21);

while(*p&&(!isalpha(*p)))p++;

)

strcpy(xx[i],yy);

)

}

另一解法():

/*在无忧及捷成版模拟系统中都通过测试(输入文件句末有标点的在输出文件中句前有空格*/

voidStrOL(void)

{inti,j,m;

charstr[80];

for(i=0;i<maxline;i++)

{m=strlen(xx[i]);

memset(str,0,80);

for(j=m-l;j>=0;j­)

if(!isalpha(xx[i][j]))

{strcat(str,xx[i]+j+l);

strcat(str,"");

xx[i][j]=>\0";

strcat(str,xx[i]);

strcpy(xx[i],str);

实际上机考试时上面几种解法都可以采用o

★☆题目5(无忧id8整数排序题)

在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200个数存放到数组aa中。请编制函数jsSort(),其函数的

功能是:要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数依次存入数组bb中,如果后三位的数值相等,则按原先的数值进

行降序排列。最后调用函数WriteDat()把结果bb输出到文件out.dat中。

例:处理前60125099901270258088

处理后90126012702580885099

部分源程序存在文件progl.c中。

请勿改动主函数main。、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

#include<stdio.h>

ttinclude<string.h>

ftinclude<conio.h>

intaa[200],bb[10];

voidjsSort()

(

inti,j,data:

for(i=0;i<199;i++)

for(j=i+l;j<200;j++)

if(aa[i]%1000>aa[j]%1000||aa[i]%1000==aa[j]%1000&aaa[i]<aa[j])

{data=aa[i];aa[i]=aa[j];aa[j]=data;}

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

bb[i]=aa[i];

)

voidmain()

(

readDat0;

jsSort();

writeDat();

)

readDat()

{

FILE*in;

inti;

in二fopen(m.dat,r;;

for(i=0;i<200;i++)fscanf(in,〃%d,;

fclose(in);

)

writeDat()

(

FILE*out;

inti;

clrscr();

out二fopen("out.dat",〃w〃);

for(i=0;i<10;i++){

printf(z,%d,z,bb[i]);

fprintf(out,"%d\n〃,bb[i]);

)

fclose(out);

题目6正整数排序

在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200个数存放到数组aa中。请编制函数jsSort(),其函数的

功能是:要求按每个数的后三位的大小进行降序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数值相等,则按原先的数值进行

升序排列。最后调用函数WriteDatO把结果bb输出到文件out.dat中。

例:处理前90125099601270258088

处理后50998088702560129012

注意:部分源程序已给出。

请勿改动主函数main。、读数据函数ReadDat()和输出।数据函数WriteDatO的内容。

#include<stdio.h>

#include<string.h>

#include<conio.h>

intaa[200],bb[10];

voidjsSort()

(

inti,j,data;

for(i=0;i<199;i++)

for(j=i+l;j<200;j++)

if(aa[i]%1000<aa[j]%1000||aa[i]%1000==aa[j]%1000&aaa[i]>aa[j])

{data=aa[i];aa[i]=aa[j];aa[j]=data;}

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

bb[i]=aa[i];

)

voidmain()

(

readDat();

jsSort();

writeDat();

systemCzpause/z);

}

readDat()

(

FILE*in;

inti;

in=fopen(in.dat,r);

for(i=0;i<200;i++)fscanf(in,,z%d,z/,&aa[i]);

fclose(in);

writeDat()

(

FILE*out;

inti;

clrscr();

out二fopen("out.dat",〃w〃);

for(i=0;i<10;i++){

printf%d\n”,i+1,bb[i]);

fprintf(out,〃%d\n”,bb[i]);

)

fclose(out);

)

★题目7(无忧id15结构体操作题))

已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称me(字符型10位),单价dj(整型),数量si(整

型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数

SortDatO,其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调

用函数WriteDat()把结果输出到文件0UT6.DAT中。

部分源程序存在文件progl.c中。

请勿改动主函数main。、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

#include<stdio.h>

#include<mem.h>

#include<string.h>

#include<conio.h>

#include<stdlib.h>

#defineMAX100

typedefstruct{

chardm[5];/*产品代码*/

charmc[ll];/*产品名称*/

intdj;/*单价*/

intsi;/*数量*/

longje;/*金额*/

}PRO;

PROsell[MAX];

voidReadDat();

voidWriteDat();

voidSortDat()

{inti,j;

PROxy;

for(i=0;i<99;i++)

for(j=i+l;j<100;j++)

if(strcmp(sell[i].dm,sell[j].dm)<0||strcmp(sell[i].dm,sell[j].dm)==0&&sell[i].je<sell[j].je)

{xy=sell[i];sell[i]=sell[j];sell[j]=xy;}

)

voidmain()

{

memset(sell,0,sizeof(sell));

ReadDat();

SortDat();

WriteDat();

voidReadDat()

(

FILE*fp;

charstr[80],ch[l1];

inti;

fp=fopen(,ZIN.DAT","r");

for(i=0;i<100;i++){

fgets(str,80,fp);

memcpy(sell[i].dm,str,4);

memcpy(sell[i].me,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].si;

)

fclose(fp);

)

voidWriteDat(void)

(

FILE*fp;

inti;

fp=fopenC'0UT6.DAT”,〃w〃);

for(i=0;i<100;i++){

printf(,z%s%s%4d%5d%5d\n”,sell[i].dm,sell[i].me,sell[i].dj,sell[i].si,sell[i].je);

fprintf(fp,z,%s%s%4d%5d%5d\n”,sell[i].dm,sell[i].me,sell[i].dj,sell[i].si,sell[i].je);

}

fclose(fp);

★☆题目8(无忧id83字符替换题)

函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字

符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PSI.DAT中。

替代关系:f(p)=p*llmod256(p是数组中某一个字符的ASCH值,f(p)是计算后新字符的ASCH值),如果计算后f(p)值小于等于32或大于

130,则该字符不变,否则将f(p)所对应的字符进行替代。部分源程序存在文件progl.c中。原始数据文件存放的格式是:每行的宽度均小于80个字符。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

#include<stdio.h>

#include<string.h>

#include<conio.h>

#include<ctype.h>

unsignedcharxx[50][80];

intmaxline=0;/*文章的总行数*/

intReadDat(void);

voidWriteDat(void);

voidencryptChar()

{inti,j;

for(i=0;i<maxline;i++)

for(j=0;j<strlen(xx[i]);j++)

if(xx[i][j]*ll%256<=32||xx[i][j]*ll%256>130)continue;

elsexx[i][j]=xx[i][j]*ll%256;

)

voidmain0

(

clrscr();

if(ReadDat()){

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

return;

)

encryptChar();

WriteDat();

)

intReadDat(void)

(

FILE*fp;

inti=0;

unsignedchar*p;

if((fp=fopen("eng.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(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);

}

解法二:

voidencryptChar()

{inti,j,k;

for(i=0;i<maxline;i++)

for(j=0;j<strlen(xx[i]);j++)

k=xx[i][j]*ll%256;

if(k<=32||k>130)continue;

elsexx[i][j]=k;

)

)

解法三:

voidencryptChar()

{inti,j;

unsignedcharch;

for(i=0;i<maxline;i++)

for(j=0;j<strlen(xx[i]);j++)

{ch=xx[i][j]*ll%256;

if(ch<=32||ch>130)continue;

elsexx[i][j]=ch;

)

)

解法四:

voidencryptChar()

{inti,j;

char*p;

for(i=0;i<maxline;i++)

for(j=0;j<strlen(xx[i]);j++)

{p=xx[i][j]*U%256;

if(p<=321|p>130)continue;

elsexx[i][j]=p;

)

)

解法五:

voidencryptChar()

{inti;

char*pf;

for(i=0;i<maxline;i++)

{pf=xx[i];

while(*pf!=0)

if(*pf*l1%256<=32||*pf*1l%256>130)pf++;

else*pf++=*pf*ll%256;

}

}

★☆题目9(无忧id28;id124;捷成id16字符串排序题)

函数ReadDatO实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数SortCharD(),其函数的功能是:以行为单位对字符按从大

到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT2.DAT中。

例:原文:dAe,BfC.

CCbbAA

结果:fedCBA.

bbCCAA

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

部分源程序存在文件progl.c中。

请勿改动主函数main。、读数据函数ReadDat()和输出数据函数writeDat()的内容。

#include<stdio.h>

#include<string.h>

#include<conio.h>

charxx[50][80];

intmaxline=0;/*文章的总行数*/

intReadDat(void);

voidWriteDat(void);

voidSortCharD(void)

{inti,j,k,strl;

charch;

for(i=0;i<maxline;i++)

{strl=strlen(xx[i]);

for(j=0;j<strl-l;j++)

for(k=j+l;k<strl;k++)

if(xx[i][j]<xx[i][k])

{ch=xx[i][j];xx[i][j]=xx[i][k];xx[i][k]=ch;}

)

)

voidmain()

(

clrscr();

if(ReadDat()){

printf(〃数据文件IN.DAT不能打开!\n\007〃);

return;

)

SortCharDO;

WriteDat();

intReadDat(void)

(

FILE*fp;

inti=0;

char*p;

if((fp=fopen("IN.DAT","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(void)

(

FILE*fp;

inti;

fp=fopen(,z0UT2.DAT","w〃);

for(i=0;i<maxline;i++)(

printf(〃%s\n”,xx[i]);

fprintf(fp,〃%s\n〃,xx[i]);

)

fclose(fp);

题目10(无忧id68替换字符题)

函数ReadDatO实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数ConvertCharA(),其函数的功能是:以行为单位把字符串中

的所有小写字母改写成该字母的下一个字母,如果是字母z,则改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。把已处理

的字符串仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件0UT1.DAT中。

例:原文:Adb.Bcdza

abck.LLhj

结果:Aec.Bdeab

bcdl.LLik

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

部分源程序存在文件progl.c中。

请勿改动主函数main。、读数据函数ReadDat()和输出数据函数writeDatO的内容。

#include<stdio.h>

#include<string.h>

#include<conio.h>

charxx[50][80];

intmaxiine=0;/*文章的总行数*/

intReadDat(void);

voidWriteDat(void);

voidConvertCharA(void)

{inti,j;

for(i=0;i<maxline;i++)

{for(j=0;j<strlen(xx[i]);j++)

if(xx[i][j]==,z)xx[i][j]=,a;

elseif(xx[i][j]>=,a&&xx[i][j]<=,yJ)xx[i][j]+=l;

)

)

voidmain()

(

clrscr();

if(ReadDat()){

printf(〃数据文件IN.DAT不能打开!\n\007");

return;

)

ConvertCharA();

WriteDat();

)

intReadDat(void)

(

FILE*fp;

inti=0;

char*p;

if((fp=fopen("IN.DAT,Z,"rz/))==NULL)return1;

while(fgets(xx[i],80,fp)!=NULL){

p=strchr(xx[i],?\nJ);

if(p)*p=0;

i++;

)

maxline=i;

fclose(fp);

return0;

voidWriteDat(void)

(

FILE*fp;

inti;

clrscr();

fp=fopen(z,OUTl.DAT","w");

for(i=0;i<maxline;i++){

printfC%s\n",xx[i]);

fprintf(fp,xx[i]);

}

fclose(fp);

)

☆题目11(无忧id93字符串字母移位题)

程序progl.c的功能是:把s字符串中的所有字母改写成该字母的下一个字母,字母z改写成字母a。要求大写字母仍为大写字母,小写字母仍为小写字

母,其它字符不做改变。

请考生编写函数chg(char*s)实现程序要求,最后调用函数readwriteDAT()把结果输出到文件bcl.out中。

例如:s字符串中原有的内容为:Mn.123Zxy,则调用该函数后,结果为:No.123Ayzo

注意:部分源程序存在文件progl.c文件中。

请勿改动主函数n】ain()和输出数据函数readwriteDAT()的内容。

#include<conio.h>

#include<string.h>

#include<stdio.h>

#include<ctype.h>

#defineN81

voidreadwriteDAT();

voidchg(char*s)

{while(*s)

,

if(*s==z||*s==){*s-=25;s++;}

elseif(*s>=,a&&*s<=,y*){*s+=l;s++;}

elseif(*s>='A'&&*s<='Y'){*s+=l;s++;}

elses++;

)

main()

(

chara[N];

clrscr();

printf("Enterastring:");gets(a);

printf(^Theoriginalstringis:〃);puts(a);

chg(a);

printf(z,Thestringaftermodified:〃);

puts(a);

readwriteDAT0;

)

voidreadwriteDAT()

(

inti;

chara[N];

FILE*rf,*wf;

rf=fopen(〃bcl.in〃,〃r〃);

wf=fopen(〃bcl.out",〃w〃);

for(i=0;i<50;i++){

fscanf(rf,〃%s",a);

chg(a);

fprintf(wf,〃%s\n〃,a);

)

fclose(rf);

fclose(wf);

)

★题目12(无忧id78结构体运算题题)

已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称me(字符型10位),单价dj(整型),数量si(整

型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDatO是读取这100个销售记录并存入结构数组sell中。请编制函数

SortDat(),其功能要求:

按产品名称从小到大进行排列,若产品名称相等,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDatO把结果

输出到文件0UT5.DAT中。

部分源程序存在文件progl.c中。

请勿改动主函数mainO>读数据函数ReadDat()和输出数据函数WriteDat()的内容。

#include<stdio.h>

#include<mem.h>

#include<string.h>

#include<conio.h>

ttinclude<stdlib.h>

ftdefineMAX100

typedefstruct{

chardm[5];/*产品代码*/

charme[11];/*产品名称*/

intdj;/*单价*/

intsi;/*数量*/

longje;/*金额*/

}PRO;

PROsell[MAX];

voidReadDat();

voidWriteDat();

voidSortDat()

{inti,j;

PROxy;

for(i=0;i<99;i++)

for(j=i+l;j<100;j++)

if(stremp(sell[i].me,sell[j].me)>01|stremp(sell[i].me,sell[j].me)==0&&sell[i].je>sell[j].je)

{xy=sell[i];sell[i]=sell[j];sell[j]=xy;}

}

voidmain()

memset(sell,0,sizeof(sell));

ReadDat();

SortDat();

WriteDat();

)

voidReadDat()

(

FILE*fp;

charstr[80],ch[ll];

inti;

fp=fopenCIN.DAT","r");

for(i=0;i<100;i++){

fgets(str,80,fp);

memcpy(sell[i].dm,str,4);

memcpy(sell[i].me,str+4,10);

memcpy(ch,str+14,4);ch[4]=0;

sell[i].dj=atoi(ch);

memcpy(ch,str+18,5);ch⑸=0;

sell[i].sl=atoi(ch);

sell[i].je=(long)sell[i].dj*sell[i].si;

)

fclose(fp);

)

voidWriteDat()

(

FILE*fp;

inti;

fp=fopen(zz0UT5.DAT","w");

for(i=0;i<100;i++){

printf(,z%s%s%4d%5d%5d\n,/,sell[i].dm,sell[i].me,sell[i].dj,sell[i].sl,sell[i].je);

fprintf(fp,z,%s%s%4d%5d%5d\n”,sell[i].dm,sell[i].me,sell[i].dj,sell[i].si,sell[i].je);

)

fclose(fp);

题目13(无忧id81结构体运算题)

无忧id81题按金额从小到大进行排列

已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称me(字符型10位),单价dj(整型),数量si(整

型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDatO是读取这100个销售记录并存入结构数组sell中。请编制函数

SortDat(),其功能

要求:按产品代码从小到大进行排列,若产品代码相等,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDatO

把结果输出到文件OUT9.DAT中。

部分源程序存在文件progl.c中。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

#include<stdio.h>

#include<mem.h>

#include<string.h>

#include<conio.h>

#include<stdlib.h>

#defineMAX100

typedefstruct(

chardm[5];/*产品代码*/

charmc[ll];/*产品名称*/

intdj;/*单价*/

intsi;/*数量*/

longje;/*金额*/

}PR0;

PROsell[MAX];

voidReadDat();

voidWriteDat();

voidSortDat()

{inti,j;

PROxy;

for(i=0;i<99;i++)

for(j=i+l;j<100;j++)

if(strcmp(sell[i].dm,sell[j].dm)>0||strcmp(sell[i],dm,sell[j].dm)==0&&sell[i].je<sell[j].je)

{xy=sell[i];sell[i]=sell[j];sell[j]=xy;}

)

voidmain()

(

memset(sell,0,sizeof(sell));

ReadDat();

SortDat();

WriteDat();

)

voidReadDat()

(

FILE*fp;

charstr[80],ch[ll];

inti;

fp=fopenC'IN.DAT","r");

for(i=0;i<100;i++){

fgets(str,80,fp);

memcpy(sell[i].dm,str,4);

memcpy(sell[i].me,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].si;

fclose(fp);

voidWriteDat()

(

FILE*fp;

inti;

fp=fopen(z/0UT9.DAT","w");

for(i=0;i<100;i++){

printf(/z%s%s%4d%5d%5d\n”,sell[i].dm,sell[i].me,sell[i].dj,sell[i].si,sell[i].je);

fprintf(fp,/z%s%s%4d%5d%5d\n〃,sell[i].dm,sell[i].me,sell[i],dj,sell[i].si,sell[i].je);

)

fclose(fp);

☆题目M(无忧id151整数统计排序题)

已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDatO把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:依次从数组a中

取出一个四位数,如果该四位数连续大于该四位数以后的五个数且该数是奇数(该四位数以后不满五个数,则不统计),则统计出满足此条件的个数ent

并把这些四位数按从小到大的顺序存入数组b「|」,最后调用写函数writeDat()把结果ent以及数组b中符合条件的四位数输出到OUT.DAT文件中。

注意:部分源程序存在文件progl.c中。

程序中已定义数组:a[200],b[200],已定义变量:ent

请勿改动数据文件IN.DAT中的任何数据、主函数main()>读函数readDat()和写函数writeDat()的内容。

#include

温馨提示

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

最新文档

评论

0/150

提交评论