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

☆題目17 (親朋字元替換題)

 

函式readdat()實現從檔案in.dat中讀取一篇英文文章存入到字元串數組xx中;請編制函式cha(),其函式功能是:以行為單位把字元串中的第一個字元的ascii值加第二個字元的ascii值,得到第一個親朋字元,第二個字元的ascii值加第三個字元的ascii值,得到第二個新字元,依此類推一直處理到最後第二個字元,最後一個字元的ascii值加原第一個字元的ascii值,得到最後一個新的字元,得到的新字元分別存放在原字元串對應的位置上。最後把已處理的字元串逆轉後按行重新存入字元串數組xx中,最後調用函式writedat()把結果xx輸出到檔案out9.dat中.原始數據檔案存放的格式是:每行的寬度均小於80個字元,含標點符號和空格.

注意:部分源程式已給出。

請勿改動主函式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 cha(void)

{ int i,j;

char ch;

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

{ ch=xx[i][0];

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

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

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

strrev(xx[i]);

}

}

void main()

{

clrscr() ;

if(readdat()) {

printf("數據檔案in.dat不能打開!\n\007") ;

return ;

}

cha() ;

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

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

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

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

}

fclose(fp) ;

}