函数ReadDat()的功能是实现从文件IN32.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数StrOR(),该函数的功能是:以行为单位把字符串中所有小写字母。左边的字符串内容移至该串的右边存放,然后把小写字母。删除,余下的字符串内容移到已处理字符串的左边存放,最后把已处理的字符串仍按行重新存入字符串数组xx中。最后调用函数WriteDat()把结果输出到文件OUT32.DAT中。例如,原文:You can create an index on any fieldyou have the c

题目

函数ReadDat()的功能是实现从文件IN32.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数StrOR(),该函数的功能是:以行为单位把字符串中所有小写字母。左边的字符串内容移至该串的右边存放,然后把小写字母。删除,余下的字符串内容移到已处理字符串的左边存放,最后把已处理的字符串仍按行重新存入字符串数组xx中。最后调用函数WriteDat()把结果输出到文件OUT32.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个字符,含标点符号和空格。

注意:部分源程序已给出。

请勿改动主函数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)

{

void main ()

{

clrscr ( );

if (ReadDat ( ) )

{

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

return;

}

StrOR ( );

WriteDat ( );

}

int ReadDat (void)

{

FILE *fp;

int i=0;

char *p;

if ( (fp= fopen ( "IN32. 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;

ctrscr ( );

fp=fopen ("OUT32 .DAT", "w");

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

{

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

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

}

fclose(fp);

}


相似考题

1.函数ReadDat()的功能是实现从文件IN32.DAT中读取一篇英文文章存入到字符串数组xx中。请编数StrOR(),该函数的功能是:以行为单位把字符串中所有小写字母。左边的字符串内容移至该串的右边存放,然后把小写字母。删除,余下的字符串内容移到已处理字符串的左边存放,最后把已处理的字符串仍按行重新存入字符串数组xx中。最后调用函数WriteDat()把结果输出到文件OUT32.DAT中。例如, 原文: You can create an index on any fieldyou have the correct record结果: n any field Yu can create an indexrd yu have the crrect rec原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格.注意:部分源程式序已给出请勿改动主函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){}void main (){clrscr ( );if (ReadDat ()){printf ("数据文件 IN32.DAT 不能打开!\n\007");return;}StrOR ();WriteDat ();}int ReadDat (void){FILE *fp;iht i=0;char *p;if ((fp=fopen("IN32.DAT","r"))==NULL) return 1;while (fgets (xx [i], 80, fp) !=NULL){p=strchr (xx [i], ' In' );if (p) *p=0;i++;}maxline=i;fclose (fp);return 0;}void WriteDat (void){FILE *fp;int i;clrscr ();fp=fopen ( "OUT32. DAT", "w" );for (i=0;i {printf ("%s\n", xx [i] );fprintf (fp, "%s\n", xx[i] );}fclose (fp);}

参考答案和解析
正确答案:void StrOR(void) { int I j k index str1; char ch; for (I=0; Imaxline; I++) { str1=strlen (xx [I] ); /*求各行的长度*/ index=str1; for (j =0; jstr1; j ++) /*将一行中所以小写字母o右边的字符依次向左移一位 删除字母o*/ if(xx[I] [j]=='o') { for (k=j ;kstr1-1;k++) xx[I] [k]=xx[I] [k+1]; xx[I] [str1-1]=' '; index= j; /*记录下最后一个o所在的位置*/ } for [j=strl-1; j>=index; j--) /*最后一个o右侧的所有字符都移到已处理字 符串的左边*/ { ch=xx[I] [str1-1]; for (k=str1-1 ;k>0; k--) xx[I] [k]=xx[I] [k-1]; xx[I] [0] =ch; } } }
void StrOR(void) { int I, j, k, index, str1; char ch; for (I=0; Imaxline; I++) { str1=strlen (xx [I] ); /*求各行的长度*/ index=str1; for (j =0; jstr1; j ++) /*将一行中所以小写字母o右边的字符依次向左移一位, 删除字母o*/ if(xx[I] [j]=='o') { for (k=j ;kstr1-1;k++) xx[I] [k]=xx[I] [k+1]; xx[I] [str1-1]=' '; index= j; /*记录下最后一个o所在的位置*/ } for [j=strl-1; j>=index; j--) /*最后一个o右侧的所有字符都移到已处理字 符串的左边*/ { ch=xx[I] [str1-1]; for (k=str1-1 ;k>0; k--) xx[I] [k]=xx[I] [k-1]; xx[I] [0] =ch; } } } 解析:本题考查的知识点如下:
(1)循环结构与选择结构的嵌套使用。
(2)字符数组中的元素的移动。
(3)字符串处理函数的使用。
在本题中,以行作为字符串处理的基本单位。首先,要确定该行字符串的长度。然后使用循环结构依次对字符进行处理。先找到字符o,将o右侧的字符依次向左移。这个操作同时能够删除字符o。记录下最后一个。所在的位置,在这个。右侧的所有字符都要移到已处理字符串的左边,这个过程也是使用循环来完成的。最后,对文章中的每一行都进行这一操作即可。
更多“函数ReadDat()的功能是实现从文件IN32.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数St ”相关问题
  • 第1题:

    函数ReadDat实现从文件in.dat中读取一篇英文文章存入到字符串数组XX中;请编制函数StrOL,其函数的功能是: 以读入文章的行为单位,以空格或标点符号(数据文件中仅含’,’或’.’作为标点符号)作为分隔符,对行中所有单词进行倒排, 单词间仍以空格作为分隔符,之后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组XX中。最后main函 数调用函数wmeDat把结果XX输出到文件0ut.dat中。提示:对于每一行字符串可以先提取最后一个单词,再提取倒数第二个单词,直至第一个单词,单词之后采用空格为分隔符,连接成一行新的字符串。 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。注意:部分源程序存放在test.C文件中。 请勿改动主函数main、读数据函数ReadDat和输出数据函数WriteDat的内容。


    正确答案:
    【审题关键句】以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。
    【解题思路】
    ①定义字符数组line[80]、word[80]和字符指针变量P,循环整型变量i、j。
    ②在for叫循环语句中,循环变量i从0开始,依次递增直到其值等于maxline,实现对文章每行字符串的如下处理。调用内存分配函数memset给字符数组line和word在内存中分配80个字符空间的大小。使指针变量P指向字符串xx[i]的头,变
    量j的初值设为0。利用while循环语句,当指针变量P没有到达xx[i]的结尾时,一直执行如下的操作:当*p是字母时,把*p赋给字符数组line,同时字符数组下标j加l,字符指针P加1,指向下一个字母。直至*p是单词间的分隔符时,退出第二层while循环。调用字符串连接函数strcat在字符串line后面添加一个空格,实现用空格分隔各个单词,再把由前面的单词组成的字符串word连接到当前单词的后面,实现按单词逆序排列。把重新组成的新的字符串利用函数strcpy拷贝到word中。调用函数memset对字符数组line在内存中重新分配80个字符空间,并设置其下标从0开始。当*p非空且不是字母的情况下,指针P加1,指向其下一个字符。依次循环,直到xx[i]的结束。最后把对字符串xx[i]的处理结果word拷贝到xx[i]中,再进行对文章下一行的处理。
    【参考答案】

  • 第2题:

    函数ReadDat实现从文件in.dat中读取一篇英文文章存入到字符串数组XX中,请编制函数ConvertCharD,其函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的上一个字母,如果是字母a,则改写成字母z,其他字符保持不变。把已处理的字符串仍按行重新存入字符串数组xx中。最后main函数调用函数WriteDat把结果xx输出到文件out.dat中。例:原文:Adb.Bcdza abck.LLhj结果:Aca.Bbcyzzabj.LLgi原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 注意:部分源程序存放在test.c文件中。 请勿改动主函数main、读函数ReadDat0和输出函数WriteDat的内容。


    正确答案:
    【审题关键句】以行为单位把字符串中的所有小写字母改写成该字母的上一个字母,大小写不变,其他字符不变。
    【解题思路】
    ①定义整型循环变量i、j。
    ②在第一层for循环中,循环变量i从0开始,依次递增直到其值等于maxline,实现对文章每行的处理。第二层for循环中,循环变量J从0开始,依次递增直到其值大于或等于strlen(xx[i]),在循环体中,利用if条件语句判断如果xx[i][j]的值为字符’a’,则把xx[i][j]的值设置为字符’2’。否则如果XX[i][D]的值在小写字符’at与’2’之间,则把xx[i][j]的值减1,把其值变成其前一个字符的ASCII码。
    【参考答案】

  • 第3题:

    函数ReadDat()的功能是实现从文件IN5.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数ConvertCharA(),该函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的下一个字母,如果是字母z,则改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT5.DAT中。

    例如,原文:Adb.Bcdza

    abck.LLhj

    结果:Aec.Bdeab

    bcdl.LLik

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

    注意:部分源程序已给出。

    请勿改动主函数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; /*定义循环控制变量*/
    int str; /*存储字符串的长度*/
    for(i=0;i
    {
    str=strlen(xx[i]); /*求得当前行的字符串的长度*/
    for(j=0;j
    if(xx[i][j]>='a' && xx[i][j]<='z') /*如果是小写字母*/
    if(xx[i][j]=='z')
    xx[i][j]='a'; /*如果是小写字母z,则改写成字母a*/
    else
    xx[i][j]+=1; /*其他的小写字母则改写为该字母的下一个字母*/
    }
    }
    void main()
    {
    system("CLS");
    if(ReadDat())
    {
    printf("数据文件IN5.DAT不能打开!\n\007") ;
    return ;
    }
    ConvertCharA() ;
    WriteDat() ;
    }
    int ReadDat(void)
    {
    FILE *fp ;
    int i =0 ;
    char *p ;
    if((fp = fopen("IN5.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("OUT5.DAT", "w") ;
    for(i = 0 ; i < maxline ; i++)
    {
    printf("%s\n", xx[i]) ;
    fprintf(fp, "%s\n", xx[i]) ;
    }
    fclose(fp) ;
    }

  • 第4题:

    函数ReadDat实现从文件in.dat中读取一篇英文文章存入到字符串数组XX中,请编制函数StrCharJR,其函数的功能是t以该文章中的行为单位把字符串中的所有字符的二进制ASCII值右移4位,高位补0,然后把右移后的字符ASCII值再加上原字符的ASCII值,得到新的值仍存入原字符串对应的位置上,之后把已处理的结果仍按行重新存入数组XX中。最后 main函数调用函数WriteOat把结果XX输出到文件out.dat中。 例如: ”z”对应的ASCII值为7AH,二进制值为01111010,右移4位后为00000111,加上原来”2”的ASCII值01111010得到10000001结果。 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格,并也按字符处理。 注意:部分源程序存放在test.C文件中。 请勿改动主函数main、读函数ReadDat和输出函数WriteDat的内容。


    正确答案:
    【审题关键句】字符的ASCII值右移4位二进制位,高位补0后加原字符的ASCII值。
    【解题思路】
    ①定义两个循环变量i、j和一个无符号字符变量tmp。
    ②在第一个for循环语句中,循环变量i从0开始,依次递增直到其值等于文章最大行数maxline。在第二个for循环中,从每行第1个字符开始,依次递增直到其值等于该行字符串的最大长度,然后在循环体中指定每次循环时,将第i行第i个位置上的字符的ASCII值的二进制数右移4位,然后将所得的值再加上原字符的ASCII码值。
    【参考答案】

  • 第5题:

    函数ReadDat( )的功能是实现从文件IN7.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数SortCharD( ),该函数的功能是:以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat( )把结果xx输出到文件OUT7.DAT中。

    例如,原文:dAe,BfC

    CCbbAA

    结果:fedCBA,

    bbCCAA

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

    注意:部分源程序已给出。

    请勿改动主函数main( )、读函数ReadDat( )和写函数WriteDat( )的内容。


    #include
    #include
    #include
    char xx[50][80];
    int maxline=0;
    int ReadDat(void);
    void WriteDat(void);
    void SortCharD()
    {
    int i,j,k; /*定义循环控制变量*/
    int str; /*存储字符串的长度*/
    char temp; /*定义数据交换时的暂存变量*/
    for (i=0;i
    {
    str=strlen(xx[i]); /*求得当前行的字符串长度*/
    for(j=0;j
    for(k=j+1;k
    if(xx[i][j]
    {
    temp=xx[i][j];
    xx[i][j]=xx[i][k];
    xx[i][k]=temp;
    }
    }
    }
    void main()
    {
    system("CLS");
    if (ReadDat())
    {
    printf("数据文件IN7.DAT不能打开!\n\007");
    return;
    }
    SortCharD();
    WriteDat();
    }
    int ReadDat(void)
    {
    FILE *fp;
    int i=0;
    char *p;
    if((fp=fopen("IN7.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()
    {
    FILE *fp;
    int i;
    system("CLS");
    fp=fopen("OUT7.DAT","w");
    for(i=0;i
    {
    printf("%s\n",xx[i]);
    fprintf(fp,"%s\n",xx[i]);
    }
    fclose(fp);
    }