问题

●试题四

阅读以下说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

该程序的功能是从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后把结果xx输出到文件OUT6.DAT中。

例如:原文:You He Me

I am a student.

结果:Me He You

student a am I

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

【函数】

#include<string.h>

#include<conio.h>

#include<ctype.h>

#include<stdio.h>

char xx[50][80];

int maxline=0;/*文章的总行数*/

int ReaaDat(void);

void WriteDat(void);

void StrOL(void)

{

char*pl,*p2,t[80];

int i;

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

{p1=xx[i];t[0]=0;

while(*p1)p1++;

while(p1>=xx[i])

{while(!isalpha(*p1)&&p1!=xx[i])p1--;

p2=p1;

while( (1) )p1--;

if(p1==xx[i])

if(isalpha(*p1))p1--;

else if(!isalpha(*(p1+1)))break;

p2++;

(2) ;

strcat(t,p1+1);

strcat(t," ");

}

strcpy(xx[i],t);

}

}

void main()

{

if( (3) ){

printf("数据文件in.dat不能打开!\n\007");

return;

}

StrOL();

writeDat();

getch();

}

int ReadDat(void)

{

FILE*fp;

int i=0;

char*p;

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

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

p=strchr(xx[i],′\n′);

if(p)*p=0;

i++;

}

maxline= (4)

fclose(fp);

return 0;

}

void WriteDat(void)

{

FILE*fp;

int i;

fp=fopen("e:\\a\\out6.dat","w");

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

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

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

}

fclose(fp);

}

参考答案
您可能感兴趣的试题
  • ●下列各数中最大的是 (1) 。(1) A.11010110.0101(二进制)B.D6.53(十六进制)C.214.32(十进制)D.326.25(八进制)
  • ●已知八位机器码10111010(最高位为符号位),当它是原码时表示的十进制数是 (2) ;当它是补码时表示的十进制数是 (3) ;当它是反码时表示的十进制数是 (4) 。(2) A.-69B.-68
  • ●中文海字的区位码是2603,则它的机内码是 (5) 。(5) A.B603B.A6A3C.BAA3D.BAB3
  • ●某计算机字长为8位,它用补码、原码或反码来表示带符号的二进制整数(最高一位为符号位),则机器代码11111111所表示的十进制真值分别为 (6) 、 (7) 或 (8) 。(6) A.128B.0C
  • ●设AND、OR和NOT分别表示按位与、按位或和按位求反运算,且X=10011011,Y=01111010,Z=11101000,则(NOT(X) AND Y)= (9) , (Y OR NOT(Z)
  • ● (13) 接口是一种通用型系统级接口,它连接的外设可以是硬盘驱动器、光盘驱动器和扫描仪等。(13) A.RS232B.IDEC.EIDED.SCSI
相关内容