2016年計算機三級網路技術上機試題及答案
函式ReadDat( )的功能是實現從檔案中讀取一篇英文文章存入到字串陣列xx中。請編制函式CharConvA( ),該函式的功能是:以行為單位把字串的最後一個字元ASCII值右移4位後加最後第二個字元的ASCII值,得到最後一個新的字元,最後第二個字元的 ASCII值右移4位後加最後第三個字元的ASCII值,得到最後第二個新的字元,以此類推一直處理到第二個字元,第一個字元的ASCII值加最後一個字元的ASCII值,得到第一個新的字元,得到的新字元分別存放在原字串對應的位置上,把已處理的字串仍按行重新存入字串陣列xx中,最後呼叫函式 WriteDat( )把結果xx輸出到檔案中。
注意:部分源程式已給出。
原始檔案存放的格式是:每行的寬度小於80個字元,含標點符號和空格。
請勿改動主函式main( )、讀函式ReadDat( )和寫函式WriteDat( )的內容。
試題程式:
#include
#include
#include
char xx[50][80];
int maxline=0;
int ReadDat();
void WriteDat();
void CharConvA(void)
{
}
void main()
{
system("CLS");
if (ReadDat())
{
printf("資料檔案不能開啟!n07");
return;
}
CharConvA( );
WriteDat();
}
int ReadDat(void)
{
FILE *fp;
int i=0;
char *p;
if((fp=fopen("","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()
{
FILE *fp;
int i;
system("CLS");
fp=fopen("","w");
for(i=0;i
{
printf("%sn",xx[i]);
fprintf(fp,"%sn",xx[i]);
}
fclose(fp);
}
【參考答案】
void CharConvA(void)
{
int i,j,k; /*定義迴圈控制變數*/
int str; /*儲存字串長度*/
char ch; /*暫存最後一個字元*/
for(i=0;i
{
str=strlen(xx[i]); /*求得當前行的字串長度*/
ch=xx[i][str-1]; /*將最後一個字元暫存入ch*/
for(j=str-1;j>0;j--) /*從最後一個字元開始,直到第二個字元*/
xx[i][j]=(xx[i][j]>>4)+xx[i][j-1];
/*當前字元ASCII值右移4位加前一個字元的ASCII值,得到新的當前字元*/
xx[i][0]+=ch;
/*第一個字元的ASCII值加最後一個字元的ASCII值,得到新的第一個字元*/
}
}
【解析】
本題考查的是二維陣列的訪問。
首先儲存最後一個字元,利用for迴圈由後向前逆序訪問陣列中的'字元。
將當前獲取字元的ASCII值右移4位加前一個字元的ASCII值,得到新的當前字元。
最後,將第一個字元的ASCII值加上儲存的最後一個字元的ASCII值,得到新的第一個字元。