某班有30个学生,按如下要求编写程序。
(1)用input( )函数输入学生的学号、姓名、数学成绩、计算机成绩;
(2)用output( )函数输出每个同学的学号、姓名、数学成绩、计算机成绩;
(3)用avg( )函数输出每个同学的平均分;
(4)用pass( )函数统计两门课成绩都及格的学生人数;
(5)用maxc( )函数输出计算机成绩最高的学生;
(6)在main( )函数中调用这些函数。
#include <stdio.h>
#define STUDENTS_NUMBER 3
struct Student{
long num; // 学号
char name[20]; // 姓名
float score[2]; // 数学计算机成绩
float aver; // 平均成绩
};
struct Student* input(struct Student students[]);
void output(struct Student *p1);
void avg(struct Student *p1);
void pass(struct Student *p1);
void maxc(struct Student student[]);
int main(void)
{
struct Student students[STUDENTS_NUMBER];
struct Student *p = students, *p1;
p1 = input(p);
output(p1);
avg(p1);
pass(p1);
maxc(students);
return 0;
}
struct Student* input(struct Student students[])
{
int i;
printf("输入学生信息(学号,姓名,数学,计算机成绩,不同信息用空格分隔)\n");
printf("在此开始输入:");
for (i = 0; i < STUDENTS_NUMBER; i++){
scanf("%ld %s %f %f", &students[i].num, students[i].name, &students[i].score[0], &students[i].score[1]);
students[i].aver = (students[i].score[0] + students[i].score[1]) / 2;
}
return students;
}
void output(struct Student *p1)
{
int i;
for (i = 0; i < STUDENTS_NUMBER; i++){
printf("==========第%d位学生成绩==========\n", i+1);
printf("学号:%ld\n姓名:%s\n数学成绩:%f\n计算机成绩:%f\n", p1->num, p1->name, p1->score[0], p1->score[1]);
}
}
void avg(struct Student *p1)
{
int i;
for (i = 0; i < STUDENTS_NUMBER; i++){
printf("==========第%d位学生的平均分==========\n", i+1);
printf("学号:%ld\n姓名:%s\n平均分:%f\n", p1->num, p1->name, p1->aver);
}
}
void pass(struct Student *p1)
{
int pass = 0, i;
for (i = 0; i < STUDENTS_NUMBER; i++){
if (p1->score[0] >= 60 && p1->score[1] >= 60) {
pass++;
}
}
printf("\n");
printf("两门课都及格的人数有:%d人\n", pass);
printf("两门课都不及格的人数有:%d人\n", STUDENTS_NUMBER - pass);
printf("\n");
}
void maxc(struct Student students[])
{
int i, max = 0;
float aver;
for (i = 0; i < STUDENTS_NUMBER; i++) {
if (students[i].aver > students[max].aver) {
max = i;
}
}
printf("*****计算机成绩最高学生*****\n");
printf("学号:%ld\n姓名:%s\n计算机分数:%f\n", students[max].num, students[max].name, students[max].score[1]);
}
#include <stdio.h>
typedef struct _student
{
char id[20];
char name[20];
float maths;
float comp;
}student;
void input(student *p,int n)
{
int i=0;
for(i=0;i<n;i++)
{
printf("请输入第%d个学生的学号、姓名、数学成绩和计算机成绩:\n",i+1);
scanf("%s%s%f%f",p[i].id,p[i].name,&p[i].maths,&p[i].comp);
}
}
void output(student *p,int n)
{
int i=0;
printf("%21s%21s%20s%20s\n","学号","姓名","数学成绩","计算机成绩");
for(i=0;i<n;i++)
printf("%21s%21s%20.1f",%20.1f\n",p[i].id,p[i].name,p[i].maths,p[i].comp);
}
void avg(student *p,int n)
{
int i=0;
printf("%21s%20s\n","姓名","平均分");
for(i=0;i<n;i++)
printf("%21s%20.1f\n",p[i].name,(p[i].maths+p[i].comp)/2);
}
int pass(student *p,int n)
{
int i=0,count=0;
for(i=0;i<n;i++)
if(p[i].maths>=60 && p[i].comp>=60)
count++;
return count;
}
void maxc(student *p,int n)
{
int m = 0;
int i=0;
int idx = 0;
for(i=0;i<n;i++)
{
if(p[i].comp > m)
{
m = p[i].comp;
idx = i;
}
}
printf("计算机最高分学生为:%s\n",p[idx].name);
}
int main()
{
int count = 0;
student stu[30];
input(stu,30);
output(stu,30);
avg(stu,30);
count = pass(stu,30);
printf("两门课都及格的有%d个人\n",count);
maxc(stu,30);
return 0;
}
首先明确数据类型为结构体,对于每一个学生都有学号、姓名、数学成绩、计算机成绩,外加平均分一项
struct student {
char no[10];
char name[10];
float math_score;
float pc_score;
float avg;
} stu[30];
所以定义一个大小为30的结构体数组
剩下的就是写几个函数,先录入学生信息然后在这个结构体数组里面统计、增加平均分、查找符合条件的学生就行
凑个热闹
/*
某班有30个学生,按如下要求编写程序。
(1)用input( )函数输入学生的学号、姓名、数学成绩、计算机成绩;
(2)用output( )函数输出每个同学的学号、姓名、数学成绩、计算机成绩;
(3)用avg( )函数输出每个同学的平均分;
(4)用pass( )函数统计两门课成绩都及格的学生人数;
(5)用maxc( )函数输出计算机成绩最高的学生;
(6)在main( )函数中调用这些函数。
*/
#include <string.h>
#include <stdio.h>
#define N 30 // 学生数量
struct Student // 声明结构体类型
{
int num; // 学号
char name[20]; // 姓名
float math_score, computer_score; // 数学成绩、计算机成绩
float aver; // 平均成绩
};
void input(struct Student stu[]) // 定义input函数
{
int i;
printf("请输入各学生信息:学号、姓名、数学成绩、计算机成绩:\n");
for(i=0; i<N; i++)
{
// 输入数据
scanf("%d %s %f %f", &stu[i].num, &stu[i].name, &stu[i].math_score, &stu[i].computer_score);
stu[i].aver = (stu[i].math_score + stu[i].computer_score) / 2.0;
}
}
void output(struct Student stu[]) // 定义output函数
{
int i;
printf("各学生信息:学号、姓名、数学成绩、计算机成绩:\n");
for(i=0; i<N; i++)
{
// 输出数据
printf("%d %s %.2f %.2f\n", stu[i].num, stu[i].name, stu[i].math_score, stu[i].computer_score);
}
}
void avg(struct Student stu[]) // 定义avg函数
{
int i;
printf("各学生平均分:\n");
for(i=0; i<N; i++)
{
// 输出数据
printf("姓名:%s, 平均分:%.2f\n", stu[i].name, stu[i].aver);
}
}
int pass(struct Student stu[]) // 定义pass函数
{
// 统计两门课成绩都及格的学生人数
int i;
int count = 0;
for(i=0; i<N; i++)
{
if(stu[i].math_score >= 60 && stu[i].computer_score >= 60)
count++;
}
return count;
}
struct Student maxc(struct Student stu[]) // 定义maxc函数
{
int i,m=0;
for(i=0; i<N; i++)
{
if(stu[i].computer_score > stu[m].computer_score)
{
m = i;
}
}
printf("计算机成绩最高的学生为:%s\n", stu[m].name);
}
int main()
{
struct Student stu[N], *p = stu;
input(p);
output(p);
avg(p);
printf("两门课成绩都及格的学生人数为:%d\n", pass(p));
maxc(p);
}