SCAUoj实验12 文件操作

C语言文件操作

文章目录

  • 一、堂前习题
    • 1105 [填空]文本文件操作_字符读入
    • 1106 文本文件操作_字符写入
  • 二、堂上练习
    • 11129 文本文件操作_读取与选择显示
    • 1107 文本文件操作_单词的排序


一、堂前习题

1105 [填空]文本文件操作_字符读入

在当前目录中存在文件名为"case1.in"的文本文件,现要求你使用fopen函数命令打开该文件,读出里面的所有字符, 遇到大写字母的,将其变为小写字母,其它字符不变,最后将所有字符按顺序在屏幕上输出。请填空完成程序, (注意,填空题,请不要使用return 0结束,否则会影响评判而判错)
(如case1.in内容如下)
Hello my Dear:
Have a GooD Time!
(在屏幕上输出结果如下)
hello my dear:
have a good time!

(提示,在提交前要测试自己的代码是否正确,可在源文件所有目录自己创建一个名为case1.in的文本文件,
在文件中自己打入一些字母,以便测试自己的代码是否正确)

#include "stdio.h"

main()
{
    FILE *fp;
    char ch;

    if((_______________________)==NULL)
        return 0;
    while(_______________________)
    {
        if ('A'<=ch && ch<='Z')
            ch = ch + 32;
        _______________________;
    }
    fclose(fp);
}

代码如下:

#include "stdio.h"
main()//注意部分电脑上,在所在目录创建in类型文件时,文件是无法正常打开的
//这种情况应该创建之后右键单击in文件,在属性更改中默认打开方式为记事本
{
    FILE *fp;
    char ch;
    if((fp = fopen("case1.in","r"))==NULL)
        return 0;
    while((ch = fgetc(fp)) != EOF)//ch别漏掉了
    {
        if ('A'<=ch && ch<='Z')
            ch = ch + 32;
        //putchar(ch);(这两种都可以)
        printf("%c",ch);
    }
    fclose(fp);
}

1106 文本文件操作_字符写入

由键盘输入任意个字符(以连着的三个小写字符bye做为结束标志),将所有字符(包括bye),写入新建的文件answer.txt中(注:文件放在当前目录)。 请完成该功能,(注意,填空题,请不要使用return 0结束,否则会影响评判而判错)
(如键盘输入内容如下)
He, can you write the code?
Yes, you can.bye
No, you can’t.
(程序执行后,在文件answer.txt中内容如下)
He, can you write the code?
Yes, you can.bye

(注:因No, you can’t.在bye之后,所以不输出)
(注:代码中不要使用return及exit()函数,以免误判)

#include "stdio.h"

main()
{
_______________________
}

代码如下:

#include "stdio.h"
main()
{
    FILE* fp;
    char ch,ch1,ch2,ch3;
    if((fp=fopen("answer.txt","w"))==NULL)//打开文件
        return 1;
    while((ch=getchar())!=EOF)
    {//键盘输入字符
        fputc(ch,fp);//键盘输入的字符写入文件
        ch1=ch2;
        ch2=ch3;
        ch3=ch;
        if(ch1=='b'&&ch2=='y'&&ch3=='e')
            break;
    }
    fclose(fp);
}

二、堂上练习

11129 文本文件操作_读取与选择显示

在当前目录中存在文件名为"case1.in"的文本文件,现要求打开该文件,读出里面的所有字符,只将其中的数字字符按先后顺序显示在屏幕上。
(如case1.in内容如下)
13 cats and 22 bikes
(在屏幕上输出结果如下)
1322

#include "stdio.h"

main()
{
    FILE *fp;
    char ch;

    if((_______________________)==NULL)
        return 0;
    while(_______________________)
    {
        _______________________
    }
    fclose(fp);
}

代码如下:

#include "stdio.h"
main()
{
    FILE *fp;
    char ch;
    if((fp = fopen("case1.in","r"))==NULL)
        return 0;
    while((ch = fgetc(fp))!= EOF)
    {
        if(ch>='0'&&ch<='9')
            putchar(ch);
    }
    fclose(fp);
}

1107 文本文件操作_单词的排序

在当前目录有文件“case1.in”,文件里存放有多个(总个数不超过10000个)英文单词(每个英文单词不会超过10个字文字符), 每行一个,单词未排序。现要求,将文件中的所有单词按字典顺序排序,然后将排序好的单词写入新建的文件answer.txt中(注:文件存放于当前目录)。 请完成程序,实现该功能,(注意,填空题,请不要使用return 0结束,否则会影响评判而判错)
(如case1.in文件中原内容如下)
hello
bye
yes
(程序执行后,在文件answer.txt中内容如下)
bye
hello
yes

#include "stdio.h"
#include "string.h"

main()
{
_______________________
}

代码如下:

#include "stdio.h"
#include "string.h"
main()
{
    FILE *fp1,*fp2;
    char str[10000][11],str1[11];//str1是交换时的替身
    int n=0,i,j;
    if((fp1=fopen("case1.in","r"))==NULL)
        return 0;
    if((fp2=fopen("answer.txt","w"))==NULL)
        return 0;
    /*读取每一个单词到数组*/
    while((fscanf(fp1,"%s",str[n]))>0)//循环读取文件字符串内容到数组
        n++;
    /*单词的排序*/
    for(i=0; i<n; i++)
    {
        for(j=i+1; j<n; j++)
        {
            if(strcmp(str[i],str[j])>0)
            {
                strcpy(str1,str[i]);
                strcpy(str[i],str[j]);
                strcpy(str[j],str1);
            }
        }
    }
    /*写入文件*/
    for(i=0; i<n; i++)
    {
        fprintf(fp2,"%s\n",str[i]);
    }
    /*关闭文件*/
    fclose(fp1);
    fclose(fp2);
}


你可能感兴趣的:(SCAU_oj_c语言,c语言,开发语言)