(第13列)C语言:结构体数组------学生成绩排名

简介: (第13列)C语言:结构体数组------学生成绩排名

题目:有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的成绩。


要实现下面的功能:

话不多说!直接代码见真知!



第一步:定义和声明

//声明结构体类型
struct student
{
  char name[20];
  int num;
  float score;
};
//输入
printf("请输入学生数:");
scanf("%d",&n);
//定义结构体数组,存放键盘输入的数据
struct student stu[n];
//定义结构体变量middle,用作交换时的中间变量
struct student middle; 


第二步:输入数据

for(i=0;i<n;i++)
  {
    printf("请输入学生姓名:");
    scanf("%s",&stu[i].name);
    printf("请输入学生学号:");
    scanf("%d",&stu[i].num);
    printf("请输入学生成绩:");
    scanf("%f",&stu[i].score);
        printf("\n");
  }


第三步:以学生成绩来比较进行排名

//利用交换排序法进行排序
for(i=0;i<n-1;i++)
  {
    for(j=i+1;j<n;j++)
    {
            //利用成绩进行比较
      if(stu[i].score<stu[j].score)
      {
                //利用中间变量进行交换
        middle=stu[i];
        stu[i]=stu[j];
        stu[j]=middle;
      }
    }
  }


第四步:输出

printf("成绩排名为:\n");
  for(i=0;i<n;i++)
  {
        //读取结构体中各个部分
    printf("\t\t%s\t%d\t%0.1f\n",stu[i].name,stu[i].num,stu[i].score);
  }


完整代码:

#include<stdio.h>
struct student
{
  char name[20];
  int num;
  float score;
};
int main()
{
  int n,i,j;
  printf("请输入学生数:");
  scanf("%d",&n);
  struct student stu[n];
  struct student middle; 
  printf("\n");
  for(i=0;i<n;i++)
  {
    printf("请输入学生姓名:");
    scanf("%s",&stu[i].name);
    printf("请输入学生学号:");
    scanf("%d",&stu[i].num);
    printf("请输入学生成绩:");
    scanf("%f",&stu[i].score);
        printf("\n");
  }
  for(i=0;i<n-1;i++)
  {
    for(j=i+1;j<n;j++)
    {
      if(stu[i].score<stu[j].score)
      {
        middle=stu[i];
        stu[i]=stu[j];
        stu[j]=middle;
      }
    }
  }
  printf("成绩排名为:\n");
  for(i=0;i<n;i++)
  {
    printf("\t\t%s\t%d\t%0.1f\n",stu[i].name,stu[i].num,stu[i].score);
  }
  return 0; 
} 


相关文章
|
14天前
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
81 14
|
18天前
|
存储 编译器 C语言
【C语言】结构体详解 -《探索C语言的 “小宇宙” 》
结构体通过`struct`关键字定义。定义结构体时,需要指定结构体的名称以及结构体内部的成员变量。
78 10
|
18天前
|
传感器 算法 安全
【C语言】两个数组比较详解
比较两个数组在C语言中有多种实现方法,选择合适的方法取决于具体的应用场景和性能要求。从逐元素比较到使用`memcmp`函数,再到指针优化,每种方法都有其优点和适用范围。在嵌入式系统中,考虑性能和资源限制尤为重要。通过合理选择和优化,可以有效提高程序的运行效率和可靠性。
62 6
|
22天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
43 5
|
22天前
|
存储 数据建模 程序员
C 语言结构体 —— 数据封装的利器
C语言结构体是一种用户自定义的数据类型,用于将不同类型的数据组合在一起,形成一个整体。它支持数据封装,便于管理和传递复杂数据,是程序设计中的重要工具。
|
29天前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
101 13
|
29天前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
57 11
|
22天前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
26天前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
26天前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。