900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 学生结构体 学生有姓名 学号 三门成绩 班级人数为五人 。实现 1:第一门成绩的

学生结构体 学生有姓名 学号 三门成绩 班级人数为五人 。实现 1:第一门成绩的

时间:2021-12-14 08:56:14

相关推荐

学生结构体 学生有姓名 学号 三门成绩 班级人数为五人 。实现 1:第一门成绩的

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define SIZE 5

#define N 20

#define COUNT 3

//定义一个描述学生的结构体类型

typedef struct student

{

//姓名

char Name[N];

//学号

char ID[N];

//三门成绩

float Score[COUNT];

}Stu;

//定义枚举

enum VALUE

{

MALLOC_ERROR = -3,

NULL_ERROR,

ERROR,

OK,

MALLOC,

INPUT,

OUTPUT,

CAL_FIRAVE,

CAL_FAILED,

CAL_EXCELLENT,

QUIT

};

void menu()

{

printf("*************学生管理****************\n");

printf("1 ----------------------- malloc!\n");

printf("2 ----------------------- input!\n");

printf("3 ----------------------- output!\n");

printf("4 ----------------------- cal_firstAverage!\n");

printf("5 ----------------------- cal_failed!\n");

printf("6 ----------------------- cal_excellent!\n");

printf("7 ----------------------- quit!\n");

printf("*************************\n");

}

int MyMalloc_Func(Stu **pPerson)//pPerson = &person;-->*pPerson = person

{

if(NULL == pPerson)

{

printf("null error!\n");

return NULL_ERROR;

}

*pPerson = (Stu *)malloc(sizeof(Stu) * SIZE);

if(NULL == *pPerson)

{

printf("malloc error!\n");

return MALLOC_ERROR;

}

memset(*pPerson, '\0', sizeof(Stu) * SIZE);

return OK;

}

int MyInput_Func(Stu *person)//形参person = 实参person

{

if(NULL == person)

{

printf("null error!\n");

return NULL_ERROR;

}

int i,j;

for(i=0;i<SIZE;i++)

{

printf("请输入第%d个学生的信息:\n",i+1);

scanf("%s%s",(person+i)->Name,(person+i)->ID);

for(j=0;j<COUNT;j++)

{

scanf("%f",&(person+i)->Score[j]);

}

}

return OK;

}

int MyOutput_Func(Stu *person,int size)//形参person = 实参person

{

if(NULL == person)

{

printf("null error!\n");

return NULL_ERROR;

}

int i,j;

printf("输出的%d个学生的信息如下:\n",size);

for(i=0;i<size;i++)

{

printf("姓名:%s\t学号:%s\t成绩:",(person+i)->Name,(person+i)->ID);

for(j=0;j<COUNT;j++)

{

printf("%.1f ",(person+i)->Score[j]);

}

putchar('\n');

}

return OK;

}

int MyFirstAve_Func(Stu * person, float *pFirAve)

{

if(NULL == person || NULL == pFirAve)

{

printf("null error!\n");

return NULL_ERROR;

}

int i;

float firSum = 0;

for(i=0;i<SIZE;i++)

{

firSum += (person+i)->Score[0];

}

//通过指针直接修改实际参数FirAve的值

*pFirAve = firSum / SIZE;

return OK;

}

int MyTwoFailed_Func(Stu *person, Stu *pNew, int *pNewLen)

{

if(NULL == person || NULL == pNew || NULL == pNewLen)

{

printf("null error!\n");

return NULL_ERROR;

}

int i,j = 0;

for(i=0;i<SIZE;i++)

{

if(((person+i)->Score[0] < 60 && (person+i)->Score[1] < 60) || \

((person+i)->Score[1] < 60 && (person+i)->Score[2] < 60) || \

((person+i)->Score[0] < 60 && (person+i)->Score[2] < 60))

{

*(pNew+j) = *(person+i);

j++;

}

}

*pNewLen = j;

return OK;

}

int MyGood_Func(Stu *person, Stu *pNew, int *pNewLen)

{

if(NULL == person || NULL == pNew || NULL == pNewLen)

{

printf("null error!\n");

return NULL_ERROR;

}

int i,j;

int Index = 0;

float SumScore = 0, ScoreAve = 0;

for(i=0;i<SIZE;i++)

{

//重新定位SumScore的初始值为0

SumScore = 0;

for(j=0;j<COUNT;j++)

{

SumScore += (person+i)->Score[j];

}

ScoreAve = SumScore / COUNT;

if(ScoreAve >= 90 || \

((person+i)->Score[0] >= 85) && \

((person+i)->Score[1] >= 85) && \

((person+i)->Score[2] >= 85))

{

*(pNew+Index) = *(person+i);

Index++;

}

}

*pNewLen = Index;

return OK;

}

int main(int argc, const char *argv[])

{

//通过case语句完成对应的操作

int Op;

//定义一个接收函数返回值的变量

int ret;

float FirAve = 0;

//定义一个结构体指针,准备接收malloc的空间

Stu *person = NULL;

//指向存储第2问或者第3问学生信息的空间

Stu *pNew = NULL;

int NewLen;

while(1)

{

//菜单函数

menu();

printf("请输入需要进行的操作数:\n");

scanf("%d",&Op);

//判断输入的Op的值,是否满足退出的条件

if(QUIT == Op)

{

printf("本项操作终止!\n");

break;

}

switch(Op)

{

case MALLOC:

{

//申请空间

ret = MyMalloc_Func(&person);

if(ret < 0)

{

return ERROR;

}

printf("申请原始空间完毕!\n");

//同时将代会存储坏学生或者好学生的空间也申请好

ret = MyMalloc_Func(&pNew);

if(ret < 0)

{

return ERROR;

}

printf("申请临时空间完毕!\n");

break;

}

case INPUT:

{

//输入5个学生的信息

ret = MyInput_Func(person);

if(ret < 0)

{

return ERROR;

}

printf("输入学生信息成功!\n");

break;

}

case OUTPUT:

{

//输出学生的信息

ret = MyOutput_Func(person, SIZE);

if(ret < 0)

{

return ERROR;

}

printf("输出学生的信息完毕!\n");

break;

}

case CAL_FIRAVE:

{

//求第一门成绩的平均分

ret = MyFirstAve_Func(person, &FirAve);

if(ret < 0)

{

return ERROR;

}

printf("第一门成绩的平均分为:%.1f\n",FirAve);

break;

}

case CAL_FAILED:

{

//求坏学生的信息

ret = MyTwoFailed_Func(person, pNew, &NewLen);

if(ret < 0)

{

return ERROR;

}

printf("坏学生的信息检索完毕!\n");

ret = MyOutput_Func(pNew, NewLen);

if(ret < 0)

{

return ERROR;

}

printf("输出坏学生的信息完毕!\n");

break;

}

case CAL_EXCELLENT:

{

//清空之前pNew所指向的空间

memset(pNew, '\0', sizeof(Stu) * SIZE);

NewLen = 0;

//求好学生的信息

ret = MyGood_Func(person, pNew, &NewLen);

if(ret < 0)

{

return ERROR;

}

printf("好学生的信息检索完毕!\n");

ret = MyOutput_Func(pNew, NewLen);

if(ret < 0)

{

return ERROR;

}

printf("输出好学生的信息完毕!\n");

break;

}

default:

printf("输入指令不对,清重新输入!\n");

}

}

//释放空间

free(person);

person = NULL;

free(pNew);

pNew = NULL;

return 0;

}

学生结构体 学生有姓名 学号 三门成绩 班级人数为五人 。实现 1:第一门成绩的平均分;2:找出两门以上不及格的学生 输出他们的姓名学号及三门成绩; 3:找出平均分在90分以上或者全部成绩在85分以上

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。