c语言 结构体和共用体 1. 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 结构体和共用体 1. 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据相关的知识,希望对你有一定的参考价值。

1. 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,要求:
1) 使用input函数输入5个学生的数据:学号、姓名、3门课的成绩;
2) 使用average函数求每个学生的平均成绩和所有学生的总平均成绩;
3) 使用max函数找出平均分最高的学生数据;
4) 使用output函数输出
全体学生的数据:学号、姓名、3门课的成绩、平均成绩;
总平均分以及平均分最高的学生的数据:学号、姓名、3门课的成绩、平均分数。

#include<stdio.h>
#define max 5 /*设定要输入成绩的学生个数*/

double zpj; /*总平均值*/
struct student /*结构体*/

int num;
char name[10];
int score1;
int score2;
int score3;
double pj;
;
struct student stu[max],temp;

void Input() /*输入函数*/
int i;
for(i=0;i<max;i++)
printf("enter number");

scanf("%d",&stu[i].num);

printf("enter name");

scanf("%s",&stu[i].name);

printf("enter score1");

scanf("%d",&stu[i].score1);

printf("enter score2");

scanf("%d",&stu[i].score2);

printf("enter score3");

scanf("%d",&stu[i].score3);



average() /*求平均值函数*/

int i;
for(i=0;i<5;i++)
stu[i].pj=stu[i].score1+stu[i].score1+stu[i].score3;
zpj+=stu[i].pj;

for(i=0;i<5;i++)
stu[i].pj/=3;
zpj/=max;


MAX() /*找出最高平均值的学生的函数*/
int i,j;
temp=stu[0];
for(i=0;i<max-1;i++)
for(j=i+1;j<max;j++)
if(stu[i].pj<stu[j].pj)
temp=stu[j];


output() /*输出函数*/

int i;
for(i=0;i<max;i++)
printf("num=%d\n name=%s\n score1=%d\n score2=%d\n score3=%d\n aver=%f\n",
stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].pj);

printf("总平均分=%f\n\n",zpj);

printf("平均分最高的学生\nnum=%d\n name=%s\n score1=%d\n score2=%d\n score3=%d\n aver=%f\n",
temp.num,temp.name,temp.score1,temp.score2,temp.score3,temp.pj);


void main() /*主函数*/


Input();
average();
MAX();
output();


自己写的 符合你的要求
不足之处还请指教
参考技术A #include<stdlib.h>
#include<stdio.h>
#define N 3
struct student
int number;
double score;a[N]=20101,96.7,20102,85.6,20103,99.5;
void main()

void fun(struct student *b);
struct student *p;
printf("The number and score\n");
for(p=a;p<a+3;p++)
printf("%d,%lf\n",p->number,p->score);
fun(a);

void fun(struct student *b)

FILE *fp;
int j,i;
struct student *p;
struct student t;
printf("The large-low score\n");
for(j=0;j<2;j++)
for(i=0;i<2-j;i++)
if(b[i].score<b[i+1].score)
t=b[i];
b[i]=b[i+1];
b[i+1]=t;
for(p=b;p<b+3;p++)
printf("%d,%lf\n",p->number,p->score);
if((fp=fopen("filename","w"))==NULL)
printf("cannot open file\n");
return;

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

if(fwrite(&a[j], sizeof(struct student),1, fp)!=1)
printf("file write error\n");
return;
fputs("\n",fp);
fclose(fp);

改一改就行,仅作个参考
参考技术B 个人

结构体和链表

题目一、7-3 找出总分最高的学生

本题运用结构体定义,并且令循环变量初始化 i=0,同时先定义 max=0用来存放总成绩最大的值

通过循环来求和以及判断大小,最后输出总成绩最高的那位学生的信息。

本题应该注意结构体变量的定义和使用,在调试时第一次没有注意输出格式;

格式出错,第二次成功改正

 题目二、7-9 查找成绩最高的学生

 

首先定义一个结构体,输入学生数量,循环n次输出学号成绩,

先假设滴液个输入的学生的成绩最高,再进行循环,与后面的比较,

当后面学生的成绩比第一个高,则最高分换成该同学的成绩。

本次调试出现的问题:

第一次调试时由于,一个分号没打导致编译错误。

题目三、7-12 单向链表4

本题要求构建一个逆向的链表,只需要利用头插法写入链表数据,

再讲链表输出即可。

本题在调试时由于格式中最后一个输出不能有空格,

所以出现格式错误

后改为

解决了问题

本周pta排名

同学互评:梁宇航同学的7-6

我的7-6

我的代码和他最大的不同在于我通过判断性别的数字来选择跳过已经选择的同学

,同学通过if和else分男女两种情况进行挑选,可以直接防止学生重复的情况。

我更喜欢我的代码,处理方式更为简洁。

本周学习总结

1、结构体定义 ,处理结构体变量       2、学会了自定义类型

3、能构建链表,能够用链表进行倒序,插入,删除等功能。

4、能够理解大部分链表。

不足:

链表处理不够熟练,需要多次尝试才能成功。

3.链表考试总结

一开始做链表相关的题目时错误点非常多,

需要更加注意自己常犯的错误并及时改正。

以上是关于c语言 结构体和共用体 1. 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据的主要内容,如果未能解决你的问题,请参考以下文章

江哥带你玩转C语言 | 14 - 结构体-枚举-共用体

C语言----结构体,枚举,共用体

C语言 结构体和共用体的初始化

C语言中的结构体和共用体(联合体)

关于c语言中联合体/共用体中数据存放的问题?

C语言共用体