c语言实验报告

  • 格式:pdf
  • 大小:151.73 KB
  • 文档页数:9

c语⾔实验报告

⼀、实验内容1. 调试教材例10.1 ⾄例10.6,仔细分析程序和运⾏结果,理解程序每⼀⾏代码。

2. 完成《C程序设计(第四版)学习辅导》实验12 ⽂件操作 (P267)。

⼆、实验⽬的

学习对⽂件的输⼊输出

三、实验过程与步骤

(1)使⽤Visual C++建⽴⼀个控制台⼯程

(2)在⼯程中建⽴源⽂件并编写程序

(3)编程后编译,若出现编译错误则应该检查错误并改正

(4)运⾏程序并观察结果并记录

四、程序分析

例10-1

从键盘输⼊⼀些字符,逐个把它们送到磁盘上去,直到⽤户输⼊⼀个“#”为⽌#include

#include

int main()

{FILE*fp;

char ch,filename[10];

printf("请输⼊所⽤的⽂件名:");

scanf("%s",filename);

if((fp=fopen(filename,"w"))==NULL) //打开输出⽂件并使fp指向此⽂件

{

printf("⽆法打开此⽂件\n"); //如果打开时出错,就输⼊“打不开”的信息

exit(0); //终⽌程序

}

ch=getchar(); //⽤来接收最后输⼊的回车符

printf("请输⼊⼀个准备存储到磁盘的字符串(以#结束):");

ch=getchar(); //接收从键盘输⼊的第⼀个字符

while(ch!='#') //当输⼊‘#’时结束循环

{fputc(ch,fp); //向磁盘⽂件输出⼀个字符

putchar(ch); //将输出的字符显⽰在屏幕上

ch=getchar(); //再接收从键盘输⼊的⼀个字符

}

fclose(fp);putchar(10); //关闭⽂件

return 0; //向屏幕输出⼀个换⾏符

}实验结果:

例10-2

将⼀个磁盘⽂件中的信息复制到另⼀个磁盘⽂件中。今要求将上例建⽴的file1.dat⽂件中的内容复制到另⼀个磁盘⽂件file2.dat中。#include

#include

int main()

{FILE*in, * out; //定义指向FILE类型⽂件的指针变量

char ch,infile[10],outfile[10]; //定义两个字符数组,分别存放两个数据⽂件名

printf("输⼊读⼊⽂件的名字:");

scanf("%s",infile); //输⼊⼀个输⼊⽂件的名字

printf("输⼊输出⽂件的名字:");

scanf("%s",outfile); //输⼊⼀个输出⽂件的名字

if((in=fopen(infile,"r"))==NULL) //打开输⼊⽂件

{printf("⽆法打开此⽂件\n");

exit(0);

}

if((out=fopen(outfile,"w"))==NULL) //打开输出⽂件

{printf("⽆法打开此⽂件\n");

}while(!feof(in)) //如果未遇到输⼊⽂件的结束标志

{ch=fgetc(in); //从输⼊⽂件读⼊⼀个字符,暂放在变量ch中fputc(ch,out); //将ch写到输出⽂件中

putchar(ch); //将ch显⽰在屏幕上

}

putchar(10); //显⽰完全部字符后换⾏

fclose(in); //关闭输⼊⽂件

fclose(out); //关闭输出⽂件

return 0;

}实验结果:

例10-5#include

int main()

{

FILE*fp1,*fp2;

fp1=fopen("file1.dat","r");

fp2=fopen("file2.dat","w");

while(!feof(fp1)) putchar(getc(fp1));

putchar(10);

while(!feof(fp1)) putc(getc(fp1),fp2);

fclose(fp1);fclose(fp2);

return 0;

}实验结果

例10-6#include

#include

struct stduent_type

{

char name[10];

int num;

int age;

char addr[15];

}stud[10];

int main()

{

int i;

FILE*fp;

if((fp=fopen("stu.dat","rb"))==NULL)

{

printf("can not open file\n");

exit(0);

}

for(i=0;i<10;i+=2)

{

fseek(fp,i*sizeof(struct stduent_ty pe),0);

fread(&stud[i],sizeof(struct stduent_type),1,fp);

printf("%-10%4d%4d%-15\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr); }

fclose(fp);

return 0;}实验12-2(1)源代码:#include

struct student

{char num[10];

char name[8];

int score[3];

float ave;

}stu[5];

int main()

{int i,j,sum;

FILE*fp;

for(i=0;i<5;i++)

{printf("\ninput score of student%d:\n",i+1);

printf("NO.:");

scanf("%s",stu[i].num);

printf("name:");

scanf("%s",stu[i].name);

sum=0;

for(j=0;j<3;j++)

{printf("score%d:",j+1);

scanf("%d",&stu[i].score[j]);

sum+=stu[i].score[j];

}

stu[i].ave=sum/3.0;

}

//将数据写⼊⽂件

fp=fopen("stud","w");

for(i=0;i<5;i++)

if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)

printf("file write error\n");

fp=fopen("stud","r");

for(i=0;i<5;i++)

{fread(&stu[i],sizeof(struct student),1,fp);

printf("\n%s,%s,%d,%d,%d,%6.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu [i].score[2],stu[i].ave);}

return 0;}

实验结果:input score of student1:

NO.:101

name:Li

score1:90

score2:89

score3:88

input score of student2:

NO.:120

name:Wang

score1:80

score2:79

score3:78

input score of student3:

NO.:130

name:Chen

score1:70

score2:69

score3:68

input score of student4:

NO.:140

name:Ma

score1:100

score2:99

score3:98

input score of student5:

NO.:150

name:Wei

score1:60

score2:59

101,Li,90,89,88, 89.00

120,Wang,80,79,78, 79.00

130,Chen,70,69,68, 69.00

140,Ma,100,99,98, 99.00150,Wei,60,59,58, 59.00

Press any key to continue

实验12-2(3)

实验⽬的:

将实验12- 2(3)已排序的学⽣成绩⽂件进⾏插⼊处理,插⼊⼀个学⽣的3门课成绩。程序先计算新插⼊学⽣的平均成绩,然后将它按成绩⾼低顺序插⼊,插⼊后建⽴⼀个新⽂件。要插⼊的学⽣数据:10108 Xin 90,95,60

实验内容:

输⼊待插⼊的学⽣的数据

计算其平均分

打开stu_sort⽂件

从该⽂件读⼊数据并显⽰出来

确定插⼊的位置t

向⽂件输出前⾯t个学⽣的数据并显⽰向⽂件输出待输⼊的学⽣数据并显⽰向⽂件输出t后⾯的学⽣数据并显⽰关闭⽂件

源代码:# include

# include

struct student

{

char num[10];

char name[8];

int score[3];

float ave;

}st[10],s;

int main()

{

FILE*fp, *fp1;

int i,j,t,n;

printf("\nNO.");

scanf("%s",s.num);

printf("name:");

scanf("%s",http://www.doczj.com/doc/63ea5a976c175f0e7cd137eb.html );

printf("score1,score2,score3:");

scanf("%d,%d,%d", &s.score[0], &s.score[1], &s.score[2]);

s.ave=(s.score[0]+s.score[1]+s.score[2])/3.0;

//从⽂件读数据