計算機三級

當前位置 /首頁/計算機/計算機三級/列表

2016年計算機三級網路技術上機試題及答案

函式ReadDat( )的功能是實現從檔案中讀取一篇英文文章存入到字串陣列xx中。請編制函式CharConvA( ),該函式的功能是:以行為單位把字串的最後一個字元ASCII值右移4位後加最後第二個字元的ASCII值,得到最後一個新的字元,最後第二個字元的 ASCII值右移4位後加最後第三個字元的ASCII值,得到最後第二個新的字元,以此類推一直處理到第二個字元,第一個字元的ASCII值加最後一個字元的ASCII值,得到第一個新的字元,得到的新字元分別存放在原字串對應的位置上,把已處理的字串仍按行重新存入字串陣列xx中,最後呼叫函式 WriteDat( )把結果xx輸出到檔案中。

2016年計算機三級網路技術上機試題及答案

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

原始檔案存放的格式是:每行的寬度小於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值,得到新的第一個字元。