C语言程序设计实验第三版:文件程序设计

/我是咕咕,哈哈哈。今天也有好好学/
实验七、文件程序设计(p121–p125)
一、实验目的
1、掌握文件的基本概念。
2、掌握文本文件的打开和关闭操作。
2、掌握文本文件的顺序读写方法。
二、实验内容
1、调试示例:
将字符写入文件:从键盘输入一行字符,写到文件a.txt中。
1.源程序:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    FILE *fp;
    char ch[80];
    fp=fopen("a.txt","w+");
    scanf("%s",ch);
    fputs(ch,fp);
    fclose(fp);
    return 0;
}

2.调试例子:计算机1901谢威
3.结果如图:
在这里插入图片描述
2、基础编程题
(1).统计文本中各类字符串字符个数,分别统计一个文本文件中的字母,数字个数。
1.源程序:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    FILE *fp;
    char ch[80],fchar;
    int num=0,word=0;
    fp=fopen("a.txt","r");
    fchar=fgetc(fp);
    while(!feof(fp))
    {
        if(fchar=='0'||fchar=='1'||fchar=='2'||fchar=='3'||fchar=='4'||fchar=='5'||fchar=='6'||fchar=='7'||fchar=='8'||fchar=='9')
        {
            printf("#%c\n",fchar);
            num++;
        }
        else
        {
            printf("!%c\n",fchar);
            word++;
        }
        fchar=fgetc(fp);
    }
    printf("num:%d\nword:%d",num,word);
    fclose(fp);
    return 0;
}

2.调试例子:abc123
3.结果如图:
在这里插入图片描述(2).将实数写入文件:从键盘输入若干实数,分别写入一个文本文件中。
1.源程序:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    FILE *fp;
    int fjoinnum;
    fp=fopen("a.txt","w+");
    while(1)
    {
        scanf("%d",&fjoinnum);
        fputc(fjoinnum,fp);
    }
    fclose(fp);
    return 0;
}

2.调试例子:123456
3.结果如图:

在这里插入图片描述
(3).统计成绩:从键盘输入10个学生的学号,姓名和数学语文和英语成绩,自导文本文件f3.txt中,再从中取出数据,计算每个学生的总成绩和平均分,并将显示结果打到屏幕上。
1.源程序:

#include<stdio.h>
#include<stdlib.h>
typedef struct Student
{
    int num;
    char name[20];
    int Math;
    int Chinese;
    int English;
    float avnger;
}STU;
int main()
{
    int i=0;
    STU student[10];
    FILE *fp;
    fp=fopen("f3.txt","w+");
    for(i=0;i<10;i++)
    {
        fwrite(&student[i],sizeof(STU),1,fp);
        student[i].avnger=(student[i].Math+student[i].Chinese+student[i].English)/3.0;
    }
    printf("These student grades:");
    for(i=0;i<10;i++)
    {
        printf("%2d%6s%2f",student[i].num,student[i].name,student[i].avnger);
    }
    fclose(fp);
    return 0;
}  

2.调试例子:无
3.结果如图:无
/害,有bug看你们自己了我改半天没弄出来/
(4).比较俩个文本是否相等:比较俩个文本文件内容是否相等,并输出俩个文件中第一次不相同字符内容行号及列值。
1.源程序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 80
int Finddifferent(char *str1,char *str2)
{
    int i=0;
    for (i = 0; str1[i]!=NULL&& str2[i]!=NULL; i++)
    {
        if (str1[i]!=str2[i])
        {
            break;
        }
    }
    return i+1;
}
int main()
{
    FILE *fp1,*fp2;
    int n=1,f=0;
    char str1[N],str2[N];
    fp1=fopen("a.txt","r");
    fp2=fopen("b.txt","r");
    while (!feof(fp1)&&!feof(fp2))
    {
        fgets(str1,N,fp1);
        fgets(str2,N,fp2);
        if (strcmp(str1,str2))
        {
            printf("This %d row %d is diffderent\n",n,Finddifferent(str1,str2));
            f=1;
        }
        n++;
        fflush(fp1);
        fflush(fp2);
    }
    if(f==0)
    {
        printf("Both are simple");
    }
    fclose(fp1);
    fclose(fp2);
    return 0;
}

2.调试例子:
123456a654123b
13456a654123b
3.结果如图:
在这里插入图片描述
(5).字母转换并统计换行数:读取一个指定的文本文档,显示在屏幕上,如果有大写字母,则改成小写字母并输出,并根据输出统计换行数。
1.源程序:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 80
void change(char *ch)
{
    int i=0;
    for(i=0;i<strlen(ch);i++)
    {
        if(ch[i]<95)
            ch[i]=ch[i]+32;
    }
    printf("%s\n",ch);
}
int main()
{
    FILE *fp;
    char ch[N];
    long row=0;
    fp=fopen("a.txt","r");
    while(!feof(fp))
    {
        fgets(ch,N,fp);
        change(ch);
        row++;
    }
    printf("row:%ld\n",row);
    fclose(fp);
    return 0;
}

2.调试例子:
AbcDefj
HigklMn
3.结果如图:
在这里插入图片描述
3、改错题
将文件中的数据求和并写入文本文件尾:文件int data.dat中存放了若干整数,将文件中所有数相加,并把累加和写入文件的最后。
1.源程序:

#include <stdio.h>
int main(void)
{
    FILE *fp;
    int n,sum=0;
    if((fp=fopen("int_data.dat","a+"))==NULL)
    {
        printf("Cant Open File!");
        exit(0);
    }
    while(fscanf(fp,"%d",&n)!=EOF)
        sum=sum+n;
    fprintf(fp," %d",sum);
    fclose(fp);
    return 0;
}

2.调试例子:1 2 3 4 5 6
3.结果如图:
在这里插入图片描述
4、拓展编程题
输出含for的行:将文本文件test.txt中所有包含字符串for行输出。
1.源程序:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 80
void Findfor(char *ch)
{
    int i=0;
    for(i=0;i<strlen(ch);i++)
    {
        if(ch[i]=='f'&&ch[i+1]=='o'&&ch[i+2]=='r')
            printf("This row have for:\n%s\n",ch);
    }
}
int main()
{
    FILE *fp;
    char ch[N];
    fp=fopen("test.txt","r");
    while(!feof(fp))
    {
        fgets(ch,N,fp);
        Findfor(ch);
    }
    fclose(fp);
    return 0;
}

2.调试例子:
abcdforco
shduoas
bsadiasgfor
3.结果如图:
在这里插入图片描述
实验结果和心得就不写在上面啦,别老是偷懒自己也要做做哦,加油,我在未来等你!

  • 19
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值