题目:
(1) 定义一个包括:学号、姓名、性别、年龄和三门课成绩(语文、数学、外语)的结构体类型struct Student。
(2) 在主函数中定义一个包括5个元素的struct Student类型的数组students。前3个学生给定初值,后两个学生的信息在main函数中调用下面的input函数从键盘输入。
(3) 实现一个画横线的函数line, 用于绘制由n个字符c输出组成的行线,函数原形如下:
void line(char c,int n);
参数: c:要输出的字符,n:输出多少个
(4) 实现输入一个学生信息的函数input,函数原型如下:
void input( struct Student * stud );
参数:stud:指向要输入的学生的结构体变量或数组元素
(5) 实现输出一个学生信息的函数print,在一行中输出参数指定学生的所有信息、成绩、总分和平均分,函数原型如下:
void print( struct Student * stud );
参数:stud:指向要输出的学生的结构体变量或数组元素
(6) 实现一个输出所有学生信息的函数print_all,在该函数中输出表头,并调用print函数输出每个学生的信息及其总分和平均分,最后输出所有学生各门课(含个人总分和均分)的平均分。其原型如下:
void print_all( struct Student * studs,int n );
参数:studs:指向结构体数组的第一个元素,n:数组元素的个数
(7) 在主函数中调用input 函数输入后两个学生的信息,调用print_all函数输出所有学生的信息和各门课的平均分(含所有人总分和均分的平均分)。
憋了一早上的代码555
#include<stdio.h>
#define Maxsize 30
typedef struct Student
{
int num;
char name[Maxsize];
char sex[Maxsize];
int age;
int Chinese;
int Math;
int English;
}Student;
void line(char c, int n)
{
int i;
for (i = 0; i < n; i++)
printf("%c", c);
}
void input(Student* stud)
{
scanf_s("%d", &stud->num);
scanf("%s", stud->name);
scanf("%s", stud->sex);
scanf_s("%d", &stud->age);
scanf_s("%d", &stud->Chinese);
scanf_s("%d", &stud->Math);
scanf_s("%d", &stud->English);
}
void print(Student* stud)
{
int total, aver;
total = stud->Chinese + stud->Math + stud->English;
aver = total / 3;
printf("%-8d%-8s%-8s%-8d%-8d%-8d%-8d%-8d%-8d\n", stud->num, stud->name, stud->sex, stud->age, stud->Chinese, stud->Math, stud->English, total, aver);
}
void print_all(Student* stud, int n)
{
int i;
int aver1 = 0, aver2 = 0, aver3 = 0, aver4, aver5;
printf("学号 姓名 性别 年龄 语文 数学 英语 总分 均分\n");
for (i = 1; i <= n; i++)
print(stud + i);
for (i = 1; i <= n; i++)
{
aver1 += (stud + i)->Chinese;
aver2 += (stud + i)->Math;
aver3 += (stud + i)->English;
}
printf("\n");
aver4 = aver1 + aver2 + aver3;
aver1 /= n;
aver2 /= n;
aver3 /= n;
aver4 /= n;
aver5 = aver1 + aver2 + aver3;
aver5 /= n;
printf(" 班级平均分 %-8d%-8d%-8d%-8d%-8d\n\n", aver1, aver2, aver3, aver4, aver5);
}
void main()
{
Student stud[5];
stud[1].num = 201701;
*stud[1].name = "WangDachuan";
*stud[1].sex = "man";
stud[1].age = 25;
stud[1].Chinese = 89;
stud[1].Math = 88;
stud[1].English = 99;
stud[2].num = 201702;
*stud[2].name = "ZhangDajiang";
*stud[2].sex = "man";
stud[2].age = 23;
stud[2].Chinese = 90;
stud[2].Math = 85;
stud[2].English = 78;
stud[3].num = 201703;
stud[3].name[Maxsize] = "LiTiemei";
stud[3].sex[Maxsize] = "woman";
stud[3].age = 22;
stud[3].Chinese = 95;
stud[3].Math = 88;
stud[3].English = 89;
printf("输入后两个学生的信息(空格分隔,每行一人):\n\n");
printf("学号 姓名 性别 年龄 语文 数学 英语\n\n");
input(stud + 4);
input(stud + 5);
print_all(stud, 5);
}
但是运行的结果中,原本有的前三个成员的名字和性别都是乱码,成绩学号什么的都没问题,哪出了问题搞不明白,求助!