c primer plus 第十四章课后编程5题

本文介绍了一个使用C语言实现的学生信息管理系统,该系统能够录入学生姓名及成绩,并计算平均分和班级总平均分。通过枚举、结构体等数据类型,实现了对学生信息的有效管理和成绩的动态录入。

#include <stdio.h>
#include <string.h>
#define MAX 20
#define CJ 3
struct name{
char fname[MAX];
char sname[MAX];
};

struct student{
struct name k;
float grade[3];
float average;
};

char *s_gets(char *st,int n);

int main(void)
{
char contrast1[MAX];
char contrast2[MAX];
enum spectrun{CSIZE=4};
struct student a[CSIZE]={
{“wang”,“xiaopeng”},
{“wang”,“jinxuan”},
{“liang”,“jianhui”},
{“wang”,“xiaoqiang”}
};
int i=0;
int j=0;
float aa=0;

printf("请输入需要录入分数学生的姓:\n");
while(i<CSIZE && s_gets(contrast1,MAX)!=NULL && a[i].k.fname[0]!='\0')
{
    printf("请输入需要录入分数学生的名:\n");
    s_gets(contrast2,MAX);
    for(j=0;j<CSIZE;j++)
    {
        
        if(strcmp(contrast1,a[j].k.fname)==0 && strcmp(contrast2,a[j].k.sname)==0)
        {
            printf("请输入学生的分数:\n");
            scanf("%f %f %f",&a[j].grade[0],&a[j].grade[1],&a[j].grade[2]);
            a[j].average=(a[j].grade[0]+a[j].grade[1]+a[j].grade[2])/CJ;
            while(getchar()!='\n')
                continue;
            break;
        }
        else if(j==CSIZE-1)
        {
            printf("请重新输入学生的姓:\n");
            s_gets(contrast1,MAX);
            printf("请输入需要录入分数学生的名:\n");
            s_gets(contrast2,MAX);
            continue;
        }
       
        
    }
    i++;
    if(i<CSIZE)
        printf("请输入下一个学生的姓:\n");
}

for(j=0;j<CSIZE;j++)
{
    printf("姓  名:    %s %s\n",a[j].k.fname,a[j].k.sname);
    printf("分  数:    %.2f %.2f %.2f\n",a[j].grade[0],a[j].grade[1],a[j].grade[2]);
    printf("平  均:    %.2f\n",a[j].average);
    aa+=a[j].average;
}
printf("班级平均分: %.2f\n",aa/CSIZE);

return 0;

}

char *s_gets(char *st, int n)
{
char *ret_val;
char *find;

    ret_val=fgets(st,n,stdin);
    if(ret_val)
    {
        find=strchr(st,'\n');
        if(find)
            *find='\0';
        else
            while(getchar()!='\n')
                continue;
    }
    return ret_val;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值