结构体指针函数统合运用的学生成绩系统源码

简介: 结构体指针函数统合运用的学生成绩系统源码


#include <stdio.h>
#include <stdlib.h>
struct student//定义结构体
{
  int score;//分数
  char *name;//姓名
};
struct student* initstuscores(int len)//定义一个结构体指针函数
{
  int i;//定义整型i
  struct student *p =(struct student * )malloc(len *  sizeof(struct student));//定义指针变量 开辟学生个数的结构体空间
    for (i=0;i<len;i++)
    {
      printf("请输入名字:\n");//输出
      p->name=(char *)malloc(128);//调用指针p结构体里的name,并开辟128个字符串指针空间
      scanf("%s",(p->name));//输入学生姓名,不加&是因为是字符串指针
      printf("请输入分数:\n");//输出
      scanf("%d",&(p->score));//输入分数
      p++;//指针偏移一个结构体的大小,循环到一下个同学再输入姓名分数
    }
        return p-len;//把指针返回给main里的调用函数
}
void printmes(struct student *p,int len)//定义一个输出函数
{
      int i;
    for(i=0;i<len;i++)
    {
      printf("名字:%s,分数:%d\n",p->name,p->score);//遍历输出学生姓名分数
      p++;//地址偏移,为了遍历下一个学生成绩姓名分数
    }
}
struct student*findmaxstu(struct student *p,int len)//定义最大值指针函数
{
  struct student *max;//定义指针max
  max =p;//将地址p中的值给max
  int i;
    for(i=0;i<len;i++)
    {
      if(max->score < p->score)//如果最大值的分数小于p中的分数
        {
          max=p;//将p中的值给max
        }
          p++;//指针偏移,这是局部变量中的指针,无碍大局
      }
     return max;//将最大值返回给max
}
struct student* findminstu(struct student *p,int len)//同最大值
{
  int i;
  struct student *min;
  min =p;
     for(i=0;i<len;i++)
     {
       if(min->score > p->score)
       {
        min=p;
       }
     p++;
     }
     return min;
}
float getaverage(struct student *p,int len)//定义浮点型变量平均值,定义结构体类指针,整形len
{
  int i;
  int total=0;
    for(i=0;i<len;i++)
    {
      total +=p->score;//使其分数全部相加
      p++;
    }
  return (float)total/len;//总和除以总人数
}
int main()
{
  int len=0;//初始化总人数为0
    printf("请输入总人数:\n");//输出
    scanf("%d",&len);//输入计算的总人数
    struct student *min = NULL;//调用最小值结构体函数指针并初始化为空
    struct student *max = NULL;//调用最大值结构体函数指针并初始化为空
    struct student *pstus = initstuscores(len);//调用初始化函数
    printmes(pstus,len);//调用输出函数
    min=findminstu(pstus,len);//调用最小值函数,传参给min
    max=findmaxstu(pstus,len);//调用最大值函数,传参给max
    printf("min:%s,%d\n max:%s,%d\n average=%f\n",min->name,min->score,max->name,max->score,getaverage(pstus,len));//输出名字,最大的值,最小的姓名,最小的值
  system("pause");
  return 0;
}
相关文章
|
4天前
|
存储 搜索推荐 C语言
C语言中的指针函数:深入探索与应用
C语言中的指针函数:深入探索与应用
|
26天前
|
运维
系统日志使用问题之如何防止在打印参数时遇到NPE(空指针异常)
系统日志使用问题之如何防止在打印参数时遇到NPE(空指针异常)
|
2月前
|
编译器 C++
函数指针和函数对象不是同一类型怎么替换
函数指针和函数对象不是同一类型,为何可替换用作同一函数的参数
|
2月前
|
存储 C语言
C语言的函数返回值和指针
C|函数返回值(区分各类值)和指针(区分各类存储空间)的细节
|
2月前
|
C++
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
28 0
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
|
2月前
结构体\结构体指针
结构体\结构体指针
18 3
|
2月前
|
算法 Java 程序员
面向对象编程(OOP)通过对象组合构建软件,C语言虽是过程式语言,但可通过结构体、函数指针模拟OOP特性
【6月更文挑战第15天】面向对象编程(OOP)通过对象组合构建软件,C语言虽是过程式语言,但可通过结构体、函数指针模拟OOP特性。封装可使用结构体封装数据和方法,如模拟矩形对象。继承则通过结构体嵌套实现静态继承。多态可通过函数指针模拟,但C不支持虚函数表,实现复杂。C语言能体现OOP思想,但不如C++、Java等语言原生支持。
43 7
|
2月前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
29 0
|
2月前
|
C语言
C语言中的函数指针、指针函数与函数回调
C语言中的函数指针、指针函数与函数回调
20 0
|
2月前
【洛谷 P1563】[NOIP2016 提高组] 玩具谜题(模拟+结构体数组+指针)
**摘要:** NOIP2016提高组的玩具谜题是一个编程挑战,涉及理解玩具小人在圆圈中的相对位置。题目要求解决一系列基于小人朝向(内或外)的左右数指令,来找到最终目标小人。输入包含小人数量、指令数、每个小人的朝向和职业,以及指令详情。输出是最后到达的小人的职业。给定的AC代码使用指针模拟环状数组,通过按位异或判断朝向来移动指针。样例展示了问题的解决过程。子任务有不同的数据规模和限制条件。
26 0