上機考試習題集

上機考試習題集

本書提供了全國計算機等級考試三級C語言機試試題庫。本書配套光碟中有3部分內容:本書所有習題的詳盡答案;本書所有習題的源檔案;上機考試的全真模擬環境。讀者可以利用配套光碟進行考前訓練。

基本信息

上機考試習題集 上機考試習題集

本書所有題目均進行了測試,保證能夠在實際環境中正常運行。

本書針對參加全國計算機等級考試三級C語言程式設計的考生,同時也可作為大專院校、成人高等教育以及相關培訓班的練習題和考試題使用。

上機試題總結:

100個產品銷售記錄排序(此類共10題)

code:

/*

已知在檔案IN.DAT中存有100個產品銷售記錄, 每個產品銷售

記錄由產品代碼dm(字元型4位), 產品名稱mc(字元型10位), 單價

dj(整型), 數量sl(整型), 金額je(長整型)五部分組成。 其中:

金額=單價*數量計算得出。函式ReadDat( )讀取這100個銷售記錄

並存入結構數組sell中。請編制函式SortDat( ), 其功能要求:

按金額從小到大進行排列, 若金額相等, 則按產品代碼從小到大

進行排列, 最終排列結果仍存入結構數組sell中。最後main( )函

數調用函式WriteDat()把結果輸出到檔案OUT1.DAT中。

注意: 部分源程式存放在PROG1.C中。

請勿改動主函式main( )、讀數據函式ReadDat()和輸出數據函

數WriteDat()的內容。

*/

#include <stdio.h>

#include <mem.h>

#include <string.h>

#include <conio.h>

#include <stdlib.h>

#define MAX 100

typedef struct {

char dm[5] ; /* 產品代碼 */

char mc[11] ; /* 產品名稱 */

int dj ; /* 單價 */

int sl ; /* 數量 */

long je ; /* 金額 */

} PRO ;

PRO sell[MAX] ;

void ReadDat() ;

void WriteDat() ;

void SortDat()

{/**/

int i,j,k;

PRO tt;

for(i=0; i < MAX-1; i++)

{ k=i;

for(j=i+1; j < MAX; j++)

if((sell[k].je>sell[j].je)||(sell[k].je==sell[j].je)&&(strcmp(sell[k].dm, sell[j].dm)>0))

k=j;

if(k!=i)

{ tt=sell[k]; sell[k]=sell ; sell=tt;}

}

/**/

}

void main()

{

memset(sell, 0, sizeof(sell)) ;

ReadDat() ;

SortDat() ;

WriteDat() ;

}

void ReadDat()

{

FILE *fp ;

char str[80], ch[11] ;

int i ;

fp = fopen("IN.DAT", "r") ;

for(i = 0 ; i < 100 ; i++) {

fgets(str, 80, fp) ;

memcpy(sell .dm, str, 4) ;

memcpy(sell .mc, str + 4, 10) ;

memcpy(ch, str + 14, 4) ; ch[4] = 0 ;

sell .dj = atoi(ch) ;

memcpy(ch, str + 18, 5) ; ch[5] = 0 ;

sell .sl = atoi(ch) ;

sell .je = (long)sell.dj * sell.sl ;

}

fclose(fp) ;

}

void WriteDat()

{

FILE *fp ;

int i ;

fp = fopen("OUT1.DAT", "w") ;

for(i = 0 ; i < 100 ; i++) {

fprintf(fp, "%s %s %4d %5d %10ld\n", sell .dm, sell.mc, sell.dj, sell.sl, sell.je) ;

}

fclose(fp) ;

}

100個產品銷售記錄排序其餘9題說明

1) in.dat 內容完全相同。

2) 程式也基本雷同,僅排序的要求不一樣。

3) 考生應熟悉 strcmp() 函式,否則有的題相當不好處理。

之二

排序要求:

按金額從小到大進行排列, 若金額相等, 則按產品代碼從大到小

進行排列

相應語句:

if(sell[k].je>sell[j].je|| (sell[k].je==sell[j].je) &&

(strcmp(sell[k].dm, sell[j].dm) < 0))

之三

排序要求:

按金額從大到小進行排列, 若金額相等, 則按產品代碼從小到大

進行排列

相應語句:

if((sell[k].je <

sell[j].je)||(sell[k].je==sell[j].je)&&(strcmp(sell[k].dm,

sell[j].dm)>0))

之四

排序要求:

按金額從大到小進行排列, 若金額相等, 則按產品代碼從大到小

進行排列

相應語句:

if((sell[k].je <

sell[j].je)||(sell[k].je==sell[j].je)&&(strcmp(sell[k].dm,sell[j].dm)<0))

之五

排序要求:

按產品名稱從小到大進行排列, 若產品名稱相同, 則按金額從小

到大進行排列

相應語句:

if((strcmp(sell[k].mc,

sell[j].mc)>0)||(strcmp(sell[k].mc,sell[j].mc)==0)&&(sell[k].je>sell[j].je))

之六

排序要求:

按產品名稱從小到大進行排列, 若產品名稱相同, 則按金額從大

到小進行排列

相應語句:

if(strcmp(sell .mc, sell[j].mc)>0 || (strcmp(sell.mc,

sell[j].mc)==0)&&(sell .je < sell[j].je))

之七

排序要求:

按產品名稱從大到小進行排列, 若產品名稱相同, 則按金額從小

到大進行排列

相應語句:

if((strcmp(sell[k].mc, sell[j].mc) < 0) ||

(strcmp(sell[k].mc,sell[j].mc)==0)&&(sell[k].je>sell[j].je))

之八

排序要求:

按產品名稱從大到小進行排列, 若產品名稱相同, 則按金額從大

到小進行排列

相應語句:

if((strcmp(sell[k].mc, sell[j].mc) < 0)|| (strcmp(sell[k].mc,

sell[j].mc)==0)&&(sell[k].je < sell[j].je))

之九

排序要求:

按產品代碼從小到大進行排列, 若產品代碼相同, 則按金額從小

到大進行排列

相應語句:

if((strcmp(sell[k].dm,

sell[j].dm)>0)||(strcmp(sell[k].dm,sell[j].dm)==0)&&(sell[k].je>sell[j].je

code:

/*

已知在檔案IN.DAT中存有100個產品銷售記錄, 每個產品銷售

記錄由產品代碼dm(字元型4位), 產品名稱mc(字元型10位), 單價

dj(整型), 數量sl(整型), 金額je(長整型)五部分組成。 其中:

金額=單價*數量計算得出。函式ReadDat( )讀取這100個銷售記

錄並存入結構數組sell中。請編制函式SortDat( ), 其功能要求:

按產品代碼從大到小進行排列, 若產品代碼相同, 則按金額從大

到小進行排列, 最終排列結果仍存入結構數組sell中。最後main()

函式調用函式WriteDat()把結果輸出到檔案OUT10.DAT中。

注意: 部分源程式存放在PROG1.C中。

請勿改動主函式main( )、讀數據函式ReadDat()和輸出數據函

數WriteDat()的內容。

*/

#include <stdio.h>

#include <mem.h>

#include <string.h>

#include <conio.h>

#include <stdlib.h>

#define MAX 100

typedef struct {

char dm[5] ; /* 產品代碼 */

char mc[11] ; /* 產品名稱 */

int dj ; /* 單價 */

int sl ; /* 數量 */

long je ; /* 金額 */

} PRO ;

PRO sell[MAX] ;

void ReadDat() ;

void WriteDat() ;

void SortDat()

{/**/

int i,j;

PRO tt;

for(i=0; i < MAX-1; i++)

for(j=i+1; j < MAX; j++)

{ if(strcmp(sell .dm, sell[j].dm) < 0)

{ tt=sell ; sell=sell[j]; sell[j]=tt;}

if((strcmp(sell .dm, sell[j].dm)==0)&&(sell.je < sell[j].je))

{ tt=sell ; sell=sell[j]; sell[j]=tt;}

}

/**/

}

void main()

{

memset(sell, 0, sizeof(sell)) ;

ReadDat() ;

SortDat() ;

WriteDat() ;

}

void ReadDat()

{

FILE *fp ;

char str[80], ch[11] ;

int i ;

fp = fopen("IN.DAT", "r") ;

for(i = 0 ; i < 100 ; i++) {

fgets(str, 80, fp) ;

memcpy(sell .dm, str, 4) ;

memcpy(sell .mc, str + 4, 10) ;

memcpy(ch, str + 14, 4) ; ch[4] = 0 ;

sell .dj = atoi(ch) ;

memcpy(ch, str + 18, 5) ; ch[5] = 0 ;

sell .sl = atoi(ch) ;

sell .je = (long)sell.dj * sell.sl ;

}

fclose(fp) ;

}

void WriteDat()

{

FILE *fp ;

int i ;

fp = fopen("OUT10.DAT", "w") ;

for(i = 0 ; i < 100 ; i++) {

fprintf(fp, "%s %s %4d %5d %10ld\n", sell .dm, sell.mc, sell.dj, sell.sl, sell.je) ;

}

fclose(fp) ;

}

300個四位數問題(此類共10題)

本類10題中,五題產生數組B,並對B按一定要求排序;

其餘五題是求平均值。我把它們分成兩組五題來討論。

以下為產生數組B之題一:

code:

/*

已知數據檔案IN.DAT中存有300個四位數, 並已調用讀函式

readDat()把這些數存入數組a中, 請編制一函式jsvalue(),其功

能是: 求出個位數上的數減千位數上的數減百位數上的數減十位

數上的數大於零的個數cnt, 再把所有滿足此條件的四位數依次

存入數組b中, 然後對數組b的四位數按從大到小的順序進行排序。

最後main( )函式調用寫函式writeDat()把數組b中的數輸出到文

件OUT.DAT。

例如: 1239, 9-1-2-3>0, 則該數滿足條件存入數組b中, 且

個數cnt=cnt+1。

8129, 9-8-1-2<0, 則該數不滿足條件忽略。

注意: 部分源程式存在檔案PROG1.C檔案中。

程式中已定義數組: a[300], b[300], 已定義變數: cnt

請勿改動數據檔案IN.DAT中的任何數據、主函式main()、讀

函式readDat()和寫函式writeDat()的內容。

*/

#include <stdio.h>

int a[300], b[300], cnt=0 ;

jsvalue()

{/**/

int i,j,k,t;

for(i=0; i < 300; i++)

if(a %10-a/1000-a/100%10-a/10%10>0)

b[cnt++]=a ;

for(i=0; i < cnt-1; i++)

{ k=i;

for(j=i+1; j < cnt; j++)

if(b[k] < b[j]) k=j;

if(k!=i) { t=b[k]; b[k]=b ; b=t; }

}

/**/

}

main()

{

int i ;

readDat() ;

jsvalue() ;

writeDat() ;

printf("cnt=%d\n", cnt) ;

for(i = 0 ; i < cnt ; i++) printf("b[%d]=%d\n", i, b ) ;

}

readDat()

{

FILE *fp ;

int i ;

fp = fopen("in.dat","r") ;

for(i = 0 ; i < 300 ; i++) fscanf(fp, "%d,", &a ) ;

fclose(fp) ;

}

writeDat()

{

FILE *fp ;

int i ;

fp = fopen("out.dat","w") ;

fprintf(fp, "%d\n", cnt) ;

for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b ) ;

fclose(fp) ;

}

要求:

求出所有這些四位數是素數的個數cnt, 再把所有滿足此

條件的四位數依次存入數組b中, 然後對數組b的四位數按從小到

大的順序進行排序。

要求:

求出千位數上的數減百位數上的數減十位數上的數減個位

數上的數大於零的個數cnt, 再把所有滿足此條件的四位數依次

存入數組b中, 然後對數組b的四位數按從小到大的順序進行排序。

之五

要求:

求出千位數上的數加百位數上的數等於十位數上的數加個

位數上的數的個數cnt, 再把所有滿足此條件的四位數依次存入

數組b中, 然後對數組b的四位數按從大到小的順序進行排序。

求滿足條件的數的個數、平均值……

求滿足條件的數的個數、平均值及不滿足條件的數的平均

值等,此類也是五題。本處僅給出一個全題,其餘題只給出不同

之處。

code:

/*

已知數據檔案IN.DAT中存有300個四位數, 並已調用讀函式

readDat()把這些數存入數組a中, 請編制一函式jsvalue(),其功

能是: 求出千位數上的數減百位數上的數減十位數上的數減個位

數上的數大於零的個數cnt, 再求出所有滿足此條件的四位數平

均值pjz1, 以及所有不滿足此條件的四位數平均值pjz2。最後

main()函式調用寫函式writeDat()把結果cnt,pjz1,pjz2輸出到

OUT.DAT檔案。

例如: 9123, 9-1-2-3>0, 則該數滿足條件計算平均值pjz1,

且個數cnt=cnt+1。

9812, 9-8-1-2<0, 則該數不滿足條件計算平均值pjz2。

注意: 部分源程式存在檔案PROG1.C檔案中。

程式中已定義數組: a[300], 已定義變數: cnt,pjz1,pjz2

請勿改動數據檔案IN.DAT中的任何數據、主函式main()、讀

函式readDat()和寫函式writeDat()的內容。

*/

#include

int a[300], cnt=0 ;

double pjz1=0.0, pjz2=0.0 ;

jsvalue()

{/**/

int i;

for(i=0; i < 300; i++)

if(a /1000-a/100%10-a/10%10-a%10>0)

{ cnt++; pjz1+=a ; }

else pjz2+=a ;

if(cnt) pjz1/=cnt;

if(cnt<300) pjz2/=300-cnt;

/**/

}

main()

{

int i ;

readDat() ;

jsvalue() ;

writeDat() ;

printf("cnt=%d\n滿足條件的平均值pzj1=%7.2lf\n不滿足條件的平均值pzj2=%7.2lf\n", cnt,pjz1,pjz2);

}

readDat()

{

FILE *fp ;

int i ;

fp = fopen("in.dat","r") ;

for(i = 0 ; i < 300 ; i++) fscanf(fp, "%d,", &a ) ;

fclose(fp) ;

}

writeDat()

{

FILE *fp ;

int i ;

fp = fopen("out.dat","w") ;

fprintf(fp, "%d\n%7.2lf\n%7.2lf\n", cnt, pjz1, pjz2) ;

fclose(fp) ;

}

滿足條件數的平均數……四題之說明

之二

要求:

求出千位數上的數加百位數上的數等於十位數上的數加個

位數上的數的個數cnt, 再求出所有滿足此條件的四位數平均值

pjz1, 以及所有不滿足此條件的四位數平均值pjz2。

之三

要求:

求出個位數上的數減千位數上的數減百位數上的數減十位

數上的數大於零的個數cnt, 再求出所有滿足此條件的四位數平

均值pjz1, 以及所有不滿足此條件的四位數平均值pjz2。

之四

要求:

求出所有這些四位數是素數的個數cnt, 再求出所有滿足

此條件的四位數平均值pjz1, 以及所有不滿足此條件的四位數平

均值pjz2。

之五

要求:

求出千位數上的數加個位數上的數等於百位數上的數加十

位數上的數的個數cnt, 再求出所有滿足此條件的四位數平均值

pjz1, 以及所有不滿足此條件的四位數平均值pjz2。

200個四位數(此類共10題)

此部分題與300個數的題有相似之處。

之一

code:

/*

已知數據檔案IN.DAT中存有200個四位數, 並已調用讀函式

readDat()把這些數存入數組a中,請考生編制一函式jsVal(),其

功能是: 把千位數字和十位數字重新組成一個新的十位數ab(新

十位數的十位數字是原四位數的千位數字,新十位數的個位數字

是原四位數的十位數字), 以及把個位數字和百位數字組成另一

個新的十位數cd (新十位數的十位數字是原四位數的個位數字,

新十位數的個位數字是原四位數的百位數字), 如果新組成的兩

個十位數ab>cd, ab必須是偶數且能被5整除, cd必須是奇數,同

時兩個新數的十位數字均不為零,則將滿足此條件的四位數按從

大到小的順序存入數組b中, 並要計算滿足上述條件的四位數的

個數cnt。最後main()函式調用寫函式writeDat( )把結果cnt以

及數組b中符合條件的四位數輸出到OUT.DAT檔案中。

注意: 部分源程式存在檔案PROG1.C檔案中。

程式中已定義數組: a[200], b[200], 已定義變數: cnt

請勿改動數據檔案IN.DAT中的任何數據、主函式main()、讀

函式readDat()和寫函式writeDat()的內容。

*/

#include <stdio.h>

#define MAX 200

int a[MAX], b[MAX], cnt = 0 ;

void jsVal()

{/**/

int i,j,k,A,B,C,D;

for(i=0; i < MAX; i++)

{ A=a /1000; B=a/10%10; C=a%10; D=a/100%10;

if(A&&C&&(B==0)&&(D%2)&&(10*A>10*C+D))

b[cnt++]=a ;

}

for(i=0; i < cnt-1; i++)

{ k=i;

for(j=i+1; j < cnt; j++)

if(b[k] < b[j]) k=j;

if(k!=i) {A=b[k]; b[k]=b ; b=A;}

}

/**/

}

void readDat()

{

int i ;

FILE *fp ;

fp = fopen("in.dat", "r") ;

for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a ) ;

fclose(fp) ;

}

void main()

{

int i ;

readDat() ;

jsVal() ;

printf("滿足條件的數=%d\n", cnt) ;

for(i = 0 ; i < cnt ; i++) printf("%d ", b ) ;

printf("\n") ;

writeDat() ;

}

writeDat()

{

FILE *fp ;

int i ;

fp = fopen("out.dat", "w") ;

fprintf(fp, "%d\n", cnt) ;

for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b ) ;

fclose(fp) ;

200個四位數題之其餘九題說明

之二

要求:

把千位數字和十位數字重新組成一個新的十位數(新十

位數的十位數字是原四位數的千位數字,新十位數的個位數字是

原四位數的十位數字), 以及把個位數字和百位數字組成另一個

新的十位數(新十位數的十位數字是原四位數的個位數字, 新十

位數的個位數字是原四位數的百位數字), 如果新組成的兩個十

位數均是素數且新數的十位數字均不為零,則將滿足此條件的四

位數按從大到小的順序存入數組b中, 並要計算滿足上述條件的

四位數的個數cnt。

之三

要求:

把個位數字和千位數字重新組成一個新的十位數(新十

位數的十位數字是原四位數的個位數字,新十位數的個位數字是

原四位數的千位數字), 以及把百位數字和十位數字組成另一個

新的十位數(新十位數的十位數字是原四位數的百位數字, 新十

位數的個位數字是原四位數的十位數字), 如果新組成的兩個十

位數必須是一個奇數,另一個為偶數並且兩個十位數中至少有一

個數能被17整除,同時兩個新數的十位數字均不為零, 則將滿足

此條件的四位數按從大到小的順序存入數組b中, 並要計算滿足

上述條件的四位數的個數cnt。

之四

要求:

)把這些數存入數組a中,請考生編制一函式jsVal(),其

功能是: 把千位數字和十位數字重新組成一個新的十位數ab(新

十位數的十位數字是原四位數的千位數字,新十位數的個位數字

是原四位數的十位數字), 以及把個位數字和百位數字組成另一

個新的十位數cd (新十位數的十位數字是原四位數的個位數字,

新十位數的個位數字是原四位數的百位數字), 如果新組成的兩

個十位數ab-cd>=10且ab-cd<=20且兩個數均是偶數,同時兩個新

數的十位數字均不為零,則將滿足此條件的四位數按從大到小的

順序存入數組b中, 並要計算滿足上述條件的四位數的個數cnt。

之五

要求:

如果四位數各位上的數字均是0或2或4或6或8, 則統計

出滿足此條件的個數cnt, 並把這些四位數按從大到小的順序存

入數組b中。

之六

要求:

把千位數字和個位數字重新組成一個新的十位數(新十

位數的十位數字是原四位數的千位數字,新十位數的個位數字是

原四位數的個位數字), 以及把百位數字和十位數字組成另一個

新的十位數(新十位數的十位數字是原四位數的百位數字, 新十

位數的個位數字是原四位數的十位數字), 如果新組成的兩個十

位數均是奇數並且兩個十位數中至少有一個數能被5整除, 同時

兩個新數的十位數字均不為零,則將滿足此條件的四位數按從大

到小的順序存入數組b中, 並要計算滿足上述條件的四位數的個

數cnt。

之七

要求:

把個位數字和千位數字重新組成一個新的十位數(新十

位數的十位數字是原四位數的個位數字,新十位數的個位數字是

原四位數的千位數字), 以及把百位數字和十位數字組成另一個

新的十位數(新十位數的十位數字是原四位數的百位數字, 新十

位數的個位數字是原四位數的十位數字), 如果新組成的兩個十

位數均是偶數並且兩個十位數中至少有一個數能被9整除, 同時

兩個新數的十位數字均不為零,則將滿足此條件的四位數按從大

到小的順序存入數組b中, 並要計算滿足上述條件的四位數的個

數cnt。

之八

要求:

把千位數字和十位數字重新組成一個新的十位數ab(新

十位數的十位數字是原四位數的千位數字,新十位數的個位數字

是原四位數的十位數字), 以及把個位數字和百位數字組成另一

個新的十位數cd (新十位數的十位數字是原四位數的個位數字,

新十位數的個位數字是原四位數的百位數字), 如果新組成的兩

個十位數ab 同時兩個新數的十位數字均不為零,則將滿足此條件的四位數按

從大到小的順序存入數組b中, 並要計算滿足上述條件的四位數

的個數cnt。

之九

要求:

如果四位數各位上的數字均是奇數,則統計出滿足此條

件的個數cnt並把這些四位數按從大到小的順序存入數組b中。

之十

要求:

把千位數字和十位數字重新組成一個新的十位數ab(新

十位數的十位數字是原四位數的千位數字,新十位數的個位數字

是原四位數的十位數字), 以及把個位數字和百位數字組成另一

個新的十位數cd (新十位數的十位數字是原四位數的個位數字,

新十位數的個位數字是原四位數的百位數字), 如果新組成的兩

個十位數ab-cd>=0且ab-cd<=10且兩個數均是奇數, 同時兩個新

數的十位數字均不為零,則將滿足此條件的四位數按從大到小的

順序存入數組b中, 並要計算滿足上述條件的四位數的個數cnt。

小於200個四位數之一(共四題)

code:

/*

已知在檔案IN.DAT中存有若干個(個數<200)四位數字的正整

數, 函式ReadDat( )讀取這若干個正整數並存入數組xx中。請編

制函式Calvalue( ), 其功能要求: 1. 求出這檔案中共有多少個

正整數totNum; 2.求出這些數中的各位數字之和是奇數的數的個

數totCnt, 以及滿足此條件的這些數的算術平均值totPjz。最後

main( )函式調用函式WriteDat()把所求的結果輸出到OUT.DAT文

件中。

注意: 部分源程式存放在PROG1.C中。

請勿改動數據檔案IN.DAT中的任何數據,主函式main()、讀

數據函式ReadDat()和輸出數據函式WriteDat()的內容。

*/

#include <stdio.h>

#include <conio.h>

#define MAXNUM 200

int xx[MAXNUM] ;

int totNum = 0 ; /* 檔案IN.DAT中共有多少個正整數 */

int totCnt = 0 ; /* 符合條件的正整數的個數 */

double totPjz = 0.0 ; /* 平均值 */

int ReadDat(void) ;

void WriteDat(void) ;

void Calvalue(void)

{/**/

while(xx[totNum])

{ if((xx[totNum]/1000+xx[totNum]/100%10+xx[totNum]/10%10+xx[totNum])%2)

{ totCnt++; totPjz+=xx[totNum]; }

totNum++;

}

if(totCnt) totPjz/=totCnt;

/**/

}

void main()

{

int i ;

clrscr() ;

for(i = 0 ; i < MAXNUM ; i++) xx = 0 ;

if(ReadDat()) {

printf("數據檔案IN.DAT不能打開!\007\n") ;

return ;

}

Calvalue() ;

printf("檔案IN.DAT中共有正整數=%d個\n", totNum) ;

printf("符合條件的正整數的個數=%d個\n", totCnt) ;

printf("平均值=%.2lf\n", totPjz) ;

WriteDat() ;

}

int ReadDat(void)

{

FILE *fp ;

int i = 0 ;

if((fp = fopen("in.dat", "r")) == NULL) return 1 ;

while(!feof(fp)) {

fscanf(fp, "%d,", &xx[i++]) ;

}

fclose(fp) ;

return 0 ;

}

void WriteDat(void)

{

FILE *fp ;

fp = fopen("OUT.DAT", "w") ;

fprintf(fp, "%d\n%d\n%.2lf\n", totNum, totCnt, totPjz) ;

fclose(fp) ;

}

小於200個四位數之二(共四題)

code:

/*

已知在檔案IN.DAT中存有若干個(個數<200)四位數字的正整

數, 函式ReadDat( )讀取這若干個正整數並存入數組xx中。請編

制函式Calvalue( ), 其功能要求: 1. 求出這檔案中共有多少個

正整數totNum; 2.求出這些數中的各位數字之和是偶數的數的個

數totCnt, 以及滿足此條件的這些數的算術平均值totPjz。最後

main( )函式調用函式WriteDat()把所求的結果輸出到OUT.DAT文

件中。

注意: 部分源程式存放在PROG1.C中。

請勿改動數據檔案IN.DAT中的任何數據,主函式main()、讀

數據函式ReadDat()和輸出數據函式WriteDat()的內容。

*/

#include

#include

#define MAXNUM 200

int xx[MAXNUM] ;

int totNum = 0 ; /* 檔案IN.DAT中共有多少個正整數 */

int totCnt = 0 ; /* 符合條件的正整數的個數 */

double totPjz = 0.0 ; /* 平均值 */

int ReadDat(void) ;

void WriteDat(void) ;

void Calvalue(void)

{/**/

for(; xx[totNum]; totNum++)

if((xx[totNum]/1000+xx[totNum]/100%10+xx[totNum]/10%10+xx[totNum]%10)%2==0)

{ totCnt++; totPjz+=xx[totNum];}

if(totCnt) totPjz/=totCnt;

/**/

}

void main()

{

int i ;

clrscr() ;

for(i = 0 ; i < MAXNUM ; i++) xx = 0 ;

if(ReadDat()) {

printf("數據檔案IN.DAT不能打開!\007\n") ;

return ;

}

Calvalue() ;

printf("檔案IN.DAT中共有正整數=%d個\n", totNum) ;

printf("符合條件的正整數的個數=%d個\n", totCnt) ;

printf("平均值=%.2lf\n", totPjz) ;

WriteDat() ;

}

int ReadDat(void)

{

FILE *fp ;

int i = 0 ;

if((fp = fopen("in.dat", "r")) == NULL) return 1 ;

while(!feof(fp)) {

fscanf(fp, "%d,", &xx[i++]) ;

}

fclose(fp) ;

return 0 ;

}

void WriteDat(void)

{

FILE *fp ;

fp = fopen("OUT.DAT", "w") ;

fprintf(fp, "%d\n%d\n%.2lf\n", totNum, totCnt, totPjz) ;

fclose(fp) ;

}

200個四位數之三(共四題)

code:

/*

已知在檔案IN.DAT中存有若干個(個數<200)四位數字的正整

數, 函式ReadDat( )讀取這若干個正整數並存入數組xx中。請編

制函式Calvalue( ), 其功能要求: 1. 求出這檔案中共有多少個

正整數totNum; 2. 求這些數右移1位後, 產生的新數是奇數的數

的個數totCnt, 以及滿足此條件的這些數(右移前的值)的算術平

均值totPjz。最後main()函式調用函式WriteDat()把所求的結果

輸出到檔案OUT.DAT中。

注意: 部分源程式存放在PROG1.C中。

請勿改動數據檔案IN.DAT中的任何數據,主函式main()、讀

數據函式ReadDat()和輸出數據函式WriteDat()的內容。

*/

#include

#include

#define MAXNUM 200

int xx[MAXNUM] ;

int totNum = 0 ; /* 檔案IN.DAT中共有多少個正整數 */

int totCnt = 0 ; /* 符合條件的正整數的個數 */

double totPjz = 0.0 ; /* 平均值 */

int ReadDat(void) ;

void WriteDat(void) ;

void Calvalue(void)

{/**/

for(; xx[totNum]; totNum++)

if((xx[totNum]>>1)%2)

{ totCnt++; totPjz+=xx[totNum];}

if(totCnt) totPjz/=totCnt;

/**/

}

void main()

{

int i ;

clrscr() ;

for(i = 0 ; i < MAXNUM ; i++) xx = 0 ;

if(ReadDat()) {

printf("數據檔案IN.DAT不能打開!\007\n") ;

return ;

}

Calvalue() ;

printf("檔案IN.DAT中共有正整數=%d個\n", totNum) ;

printf("符合條件的正整數的個數=%d個\n", totCnt) ;

printf("平均值=%.2lf\n", totPjz) ;

WriteDat() ;

}

int ReadDat(void)

{

FILE *fp ;

int i = 0 ;

if((fp = fopen("in.dat", "r")) == NULL) return 1 ;

while(!feof(fp)) {

fscanf(fp, "%d,", &xx[i++]) ;

}

fclose(fp) ;

return 0 ;

}

void WriteDat(void)

{

FILE *fp ;

fp = fopen("OUT.DAT", "w") ;

fprintf(fp, "%d\n%d\n%.2lf\n", totNum, totCnt, totPjz) ;

fclose(fp) ;

}

小於200個四位數之四(共四題)

code:

/*

已知在檔案IN.DAT中存有若干個(個數<200)四位數字的正整

數, 函式ReadDat( )讀取這若干個正整數並存入數組xx中。請編

制函式Calvalue( ), 其功能要求: 1. 求出這檔案中共有多少個

正整數totNum; 2. 求這些數右移1位後, 產生的新數是偶數的數

的個數totCnt, 以及滿足此條件的這些數(右移前的值)的算術平

均值totPjz。最後main()函式調用函式WriteDat()把所求的結果

輸出到檔案OUT.DAT中。

注意: 部分源程式存放在PROG1.C中。

請勿改動數據檔案IN.DAT中的任何數據,主函式main()、讀

數據函式ReadDat()和輸出數據函式WriteDat()的內容。

*/

#include

#include

#define MAXNUM 200

int xx[MAXNUM] ;

int totNum = 0 ; /* 檔案IN.DAT中共有多少個正整數 */

int totCnt = 0 ; /* 符合條件的正整數的個數 */

double totPjz = 0.0 ; /* 平均值 */

int ReadDat(void) ;

void WriteDat(void) ;

void Calvalue(void)

{/**/

for(; xx[totNum]>0; totNum++)

if((xx[totNum]>>1)%2==0)

{ totCnt++; totPjz+=xx[totNum]; }

if(totCnt) totPjz/=totCnt;

/**/

}

void main()

{

int i ;

clrscr() ;

for(i = 0 ; i < MAXNUM ; i++) xx = 0 ;

if(ReadDat()) {

printf("數據檔案IN.DAT不能打開!\007\n") ;

return ;

}

Calvalue() ;

printf("檔案IN.DAT中共有正整數=%d個\n", totNum) ;

printf("符合條件的正整數的個數=%d個\n", totCnt) ;

printf("平均值=%.2lf\n", totPjz) ;

WriteDat() ;

}

int ReadDat(void)

{

FILE *fp ;

int i = 0 ;

if((fp = fopen("in.dat", "r")) == NULL) return 1 ;

while(!feof(fp)) {

fscanf(fp, "%d,", &xx[i++]) ;

}

fclose(fp) ;

return 0 ;

}

void WriteDat(void)

{

FILE *fp ;

fp = fopen("OUT.DAT", "w") ;

fprintf(fp, "%d\n%d\n%.2lf\n", totNum, totCnt, totPjz) ;

fclose(fp) ;

}

英文文章——字元串處理(共10題)

之一

code:

/*

函式ReadDat( )實現從檔案IN.DAT中讀取一篇英文文章存入到

字元串數組xx中; 請編制函式SortCharD( ), 其函式的功能是: 以

行為單位對字元按從大到小的順序進行排序, 排序後的結果仍按行

重新存入字元串數組xx中。最後main()函式調用函式WriteDat()把

結果xx輸出到檔案OUT2.DAT中。

例: 原文: dAe,BfC.

CCbbAA

結果: fedCBA.,

bbCCAA

原始數據檔案存放的格式是: 每行的寬度均小於80個字元, 含

標點符號和空格。

注意: 部分源程式存放在PROG1.C中。

請勿改動主函式main( )、讀數據函式ReadDat()和輸出數據函

數WriteDat()的內容。

*/

#include <stdio.h>

#include <string.h>

#include <conio.h>

char xx[50][80] ;

int maxline = 0 ; /* 文章的總行數 */

int ReadDat(void) ;

void WriteDat(void) ;

void SortCharD(void)

{/**/

int i,j,k,m,n; char ch;

for(i=0; i < maxline; i++)

{ j=strlen(xx );

for(m=0; m < j-1; m++)

{ k=m;

for(n=m+1; n < j; n++)

if(xx [k] < xx[n]) k=n;

if(k!=m)

{ ch=xx [k]; xx[k]=xx[m]; xx[m]=ch; }

}

}

/**/

}

void main()

{

clrscr() ;

if(ReadDat()) {

printf("數據檔案IN.DAT不能打開!\n\007") ;

return ;

}

SortCharD() ;

WriteDat() ;

}

int ReadDat(void)

{

FILE *fp ;

int i = 0 ;

char *p ;

if((fp = fopen("IN.DAT", "r")) == NULL) return 1 ;

while(fgets(xx , 80, fp) != NULL) {

p = strchr(xx , '\n') ;

if(p) *p = 0 ;

i++ ;

}

maxline = i ;

fclose(fp) ;

return 0 ;

}

void WriteDat(void)

{

FILE *fp ;

int i ;

clrscr() ;

fp = fopen("OUT2.DAT", "w") ;

for(i = 0 ; i < maxline ; i++) {

printf("%s\n", xx ) ;

fprintf(fp, "%s\n", xx ) ;

}

fclose(fp) ;

}

字元串處理之二

code:

/*

函式ReadDat( )實現從檔案IN.DAT中讀取一篇英文文章存入

到字元串數組xx中; 請編制函式ConvertCharA(), 其函式的功能

是: 以行為單位把字元串中的所有小寫字母改寫成該字母的下一

個字母, 如果是字母z, 則改寫成字母a,大寫字母和其它字元保

持不變。把已處理的字元串仍按行重新存入字元串數組xx中。最

後main()函式調用函式WriteDat()把結果xx輸出到檔案OUT3.DAT

中。

例: 原文: Adb.Bcdza

abck.LLhj

結果: Aec.Bdeab

bcdl.LLik

原始數據檔案存放的格式是: 每行的寬度均小於80個字元, 含

標點符號和空格。

注意: 部分源程式存放在PROG1.C中。

請勿改動主函式main( )、讀數據函式ReadDat()和輸出數據函

數WriteDat()的內容。

*/

#include

#include

#include

char xx[50][80] ;

int maxline = 0 ; /* 文章的總行數 */

int ReadDat(void) ;

void WriteDat(void) ;

void ConvertCharA(void)

{/**/

int i,j;

for(i=0; i < maxline; i++)

for(j=0; j < strlen(xx ); j++)

if(xx [j]=="z") xx[j]="a";

else if((xx [j]>="a")&&(xx[j]<'z')) xx[j]++;

/**/

}

void main()

{

clrscr() ;

if(ReadDat()) {

printf("數據檔案IN.DAT不能打開!\n\007") ;

return ;

}

ConvertCharA() ;

WriteDat() ;

}

int ReadDat(void)

{

FILE *fp ;

int i = 0 ;

char *p ;

if((fp = fopen("IN.DAT", "r")) == NULL) return 1 ;

while(fgets(xx , 80, fp) != NULL) {

p = strchr(xx , '\n') ;

if(p) *p = 0 ;

i++ ;

}

maxline = i ;

fclose(fp) ;

return 0 ;

}

void WriteDat(void)

{

FILE *fp ;

int i ;

clrscr() ;

fp = fopen("OUT3.DAT", "w") ;

for(i = 0 ; i < maxline ; i++) {

printf("%s\n", xx ) ;

fprintf(fp, "%s\n", xx ) ;

}

fclose(fp) ;

}

字元串處理之三

code:

/*

函式ReadDat( )實現從檔案IN.DAT中讀取一篇英文文章存入到

字元串數組xx中; 請編制函式SortCharA( ), 其函式的功能是: 以

行為單位對字元按從小到大的順序進行排序, 排序後的結果仍按行

重新存入字元串數組xx中。最後main()函式調用函式WriteDat()把

結果xx輸出到檔案OUT1.DAT中。

例: 原文: dAe,BfC.

CCbbAA

結果: ,.ABCdef

AACCbb

原始數據檔案存放的格式是: 每行的寬度均小於80個字元, 含

標點符號和空格。

注意: 部分源程式存放在PROG1.C中。

請勿改動主函式main( )、讀數據函式ReadDat()和輸出數據函

數WriteDat()的內容。

*/

#include

#include

#include

char xx[50][80] ;

int maxline = 0 ; /* 文章的總行數 */

int ReadDat(void) ;

void WriteDat(void) ;

void SortCharA(void)

{/**/

int i,j,k,m,n; char ch;

for(i=0; i < maxline; i++)

{ j=strlen(xx );

for(m=0; m < j-1; m++)

{ k=m;

for(n=m+1; n < j; n++)

if(xx [k] > xx[n]) k=n;

if(k!=m)

{ ch=xx [k]; xx[k]=xx[m]; xx[m]=ch; }

}

}

/**/

}

void main()

{

clrscr() ;

if(ReadDat()) {

printf("數據檔案IN.DAT不能打開!\n\007") ;

return ;

}

SortCharA() ;

WriteDat() ;

}

int ReadDat(void)

{

FILE *fp ;

int i = 0 ;

char *p ;

if((fp = fopen("IN.DAT", "r")) == NULL) return 1 ;

while(fgets(xx , 80, fp) != NULL) {

p = strchr(xx , '\n') ;

if(p) *p = 0 ;

i++ ;

}

maxline = i ;

fclose(fp) ;

return 0 ;

}

void WriteDat(void)

{

FILE *fp ;

int i ;

clrscr() ;

fp = fopen("OUT1.DAT", "w") ;

for(i = 0 ; i < maxline ; i++) {

printf("%s\n", xx ) ;

fprintf(fp, "%s\n", xx ) ;

}

fclose(fp) ;

}

字元串處理之四

code:

/*

函式ReadDat( )實現從檔案IN.DAT中讀取一篇英文文章存入到

字元串數組xx中; 請編制函式StrCharJL( ), 其函式的功能是: 以

行為單位把字元串中的所有字元的ASCII值左移4位, 如果左移後,

其字元的ASCII值小於等於32或大於100, 則原字元保持不變, 否則

就把左移後的字元ASCII值再加上原字元的ASCII值, 得到新的字元

仍存入原字元串對應的位置上,之後把已處理的字元串仍按行重新

存入字元串數組xx中。最後main()函式調用函式WriteDat()把結果

xx輸出到OUT7.DAT檔案中。

原始數據檔案存放的格式是: 每行的寬度均小於80個字元, 含

標點符號和空格。

注意: 部分源程式存放在PROG1.C中。

請勿改動主函式main( )、讀數據函式ReadDat()和輸出數據函

數WriteDat()的內容。

*/

#include

#include

#include

char xx[50][80] ;

int maxline = 0 ; /* 文章的總行數 */

int ReadDat(void) ;

void WriteDat(void) ;

void StrCharJL(void)

{/**/

int i,j; char m;

/****註:此題的關鍵是定義 char m 。記得往年的考試類似題可以不必定義,

如果要定義的話,則必須定義為 int 結果才能正確。看來理解出題

者的意圖是機試的難點之一。 ****/

for(i=0; i < maxline; i++)

for(j=0; j < strlen(xx ); j++)

{ m=xx [j]<<4;

if((m>32)&&(m<=100))

xx [j]+=m;

}

/**/

}

void main()

{

clrscr() ;

if(ReadDat()) {

printf("數據檔案IN.DAT不能打開!\n\007") ;

return ;

}

StrCharJL() ;

WriteDat() ;

}

int ReadDat(void)

{

FILE *fp ;

int i = 0 ;

char *p ;

if((fp = fopen("IN.DAT", "r")) == NULL) return 1 ;

while(fgets(xx , 80, fp) != NULL) {

p = strchr(xx , '\n') ;

if(p) *p = 0 ;

i++ ;

}

maxline = i ;

fclose(fp) ;

return 0 ;

}

void WriteDat(void)

{

FILE *fp ;

int i ;

clrscr() ;

fp = fopen("OUT7.DAT", "w") ;

for(i = 0 ; i < maxline ; i++) {

printf("%s\n", xx ) ;

fprintf(fp, "%s\n", xx ) ;

}

fclose(fp) ;

}

字元串處理之五

code:

/*

函式ReadDat( )實現從檔案IN.DAT中讀取一篇英文文章存入到

字元串數組xx中; 請編制函式StrCharJR( ), 其函式的功能是: 以

行為單位把字元串中的所有字元的ASCII值右移4位, 然後把右移後

的字元ASCII值再加上原字元的ASCII值, 得到新的字元仍存入原字

符串對應的位置上,之後把已處理的字元串仍按行重新存入字元串

數組xx中。最後main()函式調用函式WriteDat()把結果xx輸出到文

件OUT8.DAT中。

原始數據檔案存放的格式是: 每行的寬度均小於80個字元, 含

標點符號和空格。

注意: 部分源程式存放在PROG1.C中。

請勿改動主函式main( )、讀數據函式ReadDat()和輸出數據函

數WriteDat()的內容。

*/

#include

#include

#include

char xx[50][80] ;

int maxline = 0 ; /* 文章的總行數 */

int ReadDat(void) ;

void WriteDat(void) ;

void StrCharJR(void)

{/**/

int i,j;

for(i=0; i

for(j=0; j

xx [j]+=xx[j]>>4;

/**/

}

void main()

{

clrscr() ;

if(ReadDat()) {

printf("數據檔案IN.DAT不能打開!\n\007") ;

return ;

}

StrCharJR() ;

WriteDat() ;

}

int ReadDat(void)

{

FILE *fp ;

int i = 0 ;

char *p ;

if((fp = fopen("IN.DAT", "r")) == NULL) return 1 ;

while(fgets(xx , 80, fp) != NULL) {

p = strchr(xx , '\n') ;

if(p) *p = 0 ;

i++ ;

}

maxline = i ;

fclose(fp) ;

return 0 ;

}

void WriteDat(void)

{

FILE *fp ;

int i ;

clrscr() ;

fp = fopen("OUT8.DAT", "w") ;

for(i = 0 ; i < maxline ; i++) {

printf("%s\n", xx ) ;

fprintf(fp, "%s\n", xx ) ;

}

fclose(fp) ;

}

字元串處理之六

code:

/*

函式ReadDat( )實現從檔案IN.DAT中讀取一篇英文文章存入到

字元串數組xx中; 請編制函式StrOL( ), 其函式的功能是: 以行為

單位對行中以空格或標點符號為分隔的所有單詞進行倒排,同時去

除標點符號,之後把已處理的字元串(應不含標點符號)仍按行重新

存入字元串數組xx中。最後main()函式調用函式WriteDat()把結果

xx輸出到檔案OUT6.DAT中。

例如: 原文: You He Me

I am a student.

結果: Me He You

student a am I

原始數據檔案存放的格式是: 每行的寬度均小於80個字元, 含

標點符號和空格。

注意: 部分源程式存放在PROG1.C中。

請勿改動主函式main( )、讀數據函式ReadDat()和輸出數據函

數WriteDat()的內容。

*/

#include <stdio.h>

#include <string.h>

#include <conio.h>

#include <ctype.h>

char xx[50][80] ;

int maxline = 0 ; /* 文章的總行數 */

int ReadDat(void) ;

void WriteDat(void) ;

void StrOL(void)

{/**/

int i,j,k,m,n,ll;

char yy[80];

for(i=0; i < maxline; i++)

{ ll=strlen(xx ); k=n=0;

for(j=ll-1; j>=0; j--)

{ if(isalpha(xx [j])) k++;

else

{ for(m=1; m<=k; m++)

yy[n++]=xx [j+m];

k=0;

}

if(xx [j]==" ") yy[n++]=" ";

}

for(m=1; m<=k; m++)

yy[n++]=xx [j+m];

/* 上面兩行處理每行的第一個單詞。

如果漏寫,結果顯然不正確,但並不影響得分。 */

yy[n]=0;

strcpy(xx ,yy);

}

/* 標準答案與此法結果相比,每行後面多一個空格。 */

}

void main()

{

clrscr() ;

if(ReadDat()) {

printf("數據檔案IN.DAT不能打開!\n\007") ;

return ;

}

StrOL() ;

WriteDat() ;

}

int ReadDat(void)

{

FILE *fp ;

int i = 0 ;

char *p ;

if((fp = fopen("IN.DAT", "r")) == NULL) return 1 ;

while(fgets(xx , 80, fp) != NULL) {

p = strchr(xx , '\n') ;

if(p) *p = 0 ;

i++ ;

}

maxline = i ;

fclose(fp) ;

return 0 ;

}

void WriteDat(void)

{

FILE *fp ;

int i ;

clrscr() ;

fp = fopen("OUT6.DAT", "w") ;

for(i = 0 ; i < maxline ; i++) {

printf("%s\n", xx ) ;

fprintf(fp, "%s\n", xx ) ;

}

fclose(fp) ;

}

字元串處理之七

code:

/*

函式ReadDat( )實現從檔案IN.DAT中讀取一篇英文文章存入

到字元串數組xx中; 請編制函式ConvertCharD(), 其函式的功能

是: 以行為單位把字元串中的所有小寫字母改寫成該字母的上一

個字母, 如果是字母a, 則改寫成字母z,大寫字母和其它字元保

持不變。把已處理的字元串仍按行重新存入字元串數組xx中。最

後main()函式調用函式WriteDat()把結果xx輸出到檔案OUT4.DAT

中。

例: 原文: Adb.Bcdza

abck.LLhj

結果: Aca.Bbcyz

zabj.LLgi

原始數據檔案存放的格式是: 每行的寬度均小於80個字元, 含

標點符號和空格。

注意: 部分源程式存放在PROG1.C中。

請勿改動主函式main( )、讀數據函式ReadDat()和輸出數據函

數WriteDat()的內容。

*/

#include <stdio.h>

#include <string.h>

#include <conio.h>

char xx[50][80] ;

int maxline = 0 ; /* 文章的總行數 */

int ReadDat(void) ;

void WriteDat(void) ;

void ConvertCharD(void)

{/**/

int i,j;

for(i=0; i < maxline; i++)

for(j=0; j < strlen(xx ); j++)

if(xx [j]=="a") xx[j]="z";

else if(islower(xx [j])) xx[j]-=1;

/**/

}

void main()

{

clrscr() ;

if(ReadDat()) {

printf("數據檔案IN.DAT不能打開!\n\007") ;

return ;

}

ConvertCharD() ;

WriteDat() ;

}

int ReadDat(void)

{

FILE *fp ;

int i = 0 ;

char *p ;

if((fp = fopen("IN.DAT", "r")) == NULL) return 1 ;

while(fgets(xx , 80, fp) != NULL) {

p = strchr(xx , '\n') ;

if(p) *p = 0 ;

i++ ;

}

maxline = i ;

fclose(fp) ;

return 0 ;

}

void WriteDat(void)

{

FILE *fp ;

int i ;

clrscr() ;

fp = fopen("OUT4.DAT", "w") ;

for(i = 0 ; i < maxline ; i++) {

printf("%s\n", xx ) ;

fprintf(fp, "%s\n", xx ) ;

}

fclose(fp) ;

}

字元串處理之八

code:

/*

函式ReadDat( )實現從檔案IN.DAT中讀取一篇英文文章存入到

字元串數組xx中; 請編制函式CharConvA( ), 其函式的功能是: 以

行為單位把字元串中的最後一個字元的ASCII值右移4位後加最後第

二個字元的ASCII值, 得到最後一個新的字元, 最後第二個字元的

ASCII值右移4位後加最後第三個字元的ASCII值,得到最後第二個新

的字元, 以此類推一直處理到第二個字元, 第一個字元的ASCII值

加原最後一個字元的ASCII值, 得到第一個新的字元, 得到的新字

符分別存放在原字元串對應的位置上,之後把已處理的字元串仍按

行重新存入字元串數組xx中。最後main()函式調用函式WriteDat()

把結果xx輸出到檔案OUT10.DAT中。

原始數據檔案存放的格式是: 每行的寬度均小於80個字元, 含

標點符號和空格。

注意: 部分源程式存放在PROG1.C中。

請勿改動主函式main( )、讀數據函式ReadDat()和輸出數據函

數WriteDat()的內容。

*/

#include <stdio.h>

#include <string.h>

#include <conio.h>

char xx[50][80] ;

int maxline = 0 ; /* 文章的總行數 */

int ReadDat(void) ;

void WriteDat(void) ;

void CharConvA(void)

{/**/

int i,j,ll; char ch;

for(i=0; i < maxline; i++)

{ ll=strlen(xx ); ch=xx[ll-1];

for(j=ll-1; j; j--)

xx [j]=(xx[j]>>4)+xx[j-1];

xx [0]+=ch;

}

/**/

}

void main()

{

clrscr() ;

if(ReadDat()) {

printf("數據檔案IN.DAT不能打開!\n\007") ;

return ;

}

CharConvA() ;

WriteDat() ;

}

int ReadDat(void)

{

FILE *fp ;

int i = 0 ;

char *p ;

if((fp = fopen("IN.DAT", "r")) == NULL) return 1 ;

while(fgets(xx , 80, fp) != NULL) {

p = strchr(xx , '\n') ;

if(p) *p = 0 ;

i++ ;

}

maxline = i ;

fclose(fp) ;

return 0 ;

}

void WriteDat(void)

{

FILE *fp ;

int i ;

clrscr() ;

fp = fopen("OUT10.DAT", "w") ;

for(i = 0 ; i < maxline ; i++) {

printf("%s\n", xx ) ;

fprintf(fp, "%s\n", xx ) ;

}

fclose(fp) ;

}

字元串處理之九

code:

/*

函式ReadDat( )實現從檔案IN.DAT中讀取一篇英文文章存入到

字元串數組xx中; 請編制函式StrOR( ), 其函式的功能是: 以行為

單位依次把字元串中所有小寫字母o 左邊的字元串內容移到該串的

右邊存放, 然後並把小寫字母o刪除,餘下的字元串內容移到已處理

字元串的左邊存放,之後把已處理的字元串仍按行重新存入字元串

數組xx中。最後main()函式調用函式WriteDat()把結果xx輸出到文

件OUT5.DAT中。

例如: 原文: You can create an index on any field.

you have the correct record.

結果: n any field. Yu can create an index

rd. yu have the crrect rec

原始數據檔案存放的格式是: 每行的寬度均小於80個字元, 含

標點符號和空格。

注意: 部分源程式存放在PROG1.C中。

請勿改動主函式main( )、讀數據函式ReadDat()和輸出數據函

數WriteDat()的內容。

*/

#include <stdio.h>

#include <string.h>

#include <conio.h>

char xx[50][80] ;

int maxline = 0 ; /* 文章的總行數 */

int ReadDat(void) ;

void WriteDat(void) ;

void StrOR(void)

{/**/

int i,j; char yy[80],*p;

for(i=0; i

for(j=0; j

if(xx [j]=="o")

{ p=&xx [j+1];

strcpy(yy,p);

strncat(yy,xx ,j);

strcpy(xx ,yy);

j=0;

}

/**/

}

void main()

{

clrscr() ;

if(ReadDat()) {

printf("數據檔案IN.DAT不能打開!\n\007") ;

return ;

}

StrOR() ;

WriteDat() ;

}

int ReadDat(void)

{

FILE *fp ;

int i = 0 ;

char *p ;

if((fp = fopen("IN.DAT", "r")) == NULL) return 1 ;

while(fgets(xx , 80, fp) != NULL) {

p = strchr(xx , '\n') ;

if(p) *p = 0 ;

i++ ;

}

maxline = i ;

fclose(fp) ;

return 0 ;

}

void WriteDat(void)

{

FILE *fp ;

int i ;

clrscr() ;

fp = fopen("OUT5.DAT", "w") ;

for(i = 0 ; i < maxline ; i++) {

printf("%s\n", xx ) ;

fprintf(fp, "%s\n", xx ) ;

}

fclose(fp) ;

}

字元串處理之10

code:

/*

函式ReadDat( )實現從檔案IN.DAT中讀取一篇英文文章存入到

字元串數組xx中; 請編制函式ChA( ), 其函式的功能是: 以行為單

位把字元串中的第一個字元的ASCII值加第二個字元的ASCII值, 得

到第一個新的字元, 第二個字元的ASCII值加第三個字元的ASCII值,

得到第二個新的字元, 以此類推一直處理到最後第二個字元, 最後

一個字元的ASCII值加原第一個字元的ASCII值, 得到最後一個新的

字元, 得到的新字元分別存放在原字元串對應的位置上,之後把已

處理的字元串逆轉後仍按行重新存入字元串數組xx中。最後main()

函式調用函式WriteDat()把結果xx輸出到檔案OUT9.DAT中。

原始數據檔案存放的格式是: 每行的寬度均小於80個字元, 含

標點符號和空格。

注意: 部分源程式存放在PROG1.C中。

請勿改動主函式main( )、讀數據函式ReadDat()和輸出數據函

數WriteDat()的內容。

*/

#include <stdio.h>

#include <string.h>

#include <conio.h>

char xx[50][80] ;

int maxline = 0 ; /* 文章的總行數 */

int ReadDat(void) ;

void WriteDat(void) ;

void ChA(void)

{/**/

int i,j; char ch;

for(i=0; i < maxline; i++)

{ ch=xx [0];

for(j=0; j < strlen(xx )-1; j++)

xx [j]+=xx[j+1];

xx [j]+=ch;

strrev(xx );

}

/**/

}

void main()

{

clrscr() ;

if(ReadDat()) {

printf("數據檔案IN.DAT不能打開!\n\007") ;

return ;

}

ChA() ;

WriteDat() ;

}

int ReadDat(void)

{

FILE *fp ;

int i = 0 ;

char *p ;

if((fp = fopen("IN.DAT", "r")) == NULL) return 1 ;

while(fgets(xx , 80, fp) != NULL) {

p = strchr(xx , '\n') ;

if(p) *p = 0 ;

i++ ;

}

maxline = i ;

fclose(fp) ;

return 0 ;

}

void WriteDat(void)

{

FILE *fp ;

int i ;

clrscr() ;

fp = fopen("OUT9.DAT", "w") ;

for(i = 0 ; i < maxline ; i++) {

printf("%s\n", xx ) ;

fprintf(fp, "%s\n", xx ) ;

}

fclose(fp) ;

}

相關詞條

相關搜尋

熱門詞條

聯絡我們