您的位置: 网站首页 > 程序开发 > C语言程序设计案例教程 > 第十一章 文件操作 > 【11.3 思考与练习】

11.3 思考与练习

 

思考与练习

1选择题

1)若要打开A盘上user子目录下名为abc.txt的文本文件,并进行读/写操作,以下符合此要求的函数调用语句是     

Afopen("A:\user\abc.txt","r")                        

Bfopen("A:\\user\\abc.txt","r+")

Cfopen("A:\user\abc.txt","rb")                      

Dfopen("A:\\user\\abc.txt","w")

2)在C语言程序中,可把整型数以二进制形式存放到文件中的函数是     

Afprintf( )函数          Bfread( )函数            Cfwrite( )函数   Dfputc( )函数

3)系统的标准输入设备是指     

A.键盘                      B.显示器                   CCPU                D.硬盘

4)系统的标准输出设备是指     

A.键盘                      B.显示器                   CCPU                D.硬盘

5)若执行fopen( )函数时发生错误,则函数的返回值是     

A.空值                      B1                            C0                     DEOF

6)用fopen( )函数打开一个新的二进制文件,要求既能读也能写,则文件的打开方式应为     

A"ab+"                            B"wb+"                    C"rb+"                     D"ab"

7)若以"a+"方式打开一个已经存在的文件,则以下叙述中,正确的是     

A.文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可进行添加和读操作

B.文件打开时,原有文件内容不被删除,位置指针移到文件开头,可进行重写和读操作

C.文件打开时,原有文件内容被删除,只可进行写操作

D.以上说法均不正确

8)利用fseek( )函数可实现的操作是     

A.改变文件的位置指针                                 B.文件的顺序读写

C.文件的随机读写                                        D.以上答案均正确

9)以下叙述中,错误的是     

A.二进制文件打开后,可以先读文件的末尾,而顺序文件不可以

B.在程序结束时,应用fclose( )函数关闭已打开的文件

C.在利用fread( )函数从二进制文件中读数据时,可以用数组名给数组中的所有元素读入数据

D.不可以用FILE定义指向二进制文件的文件指针

10)函数调用语句fseek(fp,-10L,SEEK_END)的含义是     

A.将文件位置指针移到距离文件头10个字节处

B.将文件位置指针从当前位置向后移动10个字节

C.将文件位置指针从文件末尾向前移动10个字节

D.将文件位置指针移到距离当前位置10个字节处

11)函数rewind( )的作用是     

A.使文件位置指针移至文件的开头

B.将文件位置指针移至文件中的特定位置

C.使文件位置指针移至文件的末尾

D.使文件位置指针移至下一个字符位置

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

     

AEOF                    B0                            C.非0            DNULL

13)函数ftell(fp)的作用是     

A.得到流式文件中的当前位置                    B.移动流式文件的位置指针

C.初始化文件的文件位置指针                    D.以上答案均正确

14)以下程序执行后,文件test.txt中的内容是     

#include <stdio.h>

void fun(char *fname,char *st)

{

    FILE *myf;

    int  i;

    myf=fopen(fname,"w");

    for(i=0;i<strlen(st);i++)

        fputc(st[i],myf);

    fclose(myf);

}

main()

{

    fun("test","new world");

    fun("test","hello,");

}

Ahello                                                       Bnew worldhello      

Cnew world                                               Dhello, rld

15)以下程序的输出结果是     

#include <stdio.h>

main()

{

    FILE *fp;

    int i=20,j=30,k,n;

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

    fprintf(fp,"%d\n",i);

    fprintf(fp,"%d\n",j);

    fclose(fp);

    fp=fopen("d1.dat","r");

    fp=fscanf(fp,"%d%d",&k,&n);

    printf("%d %d\n",k,n);

    fclose(fp);

}

A20  30                 B20  50                   C30  50            D30  20

16)以下程序要把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入#号时,结束输入和输出操作,但程序有错。

#include <stdio.h>

main()

{

    FILE *fout;

    char ch;

    fout=fopen("abc.txt","w");

    ch=fgetc(stdin);

    while(ch!='#')

    {

        fputc(ch,fout);

        ch=fgetc(stdin);

    }

    fclose(fout);

}

出错的原因是     

A.函数fopen( )调用形式错误                      B.输入文件没有关闭

C.函数fgetc( )调用形式错误                       D.文件指针stdin没有定义

2填空题

1)若fp已正确定义为一个文件指针,d1.dat为二进制文件,为实现读操作而打开此文件的语句是fp=fopen(      );

2)以下C语言程序将磁盘中的一个文件复制到另一个文件中,两个文件名在命令行中已给出。

#include <stdio.h>

main(int argc,char *argv[])

{

    FILE *f1,*f2;

    char ch;

    if(argc<      )

    {

        printf("Parameters missing!\n");

        exit(0);

    }

    if(((f1=fopen(argv[1],"r")) == NULL)||((f2=fopen(argv[2],"w")) == NULL))

    {

        printf("Can’t open this file!\n");

        exit(0);

    }

    while(      )

        fputc(fgetc(f1),f2);

    fclose(f1);

    fclose(f2);

}

3)设有如下程序:

#include <stdio.h>

 

void fc(FILE *fp)

{

    char c;

    while((c=getc(ifp))!='#')

        putchar(c-32);

}

 

main(int argc,char *argv[])

{

    FILE *fp;

    void fc();

    int i=1;

 

    while(--argc>0)

        if((fp=fopen(argv[i++],"r"))==NULL)

        {

            printf("Can’t open this file! \n");

            exit(0);

        }

        else

        {

            fc(fp);

            fclose(fp);

        }

}

以上程序经编译、连接后,生成可执行文件,名为cpy.exe。设磁盘上有三个文本文件,其文件名和内容如表11-2所示。

11-2  文件名与内容表

文件名

内容

a

aaaa#

b

bbbb#

c

cccc#

如果在DOS系统下输入:

cpy a b c<CR>

则程序输出     

4)以下程序用来统计文件中字符的个数。

#include <stdio.h>

main()

{

    FILE *fp;

    long num=0;

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

    {

        printf( "Can't open this file! \n");

        exit(0);

    }

    while     

    {

        fgetc(fp);

        num++;

    }

    printf("num=%d\n",num);

    fclose(fp);

}

5以下程序将从输入设备读入的文本(用@作为文本结束标志)复制到一个名为bi.dat的新文件中。

#include <stdio.h>

FILE *fp;

main()

{

    char ch;

    if((fp=fopen(      ))==NULL)

        exit(0);

    while ((ch=getchar())!='@')

        fputc(ch,fp);

          ;

}

6)以下程序的功能是:从键盘上输入一个字符串,将该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示。

#include <stdio.h>

main()

{

    FILE *fp;

    char str[100];

    int i=0;

    if((fp=fopen("text.txt",      ))==NULL)

    {

        printf("Can't open this file.\n");

        exit(0);

    }

    printf("Input a string:\n");    gets(str);

    while (str[i])

    {

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

            str[i]=      ;

        fputc(str[i],fp);

    }

    fclose(fp);

    fp=fopen("test.txt",      );

    fgetc(str,100,fp);

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

    fclose(fp);

}

7以下程序将从输入设备读入的10个整数,以二进制方式写到一个名为bi.dat的新文件中。

#include <stdio.h>

FILE  *fp;

main()

{

    int i,j;

 

    if((fp=fopen(      ,"wb"))==NULL)

        exit(0);

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

    {

        scanf("%d",&j);

        fwrite(&j,sizeof(int),1,      );

    }

    fclose(fp);

}

8)在以下程序中,用户从键盘输入一个文件名,然后输入一串字符(用“#”结束输入),存放到此文件中形成文本文件,并将字符的个数写到文件尾部。

#include <stdio.h>

main()

{

    FILE *fp;

    char ch,fname[32]; 

    int  count=0;

 

    printf("Input the filename :");

    scanf("%s",fname);

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

    {

        printf("Can't open this file: %s \n",fname);

        exit(0);

    }

    printf("Enter a data:\n");

    while((ch=getchar())!='#')

    {

        fputc(ch,fp);

        count++;

    }

    fprintf(      ,"\n%d\n",count);

    fclose(fp);

}

9)以下程序用来统计文件中字符的个数。

#include <stdio.h>

main()

{

    FILE *fp;

    long num=0L;

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

    {

        pirntf("Open error\n");

        exit(0);

    }

    while(      )

    {

        fgetc(fp);

        num++;

    }

    printf("num=%1d\n",num-1);

    fclose(fp);

}

10)以下程序的功能是:打开文件后,先利用fseek()函数将文件位置指针定位在文件末尾,然后调用ftell( )函数返回当前文件位置指针的具体位置,从而确定文件长度。

#include <stdio.h>

main()

{

    FILE  *myf;

    long  f1;

    myf=      ("test.txt","rb");

    fseek(myf,0L,      );

    f1=ftel(myf);

    fclose(myf);

    printf("%d\n",f1);

}

3上机操作题

1)编写一个程序,实现从键盘上输入一个字符串,将其中的所有字母改成小写字母后,输出到文件file.dat中。

2)编写一个程序,实现将两个文件file1.txtfile2.txt合并成一个文件res.txt

3)编写一个程序,实现将一个文本文件的内容输出到计算机屏幕上。

4)编写一个程序,实现有10条学生信息,每条学生信息由学号和成绩组成。将10条学生信息保存到一个文件中。