百家拳C语言测试中心

相关链接

    C语言文件测试题(2)

  1. 下面这段程序代码无法编译成功,哪里出了问题? 01 #include <stdio.h>
    02
    03 int main(void)
    04 {
    05 FILE fptr;
    06 fptr=fopen(“test.txt”,”w”);
    07 fputs(“Justin”,fptr);
    08
    09 return 0;
    10 }

  2. 第05行文件指针声明错误,应修改如下: FILE *fptr;
  3. 什么是二进制文件?有什么优点?

  4. 所谓二进制文件,就是以二进制格式保存,将内存中的数据原封不动地保存到文件中,适用于非字符为主的数据。如果以记事本程序打开,将会出现一堆乱码。最大优点在于存取速度快、占用空间小及可以随机存取数据,在数据库应用上比文本文件方便。
  5. 下面这段程序代码片段哪里出了问题? 01 ...
    02 if( (fptr = fopen(“巴冷公主.txt”, “r”) )= =NULL)
    03 puts(“无法打开文件”);
    04 else
    05 while( feof(fptr) )
    06 {
    07 printf(“%c”, fgetc(fptr) );
    08 count++;
    09 if (count % 30 = = 0)
    10 putchar(‘\n’);
    11 }
    12 ...

  6. while(!feof(ptr) )。
  7. C语言的文件输入/输出函数与基本输入/输出函数有何差异?

  8. 差异性为文件输入/输出函数需要指定目标文件进行输入/输出,而基本输入/输出则直接输出在屏幕上。
  9. 以下这段程序代码片段所要打开的文件内含有汉字字符,在读取的过程中,发现出现了乱码,请问哪里出了问题? 01 ...
    02 if( (fptr = fopen(“巴冷公主.txt”, “r”) )= =NULL
    ) 03 puts(“无法打开文件”);
    04 else
    05 while( !feof(fptr) )
    06 {
    07 fgets(str,30,fptr);
    08 printf(“%s\n”,str);
    09 }
    10 ...

  10. 由于汉字是由两个字节组成的,而fgets()函数只读取length-1个字符,最后一个字符填上’\0’,由于第07行设置length为30实际上只会读取29个字符,因而造成最后一个汉字读取不完全,所以造成乱码,第07行的length设置应该改为31。
  11. 当不用通过数据流与缓冲区,而使用较低级的I/O函数(包含在头文件中)来直接对磁盘进行存取时,有何优缺点?
  12. 优点是可以节省设置缓冲区的记忆空间。缺点是磁盘的存取速度较慢,容易拖累程序整体执行速度。缺点是这些函数不是C语言的标准函数,跨平台操作时容易发生问题。
  13. 设计一个程序,执行该程序后,可以直接打开程序源文件显示程序代码内容。

  14. 此题是简单的文本文件存取练习,可以加上__FILE__宏,让程序更有可移植性,程序代码如下所示:
    #include <stdio.h>

    int main(void)
    {
    FILE *fptr;
    if( (fptr = fopen(__FILE__, “r”) )= =NULL)
    puts(“文件打开失败”);
    else
    {
    while(!feof(fptr) )
    printf(“%c”, fgetc(fptr) );
    } retrun 0;
    }
  15. 编写一个程序,将汉字写入一个文件中,并加上编码信息,汉字的编码为0xA440~0xFFFF。

  16. 可以将汉字分为高、低两个字节,使用 fprintf()函数输出到文件中,程序代码下所示:
    #include <stdio.h>
    int main()
    {
    unsigned i;
    FILE *fptr;
    struct
    { char H; char L; } ch; if( (fptr = fopen(“chword.txt”,”w”) ) = = NULL) printf(“文件打开失败”); else { for( i= 0xA440; i < 0xFFFF; i++) { ch.H = i / 256; ch.L= i % 256; fprintf(fptr,”%X %c%c\t”, i, ch. H, ch. L); if(!(i % 10) ) fputc(‘\n’,fptr); } fclose(fptr); } return 0; }
  17. 在fseek()函数中,说明文件位置光标的起始点模式的意义。 (1)SEEK_SET:(2)SEEK——CUR(3)SEEK_END

  18. 文件位置光标起始点模式的意义如下 mode 说 明 SEEK_SET 光标起始点位于文件的起始位置 SEEK_CUR 光标起始点为当前文件光标位置 SEEK_END 光标起始点位于文件的结尾
  19. 设计一个程序,使用命令行自变量来指定文件名,并进行错误检查动作,包括打开文件、读取与写入及关闭文件等。

  20. #include <stdio.h> int main(int argc,char *argv[ ])
    {
    FILE *fptr;

    if (argc !=2) /*检查在命令行是否有指定文件*/
    printf(“没有指定文件名!”);
    else
    {
    if( (fptr = fopen(argv[1],”r”) )= =NULL) /*检查文件打开是否有错*/
    printf(“文件打开失败!”);
    else
    {
    while(!feof(fptr) )
    {
    printf(“%c”,fgetc(fptr) );
    if (ferror(fptr) ) /*检查文件关闭是否有错误*/
    printf(“文件读取错误”);
    }
    if (fclose(fptr) = = EOF) /*检查文件关闭是否有错误*/
    printf(“文件关闭发生错误,文件信息可能丢失!”);
    }
    } return 0;
    }
  21. 设计一个程序,利用命令行参数来指定两个网络上的图片文件名,并比较两个图片文件的内容是否相同。

  22. 由于图片文件多数属于二进制文件,如果每个字节的值都相同,则表示两张图片的内容一样。以下程序可以进行文件对比,查看两个文件的内容是否完全一样。 01 #include <stdio.h>
    02
    03 int main(int argc,char *argv[ ])
    04 {
    05 FILE *fptr1, *fptr2;
    06 char ch1,ch2;
    07 int same=0;
    08
    09 if (argc !=3) /*检查在命令行是否有指定文件*/
    10 printf(“执行范例:CH10-15 <文件1> <文件2>\n”);
    11 else
    12 {
    13 if ( (fptr1 = fopen(argv[1], ”rb”) ) = = NULL) /*以两进位方式打开*/
    14 printf(“无法打开%s! \n”, argv[1]);
    15 else if ( (fptr2=fopen(argv[2],”rb”) )= =NULL) /*以两进位方式打开*/
    16 printf(“无法打开%s! \n”, argv[2]);
    17 else
    18 {
    19 while(!feof(fptr1) )
    20 {
    21 ch1=fgetc(fptr1);
    22 ch2=fgetc(fptr2);
    23 if (ch1 !=ch2)
    24 {
    25 printf(“文件内容不同!”);
    26 same = 1;
    27 break;
    28 }
    29 }
    30 if(!same)
    31 printf(“文件内容相同!”);
    32 fclose(fptr1);
    33 fclose(fptr2);
    34 }
    35 }
    36
    37 return 0;
    38 }
  23. 在UltraEdit编辑器中,可以同时显示十六进制码与ASCII字符,使用C语言程序模拟这个功能。

  24. 可以使用一个字符数组暂存读入的字符,每显示16个字节,就将字符数组的值显示在它后面,程序代码如下所示:
    #include <stdio.h>
    int main(int argc,char* argv[ ])
    {
    FILE *fptr;
    unsigned char ch, chrtmp[16]; /*使用字符数组暂存读入的字符*/
    int i,count=0;
    if(argc != 2)
    puts(“没有指定文件”);
    else
    {
    if ( (fptr = fopen(argv[1], ”rb”) )= =NULL)
    printf(“无法打开文件!\n”);
    else
    {
    while( !feof(fptr) )
    {
    fread(&ch, sizeof(ch), 1, fptr); /*每次读取一个字节*/
    chrtmp[count]=ch;
    if (ch<= 0xF) /*如果小于0xF,于显示上补0 */
    printf(“0%-2X”, ch);
    else
    printf(“%-2X”, ch);

    count++;
    if( ! (count % 16) ) /*每显示16字节换行*/
    {
    printf(“ ”);
    for(i=0; i<16; i++)
    if(chrtmp[i] > 32 && chrtmp[i] < 127)
    printf(“%c”,chrtmp[i]);
    else
    printf(‘.’);
    count = 0;
    putchar(‘\n’);
    }
    } fclose(fptr);
    }
    } return 0;
    }
  25. 下面这个程序代码片段想要进行文件的修改,请问哪里出了问题?
    01 ...
    02 FILE *fptr;
    03 int count=0;
    04 if( (fptr = fopen(“巴冷公主.txt”, ”w”) )= =NULL) //检查文件是否打开成功
    05 puts(“无法打开文件”);
    06 else
    07 while( !feof(fptr) )
    08 ...

  26. 打开文件时,若使用w参数,将会产生一个新的文件覆盖原来的文件,若要附加或修改文件,则应使用a或是r+参数。

自我评价 答对0--2题 答对3--4题 答对5--6题 答对7--8题 答对9--10题

上一篇    下一篇