项目七学生成绩单制作

上传人:lx****y 文档编号:252584328 上传时间:2024-11-18 格式:PPT 页数:23 大小:487.50KB
返回 下载 相关 举报
项目七学生成绩单制作_第1页
第1页 / 共23页
项目七学生成绩单制作_第2页
第2页 / 共23页
项目七学生成绩单制作_第3页
第3页 / 共23页
点击查看更多>>
资源描述
,*,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,在键盘中读入一个班学生的相关数据(学号,姓名,三门课的成绩),输出按照平均分数从高到低进行排序后的成绩单。,程序的运行要求是:(程序运行时为了方便,只输入五个学生记录),要完成学生成绩单的制作,虽然可以用前面的项目四中的数组解决,但是如果用结构体数组会显得更科学。所以在本项目中将用结构体数组进行操作。具体步骤是:首先进行学生信息的输入输出,第二是计算每个同学的三门课的平均分,第三是按平均分的高低排序后输出成绩单。所以将这一项目分成三个任务介绍:任务1是用结构体数组进行学生信息的输入输出;任务2是求平均分最高学生的学号、姓名;任务3是输出学生排序后的成绩单。,1,任务1 用结构体数组进行学生信息的输入输出,一、问题情景,一个班40个同学参加了数学、语文、英语考试,现要将这个班的40个同学的相关信息(包括学号,姓名,三门课的成绩)从键盘上输入,然后输出这40个同学的原始成绩单。,二、具体实现(,为了程序运行方便,所以假设只有5个同学,),#include stdio.h,#define N 5,struct stu,char id6;,char name10;,int m1,m2,m3;,float avg;,main(),stu studentN;,int i;,for(i=0;iN;i+),printf(请输入第%d个同学的记录:,i+1);,scanf(%s%s%d%d%d,studenti.id,printf(他们的成绩单为:n);,for(i=0;iN;i+),printf(%st%st%d,%d,%dn,studenti.id,studenti.name,studenti.m1,studenti.m2,studenti.m3);,1、一个学生的属性包括学号、姓名、几门课的成绩应该定义成的数据类型,即结构体;,2、结构体数组的输入与输出;,2,三、相关知识,(一)结构体类型,1.结构体类型的定义,如果有一个数据包含下列属性:,学号(id)、姓名(name)、性别(sex)、功课1(m1)、功课2(m1)、功课3(m1)、平均分(avg)。,在C中我们可以用结构体类型将这些不同类型的数据组合成一个有机的整体,以便引用。,学号,姓名,性别,功课1,功课2,功课3,平均分,id,name,sex,m1,m2,m3,avg,05,李小明,男,89,98,78,88.3,将不同类型的数据组合成一个有机的整体,定义一个结构体类型的一般形式为,struct 结构体名,成员列表;,struct stu,char id6;,char name10;,char sex4;,int m1,m2,m3;,float avg;,定义了一个叫stu的结构体类型,它包括id、name、sex、m1,m2,m3,avg等不同类型的数据项。,(1)结构体类型名为:struct stu,其中struct是定义结构体类型的关键字,它和系统提供的基本类型一样具有同样的地位和作用,都是可以用来定义变量的类型,stu叫结构体名。,(2)在 中定义的变量我们叫做成员,其定义方法和前面变量定义的方法一样。,3,(1)先声明结构体类型再定义结构体变量。,(1)先声明结构体类型再定义结构体变量。,格式:,struct 结构体名,成员表列;,struct 结构体名 变量名表列;,struct stu,char id6,name10;,int m1,m2,m3;,float avg;,main(),struct stu x,y;,struct stu,char id6,name10;,int m1,m2,m3;,float avg;,main(),stu x,y;,(2)在声明类型的同时定义变量,格式如下:,struct 结构体名,成员表列;,变量名表列;,main(),struct stu,char id6,name10;,int m1,m2,m3;,float avg;x,y;,main(),struct,char id6,name10;,int m1,m2,m3;,float avg;x,y;,4,(二)结构体变量的引用,结构体变量名.成员名,“.”是成员(又叫分量)运算符。它的优先级最高,例如:x.m1=78,scanf(“%s”,/输入一个字符串送给结构体成员x.id,printf(“%s”x.id);,scanf(“%s%s%d%d%d%d”,能整体读入结构体变量的值吗?,printf(%st%st%5d%5d%5dn,x);能整体输出结构体变量的值吗?,scanf(%s%s%d%d%d,x.id,x.name,printf(%st%st%5d%5d%5dn,x.id,x.name,x.m1,x.m2,x.m3);,【例7-1】在键盘上输入一个学生的信息(包含学号、姓名、三门课的成绩)并在显示器上输出。,#include stdio.h,main(),struct,char id6,name10;,int m1,m2,m3;,float avg;x;,printf(请输入学生的信息n);,scanf(%s%s%5d%5d%5d,x.id,x.name,printf(学生的信息为:n);,printf(%st%st%5d%5d%5dn,x.id,x.name,x.m1,x.m2,x.m3);,5,(三)结构体变量的初始化,和其他类型的变量一样,对结构体变量也可以初始化,大家要理解初始化的概念,即定义变量的同时给变量赋值叫初始化。,【例7-2】将例7-1的结构体变量进行初始化。,#include stdio.h,main(),struct,char id6,name10;,int m1,m2,m3;,float avg;x=00101,李小明,87,88,92;,printf(%st%st%5d%5d%5dn,x.id,x.name,x.m1,x.m2,x.m3);,输出结果为:,00101 李小明 87 88 92,6,(四)结构体数组,1.结构体数组的定义,(1)由于结构体数组的成员为结构体类型,所以在定义结构体数组之前必须先定义结构体类型。,struct stu,char id6,name10;,int m1,m2,m3;,float avg;,main(),struct stu x10,y;,struct stu,char id6,name10;,int m1,m2,m3;,float avg;,main(),stu x10,y;,(2)也可以直接定义结构体数组,main(),struct stu,char id6,name10;,int m1,m2,m3;,float avg;x10,y;,main(),struct,char id6,name10;,int m1,m2,m3;,float avg;x10,y;,7,2.结构体数组的初始化,(1)不给出数组长度,数组长度由初始化的数据决定。,stu=,;,例:,struct stu,char id6,name10;,int m1,m2,m3;,float avg;x=001,李小明,78,89,90,008,陈小东,85,81,67,016,王永民,89,78,90;,(2)直接给出值。,例:,struct stu,char id6,name10;,int m1,m2,m3;,float avg;x3=001,李小明,78,89,90,008,陈小东,85,81,67,016,王永民,89,78,90;,现在请同学们分析本任务中的具体实现,#include stdio.h,#define N 5,struct stu,char id6;,char name10;,int m1,m2,m3;,float avg;,main(),stu studentN;,int i;,for(i=0;iN;i+),printf(请输入第%d个同学的记录:,i+1);,scanf(%s%s%d%d%d,studenti.id,printf(他们的成绩单为:n);,for(i=0;iN;i+),printf(%st%st%d,%d,%dn,studenti.id,studenti.name,studenti.m1,studenti.m2,studenti.m3);,是定义一个结构体,其结构体名为stu,成员有id、name、m1、m2、m3、avg;,是定义一个结构体数组student,共有N个元素,student0studentN-1。,输入N个结构体数组元素,每个需要输入id、name、m1、m2、m3;,输出N个同学的id、name、m1、m2、m3,8,【例7-3】计算三个同学的总成绩、平均成绩。,分析:,(1)需要定义一个结构体,其成员有学号,姓名,三门课的成绩,总分,平均分;,(2)定义一个结构体数组,并赋初值;,(3)计算三个同学的总分及平均分;,(4)输出这三个同学的信息;,#include stdio.h,#define N 3,struct stu,char id6;,char name10;,int m1,m2,m3;,float avg,sum;,main(),stu studentN=001,李小明,78,89,90,008,陈小东,85,81,67,016,王永民,89,78,90;,int i;,for(i=0;iN;i+),studenti.sum=studenti.m1+studenti.m2+studenti.m3;,studenti.avg=studenti.sum/3.0;,printf(他们的成绩单为:n);,printf(学号t姓名t数学 英语 语文 总分 平均分n);,for(i=0;i成员名,例如:(*sp).id,(*sp).name,(*sp).avg 或 sp-id,sp-name,sp-avg,10,【例7-4】将例7-2的程序改为用结构体指针变量引用,#include stdio.h,main(),struct,char id6,name10;,int m1,m2,m3;,float avg;x=00101,李小明,87,88,92,*sp;,sp=,printf(%st%st%5d%5d%5dn,sp-id,sp-name,sp-m1,sp-m2,sp-m3);,printf(%st%st%5d%5d%5dn,(*sp).id,(*sp).name,(*sp).m1,(*sp).m2,(*sp).m3);,11,2.指向结构体数组的指针,前面介绍过指向数组和数组元素的指针,同理结构体数组及其元素也可以用指针来指向。,struct student,char id6;,char name10;,int m1,m2,m3;,float avg,sum;/定义结构体数组。,struct student*sp,stu110;/定义结构体类型指针。,sp=stu1;/将结构体数组首地址送给结构体指针。,当前sp指针指向数组首地址。,执行sp+后指针指向下一个数组单元;执行sp-后指针指向上一个数组单元。所以使用指针变量可以方便的在结构体数组中移动。,12,【例7-5】将例7-3改为用结构体指针变量引用。,#include stdio.h,#define N 3,struct stu,char id6;,char name10;,int m1,m2,m3;,float avg,sum;,main(),stu studentN=001,李小明,78,89,90,008,陈小东,85,81,67,016,王永民,89,78,90,*sp;,int i;,sp=student;,for(i=0;isum=sp-m1+sp-m2+sp-m3;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!