C语言标准库函数""fgets(string,n,fp)""的功

题目

C语言标准库函数""fgets(string,n,fp)""的功能是()。

  • A、从文件fp中读取长度为n的字符串存入指针string指向的内存
  • B、从文件fp中读取长度为n-1的字符串存入指针string指向的内存
  • C、从文件fp中读取n个字符串存入指针string指向的内存
  • D、从文件fp中读取长度不超过长度为n-1的字符串存入指针string指向的内存
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

函数Rdata()实现从文件IN.dat中读取一篇英文文章存入字符串数组string中,请编写函数SortCharA(),其功能是:以行为单位对字符按从小到大的顺序进行排序,排序后的结果仍按行重新存入字爷串数组string中。最后调用函数Wdata(),把结果string输出到OUT.dat文件中。

例如,原文:dAe, BfC.

CcbbAA

结果:,. ABCdef

AACbbc

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

注意:部分源程序已经给出。请勿改动主函数main()、读数据函数Rdata()和输出数据函数Wdata()的内容。

include <stdio.h>

include <string.h>

include <conio.h>

char string [50] [80];

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

int Rdata (void);

void Wdata (void);

void SortCharA(void)

{

}

void main ()

{ if (Rdata ())

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

return;

}

SortCharA ();

Wdata ( );

}

int Rdata (void)

{ FILE *fp;

int i = 0;

char *p;

if ((fp = fopen("IN. dat", "r")) == NULL)

return 1;

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

{ p = strchr(string[i], '\n');

if (p)

*p = 0;

i++;

}

maxline = i;

fclose (fp);

return 0;

}

void Wdata (void)

{ FILE *fp;

int i;

fp = fopen("OUT. dat", "w");

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

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

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

}

fclose (fp);

}


正确答案:void SortCharA (void) { int i j k str1; char ch; for (i=0; imaxline; i++) { str1 = strlen(string[i]); for (j=0; jstr1-1; j++) for (k=j+1; kstr1; k++) if (string[i] [j] > string [i] [k]) { ch = string[i] [j]; string[i] [j] = string[i] [k]; string[i] [k] = ch; } } } [解题思路] 这里采用strlen字符函数获取字符串的长度;对文章中的每一行的字符利用双重循环进行两两比较较小的字符往行前放较大的字符往行后放这样就实现了以行为单位对字符从小到大的排序。在程序中的语句是if(string[i][j]>string[i][k])成立string[i][j]和string[i][k]就交换数据。
void SortCharA (void) { int i, j, k, str1; char ch; for (i=0; imaxline; i++) { str1 = strlen(string[i]); for (j=0; jstr1-1; j++) for (k=j+1; kstr1; k++) if (string[i] [j] > string [i] [k]) { ch = string[i] [j]; string[i] [j] = string[i] [k]; string[i] [k] = ch; } } } [解题思路] 这里采用strlen字符函数获取字符串的长度;对文章中的每一行的字符利用双重循环进行两两比较,较小的字符往行前放,较大的字符往行后放,这样就实现了以行为单位对字符从小到大的排序。在程序中的语句是if(string[i][j]>string[i][k])成立,string[i][j]和string[i][k]就交换数据。

第2题:

fgets(str,n,fp)函数从文件中读入一个字符串,以下正确的叙述是 ( )

A.字符串读入后不会自动加入'\0'

B.fp是file类型的指针

C.fgets函数从文件中最多读入n-1个字符

D.fgets函数从文件中最多读入n个字符


正确答案:C

第3题:

给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),并写入文件myfile4.txt中,用-1作为字符串输入结束的标志,然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。

[注意] 部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

[试题源程序]

include<stdio.h>

include<string.h>

include<stdlib.h>

void WriteText(FILE *);

void ReadText(FILE *);

main()

{

FILE *fp;

if((fp=fopen("myfile4.txt", "W"))==NULL)

{

printf("open fail !!\n"); exit(0);

}

WriteText(fp);

fclose(fp);

if((fp=fopen("myfile4.txt", "r"))==NULL)

printf("open fail !!1\n"); exit(0);

}

ReadText(fp);

fclose(fp);

}

/*********found*********/

void WriteText(FILE (1) )

{

char str[81];

printf("\nEnter string with -1 to end :\n");

gets(str);

while(strcmp(Str, "-1")!=0){

/**********found*********/

fputs( (2) , fw);

fputs("\n", fw);

gets(str);

}

}

void ReadText(FILE *fr)

{

char str[81];

printf("\nRead file and output to screen :\n");

fgets(str, 81, fr);

while( !feof(fr)){

/**********found**********/

printf("%s", (3) );

fgets(str, 81, fr);

}

}


正确答案:[1] fw [2] str [3] str
[1] fw [2] str [3] str 解析: 填空1:在该函数中,对已有的语句fputs("\n", fw);分析可知:由于文件流变量fw在函数体中没有定义过,故应填*fw或fw[]。
填空2:要把从键盘上输入的内容写入指定的文件中,键盘上输入的内容已存入字符串str变量中,故应填写str。
填空3:要把已存入文件中的内容从文件中读出且已存入字符串变量str中,最后在屏幕上显示出来,故应填写str。

第4题:

若fp是指向某文件的指针,且已读到文件末尾,则库函数feof(fp)的返回值是( )。

A.EOF

B.-1

C.1

D.NULL


正确答案:C
解析:EOF是文本文件的文件结束标志,NULL是打开文件错误的返回值。foef(fp)用来判断文件位置指针是否在文件末尾,文本文件和二进制文件均可以使用此函数。如果遇到文件结束就返回1,否则返回0。

第5题:

标准库函数fgets(s,n,file)的功能是( )。

A.从文件file中读取长度为n的字符串存入字符数组s中

B.从文件file中读取长度不超过n-1个字符的字符串放到字符数组s中

C.从文件file中读取n个字符串存入字符数组s中

D.从文件file中读取长度为n-1个字符的字符串存入字符数组s中


正确答案:B
解析: 字符串输入函数fgets()的调用形式为:fgets(s,n,fp)。fgets函数参数说明:“s”可以是一个字符数组名,也可以是指向字符串的指针;“n”为要读取的最多的字符个数;“fp”是指向该文件的文件型指针。
fgets函数的功能:从fp所指向的文件中读取长度不超过n-1个字符的字符串,并将该字符串放到字符数组s中;读入字符串后会自动在字符串末尾加入“'\0'”结束符,表示字符串结束。

第6题:

标准库函数fgets(s,n,f)的功能是( )

A.从文件f中读取长度为n的字符串存入指针s所指的内存

B.从文件f中读取长度不超过n-1的字符串存入指针s所指的内存

C.从文件f中读取n个字符串存入指针s所指的内存

D.从文件f中读取长度为n-1的字符串存入指针s所指的内存


正确答案:B

第7题:

若fp是指向某文件的指针,已读到此文件末尾,则库函数feof(fp)的返回值是______。

A.EOF

B.0

C.非零值

D.NULL


正确答案:C
解析:由函数feof的定义得知,如果返回的是0,则表示没有到文件末尾;如果返回为非0,则表示到文件末尾。

第8题:

阅读以下函数说明和C语言函数,将应填入(n)处的语句写在对应栏内。

【函数1.1说明】

本程序可以打印出如下图形(菱形):

*

***

*****

*******

*****

***

*

【函数2.1】

main()

{

int i,j,k;

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

{

for(j=0;j<=2-i;j++)

printf(" ");

for((1))

printf("*");

printf("\n");

}

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

{

for((2))

printf(" ");

for(k=0;k<=4-2*i;k++)

printf("*");

printf("\n");

}

}

【函数2.2说明】

通过本程序,可以从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件“CsaiWgm”中保存,输入的字符串以“!”结束。

【函数2.2】

include "stdio.h"

main()

{

FILE *fp;

char str[100],filename[10];

int i=0;

if((fp=fopen("CsaiWgm","w"))==NULL)

{

printf("cannot open the file\n");

exit(0);

}

printf("please input a string:\n");

gets(str);

while((3))

{

if(str[i]>='a'&&str[i]<='z')

str[i]=(4);

fputc(str[i],fp);

(5);

}

fclose(fp);

fp=fopen("CsaiWgm","r");

fgets(str,stden(str)+1,fp);

printf("%s\n",str);

fclose(fp);

}


正确答案:(1)k=0;k=2*i;k++ (2)j=0;j=i;j++ (3)str[i]!='!' (4)str[i]-32 (5)i++
(1)k=0;k=2*i;k++ (2)j=0;j=i;j++ (3)str[i]!='!' (4)str[i]-32 (5)i++ 解析:本题考查用C语言实现菱形的输出与大小写字母的转换。
在函数2.1中,题目要求实现对菱形的输出,从图中可以看出每行的“*”字符个数为(2×行号-1),最长的一行其长度为8个“*”字符,最短的一行是1个“*”字符,从最短到最长一共是4行。下面来[分析]代码。
第(1)空是第二重循环的循环条件,从程序中可以推断出这个循环的作用是用来输出一行的“*”字符,根据上面的[分析],每行的“*”字符个数为(2×行号-1)可以得到循环的上界,再结合程序可以知道此空用的变量是k,而每行的行号存放在变量i中,因此,此空答案为k=0;k=2*i;k++。
第(2)空在第二个二重循环下面,这个二重循环用来输出图形中下半部分,此空是循环的条件。由于菱形具有对称性,我们可以对照程序上面相应的循环中的条件,很容易就可以得到结果,此空答案为j=0;j=i;j++。
在函数2.2中,题目要求从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件CsaiWgm中保存。此题的关键在于如何将小写字母变成大写字母。
第(3)空是循环的循环条件,从程序中可以推断出这个循环的作用是用来将字符串的小写字母全部转换成大写字母,那么可以知道循环的条件是只要取到的字符不为结束字符“!”,循环就继续,因此,此空答案为str[i]!='!'。
第(4)空是条件判断语句下面的语句,根据程序给出的代码不难发现,如果此条件判断语句结果为真,说明当前取到的字符是小写字母,那么应该将其转换为大写字母,因此,此空答案为str[i]-32。
第(5)空是循环的最后一条语句,从程序中不难发现,循环对字符串的位置没有移动,那么此空应该用来实现对字符串位置的往后移动。而记录当前字符串位置的是变量i,因此,此空答案为i++。

第9题:

C语言库函数fgets(str,n,fp)的功能是 ______。

A.从fp指向的文件中读取长度n的字符串存入str旨向的内存

B.从fp指向的文件中读取长度不超过n-1的字符串存入str指向的内存

C.从fb指向的文件中读取n个字符串存入str指向的内存

D.从str读取至多n个字符到文fp


正确答案:B
解析:fgets函数的作用是从指定的文件读入—个字符串。fgets(str,n,fp);中的n为要求得到的字符的个数,但只从中指向的文件输入n-1个字符,然后在最后加—个'\0'字符,因此得到的字符串共有n个字符。

第10题:

有以下程序 #include <string.h>main(){ FILE *fp; int i,k,n; fp=fopen("data.dat", "w+"); for(i=4; i<9; i++) { fprintf(fp,"%d",i); if(i%3==0) fprintf(fp,"\n"); } rewind(fp); fscanf(fp,"%d%d",&k,&n); printf("%d %d\n",k,n); fclose(fp);} 程序的运行结果是A.0 0 B.4 5C.45 78 D.456 78


正确答案:D
本题主要考查文件的操作。在程序中,首先定义了一个文件类的指针变量fp,然后定义了三个整型变量,接着以可读/写的形式打开文件data.dat,最后执行for循环:
当i=4时,将变量i的值格式化输出到fp指向的文件中,即为4,然后判断i%3是否为0,如果是,则输出换行符,否则不执行其他操作。
当i=5时,那么输出到文件中的值为5,同样,输出6并输出换行符,接着输出7和8到文件中。循环结束,此时文件中的内容为456<换行>78。
执行rewind(fp);语句,这个语句的作用是将文件的位置指针返回到文件的开头,然后用该文件的内容分别给变量k和n赋值,赋值的过程中,碰到换行符表示一个赋值的结束,因此,赋值后,两变量的结果分别是456和78。因此,最后的输出结果是456 78。

更多相关问题