#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> #define SCORES 5 #define S 3 typedef struct { int num; char *name; char sex[2]; float score[SCORES]; float total; } STU; //输入n个学生的信息 void initInfo(STU * st,int n); //保存n个学生文件 void saveAsFile(STU * st,int n); //根据4门功课分数排序 void sortByScore(STU * st,int n); //读取文件 void readFile(STU * st,int n); int main(){ STU ps[S]; initInfo(ps,S); sortByScore(ps,S); saveAsFile(ps,S); readFile(ps,S); //释放name //int i; //for(i=0;i<S;i++) // free((ps+i)->name); return 0; } void initInfo(STU * p,int n){ int i,j; for(i=0;i<n;i++){ char tmp[10]; int len; printf("\n---- 请输入第%d个学生的信息-------",i+1); printf("\n请输入编号:"); if((scanf("%d",&((p+i)->num)))!=1) return; printf("\n请输入姓名:"); if(scanf("%s",tmp)==1){ len=strlen(tmp); (p+i)->name=(char *)malloc(len+1); strcpy((p+i)->name,tmp); }else{ return; } printf("\n请输入性别:"); if(scanf("%s",(p+i)->sex)!=1) { free((p+i)->name);//函数return终止释放name return; } printf("\n请输入5门功课分数:\n"); //memset((p+i)->score,0,sizeof(int)*SCORES); for(j=0;j<SCORES;j++){ if(scanf("%f",(p+i)->score+j)!=1){ break; }else{ (p+i)->total+=(p+i)->score[j]; } } //对于未输入的赋值0 for(;j<SCORES;j++) (p+i)->score[j]=0; //释放name //free((p+i)->name); } } //根据学生分数排序 void sortByScore(STU * pst, int n){ int i,j; STU st; for(i=0;i<n;i++){ for(j=0;j<n-i-1;j++){ if((pst+j)->total>(pst+j+1)->total){ st=*(pst+j); *(pst+j)=*(pst+j+1); *(pst+j+1)=st; } } } } //保存n个学生的信息至students文件 void saveAsFile(STU * pst,int n){ FILE *f; int i; if((f=fopen("students","wb"))==NULL){ printf("cannt opent file."); exit(0); } printf("-----------开始写入文件-----------------\n"); for(i=0;i<n;i++) if(fwrite(pst+i,sizeof(STU),1,f)!=1) printf("file write error"); printf("-----------写入文件成功-----------------\n"); fclose(f); } //从students文件读取信息并打印 void readFile(STU * pst,int n){ int i,j; FILE *f; if((f=fopen("students","rb"))==NULL){ printf("cannt opent file."); exit(0); } printf("-----------开始读取文件-----------------\n"); for(i=0;i<n;i++){ fread(pst+i,sizeof(STU),1,f); printf("%4d %5s %2s",(pst+i)->num,(pst+i)->name,(pst+i)->sex); for(j=0;j<SCORES;j++) printf(" %3.1f ",(pst+i)->score[j]); printf(" %4.1f ",(pst+i)->total); printf("\n"); } printf("-----------读取文件结束-----------------\n"); fclose(f); }
相关推荐
8. **C语言文件操作**:C语言提供了标准I/O库来读写文件,学习者将学会如何打开、关闭文件,以及如何读取和写入数据。 9. **C语言指针**:指针是C语言的精髓,它们允许直接操作内存地址,提供高效的数据操作和复杂...
通讯录管理系统是一个常见的编程练习,通常用于教学C++语言中的数据结构、指针操作以及函数的应用。在这个系统中,我们可以通过一系列操作管理个人联系人信息,包括添加、显示、删除、修改和清空联系人记录。以下是...
在"PointTest"这个压缩包文件中,可能包含了关于指针和结构体使用的练习题目或者测试案例,你可以通过解压并运行这些文件来加深理解和实践。记住,理论学习是基础,但实践才能真正巩固和提升你的技能。
文件操作也是C语言的重要部分,你可以学习如何打开、读取和写入文件,这在处理大量数据或保存程序状态时非常有用。 通过本课程的学习,你将掌握C语言的核心知识,这将为你进一步学习操作系统、数据结构、算法以及...
使用`&`运算符可以获取变量的地址,`*`运算符则是解引用操作,用于访问指针所指向的值。通过指针,我们可以实现间接访问和修改变量,这对于函数参数传递、动态内存管理以及数据结构如链表的实现都至关重要。 接下来...
文件指针是指向文件结构体的指针变量,要通过文件指针访问一个文件,必须先定义这个文件指针,然后打开文件即可。例如:FILE *fp;fp=fopen("d:\\exam1.txt","r")就可以通过文件指针访问 d:\exam1.txt 文件。 在文件...
本实验"实验9 结构体.rar"可能包含了一系列关于结构体的实践操作和练习,旨在帮助学习者深入理解和掌握结构体的使用。 结构体的基本语法: 在C/C++中,我们可以使用`struct`关键字来定义结构体。例如: ```c ...
在给定的文件中,我们看到了两个关于结构体的练习实例,一个是处理学生信息的排序,另一个是计算日期在一年中的位置。 首先,来看第一个实例,这个程序展示了如何定义和使用结构体来存储学生的详细信息。结构体类型...
在编程世界中,C语言是一种基础...这两个概念是C语言进阶学习的基础,也是进一步学习其他高级编程概念(如指针、文件操作等)的基石。因此,对于任何C语言的学习者来说,深入理解和实践字符串和结构体都是非常必要的。
学生需要理解如何定义和操作结构体和联合体,包括结构体数组、指向结构体的指针等。在上机练习中,可能会出现设计和使用自定义数据结构的题目。 预处理指令在C语言中也扮演着重要角色,如#define、include等。这些...
以下将详细介绍标题和描述中提到的几个关键概念:文件操作、指针理解和结构体的应用。 1. 文件操作: 在C语言中,文件操作是一项基本技能,它允许程序读取、写入或处理磁盘上的数据。文件操作主要包括打开文件...
文件类型指针是一个结构体,包含文件号、缓冲区信息等,当打开文件时,系统会为文件分配一个这样的结构体,并返回指向它的指针。文件关闭时,相应的结构体会被释放。 文件操作主要包括打开、关闭、读写以及定位和...
7. **指针与结构体**:结构体可以包含指针成员,使我们能指向和操作结构体内部的数据。这种能力在实现复杂数据结构如文件系统或图形库时尤为重要。 8. **指针安全与内存管理**:不当的指针使用可能导致内存泄漏或...
这些知识点涉及C语言的基础概念、数据类型、语句、操作符、表达式、指针、函数、数组、字符串、结构体和联合体、动态内存分配、预处理器、标准输入输出函数、标准库、抽象数据类型、运行时环境等。 首先,关于如何...
这本书是初学者和有经验的程序员深入理解C语言的重要教材,其练习题涵盖了C语言的基础到高级概念,包括数据类型、运算符、控制结构、函数、数组、指针、结构体、文件操作等各个方面。 1. **数据类型**:C语言提供了...
- 第十六章“标准库”可能会涉及C语言标准库的使用,包括文件操作、动态内存管理等。 - 第十七章“经典抽象数据类型”可能会讨论如何实现和使用栈、队列等数据结构。 - 第十八章“运行时环境”可能会涉及程序的...
7. **文件操作**:学习如何打开、关闭文件,读写文件,以及文件指针的操作。 每个题目都可能是一个独立的小项目,涉及实际问题的解决,这将有助于学习者将理论知识转化为实际编程技能。解题时,不仅要看答案,更要...
根据提供的文件信息,“c和指针习题答案.pdf”似乎是一本关于C语言与指针相关的练习题解答手册。从其目录来看,该书涵盖了从基础概念到高级主题的广泛内容,旨在帮助学习者深入理解C语言中的指针概念及其应用。 ###...
- 文件指针的定义及操作:使用`FILE *fp;`定义文件指针,并进行文件的打开、关闭、读写等操作。 8. 指针与输入输出: - 使用`scanf`、`printf`等函数进行输入输出时,指针作为参数传递。 9. 指针与变量的交换: ...
- **文件指针**:文件指针是操作文件的关键,它是一个指向`FILE`结构体的指针,用于执行文件的打开、关闭、读写和定位等操作。 - 定义文件指针:`FILE *fp;` 这样的声明创建了一个指向`FILE`类型的指针变量`fp`。 ...