词条 | 上机考试习题集 |
释义 | 本书提供了全国计算机等级考试三级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条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。