(第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; 
} 


相关文章
|
8天前
|
存储 编译器 C语言
【C语言基础考研向】09 一维数组
数组是一种有序集合,用于存储相同类型的数据,便于统一操作与管理。例如,将衣柜底层划分为10个格子存放鞋子,便于快速定位。在C语言中,数组定义格式为 `类型说明符数组名[常量表达式];`,如 `int a[10];` 表示定义了一个包含10个整数的数组。数组初始化时可以直接赋值,也可以部分赋值,且数组长度必须固定。数组在内存中连续存储,访问时需注意下标范围,避免越界导致数据异常。数组作为参数传递时,传递的是首地址,修改会影响原数组。
|
8天前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
|
11天前
|
存储 人工智能 C语言
C语言程序设计核心详解 第六章 数组_一维数组_二维数组_字符数组详解
本章介绍了C语言中的数组概念及应用。数组是一种存储同一类型数据的线性结构,通过下标访问元素。一维数组定义需指定长度,如`int a[10]`,并遵循命名规则。数组元素初始化可使用 `{}`,多余初值补0,少则随机。二维数组扩展了维度,定义形式为`int a[3][4]`,按行优先顺序存储。字符数组用于存储字符串,初始化时需添加结束符`\0`。此外,介绍了字符串处理函数,如`strcat()`、`strcpy()`、`strcmp()` 和 `strlen()`,用于拼接、复制、比较和计算字符串长度。
|
11天前
|
存储 C语言
C语言程序设计核心详解 第九章 结构体与链表概要详解
本文档详细介绍了C语言中的结构体与链表。首先,讲解了结构体的定义、初始化及使用方法,并演示了如何通过不同方式定义结构体变量。接着,介绍了指向结构体的指针及其应用,包括结构体变量和结构体数组的指针操作。随后,概述了链表的概念与定义,解释了链表的基本操作如动态分配、插入和删除。最后,简述了共用体类型及其变量定义与引用方法。通过本文档,读者可以全面了解结构体与链表的基础知识及实际应用技巧。
|
17天前
|
C语言
c语言中的结构体
本文档详细介绍了C语言中结构体的使用方法,包括结构体的基本定义、变量声明与赋值、数组与指针的应用,以及结构体嵌套、与`typedef`结合使用等内容。通过示例代码展示了如何操作结构体成员,并解释了内存对齐的概念。
|
22天前
|
C语言
C语言结构体赋值的四种方式
本文总结了C语言结构体的四种赋值方式,并通过示例代码和编译运行结果展示了每种方式的特点和效果。
35 6
|
30天前
|
存储 编译器 数据处理
【编程秘籍】解锁C语言数组的奥秘:从零开始,深入浅出,带你领略数组的魅力与实战技巧!
【8月更文挑战第22天】数组是C语言中存储同类型元素的基本结构。本文从定义出发,详述数组声明、初始化与访问。示例展示如何声明如`int numbers[5];`的数组,并通过下标访问元素。初始化可在声明时进行,如`int numbers[] = {1,2,3,4,5};`,编译器自动计算大小。初始化时未指定的元素默认为0。通过循环可遍历数组,数组名视为指向首元素的指针,方便传递给函数。多维数组表示矩阵,如`int matrix[3][4];`。动态数组利用`malloc()`分配内存,需用`free()`释放以避免内存泄漏。掌握这些技巧是高效数据处理的基础。
50 2
|
1月前
|
编译器 程序员 Linux
【C语言篇】结构体和位段详细介绍
跟结构相⽐,位段可以达到同样的效果,并且可以很好的节省空间,但是有跨平台的问题存在。
|
28天前
|
存储 算法 搜索推荐
C语言中数组
C语言中数组
32 0
|
1月前
|
存储 编译器 程序员
【C语言篇】从零带你全面了解数组(超详细)
有时候,数组在创建的时候,我们需要给定⼀些初始值,这种就称为初始化。