本書提供了全國計算機等級考試三級C語言機試試題庫。本書配套光碟中有3部分內容:本書所有習題的詳盡答案;本書所有習題的源檔案;上機考試的全真模擬環境。讀者可以利用配套光碟進行考前訓練。
基本介紹
- 書名:上機考試習題集
- 類別:工具書
- 裝幀:平裝
- 開本:32
![上機考試習題集 上機考試習題集](/img/9/304/cGcq5CN0UGZ0MzYhdTNihTMxImYzIjZ4YTOkBzLtVGdp9yYpB3LltWahJ2Lt92YuUHZpFmYuMmczdWbp9yL6MHc0RHa.jpg)
本書所有題目均進行了測試,保證能夠在實際環境中正常運行。
上機試題總結:
100個產品銷售記錄排序(此類共10題)
code:
/*
已知在檔案IN.DAT中存有100個產品銷售記錄, 每個產品銷售
記錄由產品代碼dm(字元型4位), 產品名稱mc(字元型10位), 單價
金額=單價*數量計算得出。函式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) ;
}