當前位置:才華齋>計算機>計算機三級>

2016年3月三級網路技術上機題及答案

計算機三級 閱讀(2.78W)

  1.函式ReadDat( )的功能是實現從檔案中讀取一篇英文文章存入到字串陣列xx中。請編制函式SortCharA( ),該函式的功能是:以行為單位對字元按從小到大的順序進行排序,排序後的結果仍按行重新存入字串陣列xx中。最後呼叫函式WriteDat( )把結果xx輸出到檔案中。

2016年3月三級網路技術上機題及答案

例如,原文:dAe,BfC

CCbbAA

結果:ABCdef

AACCbb

原始資料檔案存放的格式是:每行的寬度均小於80個字元,含標點符號和空格。

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

請勿改動主函式main( )、讀函式ReadDat( )和寫函式WriteDat( )的內容。

試題程式:

#include

#include

#include

char xx[50][80];

int maxline=0;

int ReadDat(void);

void WriteDat(void);

void SortCharA()

{

}

void main()

{

system("CLS");

if (ReadDat())

{

printf("資料檔案不能開啟!n07");

return;

}

SortCharA();

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 SortCharA()

{

int i,j,k; /*定義迴圈控制變數*/

int str; /*儲存字串的長度*/

char temp; /*資料交換時的暫存變數*/

for (i=0;i

{

str=strlen(xx[i]); /*求得當前行的'字串長度*/

for(j=0;j

for(k=j+1;k<>

if (xx[i][j]>xx[i][k])

{

temp=xx[i][j];

xx[i][j]=xx[i][k];

xx[i][k]=temp;

}

}

}

【解析】本題主要考查陣列的訪問及排序問題。

通過雙重迴圈結構逐行獲取字元進行處理,首先使用字串處理函式strlen()來求出每一行的字串長度。然後運用選擇法逐行對字元按照從小到大的順序進行排序。

  2.編寫一個函式findStr( ),該函式統計一個長度為2的字串在另一個字串中出現的次數。例如,假定輸入的字串為"asd asasdfg asd as zx67 asd mklo",子字串為"as",函式返回值是6。

  函式ReadWrite( )的功能是實現從檔案中讀取兩個字串,並呼叫函式findStr(),最後把結果輸出到檔案中。

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

請勿改動主函式main() 和其他函式中的任何內容,僅在函式 findStr()的花括號中填入你所編寫的若干語句。

試題程式:

#include

#include

#include

void ReadWrite();

int findStr(char *str,char *substr)

{

}

void main()

{

char str[81],substr[3];

int n;

system("CLS");

printf("輸入原字串:");

gets(str);

printf("輸入子字串:");

gets(substr);

puts(str);

puts(substr);

n=findStr(str,substr);

printf("n=%dn",n);

ReadWrite();

}

void ReadWrite()

{

char ch,str[81],substr[3];

int n,len,i=0;

FILE *rf,*wf;

rf=fopen("","r");

wf=fopen("","w");

while(i<>

{

fgets(str,80,rf);

fgets(substr,10,rf);

len=strlen(substr)-1;

ch=substr[len];

if(ch=='n'||ch==0x1a)

substr[len]=0;

n=findStr(str,substr);

fprintf(wf,"%dn",n);

i++;

}

fclose(rf);

fclose(wf);

}【答案】

int findStr(char *str,char *substr)

{

int n=0; /*定義計數器變數,統計出現次數*/

char *p,*r; /*定義指標變數來分別指向兩個字串*/

while(*str) /*如果字串沒有結束,則一直迴圈下去*/

{

p=str; /*指標p指向字串首地址*/

r=substr; /*指標r指向子字串首地址*/

while(*r) /*若子字串沒有結束,則迴圈繼續*/

if(*r==*p)

/*如果子字串的第一個字元等於字串中的該字元,則繼續比較下一個字元*/

{

r++;

p++;

}

else

break; /*否則退出迴圈*/

if(*r=='') /*如果子字串在字串中出現了一次*/

n++; /*則n加1,進行統計*/

str++; /*指向字串中的下一個字元*/

}

return n; /*返回統計結果n*/

}

【解析】本題主要考查了指標的相關操作。

首先,通過外層的while迴圈取字串的每一個字元,取完字串的所有字元之後,迴圈才會終止。用兩個字元型指標分別指向兩個字串。逐個將字串的字元跟子字串的字元對比,如果相等,則兩個指標都自加1,分別指向兩個串的下一個字元。若不相等,則主串的指標加1,子串的指標重新指向起始位置,繼續比較下一個字元。