【2006年全国房价】2006年9月全国等级考试三级c语言上机题库(四)

试题集锦 2023-06-16 网络整理 可可

【shitiku.jxxyjl.com--试题集锦】

★☆题目4(无忧id 24题 上机题库id 9 字符串单词倒置题)

函数readdat()实现从文件in.dat中读取一篇英文文章存入到字符串数组xx中,请编制函数strol(),其函数的功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数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,s,m,strl;
char str[80];
for(i=0;i<maxline;i++)
{ strl=strlen(xx[i]);
memset(str,0,80); /*初始化这字符串数组str*/
s=k=0;
for(j=strl-1;j>=0;j--) /*从当前字符串尾部开始向前倒序循环,实现题意要求的倒排*/
{ if(isalpha(xx[i][j])) k++; /*如果当前字符是字母a~z或a~z,则k加一*/
else { for(m=1;m<=k;m++) /*否则将长度为k的单词顺序存入到字符串数组str中,s值加1*/
str[s++]=xx[i][j+m];
k=0; /*将k值清0,以方便下一个单词的长度计数*/
}
if(!isalpha(xx[i][j])) str[s++]=" "; /*如果当前字符不是字母a~z或a~z,则以空格代之存入到字符串数组str中,s值加一*/
}
for(m=1;m<=k;m++) /*此时的k值为当前字符串中第一个单词的长度,但在上一个for循环中没能存入到字符串数组str中,所以在这里将其存入到str中*/
str[s++]=xx[i][j+m];
str[s]="\0"; /*在当前行尾加0以标记此行的结束*/
strcpy(xx[i],str); /*将倒排好的当前字符串重新存回到当前行xx中*/
}
}

void main()
{
clrscr();
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;

clrscr();
fp=fopen("out6.dat","w");
for(i=0;i<maxline;i++){
printf("%s\n",xx[i]);
fprintf(fp,"%s\n",xx[i]);
}
fclose(fp);
}

本文来源:https://shitiku.jxxyjl.com/shitijijin2/27258.html

Copyright @ 2011- 考试题库网 All Rights Reserved. 版权所有

免责声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。

 站长统计