2006年9月全國等級考試三級c語言上機題庫(十)

題目10(無憂id 68 替換字元題)

函式readdat()實現從檔案in.dat中讀取一篇英文文章存入到字元串數組xx中,請編制函式convertchara(),其函式的功能是:以行為單位把字元串中的所有小寫字母改寫成該字母的下一個字母,如果是字母z,則改寫成字母a。大寫字母仍為大寫字母,小寫字母仍為小寫字母,其他字元不變。把已處理的字元串仍按行重新存入字元串數組xx中,最後調用函式writedat()把結果xx輸出到檔案out1.dat中。
例:原文:adb.bcdza
abck.llhj
結果:aec.bdeab
bcdl.llik
原始數據檔案存放的格式是:每行的寬度均小於80個字元,含標點符號和空格。
部分源程式存在檔案prog1.c中。
請勿改動主函式main()、讀數據函式readdat()和輸出數據函式writedat()的內容。
#include <stdio.h>
#include <string.h>
#include <conio.h>

char xx[50][80];
int maxline=0;/*文章的總行數*/

int readdat(void);
void writedat(void);

void convertchara(void)
{ int i,j;
for(i=0;i<maxline;i++)
{ for(j=0;j<strlen(xx[i]);j++)
if(xx[i][j]=='z') xx[i][j]='a';
else if(xx[i][j]>='a'&&xx[i][j]<='y') xx[i][j]+=1;
}
}

void main()
{
clrscr();
if(readdat()){
printf("數據檔案in.dat不能打開!\n\007");
return;
}
convertchara();
writedat();
}

int readdat(void)
{
file *fp;
int i=0;
char *p;

if((fp=fopen("in.dat","r"))==null) return 1;
while(fgets(xx[i],80,fp)!=null){
p=strchr(xx[i],'\n');
if(p)*p=0;
i++;
}
maxline=i;
fclose(fp);
return 0;
}

void writedat(void)
{
file *fp;
int i;

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