PTA(Basic Level) 1080:MOOC期终成绩(C语言实现)

本文介绍了如何用C语言实现PTA 1080题目的MOOC期终成绩管理,包括结构体存储学生信息,通过条件筛选及更新成绩,使用bsearch进行高效查找,并学习了标准库中的bsearch()函数及其应用。
摘要由CSDN通过智能技术生成

PTA(Basic Level) 1080:MOOC期终成绩(C语言实现)

分析:
①定义结构体存入学生信息;
②定义结构体数组,先输入学生的Gp,获得证书的学生的Gp>=200,所以忽略Gp<200的学生,存入数组中的学生Gp》=200,对所有数组中学生的Gm和Gf赋初值-1;再输入id和Gm,查找输入的id是否存在,存在则更新学生的Gm,否则忽略;输入id和Gf,规则同上;
③求学生的总评G(四舍五入),对数组中存入的学生按要求排序;
④输出符合要求的学生信息。

错误分析:按照以上思路,写好代码提交,测试点4运行超时,原因是当数组中的元素很大时,顺序查找相同id学生耗时太多。

学习:鉴于以上错误,查看了其他大神的方法,学习到了标准库中的bsearch()函数,下面简要介绍:
**bsearch(const void *key, const void *array, int n, int size, int (*cmp)(const void , const void ) );

  1. key:要查找的值
  2. array: 查找的数组
  3. n:数组元素个数
  4. size:数组中每个元素的大小
  5. cmp:比较函数
    bsearch()在头文件<stdlib.h>中,按照二分查找的方法查找数组中是否存在给定元素,因此,查找的数组必须是有序的,排序(一般用qsort函数排序)的规则也要和此处cmp比较函数的规则相同。若存在则返回该元素的地址,否则返回NULL。对于有多于一个的元素匹配成功的情况,bsearch()未定义返回哪一个,由于此题学生学号唯一,所以可以用它查找。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student
{
   
	char id[21];
	int gp;
	int gm;
	int gf;
	int g;
}student;

int cmp(const void *a,const void *b)
{
   
	student *p=(student*)a;
	student *q=(student*)b;
	if(p->g == q->g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值