全国计算机等级考试三级数据库技术上机试题汇编2011年版_第1页
全国计算机等级考试三级数据库技术上机试题汇编2011年版_第2页
全国计算机等级考试三级数据库技术上机试题汇编2011年版_第3页
全国计算机等级考试三级数据库技术上机试题汇编2011年版_第4页
全国计算机等级考试三级数据库技术上机试题汇编2011年版_第5页
已阅读5页,还剩179页未读 继续免费阅读

下载本文档

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

文档简介

全国计算机等级考试三级数据库技术上机试题汇编2011年版

1:下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx。请编写函数

num(intm,int

kjntxx口)实现函数的要求,最后调用函数readwiiteDAT()把结果输出到文件out.dat

中。

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

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

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

------类型:素数。

voidnum(intmjntk,intxx[])/*标准答案*/

{intdata=m+1;

inthalf,n=O,l;

while(1)

{half=data/2;for(l=2;l<=half;l++)

if(data%l==O)break;

if(l>half)

{xx[n]=data;n++;}

if(n>=k)break;

data++;

})

或者:

voidnum(intm,intk,intxx[])

{inti,j,s=O;

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

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

if(i%j==O)break;/*注:素数为只能被自己和1整除的数.如果i%j等于0,说明i不是素数,

出本层循环*/

if(i==j)

{xx[s++]=i;k-;}

}}

或者:

voidnum(intm,intk,intxx[])

{inti=0;

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

if(isP(m))

{xx[i++]=m;

k-;}}

原程序如下:

#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[])

(

)

main()

{intm,n,xx[1000];

clrscr();

printf("\nPleaseentertwointegers:");

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

num(m,n,xx);

for(m=0;m<n;m++)

printf("%d",xx[m]);

printf("\n");

readwriteDAT();

system("pause");

)

voidreadwriteDAT()

{intm,n,xx[1000],i;

FILE*rf,*wf;

rf=fopen("in.dat","r");

wf=fopen("out.dat","w");

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

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

num(m,n,xx);

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

fprintf(wf,"\n");

)

fclose(rf);

fclose(wf);

)

2:已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存

入数组a

中,请考生编制一函数jsVal(),其功能是:如果四位数各位上的数字均是。或2或4或6

或8,则

统计出满足此条件的个数ent,并把这些四位数按从大到小的顺序存入数组b中。最

后main。

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

OUT.DAT文件

中。

注意:部分源程序存在文件PROG1.C文件中。

1

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

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

writeDat()

的内容

voidjsVal()/*标准答案*/

{intbb[4];

intl,j,k,flag;

for(l=0;l<200;l++)

{bb[0]=a[l]/1000;bb[1]=a[l]%1000/100;

bb[2]=a[l]%100/10;bb[3]=a[l]%10;

for(j=0;j<4;j++)

{if(bb[j]%2==0)

flag=1;

else

{flag=0;break;}

)

if(flag==1)

{b[cnt]=a[l];

cnt++;}}

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

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

if(b[l]<bO])

{k=b[l];b[l]=bO];bO]=k;}

)

原程序如下:

#include<stdio.h>

#defineMAX200

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

voidjsVal()

(

)

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("%d",b[i]);

printf("\n");

writeDat();

system("pause");

)

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:函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX

中;请编制函数

STROR(),其函数功能是:以行为单位把字符串中的所有小写字母。左边的字符串内

容移到该串

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

存放.最后

把已处理的字符串仍按行重新存入字符串数组XX中,最后调用函数WRITEDATO把

结果XX输出

到文件OUT.DAT中.

例如:原文:Youcancreateanindexonanyfield.

youhavethecorrectrecord.

结果:nanyfield.Youcancreateanindex

rd.yuhavethecrrectrec

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

---------类型:字符串(单词)的倒置和删除。

voidStrOR(void)/*标准答案*/

{intl,j,k,index,strl;

charch;

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

(

strl=strlen(xx[l]);

index=strl;---------------求出每行的字符数

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

if(xx[l]0]=='o')—一找o,第j个

(

for(k=j;k<strl-1;k++)

xx[l][k]=xx[l][k+1];-前移

xx[l][strl-1]='

index=j;

)

for(j=strl-1;j>=index;j-)

(

ch=xx[l][strl-1];

for(k=strl-1;k>0;k-)

xx[l][k]=xx[l][k-1];

xx[l][O]=ch;

)

)

)

原程序如下:

#include"stdio.h"

#include"string.h"

#include"conio.h"

charxx[50][80];

intmaxline=O;

intReadDat(void);

voidWriteDat(void);

voidStrOR(void)

voidmain()

{clrscr();

if(ReadDat())

{printf("Can'topenthefile!\n");

return;}

StrOR();

WriteDat();

system("pause");

)

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("out.dat","w");

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

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

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

)

fclose(fp);

)

4:函数ReadDat()实现从文件IN.DAT中读取•篇英文文章存入到字符串数组xx中;

请编制函

数StrOL(),其函数的功能是:以行为单位对行中以空格或标点符号为分隔的所有单

词进行

倒排,同时去除标点符号,之后把已处理的字符串(应不含标点符号)仍按行重新存入

字符串数

组xx中。最后main。函数调用函数WriteDat。把结果xx输出到文件OUT6.DAT中。

例如:原文:YouHeMe

Iamastudent.

结果:MeHeYou

studentaamI

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

--------类型:字符串(单词)的倒置和删除。

voidStrOL(void)/*标准答案*/

{intl,j,k,strl,l;charc;

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

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

(

C=xx[l][j];

if((c>='A"&&c<='Z")||(c>='a'&&c<='z')||c=='");

elsexx[l][j]='

)

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

(

charch[80]={0};charpp[80]={0};

strl=strlen(xx[l]);

l=strl-1;k=1;

while(1)

(

while(((xx[l][l]>='a'&&xx[l][l]<='z')||(xx[l][l]>='A'&&xx[l][l]<='z'))&&l>=0)

{for(j=k;j>=0;j-)

pp0+1]=pp0];pp[0]=xx[l][l];k++;l-;

)

strcat(ch,pp);strcpy(pp,"""");k=1;

if(|==-1)break;

while((xx[l][l]<'A'||xx[l][l]>'z')&&l>=0)

for(j=k;j>=0;j-)

ppO+1]=ppO];pp[O]=xx[l][l];k++;I-;)

strcat(ch,pp);strcpy(pp,"""");

k=0;

if(|==-1)break;}

strcpy(xx[l],ch);

)

)

或者:

voidStrOL(void)

{inti,j,k,m,n,ll;

charyy[80];

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

{ll=strlen(xx[i]);k=n=0;

forG=ll-1;j>=0;j-)

{if(isalpha(xx[i][j]))k++;

else

{for(m=1;m<=k;m++)

yy[n++]=xx[i]g+m];k=0;}

if(xx[i]0]=='')yy[n++]='

)

for(m=1;m<=k;m++)yy[n++]=xx[i][j+m];

yy[n]=0;strcpy(xx[i],yy);

)

)

原程序如下:

#include"stdio.h"

#include"string.h"

#include"conio.h"

#include"ctype.h"

charxx[50][80];

intmaxline=0;

intReadDat(void);

voidWriteDat(void);

voidStrOR(void)

voidmain()

{clrscr();

if(ReadDat())

{printf("Can'topenthefile!\n");

return;}

StrOR();

WriteDat();

system("pause");

)

intReadDat(void)

{FILE*fp;inti=O;char*p;

if((fp=fopen("in.dat","r"))==NL)LL)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("out.dat","w");

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

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

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

)

fclose(fp);

)

5:在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat。

读取这200

个数存放到数组aa中。请编制函数jsSort(),其函数的功能是:要求按每个数的后三位

的大小

进行升序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数

值相等,则

按原先的数值进行降序排列。最后调用函数WriteDat()把结果bb输出到文件out.dat

中。

例:处理前60125099901270258088

处理后90126012702580885099

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

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

voidjsSort()/*标准答案*/

{intl,j,data;

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

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

{if(aa[l]%1000>aa[j]%1000)

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

elseif(aa[l]%1000==aa[j]%1000)

if(aa[l]<aaO])

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

)

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

bb[l]=aa[l];

)

原程序如下:

#include<stdio.h>

#include<string.h>

#include<conio.h>

intaa[200],bb[10];

voidjsSort()

(

)

voidmain()

{readDat();

jsSort();

writeDat();

system("pause");

)

readDat()

{FILE*in;

inti;

in=fopen("in.dat","r");

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

fclose(in);

)

writeDat()

{FILE*out;

inti;

clrscr();

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

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

printf("i=%d,%d\n",i+1,bb[i]);

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

)

fclose(out);

)

6:在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()

读取这200

个数存放到数组aa中。请编制函数jsSort(),其函数的功能是:要求按每个数的后三位

的大小

进行降序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数

值相等,则

按原先的数值进行升序排列。最后调用函数WiiteDatO把结果bb输出到文件out.dat

中。

例:处理前90125099601270258088

处理后50998088702560129012

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

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

voidjsSort。/*标准答案*/

{intIJ.data;

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

for(j=l+1;j<200;j++)选择排序

{if(aa[l]%1000<aa[j]%1000)

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

elseif(aa[l]%1000==aa[j]%1000)

if(aa[l]>aaO])

{data=aa[l];aa[l]=aa[j];aan]=data;}

)

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

bb[l]=aa[l];

)

原程序如下:

#include<stdio.h>

#include<string.h>

#include<conio.h>

intaa[200],bb[10];

voidjsSort()

(

)

voidmain()

(

readDat();

jsSort();

writeDat();

system("pause");

)

readDat()

(

FILE*in;

inti;

in=fopen("in.dat","r");

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

fclose(in);

writeDat()

(

FILE*out;

inti;

clrscr();

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

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

printf("i=%d,%d\n",i+1,bb[i]);

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

)

fclose(out);

)

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

dm(字符型4

位)产品名称me(字符型10位),单价dj(整型),数量si(整型),金额je(长整型)四部分组

成。其

中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构

数组sell

中。请编制函数SortDat。,其功能要求:按产品代码从大到小进行排列,若产品代码相

同,则

按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数

WriteDat。把

结果输出到文件。UT10.DAT中。

注意:部分源程序存放在PROG1.C中。

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

voidSortDat()/*标准答案*/类型是结构体

{intl,j;

PROxy;

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

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

if(strcmp(sell[l].dm,sell[j].dm)<O)字符串比较函数

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

elseif(strcmp(sell[l].dm,sell[j].dm)==O)

if(sell[l].je<sellO].je)

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

)

原程序如下:

#include<stdio.h>

#include<mem.h>

#include<string.h>

#include<conio.h>

#include<stdlib.h>

#defineMAX100

typedefstruct{

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

char/*产品名称*/结构体数组

intdj;/*单价*/

intsi;/*数量*/

longje;/*金额*/

}PRO;

PROsell[MAX];

voidReadDat();

voidWriteDat();

voidSortDat()

voidmain()

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

ReadDat();

SortDat();

WriteDat();}

voidReadDat()

{FILE*fp;

charstr[80],ch[11];

inti;

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

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].sl;}

fclose(fp);}

voidWriteDat(void)

{FILE*fp;

inti;

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

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

fprintf(fp,"%s%s%4d%5d%101d\n",

sell[i].dm,sell[i].mc,sell[i].clj,sell[i].sl,sell[i].je);}

fclose(fp);}

8:函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;

请编制函

数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx

的对应的位置上,最后调用函数WHteDat()把结果xx输出到文件PS1.DAT中。

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

符的ASCII值),如果计算后f(p)值小于等于32或大于130,则该字符不变,否则将f(p)所

对应的字符进行替代。

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

符。

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

voidencryptChar()/*标准答案*/

{intI;

char*pf;

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

{pf=xx[l];

while(*pf!=O)

{if(*pf*11%256>130||*pf*11%256<=32);

else

*pf=*pf*11%256;

pf++;}

}

)

或者:

voidencryptChar()

{inti,j;

charp;

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

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

{p=(xx[i]0]*11)%256;

if(p<=32||p>130)

elsexx[i][j]=p;}

}

原程序如下:

#include<stdio.h>

#include<string.h>

#include<conio.h>

#include<ctype.h>

unsignedcharxx[50][80];

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

intReadDat(void);

voidWriteDat(void);

voidencryptChar()

voidmain()

clrscr();

if(ReadDat()){

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

return;

)

encryptChar();

WriteDat();

system("pause");

)

intReadDat(void)

(

FILE*fp;

inti=O;

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=O;

i++;

)

maxline=i;

fclose(fp);

return0;

)

voidWriteDat(void)

(

FILE*fp;

inti;

fp=fopen("ps1.dat","w");

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

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

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

)

fclose(fp);

)

9:函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;

请编制函

数SortCharD(),其函数的功能是:以行为单位对字符按从大到小的顺序进行排序,

排序后

的结果仍按行重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把结果

xx输出

到文件OUT2.DAT中。

例:原文:dAe,BfC.

CCbbAA

结果:fedCBA.,

bbCCAA

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

注意:部分源程序存放在PROG1.C中。

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

--------类型:字符串(单词)的倒置和删除。

voidSortCharD(void)/*标准答案*/

{intl,j,k,strl;

charch;

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

{strl=strlen(xx[l]);

for(j=0;j<strl-1;j++)选择排序

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

if(xx[l]O]<xx[l][k])

{ch=xx[l]0];xx[l]0]=xx[l][k];xx[l][k]=ch;}

})

原程序如下:

include<stdio.h>

#include<string.h>

#include<conio.h>

charxx[50][80];

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

intReadDat(void);

voidWriteDat(void);

voidSortCharD(void)

{intl,j,k,strl;

charch;

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

{strl=strlen(xx[l]);

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

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

if(xx[l]O]<xx[l][k])

{ch=xx[l]0];xx[l]D]=xx[l][k];xx[l][k]=ch;}

)

)

voidmain()

(

clrscr();

if(ReadDat()){

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

return;

)

SortCharD();

WriteDat();

system("pause");

)

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=O;,

i++;

)

maxline=i;

fclose(fp);

return0;

)

voidWriteDat(void)

(

FILE*fp;

inti;

clrscr();

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

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

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

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

)

fclose(fp);

)

10:请编制函数ConvertCharA(),其函数的功能是:以行为单位把字符串中的所有

小写字母

改写成该字母的下一个字母,如果是字母z,则改写成字母a,大写字母和其它字符保

持不变。

把已处理的字符串仍按行重新存入字符串数组xx中。。最后main。函数调用函数

WriteDat()

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

例:原文:Adb.Bcdza

abck.LLhj

结果:Aec.Bdeab

bcdl.LLik

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

注意:部分源程序存放在PROG1.C中。

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

--……类型:字符串(单词)的倒置和删除。

voidConvertCharA(void)/*标准答案*/

{intl,j,str;

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

{str=strlen(xx[l]);

for(j=0;j<str;j++)

if(xx[l][j]==,z')xx[l]0]='a';

elseif(xx[l]g]>='a'&&xx[l][j]<='y')xx[l][j]+=1;

}

)

原程序如下:

include<stdio.h>

#include<string.h>

#include<conio.h>

charxx[50][80];

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

intReadDat(void);

voidWriteDat(void);

voidConvertCharA(void)

voidmain()

{clrscr();

if(ReadDat()){

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

return;

)

ConvertCharA();

WriteDat();

system("pause");

)

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("OUT3.DAT","w");

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

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

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

)

fclose(fp);

)

11:下列程序的功能是:把s字符串中的所有字母改写成该字母的下一个字符,字母z

改写成字

母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。请编

写函数

chg(char*s)实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat

中。

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

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

请勿改动主函数main。和输出数据函数readwriteDat()的内容。

voidchg(char*s)/*标准答案*/

{while(*s)

if(*s=='z'||*s==,Z')

{*s-=25;s++;}

elseif(*s>='a'&&*s<='y')

{*s+=1;s++;}

elseif(*s>='A'&&*s<='Y')

{*s+=1;s++;}

elses++;

或者:

voidchg(char*s)

{inti,k;

k=strlen(s);

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

{if(s[i]=='z'||s[i]=='Z')

s[i]-=25;

else

if(isalpha(s[i]))

s[i]++;)

)

原程序如下:

#include<conio.h>

#include<string.h>

include<stdio.h>

#include<ctype.h>

#defineN81

voidreadwriteDAT();

voidchg(char*s)

(

)

main()

(

chara[N];

clrscr();

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

printf("Theoriginalstringis:");puts(a);

chg(a);

printf("Thestringaftermodified:");

puts(a);

readwriteDAT();

system("pause");

)

voidreadwriteDAT()

(

inti;

chara[N];

FILE*rf,*wf;

rf=fopen("in.dat","r");

wf=fopen("out.dat","w");

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

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

chg(a);

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

)

fclose(rf);

fclose(wf);

)

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

dm(字符型4

位),产品名称me(字符型10位),单价dj(整型),数量si(整型),金额je(长整型)四部分组

成。其

中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构

数组sell

中。请编制函数SortDat(),其功能要求:按产品名称从小到大进行排列,若产品名称

相同,则

按金额从小到大进行排列.最终排列结果仍存入结构数组sell中,最后调用函数

WhteDat()把

结果输出到文件OUT5.DAT中。

注意:部分源程序存放在PROG1.C中。

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

voidSortDat()/*标准答案*/

{intl,j;

PROxy;

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

for(j=l+1;j<1OO;j++)

if(strcmp(sell[l].dm,sellO].dm)<0)

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

elseif(strcmp(sell[l].dm,sell[j].dm)==O)

if(sell[l].je<sell[j].je)

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

)

原程序如下:

#include<stdio.h>

#include<mem.h>

#include<string.h>

#include<conio.h>

#include<stdlib.h>

#defineMAX100

typedefstruct{

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

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

intdj;/*单价*/

intsi;/*数量*/

longje;/*金额*/

}PRO;

PROsell[MAX];

voidReadDat();

voidWriteDat();

voidSortDat()

(

)

voidmain()

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

ReadDat();

SortDat();

WriteDat();}

voidReadDat()

{FILE*fp;

charstr[80],ch[11];

inti;

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

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].sl;}

fclose(fp);}

voidWriteDat(void)

{FILE*fp;

inti;

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

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

fprintf(fp,"%s%s%4d%5d%101d\n",

sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);}

fclose(fp);}

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

dm(字符型4

位),产品名称me(字符型10位),单价dj(整型),数量si(整型),金额je(长整型)四部分组

成。其

中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构

数组sell

中。请编制函数SortDat。,其功能要求:按产品代码从小到大进行排列,若产品代码相

同,则

按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数

WriteDat()把

结果输出到文件OUT6.DAT中。

注意:部分源程序存放在PROG1.C中。

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

voidSortDat。/*标准答案*/

{intl,j;

PROxy;

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

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

if(strcmp(sell[l].mc,sell[j].mc)>0)

{xy=sell[l];sell[l]=sellO];sell[j]=xy;}

elseif(strcmp(sell[l].mc,sell[j].mc)==O)

if(sell[l].je<sell[j].je)

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

)

原程序如下:

#include<stdio.h>

#include<mem.h>

#include<string.h>

#include<conio.h>

#include<stdlib.h>

#defineMAX100

typedefstruct{

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

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

intdj;/*单价*/

intsi;/*数量*/

longje;/*金额*/

}PRO;

PROsell[MAX];

voidReadDat();

voidWriteDatQ;

voidSortDat()

(

)

voidmain()

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

ReadDat();

SortDat();

WriteDat();}

voidReadDat()

{FILE*fp;

charstr[80],ch[11];

inti;

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

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].sl;}

fclose(fp);}

voidWriteDat(void)

{FILE*fp;

inti;

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

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

fprintf(fp,"%s%s%4d%5d%101d\n",

sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);}

fclose(fp);}

14:已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数

存入数组a

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

续大

于该四位数以后的5个数且该数是奇数,则统计出满足此条件的个数ent,并把这些

四位数按

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

main()函数

调用写函数wHteDat()把结果ent以及数组b中符合条件的四位数输出到OUT.DAT文

件中。

注意:部分源程序存在文件PROG1.C文件中。

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

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

writeDat()

的内容。

voidjsVal()/*标准答案*/

{intl,j,flag=O;

intk;

for(l=0;l<MAX-5;l++)

{for(j=l+1;j<=l+5;j++)

{if(a[l]>aOD

flag=1;

else{flag=O;break;}

if(a[l]%2==0)

flag=O;}

if(flag==1)

{b[cnt]=a[l];cnt++;}}

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

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

if(b[l]>bO])

{k=b[l];b[l]=b[j];bO]=k;}

)

原程序如下:

#include<stdio.h>

#defineMAX200

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

voidjsVal()

(

)

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("%d",b[i]);

printf("\n");

writeDat();

system("pause");

)

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);

)

1

15:已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数

存入数组a

中,请考生编制一函数jsVal(),其功能是:若一个四位数的千位数字上的值小于等于百

位数字

上的值,百位数字上的值小于等于十位数字上的值,十位数字上的值小于等于个位数

字上的值,

并且此四位数是偶数,则统计出满足此条件的个数ent,并把这些四位数按从大到小

的顺序存

入数组b中。最后main。函数调用写函数writeDat()把结果ent以及数组b中符合条件

的四位

数输出到OUT.DAT文件中。

注意:部分源程序存在文件PROG1.C文件中。

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

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

voidjsVal()/*标准答案*/

{intl,j;

inta1,a2,a3,a4,k;

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

{a1=a[l]/1000;a2=a[l]%1000/100;

a3=a[l]%100/10;a4=a[l]%10;

if((a1<=a2)&&(a2<=a3)&&(a3<=a4)&&(a[l]%2==0))

{b[cnt]=a[l];

cnt++;}

)

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

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

if(b[l]>bU])

{k=b[l];b[l]=b[j];bD]=k;}

)

原程序如下:

include<stdio.h>

#defineMAX200

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

voidjsVal()

(

)

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("%d",b[i]);

printf("\n");

writeDat();

system("pause");

)

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);

)

16:函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,

请编制函

数StrCharJR(),其函数的功能是:以行为单位把字符串中所有字符的ASCII值右移4

位,然后把

右移后的字符ASCII值再加上原字符的ASCH值,得到新的字符仍存入原字符串对应

的位置上。

最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数writeDat()把

结果XX

输出到文件OUT8.DAT中。原始数据文件存放的格式是:每行的宽度均小于80个字

符,含标点符

号和空格。

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

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

voidStrCharJR(void)/*标准答案*/

{intl,j,strl;

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

{strl=strlen(xx[l]);

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

xx[l]g]+=xx[l]0]»4;

)

)

注:这个编程题比二级考得还简单。

voidStrCharJR(void)

{inti,j;

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

forG=0;xx[i]0]!='\0';j++)

xx[i]0]+=xx[i][j]»4;

)

原程序如下:

include<stdio.h>

#include<string.h>

#include<conio.h>

charxx[50][80];

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

intReadDat(void);

voidWriteDat(void);

voidStrCharJR(void)

(

)

voidmain()

{clrscr();

if(ReadDat()){

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

return;

)

StrCharJR();

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=O;

i++;

)

maxline=i;

fclose(fp);

return0;

)

voidWriteDat(void)

{FILE*fp;

inti;

clrscr();

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

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

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

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

)

fclose(fp);

)

17:函数READDAT。实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX

中;请编制函数CHA(),其函数功能是:以行为单位把字符串中的第一个字符的ASCII

值加第二个字符的ASCII值,得到第一个亲朋字符,第二个字符的ASCII值加第三个字

符的ASCII值,得到第二个新字符,依此类推一直处理到最后第二个字符,最后一个字

符的ASCII值加原第一个字符的ASCII值,得到最后一个新的字符,得到的新字符分别

存放在原字符串对应的位置上。最后把已处理的字符串逆转后按行重新存入字符串

数组XX中,最后调用函数WRITEDAT()把结果XX输出到文件OUT9.DAT中源始数据

文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格.注意:部分源程

序已给出。

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

voidChA(void)/*标准答案*/

{intl,j,k,str;

charch;

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

{str=strlen(xx[l]);

ch=xx[l][0];

for(j=0;j<str-1;j++)

xx[l]0]+=xx[l]0+1];

xx[l][str-1]+=ch;

for(j=0,k=str-1;j<str/2;j++,k--)

{ch=xx[l]O];

xx[l]O]=xx[l][k];

xx[l][k]=ch;}

)

)

voidChA(void)

{inti,j;

charp,c;

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

{P=xx[i][0];

c=xx[i][strlen(xx[i])-1];

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

xx[i]0]+=xx[i]0+1];

xx[i][strlen(xx[i])-1]=p+c;

strrev(xx[i]);}

)

原程序如下:

include<stdio.h>

include<string.h>

#include<conio.h>

charxx[50][80];

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

intReadDat(void);

voidWriteDat(void);

voidChA(void)

(

)

voidmain()

(

clrscr();

if(ReadDat()){

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

return;

)

ChA();

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("OUT9.DAT","w");

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

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

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

)

fclose(fp);

)

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

中;请编制

函数encryptChar。,按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组

XX的对

应的位置上,最后调用函数WHteDat()把结果xx输出到文件PS10.DAT中。

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

符的

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

则将

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

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

符。

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

voidencryptChar。/*标准答案*/

{intI;

char*pf;

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

{pf=xx[l];

while(*pf!=0)

{if(*pf%2==0||*pf*11%256<=32)

f

else

*pf=*pf*11%256;

pf++;

}}

)

或者:

voidencryptChar()

{inti,j;

char*p;

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

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

{p=(xx[i]0]*11)%256;

if(p<=32||xx[i][j]%2==0)

elsexx[i]0]=p;}

)

原程序如下:

#include<stdio.h>

#include<string.h>

#include<conio.h>

#include<ctype.h>

unsignedcharxx[50][80];

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

intReadDat(void);

voidWriteDat(void);

voidencryptChar()

(

)

voidmain()

(

clrscr();

if(ReadDat()){

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

return;

)

encryptChar();

WriteDat();

system("pause");

)

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=O;

i++;

)

maxline=i;

fclose(fp);

return0;

)

voidWriteDat(void)

(

FILE*fp;

inti;

fp=fopen("ps10.dat","w");

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

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

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

)

fclose(fp);

)

19:编写一个函数findstr(),该函数统计一个长度为2的子字符串在另一个字符串中出

现的次

数。例如:假定输入的字符串为"asdasasdfgasdaszx67asdmklo",子字符串为"as",

数返回值为6。

函数readwiiteDat()的功能是实现从文件in.dat中读取两个字符穿4,并调用函数

findstr(),

最后把结果输出到文件out.dat中。

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

请勿改动主函数main。和函数ReadWrite。的内容。

intfindStr(char*str,char*substr)

{intn;

char*p,*r;

n=0;

while(*str)

{P=str;

r=substr;

while(*r)

if(*r==*p){r++;p++;}

elsebreak;

if(*r=='\O')

n++;

str++;}

returnn;

)

原程序如下:

#include<stdio.h>

#include<string.h>

include<conio.h>

#defineN81

intfindStr(char*str,char*substr)

{intn;

char*p,*r;

n=0;

while(*str)

{P=str;

r=substr;

while(*r)

if(*r==*p){r++;p++;}

elsebreak;

if(*r=='\O')

n++;

str++;}

returnn;

)

main()

(

charstr[81],substr[3];

intn;

clrscr();

printf("Enterastring:gets(str);

printf("Enterasubstring:");gets(substr);

puts(str);puts(substr);

n=findStr(str,substr);

printf("n=%d\n",n);

ReadWrite();

system("pause");

)

ReadWrite()

{charstr[81],substr[3],ch;

intn,len,i=O;

FILE*rf,*wf;

rf=fopen("in.dat","r");

wf=fopen("out.dat","w");

while(i<5)

{fgets(str,80,rf);

fgets(substr,10,rf);

len=strlen(substr)-1;

ch=substr[len];

if(ch=='\n'||ch==0x1a)substr[len]=O;

n=findStr(str,substr);

fprintf(wf,"%d\n",n);

i++;

)

fclose(rf);

fclose(wf);

)

20:编写函数jsvalue,它的功能是:求Fibonacci数列中大于t的最小的-一个数,结果由

函数返

回。其中Fibonacci数列F(n)的定义为:

F(0)=0,F(1)=1

F(n)=F(n-1)+F(n-2)

最后调用函数writeDat()读取10个数据t,分别得出结果且把结果输出到文件out.dat

中。

例如:当t=1000时,函数值为:1597。

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

请勿改动主函数main。和写函数whteDat()的内'B4{容。

intjsValue(intt)/*标准答案*/

{intf1=0,f2=1,fn;

fn=f1+f2;

while(fn<=t)

{f1=f2;

f2=fn;

fn=f1+f2;}

returnfn;

)

原程序如下:

#include<stdio.h>

intjsvalue(intt)

main()

{intn;

n=1000;

printf("n=%d,f=%d\n",n,jsvalue(n));

writeDat();}

writeDat()

{FILE*in,*out;

inti,n,s;

in=fopen("in.dat","r");

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

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

fscanf(in,"%d",&n);

s=jsvalue(n);

printf("%d\n",s);

fprintf(out,"%d\n",s);}

fclose(in);

fclose(out);}

21:下列程序的功能是:利用发下所示的简单迭代方法求方程:cos(x)-x=0的一个

实根。

xn+1=cos(xn)

迭代步骤如下:

(1)取X1初值为。。

(2)X0=X1,把X1的值赋给X0;

⑶X1=COS(XO),求出一个新的X1;

(4)若X0-X1绝对值小0.000001,执行步骤(5),否则执行步骤(2);

(5)所求X1就是方程cos(X)-X=0的一个实根,作为函数值返回。

请编写函数countvalue。实现程序的要求,最后调用函数WRITEDAT()把结果输出到

文件

OUT17.DAT中。

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

请勿改动主函数main。和输出数据函数writeDAT()的内容。

floatcountValue。/*标准答案*/

{floatx0,x1=0.0;

while(1)

{x0=x1;

x1=cos(x0);

if(fabs(x0-x1)<1e-6)break;

)

returnx1;

)

或者:

floatcountv

温馨提示

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

评论

0/150

提交评论