2006年9月全國等級考試三級c語言上機題庫(十八)
☆題目18(無憂id 1 題) 函式readdat()實現從檔案eng.in中讀取一篇英文文章,存入到字元串數組xx中;請編制函式encryptchar(),按給定的替代關係對數組xx中的所有字元進行替代,仍存入數組xx的對應的位置上,最後調用函式writedat()把結果xx輸出到檔案ps10.dat中。替代關係:f(p)=p*11 mod 256(p是數組中某一個字元的ascii值,f(p)是計算後新字元的ascii值),如果原字元的ascii值是偶數或計算後f(p)值小於等於32,則該字元不變,否則將f(p)所對應的字元進行替代。部分源程式存在檔案prog1.c中。原始數據檔案存放的格式是:每行的寬度均小於80個字元。請勿改動主函式main()、讀數據函式readdat()和輸出數據函式writedat()的內容。#include <stdio.h>#include <string.h>#include <conio.h>#include <ctype.h> unsigned char xx[50][80];int maxline=0;/*文章的總行數*/ int readdat(void);void writedat(void); void encryptchar(){ int i,j;for(i=0;i<maxline;i++)for(j=0;j<strlen(xx[i]);j++)if(xx[i][j]*11%256<=32||xx[i][j]%2==0) continue;else xx[i][j]=xx[i][j]*11%256;} void main(){clrscr();if(readdat()){printf("數據檔案eng.in不能打開!\n\007");return;}encryptchar();writedat();} int readdat(void){file *fp;int i=0;unsigned char *p; if((fp=fopen("eng.in","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;fp=fopen("ps10.dat","w");for(i=0;i<maxline;i++){printf("%s\n",xx[i]);fprintf(fp,"%s\n",xx[i]);}fclose(fp);}此題還有許多解法,方法可看題8