`
Jw.mac
  • 浏览: 11087 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

结构体,文件操作,指针,简单练习

    博客分类:
  • c
阅读更多
#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);

}

 

分享到:
评论

相关推荐

    C语言全套资料 C语言程序设计 C语言算法 C语言课件 C语言顺序程序设计,C语言数组,C语言循环控制,C语言预处理命令,C语言文件操作指针,C语言选择结构程序设计,C语言结构体与共用体,C语言文件操作,C语言函数

    8. **C语言文件操作**:C语言提供了标准I/O库来读写文件,学习者将学会如何打开、关闭文件,以及如何读取和写入数据。 9. **C语言指针**:指针是C语言的精髓,它们允许直接操作内存地址,提供高效的数据操作和复杂...

    通讯录管理系统:结构体,指针,函数

    通讯录管理系统是一个常见的编程练习,通常用于教学C++语言中的数据结构、指针操作以及函数的应用。在这个系统中,我们可以通过一系列操作管理个人联系人信息,包括添加、显示、删除、修改和清空联系人记录。以下是...

    C语言的指针使用与结构体的使用

    在"PointTest"这个压缩包文件中,可能包含了关于指针和结构体使用的练习题目或者测试案例,你可以通过解压并运行这些文件来加深理解和实践。记住,理论学习是基础,但实践才能真正巩固和提升你的技能。

    C语言课程 数组 指针 结构体

    文件操作也是C语言的重要部分,你可以学习如何打开、读取和写入文件,这在处理大量数据或保存程序状态时非常有用。 通过本课程的学习,你将掌握C语言的核心知识,这将为你进一步学习操作系统、数据结构、算法以及...

    深入理解C语言指针和结构体

    使用`&`运算符可以获取变量的地址,`*`运算符则是解引用操作,用于访问指针所指向的值。通过指针,我们可以实现间接访问和修改变量,这对于函数参数传递、动态内存管理以及数据结构如链表的实现都至关重要。 接下来...

    第9章--文件练习题答案-华中社《C语言程序设计上机指导与练习》.doc

    文件指针是指向文件结构体的指针变量,要通过文件指针访问一个文件,必须先定义这个文件指针,然后打开文件即可。例如:FILE *fp;fp=fopen("d:\\exam1.txt","r")就可以通过文件指针访问 d:\exam1.txt 文件。 在文件...

    实验9 结构体.rar

    本实验"实验9 结构体.rar"可能包含了一系列关于结构体的实践操作和练习,旨在帮助学习者深入理解和掌握结构体的使用。 结构体的基本语法: 在C/C++中,我们可以使用`struct`关键字来定义结构体。例如: ```c ...

    c语言结构体练习[借鉴].pdf

    在给定的文件中,我们看到了两个关于结构体的练习实例,一个是处理学生信息的排序,另一个是计算日期在一年中的位置。 首先,来看第一个实例,这个程序展示了如何定义和使用结构体来存储学生的详细信息。结构体类型...

    C语言实例 字符串和结构体

    在编程世界中,C语言是一种基础...这两个概念是C语言进阶学习的基础,也是进一步学习其他高级编程概念(如指针、文件操作等)的基石。因此,对于任何C语言的学习者来说,深入理解和实践字符串和结构体都是非常必要的。

    C语言经典上机练习10个文件------有一定难度

    学生需要理解如何定义和操作结构体和联合体,包括结构体数组、指向结构体的指针等。在上机练习中,可能会出现设计和使用自定义数据结构的题目。 预处理指令在C语言中也扮演着重要角色,如#define、include等。这些...

    C语言入门学习

    以下将详细介绍标题和描述中提到的几个关键概念:文件操作、指针理解和结构体的应用。 1. 文件操作: 在C语言中,文件操作是一项基本技能,它允许程序读取、写入或处理磁盘上的数据。文件操作主要包括打开文件...

    嵌入式Linux下C程序设计--09文件操作.ppt

    文件类型指针是一个结构体,包含文件号、缓冲区信息等,当打开文件时,系统会为文件分配一个这样的结构体,并返回指向它的指针。文件关闭时,相应的结构体会被释放。 文件操作主要包括打开、关闭、读写以及定位和...

    指针学习材料

    7. **指针与结构体**:结构体可以包含指针成员,使我们能指向和操作结构体内部的数据。这种能力在实现复杂数据结构如文件系统或图形库时尤为重要。 8. **指针安全与内存管理**:不当的指针使用可能导致内存泄漏或...

    C和指针课后题答案.pdf

    这些知识点涉及C语言的基础概念、数据类型、语句、操作符、表达式、指针、函数、数组、字符串、结构体和联合体、动态内存分配、预处理器、标准输入输出函数、标准库、抽象数据类型、运行时环境等。 首先,关于如何...

    C Primer Plus 编程练习答案

    这本书是初学者和有经验的程序员深入理解C语言的重要教材,其练习题涵盖了C语言的基础到高级概念,包括数据类型、运算符、控制结构、函数、数组、指针、结构体、文件操作等各个方面。 1. **数据类型**:C语言提供了...

    c指针课后题答案

    - 第十六章“标准库”可能会涉及C语言标准库的使用,包括文件操作、动态内存管理等。 - 第十七章“经典抽象数据类型”可能会讨论如何实现和使用栈、队列等数据结构。 - 第十八章“运行时环境”可能会涉及程序的...

    C语言练习题C语言练习题

    7. **文件操作**:学习如何打开、关闭文件,读写文件,以及文件指针的操作。 每个题目都可能是一个独立的小项目,涉及实际问题的解决,这将有助于学习者将理论知识转化为实际编程技能。解题时,不仅要看答案,更要...

    c和指针习题答案.pdf

    根据提供的文件信息,“c和指针习题答案.pdf”似乎是一本关于C语言与指针相关的练习题解答手册。从其目录来看,该书涵盖了从基础概念到高级主题的广泛内容,旨在帮助学习者深入理解C语言中的指针概念及其应用。 ###...

    全国计算机等级考试二级C语言指针测试题.pdf

    - 文件指针的定义及操作:使用`FILE *fp;`定义文件指针,并进行文件的打开、关闭、读写等操作。 8. 指针与输入输出: - 使用`scanf`、`printf`等函数进行输入输出时,指针作为参数传递。 9. 指针与变量的交换: ...

    第10章 文件

    - **文件指针**:文件指针是操作文件的关键,它是一个指向`FILE`结构体的指针,用于执行文件的打开、关闭、读写和定位等操作。 - 定义文件指针:`FILE *fp;` 这样的声明创建了一个指向`FILE`类型的指针变量`fp`。 ...

Global site tag (gtag.js) - Google Analytics