A. 统计素数 一批整数保存在文本文件in.txt中,统计出的所有整数中素数的个数并保存在out.txt文件中。
#include <stdio.h>
#include <math.h>
#define error -1
#define right 1
#define N 10
int judge(int num)// 判断素数
{
if( num <= 1 )
return error;
else
{
for(int i = 2 ; i <= sqrt(num) ; i++)
{
if( num % i == 0)
return right;
}
return error;
}
}
int main()
{
FILE *fp1, *fp2;
// 打开文件,找到文件的地址对其进行读的操作
fp1 = fopen("E:\\C语言的软件\\实验报告文件\\1\\in.txt", "r");
// 打开文件,找到文件的地址对其进行写的操作
fp2 = fopen("E:\\C语言的软件\\实验报告文件\\1\\out.txt", "w");
// 检查文件是否打开有误
if (fp1 == NULL)
{
printf("File_in open error!\n");
return error;
}
else
printf("File_in open right!\n");
if (fp2 == NULL)
{
printf("File_out open error!\n");
return error;
}
else
printf("File_out open right!\n");
int num;
int i = 0;
int count = 0;
while( !feof(fp1) )
{
fscanf(fp1,"%d",&num);
if( judge(num == right )
count++;
}
fprintf(fp2,"%d",count);
if( fclose(fp1) !=NULL )// 判断是否正常关闭
{
printf("Can not close the file_in!\n");
return error;
}
else
printf("Can close the file_in!\n");
if( fclose(fp2) !=NULL )// 判断是否正常关闭
{
printf("Can not close the file_out!\n");
return error;
}
else
printf("Can close the file_out!\n");
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/3daadfd0bd818d07b271e478f71a8110.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9437a364995a2a54fb0687788f7f197e.png)
B. 求平均值 一批学生数据(包括学号、姓名、3门课成绩)存储在stud.dat文件中,编程实现计算出总的平均成绩并保存在average.dat文件中。
#include <stdio.h>
#include <stdlib.h>
#define N 5
typedef struct student
{
char num[10];
char name[20];
int score[3];
}STUDENT;
int main()
{
FILE *fp1, *fp2;
// 打开文件,找到文件的地址对其进行写的操作
fp1 = fopen("E:\\C语言的软件\\实验报告文件\\2\\stud.dat", "rb");
fp2 = fopen("E:\\C语言的软件\\实验报告文件\\2\\average.dat", "wb");
STUDENT stu[N];// 定义结构体
/*将文本从stud.dat读出,把计算出总的平均成绩并保存在average.dat文件中*/
int number;// 学生个数
fscanf(fp1,"%d",&number);
double ave[N];// 存放每个学生的平均成绩
for(int i=0 ; i < N ; i++)
{
fscanf(fp1,"%s",stu[i].num);
fgetc(fp1);// 吸收空格
fscanf(fp1,"%s",stu[i].name);
fgetc(fp1);// 吸收空格
fscanf(fp1,"%d",&stu[i].score[0]);
fscanf(fp1,"%d",&stu[i].score[1]);
fscanf(fp1,"%d",&stu[i].score[2]);
ave[i] = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2])*1.0/3;// 计算平均分
}
double average = 0;// 算总的平均成绩
for(int i=0 ; i < N ; i++)
{
average += ave[i]/N;
}
fprintf(fp2,"%.2f",average);
fclose(fp1);// 关闭文件
fclose(fp2);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/8fb3ee3a4ff083187df069e69263adab.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7f405922e93d2155655b6b4d3940423d.png)
C. 统计得分率,有一个二进制数据文件zy.dat,内容为一批学生期末考试4道题的得分情况(姓名,成绩1,成绩2,成绩3,成绩4),统计本次考试中每道题(1~4)的得分率并保存到二进制文件result.dat(数据之间用空格隔开)。
#include <stdio.h>
#include <stdlib.h>
#define max_score 25
typedef struct test
{
char name[20];
int score[4];
}TEST;
int main()
{
FILE *fp1, *fp2;
fp1 = fopen("E:\\C语言的软件\\实验报告文件\\3\\zy.dat", "rb");
fp2 = fopen("E:\\C语言的软件\\实验报告文件\\3\\result.dat", "wb");
TEST stu;
double sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0;
int flag = 0;
// 从文件读入每道题的得分数据
while( fscanf(fp1,"%s%d %d %d %d",stu.name,&stu.score[0],&stu.score[1],&stu.score[2],&stu.score[3])!=EOF )
{
sum1 += stu.score[0];
sum2 += stu.score[1];
sum3 += stu.score[2];
sum4 += stu.score[3];
flag++;// 标记有几个同学
}
// 计算每道题的得分率
sum1 /= (flag*max_score);
sum2 /= (flag*max_score);
sum3 /= (flag*max_score);
sum4 /= (flag*max_score);
fprintf(fp2,"%.3f %.3f %.3f %.3f",sum1,sum2,sum3,sum4);
fclose(fp1);// 关闭文件
fclose(fp2);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/f3b3114248d9b762bb18ebbf0ef74a1f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1d44dac71d01a03217304181586cebad.png)