题目要求:
有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)。
解题思路:
将n个学生的数据表示为结构体数组。按照功能函数化的思想,分别用3个函数来实现不同的功能:

/* Note:Your choice is C IDE */
#include "stdio.h"
void average(struct Student *p,int n);
void max(struct Student *p,int n);
void pus(struct Student *p);
struct Student{long int num;char name[15];float score[3];//存放三门课程的成绩float aver;//三门课程的平均成绩};
int main()
{int n=3;struct Student stu[]={//平均成绩先设为0,最后在赋值求值{2019022,"Lucy",{79.5,81.5,69},0},{2019011,"Killy",{86.5,93.5,96},0},{2019088,"Noddy",{94.5,96.5,70.3},0}};struct Student *p=stu;average(p,n);max(p,n);pus(p);return 0;
}
void average(struct Student *p,int n)//定义一个求平均值的函数
{int i,j;for(i=0;i<n;i++){float sum=0;for(j=0;j<3;j++){sum+=(*(p+i)).score[j];//求出三门成绩的总和//sum+=p[i].score[j];//sum+=(p+i)->score[j];}(*(p+i)).aver=sum/3;//p[i].aver=sum/3;//(p+i)->aver=sum/3;}
}
void max(struct Student *p,int n)//定义一个求最大值的函数
{int i;for(i=1;i<n;i++)if(p[i].aver>p[0].aver)p[0]=p[i];//此时p【0】的地址就会缺失,所以不妥
}
void pus(struct Student *p)//定义一个输出的函数
{printf("学号:%6ld\n姓名: %8s\n",p[0].num,p[0].name);printf("三门课的成绩:%6.1f %6.1f %6.1f\n",p[0].score[0],p[0].score[1],p[0].score[2]);printf("平均成绩:%6.2f\n",p[0].aver);
}结果显示:
学号:2019011
姓名:    Killy
三门课的成绩:  86.5   93.5   96.0
平均成绩: 92.00

对于上面的代码,看一下需要注意的地方
这时是for循环中的 条件发生了改变
指针带下表是需要条件的
条件就是指针指向数组的指针不发生变化
指向的首地址不变
但是下面的代码中p指向的首地址发生了改变,所以就不能用指针带下标的方法了

void average1(struct Student *p,int n)
{int i;for(i=0;i<n;i++,p++){int sum=0;for(j=0;j<3;j++){sum+=(*p).score[j]; //sum+=p[i].score[j] 错误 //sum+=p->socre[j];  正确  } (*p).ave=sum/3;//p[i].ave=sum/3 错误 //p->ave=sum/3;}
}
方法二
#include <stdio.h>
#define N 3
void input(struct Student stu[]);
struct Student max(struct Student stu[]);
void print(struct Student stud);
struct Student
{  int num;   char name[20];    float score[3];   float aver;
};
int main()
{struct Student stu[N],*p=stu;input(p);  print(max(p));   return 0;
}
void input(struct Student stu[])
{ int i=0;for(i=0;i<N;i++){printf("请输入第%d个学生的信息:学号、姓名、三门课成绩:\n",i+1);scanf("%d %s %f %f %f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);  stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;   }
}
struct Student max(struct Student stu[])
//struct Student max( )是一个函数,函数名叫max,返回值类型是struct Student型数据
//实参struct Student stu[]是一个struct Student型地址,形参名stu
{int i,m=0;   for(i=0;i<N;i++)if (stu[i].aver>stu[m].aver) m=i;     return stu[m];
}
void print(struct Student stud)
{ printf("\n成绩最高的学生是:\n");printf("学号:%d\n姓名:%s\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%6.2f\n",stud.num,stud.name,stud.score[0],stud.score[1],stud.score[2],stud.aver);}结果显示:
请输入第1个学生的信息:学号、姓名、三门课成绩:
2019 dwj 33 66 99
请输入第2个学生的信息:学号、姓名、三门课成绩:
2910 dkg 69 96 99
请输入第3个学生的信息:学号、姓名、三门课成绩:
9210 dcm 99 96 93
成绩最高的学生是:
学号:9210
姓名:dcm
三门课成绩: 99.0, 96.0, 93.0
平均成绩: 96.00
方法三
/* Note:Your choice is C IDE */
#include "stdio.h"
void average(struct Student stu[],int n);
struct Student maxs(struct Student stu[],int n,struct Student max);
void pus(struct Student max);
struct Student{long int num;char name[15];float score[3];//存放三门课程的成绩float aver;//三门课程的平均成绩};
int main()
{int n=3;struct Student stu[]={//平均成绩先设为0,最后在赋值求值{2019022,"Lucy",{79.5,81.5,69},0},{2019011,"Killy",{86.5,93.5,96},0},{2019088,"Noddy",{94.5,96.5,70.3},0}};struct Student *p=stu;struct Student max=stu[0];average(p,n);pus(maxs(p,n,max));return 0;
}
void average(struct Student stu[],int n)//定义一个求平均值的函数
{int i,j;for(i=0;i<n;i++){float sum=0;for(j=0;j<3;j++){sum+=stu[i].score[j];//求出三门成绩的总和}stu[i].aver=sum/3;}
}
struct Student maxs(struct Student stu[],int n,struct Student max)
{int i; for(i=1;i<n;i++)if(stu[i].aver>max.aver)max=stu[i];return max;
}
void pus(struct Student max)
{printf("学号:%6ld\n姓名: %8s\n",max.num,max.name);printf("三门课的成绩:%6.1f %6.1f %6.1f\n",max.score[0],max.score[1],max.score[2]);printf("平均成绩:%6.2f\n",max.aver);
}输出显示;
学号:2019011
姓名:    Killy
三门课的成绩:  86.5   93.5   96.0
平均成绩: 92.00
方法四:返回下标进行引用
/* Note:Your choice is C IDE */
#include "stdio.h"
void average(struct Student *p,int n);
int max(struct Student *p,int n);
void pus(struct Student *p,int t);
struct Student{long int num;char name[15];float score[3];//存放三门课程的成绩float aver;//三门课程的平均成绩};
int main()
{int n=3;struct Student stu[]={//平均成绩先设为0,最后在赋值求值{2019022,"Lucy",{79.5,81.5,69},0},{2019011,"Killy",{86.5,93.5,96},0},{2019088,"Noddy",{94.5,96.5,70.3},0}};struct Student *p=stu;average(p,n);pus(p,max(p,n));return 0;
}
void average(struct Student *p,int n)//定义一个求平均值的函数
{int i,j;for(i=0;i<n;i++){float sum=0;for(j=0;j<3;j++){sum+=(*(p+i)).score[j];//求出三门成绩的总和//sum+=p[i].score[j];//sum+=(p+i)->score[j];}(*(p+i)).aver=sum/3;//p[i].aver=sum/3;//(p+i)->aver=sum/3;}
}
int max(struct Student *p,int n)//定义一个求最大值的函数
{int i,t=0;for(i=0;i<n-1;i++)if(p[i+1].aver>p[i].aver)t=i+1;return t;
}
void pus(struct Student *p,int t)//定义一个输出的函数
{printf("学号:%6ld\n姓名: %8s\n",p[t].num,p[t].name);printf("三门课的成绩:%6.1f %6.1f %6.1f\n",p[t].score[0],p[t].score[1],p[t].score[2]);printf("平均成绩:%6.2f\n",p[t].aver);
}输出显示:
学号:2019011
姓名:    Killy
三门课的成绩:  86.5   93.5   96.0
平均成绩: 92.00

有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)。相关推荐

  1. 程序通过定义学生结构体变量,存储学生的学号、姓名和3门课的成绩。函数fun的功能是:对形参b所指结构体变量中的数据进行修改,并在主函数中输出修改后的数据。...

    程序通过定义学生结构体变量,存储学生的学号.姓名和3门课的成绩.函数fun的功能是:对形参b所指结构体变量中的数据进行修改,并在主函数中输出修改后的数据.例如,若b所指变量t中的学号.姓名和三门课的成 ...

  2. C语言结构体变量和结构体数组-学习笔记(十六)

    一.结构体变量 1.结构体概念 将不同类型的数据组合成一个有机的整体即为结构体.结构体由许多组织在一起的数据项组成,这些数据项不需要属于同一类型. 2.结构体类型及结构体变量定义 (1)结构体类型声明 ...

  3. 有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)

    有n个结构体变量,内含学生学号.姓名和3门课程的成绩.要求输出平均成绩最高的学生的信息(包括学号.姓名.3门课程成绩和平均成绩) 代码: #include<stdio.h>#define ...

  4. 例 9.7 有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)。

    C程序设计(第四版) 谭浩强 例9.7 个人设计 例 9.7 有n个结构体变量,内含学生学号.姓名和3门课程的成绩.要求输出平均成绩最高的学生的信息(包括学号.姓名.3门课程成绩和平均成绩). 代码块 ...

  5. 【C】例9.7有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)

    //有n个结构体变量,内含学生学号.姓名和3门课程的成绩. //要求输出平均成绩最高的学生的信息(包括学号.姓名.3门课程成绩和平均成绩) #include <stdio.h> #defi ...

  6. 有n个结构体变量,内含学生学号、姓名、3门课程的成绩,要求输出平均成绩最高的学生信息

    //有n个结构体变量,内含学生学号.姓名.3门课程的成绩,要求输出平均成绩最高的学生信息(学号.姓名.三门课成绩.平均成绩) #include <stdio.h> typedef stru ...

  7. java结构体构建学生 学号_易错题: 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。...

    根据网考网考试中心的统计分析,以下试题在2015-12-7日计算机二级考试C语言习题练习中,答错率较高,为:93% [填空题] 程序通过定义学生结构体变量,存储了学生的学号.姓名和3门课的成绩.所有学 ...

  8. 用字典存储学生成绩查询_C语言 | 用结构体变量存储学生信息

    "要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人-万中无一" --包租婆这道理放在C语言学习上也一并受用.在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语 ...

  9. 编写C语言代码,实现以下功能:有N名学生,每个人的信息包括学号、姓名和语文、数学、英语、平均分等内容(用结构体表示 ),输出平均分排名倒数第2的学生信息。

    编写C语言代码,实现以下功能: 有N名学生,每个人的信息包括学号.姓名和语文.数学.英语.平均分等内容(用结构体表示 ),输出平均分排名倒数第2的学生信息. #define _CRT_SECURE_N ...

最新文章

  1. java webproject中logback换配置文件的路径
  2. 一个字稳,云原生产品家族支撑冬奥会九大业务场景,打造云上奥运新体验
  3. Google编程题:最小操作数
  4. JBoss BRMS与JasperReports进行报告
  5. CSS深入浅出(三)
  6. 电压放大倍数公式运放_模电的半壁江山——运算放大器的原理和应用
  7. AI论文解读:基于Transformer的多目标跟踪方法TrackFormer
  8. Python案例:查询城市天气并绘制最高气温与最低气温折线图
  9. [POJ2456]Aggressive cows(贪心,二分查找)
  10. htc m7位置服务器,HTC M7 解锁教程(附htc one m7 解锁工具)
  11. Linux网络编程基础:recv函数
  12. .styl格式的CSS样式文件是什么文件
  13. 事务的四大特性(ACID)
  14. APP软件开发的步骤
  15. mysql重复数据只取一条数据_sql不重复的查找统计数据(经典)
  16. Ionic3安装和项目创建
  17. conda多环境切换与安装
  18. webpack5 基础配置8 devServer 模块热替换HMR, 框架的HRM, HRM原理
  19. 简单又好用的5款小工具软件
  20. 2018远程案例三星笔记本硬盘错误信息分析

热门文章

  1. 小博老师解析Java核心技术 ——JDBC参数化查询(一)
  2. 联想笔记本声音太小怎么办_电脑音量调到最大了还是声音太小,怎么办啊??...
  3. 机器学习模型上线及优化流程
  4. 白杨SEO:谈谈如何让微信公众号排版设计好看又实用?
  5. Tensorflow keras中实现语义分割多分类指标:IOU、MIOU
  6. 如何判断选择专业数字功放芯片
  7. 百度首页天气html制作,使用百度天气API实现自己的天气预报
  8. 微博的10大特征包括哪些?
  9. 零代码技能平台技术实践探索
  10. swoole php 使用教程,Swoole 扩展安装与使用入门