当前位置: 首页 > 计算机 > 问题详情
问题

●试题四 阅读以下说明和C代码 将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 该程序的功

●试题四

阅读以下说明和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);

}

发布时间:2024-05-04
参考答案

正确答案:

●试题四

【答案】(1)isalpha(*p1)&&p1!=xx[i](2)*p2=0(3)ReadDat()(4)i(5)maxline

【解析】在主函数中首先调用函数ReadDat(),从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,所以(3)空应填入"ReadDat()"。用变量maxline表示文章的行数,所以空(4)应填入"i"。

函数StrOL()的功能是以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排,然后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,采用的算法是先让两字符指针都指向串尾,然后使一指针(p1)往前移动,当出现不是字母时,则表示在p1+1与p2之间是一个单词,并将该单词存入一变量(t1),最后将t1连接到新串中(t);接着再往前找第二个单词,依次类推直到字符串头。for循环中的第一个while循环将字符指针移到串尾,在第二个while循环中,首先要去掉不是字母的字符,将p2也指向串尾,然后向前找一个单词及p1所指向的应为字母,且要保证仍然在本行,所以(1)空可填入"isalpha(*p1)&&p1!=xx[i]"(或等价形式),这样p1+1与p2之间是一个单词,要作字符串处理,p2加1,指向字符串结束标记,所以(2)空应填入"*p2==′\0′"或者"*p2=0"。

最后通过调用函数WriteDat()把结果xx输出到文件中,(5)空为输入的行数,显然应填入"maxline"。

 

相关问题
  • 在SQL语言的SELECT语句中 用于对结果元组进行分组的是()字句

    在SQL语言的SELECT语句中,用于对结果元组进行分组的是()字句。A.GROUP BYB.HAVINGC.ORDER BYD.WHERE

    答案解析
  • 下列关于swith语句的描述中 正确的是()。A.switch语句中defau

    下列关于swith语句的描述中,正确的是()。A.switch语句中default字句可以没有,也可有一个B.switch语句中每个语句序列中必须有break语句C.switch语句

    答案解析
  • 试题六(共 15分) 阅读以下说明和Java代码 将应填入 (n)

    试题六(共 15分)阅读以下说明和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】已知类 LinkedList 表示列表类,该类具有四个方

    答案解析
  • 试题五(共 15分) 阅读以下说明和C++代码 将应填入 (n)

    试题五(共 15分)阅读以下说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】已知类 LinkedList 表示列表类,该类具有四个方

    答案解析
  • 试题四阅读以下网络测试的叙述 将应填入(n)处的字句写在答题纸

    试题四阅读以下网络测试的叙述,将应填入(n)处的字句写在答题纸的对应的栏内。网络测试是对网络设备、网络系统以及网络对应用的支持进行检测,以展示和证

    答案解析
  • 智能网体系结构中包含的主要物理实体或其相应功能的描述如表5-1

    智能网体系结构中包含的主要物理实体或其相应功能的描述如表5-1所示,将应填入(n)处的字句写在答题纸的对应栏内。表5-1物理实体主要功能描述(1)具有

    答案解析
  • 试题二(共 15分) 阅读以下说明和C函数 将应填入 (n) 处的字

    试题二(共 15分)阅读以下说明和C函数,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明 1】函数Counter(int n, int w[])的功能是计算整数

    答案解析
  • 试题五(共 15分) 阅读以下说明和C++代码 将应填入 (n) 处

    试题五(共 15分)阅读以下说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】已知类 LinkedList 表示列表类,该类具有四个方

    答案解析
  • 试题六(共 15分) 阅读以下说明和Java代码 将应填入 (n) 处

    试题六(共 15分)阅读以下说明和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】已知类 LinkedList 表示列表类,该类具有四个方

    答案解析
  • 试题四 阅读以下说明和C代码 将应填入 (n) 处的字句写在答题

    试题四阅读以下说明和C代码,将应填入 (n) 处的字句写在答题纸的对应栏内。[说明]函数MultibaseOutput(long n, int B)的功能是:将一个无符号十进

    答案解析

最新问题

Copyright © 2016-2023 114题库网(114158.com)All Rights Reserved.  免责声明 豫ICP备19007809号-5