/我是咕咕,哈哈哈。今天也有好好学/
实验七、文件程序设计(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.结果如图:
实验结果和心得就不写在上面啦,别老是偷懒自己也要做做哦,加油,我在未来等你!