实验一B:文件程序设计

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;
}

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;
}

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;
}

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值