资源描述
实验7 文件
一、实验目的
1.熟悉文件和文件指针的概念以及文件指针的定义方法。
2.掌握文件打开和关闭的概念和方法。
3.掌握常用的关于文件操作库函数的使用。
二、实验内容步骤
(一)实验准备
C语言中处理文件的一般步骤为:
(1)包含stdio.h头文件:# include "stdio.h"
(2)定义FILE类型文件指针:FILE *fp;
(3)打开文件, 建立文件指针和文件的联系:
fp=fopen("文件名","打开方式");
(4)根据需要选择合适的文件读写函数对文件进行读写操作。
(5)关闭文件:fclose(fp);
(一)按要求设计以下程序,并调试分析运行结果 。(此部分完成在实验报告上)
1.给定程序sy7-1.c,函数fun的功能是求两个形参的乘积和商,其结果存入形参指针所指的地址中,函数 io实现数据的输入和输出。假设输入文件sy7-1.in有数据61.82和12.65,则两个数的乘积和商分别为782.02300和4.886957 。main函数调用函数 io 。
请改正程序中的错误,使程序能得出正确结果。注意:不得增行或删行,也不得更改程序结构。
源程序如下:
# include <stdio.h>
void fun(double a,b,*x,*y)
{ x=a*b; y=a/b; }
io()
{ int i;
double a,b,c,d;
file *rf,*wf;
rf=fopen("sy7-1.in","r");
wf=fopen("sy7-1.out","w");
fscanf(rf,"%lf%lf",&a,&b);
fun(a,b,c,d);
fprintf("c=%lf\nn=%lf\n",c,d);
printf("c=%lf\nn=%lf\n",c,d);
fclose(rf);
fclose(wf);
}
void main()
{ double a,b,c,d;
clrscr();
io();
}
修改后的:
# include <stdio.h>
void fun(double a,double b,double *x,double *y)
{ *x=a*b; *y=a/b; }
io()
{ int i;
double a,b,c,d;
FILE *rf,*wf;
rf=fopen("sy7-1.in","r");
wf=fopen("sy7-1.out","w");
fscanf(rf,"%lf%lf",&a,&b);
fun(a,b,&c,&d);
fprintf(wf,"c=%lf\nn=%lf\n",c,d);
printf("c=%lf\nn=%lf\n",c,d);
fclose(rf);
fclose(wf);
}
void main()
{ double a,b,c,d;
io();
}
2.请用函数调用方式编写程序sy7-2.c,要求能实现:
(1)在被调函数中求出1到1000之内能被7或11整除、但不能被7或11同时整除的所有整数,并把它们放到数组a中。
(2)在主函数中将符合上述条件的整数个数和所有整数输出到屏幕以及文件sy7-2.dat中。(要求每行输出10个数)
# include<stdio.h>
int fun(int a[])
{
int i,j=0;
for(i=1;i<=1000;i++)
{ if(i%7==0&&i%11==0)
continue;
if(i%7==0||i%11==0)
a[j++]=i;
}
return j;
}
void main()
{
int n,a[1000],i;
FILE *fp;
fp=fopen("sy7-2.dat","w");
n=fun(a);
printf("共找到符合条件的整数个数:%d\n",n);
fprintf(fp,"共找到符合条件的整数个数:%d\n",n);
for(i=0;i<n;i++)
{
if(i%10==0)
printf("\n");
printf("%5d",a[i]);
fprintf(fp,"%5d",a[i]);
}
printf("\n");
}
3.磁盘上有一数据文件sy7-3.dat,编写程序sy7-3.c实现:在主函数中将sy7-3.dat中的数据输入到一个3行4列的整型数组a中,调用函数covert 对a进行转置运算,并将结果存放在另一个二维数组b中,最后在主函数中输出结果。
#include <stdio.h>
#include <ctype.h>
int main()
{
char buffer[256], *p = buffer;
FILE* fp;
fgets(buffer, 256, stdin);
fp = fopen("sy7-5.dat", "w");
while(*p) {
if(isdigit(*p)) {
fputc(*p, fp);
putchar(*p);
if(!isdigit(*(p+1))) {
fputc('\n', fp);
putchar('\n');
}
}
++p;
}
fclose(fp);
return 0;
}
4.已知磁盘上有的sy7-4.txt文件中含有一个长度不超过80个字符的字符串,用函数调用方式编写程序sy7-4.c。要求实现:
(1) 在被调函数exchange中,将该字符串中偶数位置(从左起第1个字符为0位,视为偶数位置)上的小写字母转换成大写字母,奇数位置上的大写字母转换成小写字母。不是英文字母的字符则不转换。例如:字符串student 123 HELLO!转换后为StUdEnT 123 HeLlO!
(2) 在主函数中,完成字符串的读入,同时将转换后的字符串输出到屏幕。
# include <stdio.h>
void exchange(char a[80])
{
int i;
for(i=0;a[i]!='\0';i++)
{ if(i%2!=0&&a[i]>=65&&a[i]<=90) a[i]=a[i]+32;
if(i%2==0&&a[i]>='a'&&a[i]<='z') a[i]=a[i]-32;
}
}
void main()
{
FILE *fp;
char a[80],i;
fp=fopen("sy7-4.txt","r");
if(fp==NULL )
{ printf("cannot open infile\n");
exit(0);
}
fgets(a,80,fp);
printf("原字符串是:%s\n",a);
exchange(a);
printf("处理后的字符串是:%s\n",a);
}
5.用指针编写程序sy7-5.c实现:将用户输入的由数字字符和非数字字符组成的字符串(字符个数不超过256个)中的数字提取出来,例如:输入“asd123rt456,lg789”,则提取的数字分别是123、456和789。将结果显示在屏幕上,同时输出到文件sy7-5.dat中(要求每个数字一行)。
#include <stdio.h>
#include <ctype.h>
int main()
{
char buffer[256], *p = buffer;
FILE* fp;
fgets(buffer, 256, stdin);
fp = fopen("sy7-5.dat", "w");
while(*p)
{
if(isdigit(*p))
{
fputc(*p, fp);
putchar(*p);
if(!isdigit(*(p+1)))
{
fputc('\n', fp);
putchar('\n');
}
}
++p;
}
fclose(fp);
return 0;
}
三、实验报告填写要求
1. 写清楚实验课程、实验项目(即实验名称)、实验日期以及班级、学号、姓名等;
2. 每个实验题目后必须写出调试结果并加以分析,实验报告最后必须写出实验结论(可是通过本次实验掌握的知识或是还有什么遗留问题)。
展开阅读全文