糯米文學吧

位置:首頁 > 計算機 > 計算機三級

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值,得到新的第一個字符。