C语言-学生信息处理(期末模拟测试)

本文介绍了如何在C语言中使用结构体处理学生信息,包括计算平均成绩、根据学号更新姓名、在数组中插入新记录以及按平均成绩排序的功能实现
摘要由CSDN通过智能技术生成

输入n个学生信息(n不超过20),每个学生信息包括学号、姓名、语文成绩、英语成绩、数学成绩和平均成绩。要求:

(1) 使用aver子函数计算每个学生的平均成绩

(2) 使用update子函数实现根据提供的学号将该学生的姓名修改为指定字符串,如果修改成功返回1,否则返回0

(3) 使用insert函数实现在下标为0的位置上插入一条指定的学生信息

(4) 使用sort子函数实现根据学生的平均成绩进行排序

题目所给代码如下:

#include "stdio.h"
#include "string.h"
struct student
{
    int num;
    char name[10];
    int computer,english,math;
    double average;
};
void input(struct student a[],int n);
void output(struct student a[],int n);
void aver(struct student a[],int n);
int update(struct student a[],int n,int num,char name[]);
void insert(struct student a[],int n,struct student s);
void sort(struct student a[], int n);
main()
{
    int n,result;
    struct student a[20],s= {2001, "yyy",60,76,80,72};
    scanf("%d",&n);
    input(a,n);
    aver(a,n);
    output(a,n);
    result=update(a,n,1002,"wang");
    if(result==1) printf("Success\n");
    else printf("Fail\n");
    insert(a,n,s);
    n=n+1;
    output(a,n);
    sort(a,n);
    output(a,n);
}
void input(struct student a[],int n)
{
    int i;
    for(i=0;i<n;i++)
        scanf("%d %s %d %d %d",&a[i].num,a[i].name,&a[i].computer,&a[i].english,&a[i].math);
}
void output(struct student a[],int n)
{
    int i;
    for(i=0; i<n; i++)
        printf("%d %s %d %d %d %.2lf\n",a[i].num,a[i].name,a[i].computer,a[i].english,a[i].math,a[i].average);
}
/*你的代码会出现在这里*/

参考答案如下:

void aver(struct student a[],int n)
{
    int i;
    for(i=0;i<n;i++)
        a[i].average=(a[i].computer+a[i].english+a[i].math)/3.0;
}
int update(struct student a[],int n,int num,char name[])
{
    int i;
    for(i=0;i<n;i++)
    {
        if(a[i].num==num)
        {
        	strcpy(a[i].name,name);
        	break;
		}     
    }
    if(i<n) return 1;
    else return 0;
}
void insert(struct student a[],int n,struct student s)
{
    int i;
    for(i=n;i>0;i--)
        a[i]=a[i-1];
     a[0]=s;
}
void sort(struct student a[],int n)
{
    int i,j;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if(a[j].average>a[j+1].average)
            {
                struct student p=a[j];
                a[j]=a[j+1];
                a[j+1]=p;
            }
        }
    }
}

以题目为论,且不谈主函数和输入输出函数。

aver函数:

首先得知a数组以及数组长度n,引入i,通过平均数的公式,很容易得到学生表中各个学生的平均成绩。

update函数:

首先得知a数组以及数组长度n,通过遍历结构体中的num变元进行判断,如果是我们要更改姓名的学号,因为名字是字符串,所以要用strcpy函数进行字符串的交换,如果交换成功即输出Success,反之输出Fail。

insert函数:

首先得知a数组以及数组长度n,通过移位法将所有数据向右移动一位,将a[0]空出来,再让学生信息填充进a[0]中。

sort函数:

首先得知a数组以及数组长度n,通过冒泡排序法,将平均数的数值从小到大交换,要注意是交换整个数组而不是单个平均数变元。

你学会了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少侠Dr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值