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

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


#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;
}
相关文章
|
15天前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
68 2
|
4月前
|
存储 C语言
指针的函数传参的详细讲解(一)
本文介绍了计算机内存管理与C语言中指针的基本概念及应用。从内存单元的划分到指针的定义,解释了指针作为地址的作用及其数据类型特性。文章通过代码示例详细说明了一级指针、二级指针的使用方法,以及`void*`指针的特点和限制。此外,还探讨了指针运算规则、函数指针传参解引用的原理,并结合链表实例分析了一级与二级指针在实际场景中的区别。最后附带两道指针练习题,帮助读者巩固理解。
87 0
|
11月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
981 13
|
11月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
210 4
|
12月前
|
存储 C语言 C++
如何通过指针作为函数参数来实现函数的返回多个值
在C语言中,可以通过将指针作为函数参数来实现函数返回多个值。调用函数时,传递变量的地址,函数内部通过修改指针所指向的内存来改变原变量的值,从而实现多值返回。
|
12月前
|
存储 搜索推荐 C语言
如何理解指针作为函数参数的输入和输出特性
指针作为函数参数时,可以实现输入和输出的双重功能。通过指针传递变量的地址,函数可以修改外部变量的值,实现输出;同时,指针本身也可以作为输入,传递初始值或状态。这种方式提高了函数的灵活性和效率。
利用指针函数
【10月更文挑战第2天】利用指针函数。
75 1
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
461 4
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
153 0
|
编译器 C语言
【C语言初阶】指针篇—下
【C语言初阶】指针篇—下