C语言学习笔记——使用字符数组和实型数组分别存储学生姓名和成绩,并通过对学生成绩的排序,按名次输出

题目来自C语言从入门到精通第三版:使用字符数组和实型数组分别存储学生姓名和成绩,并通过对学生成绩的排序,按照名次输出字符数组中对应的学生姓名

在网上大致找了一下没有看到C语言实现的版本,于是自己写了一个。对这个题目的要求并不是很明确,题目中的使用字符数组和实型数组分别存储学生姓名和成绩到底是直接通过代码预先储存到相应的字符数组中,还是要通过gets()函数或scanf_s()函数获取字符串再储存。因为是作为学习理解过程,所以我直接按照先获取学生姓名,成绩,再储存到相应数组中,然后对成绩排序,最后按分数从低到高输出姓名与成绩。
先附上全部代码,再对其中的一些函数作解释:

#include <stdio.h>
#include <string.h>
#define N 1000

char name[N][N];
char temp_name[N];  //作用类似于temp,作为交换字符数组中字符位置的中间变量
int temp;  //作为排序时交换次序的中间变量
int score[N]; //将成绩定义为一个数组
int i,j = 0;
int length; //输入总人数

int main()
{
   
	printf("总人数:\n");
    scanf("%d",&length);
    for(i = 0;i < length
  • 12
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
假设有一个结构体类型为`Student`,包含学生姓名、学号和成绩三个字段,可以按照以下方式定义: ```c #include <stdio.h> #include <string.h> #define MAX_STUDENTS 100 typedef struct { char name[20]; int id; int score; } Student; ``` 接下来,我们可以定义一个包含多个`Student`类型元素的一维数组或二维数组,然后按照成绩的降序输出学生姓名、学号和成绩。 一维数组示例代码如下: ```c int main() { Student students[MAX_STUDENTS]; int n, i, j; printf("请输入学生个数:"); scanf("%d", &n); for (i = 0; i < n; i++) { printf("请输入第%d个学生姓名、学号、成绩:", i + 1); scanf("%s%d%d", students[i].name, &students[i].id, &students[i].score); } // 冒泡排序成绩降序排列 for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (students[j].score < students[j + 1].score) { Student tmp = students[j]; students[j] = students[j + 1]; students[j + 1] = tmp; } } } // 输出结果 printf("按成绩降序输出学生信息:\n"); for (i = 0; i < n; i++) { printf("%s %d %d\n", students[i].name, students[i].id, students[i].score); } return 0; } ``` 二维数组示例代码如下: ```c int main() { Student students[MAX_STUDENTS][3]; int n, i, j; printf("请输入学生个数:"); scanf("%d", &n); for (i = 0; i < n; i++) { printf("请输入第%d个学生姓名、学号、成绩:", i + 1); scanf("%s%d%d", students[i][0].name, &students[i][1].id, &students[i][2].score); } // 冒泡排序成绩降序排列 for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (students[j][2].score < students[j + 1][2].score) { Student tmp[3]; memcpy(tmp, students[j], sizeof(Student) * 3); memcpy(students[j], students[j + 1], sizeof(Student) * 3); memcpy(students[j + 1], tmp, sizeof(Student) * 3); } } } // 输出结果 printf("按成绩降序输出学生信息:\n"); for (i = 0; i < n; i++) { printf("%s %d %d\n", students[i][0].name, students[i][1].id, students[i][2].score); } return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值