热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实验七文件(实验终章)

实验七文件(Lastone)p.s最后一个实验居然是最坎坷的一个实验,怎么说呢,用的MacOS,一直在担心文件操作不能做,刚做的时候不断报错,上网查了半天,打开了路径开关,变成fa

实验七 文件(Last one)

p.s最后一个实验居然是最坎坷的一个实验,怎么说呢,用的MacOS,一直在担心文件操作不能做,刚做的时候不断报错,上网查了半天,打开了路径开关,变成fail to find。心如死灰,选择到机房在Windows系统下做实验,结果结果,不知道是不习惯系统还是操作的问题,还是不行。好吧好吧,在问了一个互联网行业的哥哥之后,选择了绝对路径来打开文件。终于成功读写。但是(关键性的转折),文件读是正常的,文件写总是乱码,最后还是在老师面前调试,解决了问题。实验报告虽迟但到。

p.p.s.终于终于,是最后一个实验了。怎么说呢,其实现在心里有点空空的。开始学习c语言之前听说不简单,给自己打了鸡血说要好好学习。看过很多数模竞赛的经验帖,都说事实上学会了一门语言之后,剩下的只是类比。我一直不相信在一个学期的学习之后就能完全掌握一门语言,但是,我总是希望自己能够学一点框架,至少学会一点计算机语言。无论会不会考试,至少会用这门语言写一点小东西。所以,七篇实验,还有很多心血来潮想到的小程序,每一个都在好好对待。所以现在在敲下实验终章的时候,有点感慨,不用再在周四恐慌这周的实验还没有打开,不用再被实验运行结果不对而抓破脑袋,我所期待了一个学期的实验终章,真正到来的时候却是有点不舍。今天是圣诞节,那就许愿今天能写完实验,期末考试能合自己心意。好了,啰哩啰嗦一大堆,实验终章,开机。

一.实验任务一

(验证性实验略)

二、实验任务二

(验证性实验略)

三、实验任务三

基于运行观察,回答问题:

1.运行程序,观察在屏幕上是否正确输出了按分数从高到低的排序信息?同时,在当前路径下,是否生成了文本文件file3.dat?

正确输出了按分数从高到低的排序信息。在当前路径下生成了文本文件file.dat;

2.尝试用记事本程序打开文件file3.dat观察里面的数据信息是否是正确的,并且是直观可读的?

是不正确的(数据正确,但是不知道是不是macOS的问题,名字乱码)和不直观可读的,名字乱码。

四、实验任务四

1.task1

回答子任务1中的问题:

运行程序,观察屏幕上是否正确输出了按分数由高到低排序的学生信息?同时,在当前路径下,是否生成了二进制文件file4.dat?尝试用记事本程序打开文件file.dat,观察里面的数据信息是否直观可读?

正确输出了分数由高到低的学生信息,同时在当前路径下,生成了二进制文件file4.dat。不直观可读,名字是乱码。

2.task2

(程序源代码)


// main.c
// task4.2
//
// Created by zky on 2020/12/24.
// 从文本数据文件file1.dat中读入数据,按成绩从高到低排序,并将排序结果输出到屏幕上,同时,也以二进制的方式存入文件file4.dat中
#include
#include

#define N 10
// 定义一个结构体类型STU
typedef struct student {
int num;
char name[20];
int score;
}STU;
int main() {
FILE
*fin;
STU st[N];
int i;

// 以只读文本方式打开文件file4.dat
fin = fopen("/Users/zky/Desktop/C/实验七/task4/file4.dat", "r");
if( !fin ) { // 如果打开失败,则输出错误提示信息然后退出程序
printf("fail to open file4.dat\n");
exit(
0);
}

//从fin指向的数据文件file1.dat中读取数据到结构体数组st
for(i=0; i)
fscanf(fin, "%d %s %d", &st[i].num, st[i].name, &st[i].score);

fclose(fin);
// 关闭fin指向的文件file4.dat


// 将排序后的数组st中数据输出到屏幕
for(i=0; i)
printf("%-6d%-10s%3d\n", st[i].num, st[i].name, st[i].score);


return 0;
}

(运行结果截图)

哭了哭了,所谓的乱码,暂时我实在没有办法解决了,该想的办法我都想过。等我找到办法我回来补上。

 技术图片

技术图片

五、实验任务五

(补足后的完整程序源码)


#include
#include
<string.h>
const int N = 10;
//定义结构体类型struct student,并定义其别名为STU
typedef struct student {
long int id;
char name[20];
float objective; /*客观题得分*/
float subjective; /*操作题得分*/
float sum;
char level[10];
}STU;
// 函数声明
void input(STU s[], int n);
void output(STU s[], int n);
void process(STU s[], int n);
int main() {
STU stu[N];

printf(
"录入%d个考生信息:准考证号,姓名,客观题得分(<=40),操作题得分(<=60)\n", N);
input(stu, N);

printf(
"\n对考生信息进行处理:计算总分,确定等级\n");
process(stu, N);

printf(
"\n打印考生完整信息:准考证号,姓名,客观题得分,操作题得分,总分,等级\n");
output(stu, N);

return 0;
}
// 从文本文件examinee.txt读入考生信息:准考证号,姓名,客观题得分,操作题得分
void input(STU s[], int n) {
FILE
*fin;
int i;
fin
=fopen("/Users/zky/Desktop/C/实验七/task5/examinee.txt", "r");
if (!fin) {
printf(
"fail to open examinee.txt\n");
}
for (i=0; i) {
fscanf(fin, "%ld %s %f %f",&s[i].id,s[i].name,&s[i].objective,&s[i].subjective);
}
fclose(fin);
}
//  输出考生完整信息:准考证号,姓名,客观题得分,操作题得分,总分,等级
// 不仅输出到屏幕上,还写到文本上result.txt中
void output(STU s[], int n) {
FILE
*fout;
int i;
fout
=fopen("/Users/zky/Desktop/C/实验七/task5/result.txt", "w");
if (!fout) {
printf(
"fail to open result.txt\n");
}
for (i=0; i) {
printf("%-6ld%-10s%3.2f%3.2f%3.2f%10s\n",s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].level);
}
fwrite(s,
sizeof(STU), n, fout);
}
//对考生信息进行处理:计算总分,排序,确定等级
void process(STU s[], int n) {
int i,j;
int max=0;
char level1[20]="优秀";
char level2[20]="合格";
char level3[20]="不合格";
STU temp;
for (i=0; i) {
s[i].sum=s[i].objective+s[i].subjective;
}
for(j=0;j){
max=j;
for (i=j; i) {
if (s[i].sum>s[max].sum) {
max
=i;
}
}
temp
=s[j];
s[j]
=s[max];
s[max]
=temp;
}
for (i=0; i) {
if (i+1<=0.1*n) {
strcpy(s[i].level, level1);
}
else if (i+1<=0.5*n){
strcpy(s[i].level, level2);
}
else{
strcpy(s[i].level, level3);
}
}
}

(运行结果截图)

技术图片

六、实验总结

1.本次实验中踩的坑

天呐,这不就是我在开头写的?重复一下,重复我的悲伤:最后一个实验居然是最坎坷的一个实验,怎么说呢,用的MacOS,一直在担心文件操作不能做,刚做的时候不断报错,上网查了半天,打开了路径开关,变成fail to find。心如死灰,选择到机房在Windows系统下做实验,结果结果,不知道是不习惯系统还是操作的问题,还是不行。好吧好吧,在问了一个互联网行业的哥哥之后,选择了绝对路径来打开文件。终于成功读写。但是(关键性的转折),文件读是正常的,文件写总是乱码,最后还是在老师面前调试,解决了问题。实验报告虽迟但到。

2.理解和思考

思考了选做实验,尝试了一下没有结果,因为时间的关系期末考前没有很多时间去抠它,但是,寒假的时候我会把它写出来的。I promise.

实验七 文件(实验终章)



推荐阅读
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
author-avatar
私受他
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有