全國計算機等級考試三級數據庫技術上機試題匯編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

提交評論