实验一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
    评论
好的,我可以为您提供一些MATLAB实验函数编写与程序设计的指导,以下是实验3的MATLAB程序设计题目: 题目:编写一个MATLAB程序,实现对一组数据的拟合和预测。数据集包括两列数据:自变量和因变量。要求程序能够实现以下功能: 1. 读取数据集并显示在MATLAB界面上; 2. 对数据集进行拟合,拟合函数为二次函数; 3. 在同一图像上,绘制原始数据集和拟合曲线; 4. 根据拟合曲线,预测自变量为10、20、30时的因变量; 5. 计算并输出预测值。 以下是一个可能的解决方案: ```matlab % 读取数据集 data = load('data.txt'); x = data(:, 1); y = data(:, 2); % 绘制原始数据集 figure; plot(x, y, 'o'); xlabel('自变量'); ylabel('因变量'); title('原始数据集'); % 对数据集进行拟合 p = polyfit(x, y, 2); a = p(1); b = p(2); c = p(3); fit_fn = @(x) a*x.^2 + b*x + c; % 绘制拟合曲线 hold on; plot(x, fit_fn(x), '-'); legend('原始数据集', '拟合曲线'); % 预测因变量 x_pred = [10, 20, 30]; y_pred = fit_fn(x_pred); disp(['自变量为10、20、30时的因变量分别为:', num2str(y_pred)]); % 输出预测值 fprintf('自变量为10时的因变量预测值为:%f\n', y_pred(1)); fprintf('自变量为20时的因变量预测值为:%f\n', y_pred(2)); fprintf('自变量为30时的因变量预测值为:%f\n', y_pred(3)); ``` 这个程序首先读取了一个名为“data.txt”的数据集,然后使用 `polyfit` 函数对数据集进行二次函数拟合。拟合后,使用 `plot` 函数将原始数据集和拟合曲线绘制在同一图像上,并使用 `legend` 函数添加图例。接下来,程序根据拟合曲线预测了自变量为10、20、30时的因变量,并使用 `disp` 函数输出了预测值。最后,程序使用 `fprintf` 函数分别输出了自变量为10、20、30时的因变量预测值。 注意,这个程序的数据集文件必须存在于当前目录下,且数据集必须是一个两列的文本文件,第一列是自变量,第二列是因变量。如果您的数据集不符合这个格式,需要根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值