问答题

函数ReadDat()可以从文件IN.DAT中读取一篇英文文章并将其存入字符串数组xx中。请编制函数StrOL(),其功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排,然后把已处理的字符串(不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数writeDat(),把结果xx输出到文件OUT.DAT中。
例如,原文:
You He Me
I am a student.
结果:
Me He You
student a am I
原始数据文件的格式是:每行的宽度均小于80个字符,含标点符号和空格。
注意:部分源程序给出如下。
请勿改动主函数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)


void main()

system("cls");
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[i],80,fp)!=NULL)

p=strchr(xx[i],’\n’);
if(p) *p=0;
i++;

maxline=i;
fclose(fp);
return 0;

void WriteDat(void)

FILE *fp;
int i;
system("cls");
fp=fopen("OUT.DAT","w");
for(i=0;i<maxline;i++)

printf("%s\n",xx[i]);
fprintf(fp,"%s\n",xx[i]);

fclose(fp);

【参考答案】

void StrOL(void)
{
int i,j;
char t[H0]={0}; ......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)
热门 试题

问答题
请编制程序,其功能为:将内存中存放的连续的30个二进制数(0到100之间),按数值大小分别进行统计,0~59为D,60~74为C,75~84为B,85~100为A,统计出A、B、C、 D的个数,并按A、B、C、D次序存放在内存中。 例如:内存中原始数据为:21H,3CH,4DH,31H,4FH,51H,56H 统计结果:1,3,1,2 部分程序已经给出,其中原始数据由LOAD过程从文件INPUT1.DAT中读入从SOURCE开始的内存单元,转换结果(要求从RESULT 开始读入)由SAVE过程保存到OUTPUT1.DAT文件中。请在BEGIN和END之间补充使其完整,完成要求的功能。或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终产生运行结果。 部分程序如下: ;PROG1.ASM EXTRN LOAD:FAR, SAVE:FAR N EQU 30 DSEG SEGMENT SOURCE DB N DUP () RESULT DB N DUP (0) NAME0 DB ’INPUT1. DAT’,0 NAME1 DB ’OUTPUT1. DAT’,0 DSEG ENDS SSEG SEGMENT STACK DB 128 DUP () SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG, DS:DSEG; SS:SSEG START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX, DSEG MOV DS,AX MOV ES, AX LEA DX, SOURCE LEA SI,NAME0 MOV CX,N CALL LOAD ; *** BEGIN *** MOV CX,N LEA SI,SOURCE CONT: MOV AL,[SI] _____________ JB LB INC RESULT JMP OK LB: CMP AL, 75 JB LC INC ______ JMP OK LC: CMP AL,60 JB LD ____________ JMP OK LD: ____________ OK: INC SI LOOP CONT ; *** END *** LEA DX,RESULT LEA SI,NAME1 MOV CX,4 CALL SAVE RET START ENDP CSEG ENDS END START