请输入您要查询的百科知识:

 

词条 上机考试习题集
释义

本书提供了全国计算机等级考试三级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\", 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\", 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\", cnt) ;

for(i = 0 ; i < cnt ; i++) printf("b[%d]=%d\", 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\", cnt) ;

for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\", 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\满足条件的平均值pzj1=%7.2lf\不满足条件的平均值pzj2=%7.2lf\", 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\%7.2lf\%7.2lf\", 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\", cnt) ;

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

printf("\") ;

writeDat() ;

}

writeDat()

{

FILE *fp ;

int i ;

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

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

for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\", 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\") ;

return ;

}

Calvalue() ;

printf("文件IN.DAT中共有正整数=%d个\", totNum) ;

printf("符合条件的正整数的个数=%d个\", totCnt) ;

printf("平均值=%.2lf\", 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\%d\%.2lf\", 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\") ;

return ;

}

Calvalue() ;

printf("文件IN.DAT中共有正整数=%d个\", totNum) ;

printf("符合条件的正整数的个数=%d个\", totCnt) ;

printf("平均值=%.2lf\", 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\%d\%.2lf\", 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\") ;

return ;

}

Calvalue() ;

printf("文件IN.DAT中共有正整数=%d个\", totNum) ;

printf("符合条件的正整数的个数=%d个\", totCnt) ;

printf("平均值=%.2lf\", 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\%d\%.2lf\", 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\") ;

return ;

}

Calvalue() ;

printf("文件IN.DAT中共有正整数=%d个\", totNum) ;

printf("符合条件的正整数的个数=%d个\", totCnt) ;

printf("平均值=%.2lf\", 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\%d\%.2lf\", 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不能打开!\\\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, '\') ;

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\", xx) ;

fprintf(fp, "%s\", 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不能打开!\\\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, '\') ;

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\", xx) ;

fprintf(fp, "%s\", 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不能打开!\\\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, '\') ;

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\", xx) ;

fprintf(fp, "%s\", 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不能打开!\\\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, '\') ;

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\", xx) ;

fprintf(fp, "%s\", 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不能打开!\\\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, '\') ;

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\", xx) ;

fprintf(fp, "%s\", 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不能打开!\\\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, '\') ;

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\", xx) ;

fprintf(fp, "%s\", 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不能打开!\\\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, '\') ;

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\", xx) ;

fprintf(fp, "%s\", 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不能打开!\\\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, '\') ;

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\", xx) ;

fprintf(fp, "%s\", 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不能打开!\\\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, '\') ;

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\", xx) ;

fprintf(fp, "%s\", 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不能打开!\\\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, '\') ;

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\", xx) ;

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

}

fclose(fp) ;

}

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/3/1 13:31:17