程序设计与问题求解下实验答案

更新时间:2023-12-08 11:13:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

...

实验 数组、结构体和函数综合编程练习

1.学生成绩统计

从键盘输入一个班(全班最多不超过 30 人)学生某门课的成绩,当输入成绩为 负值时,输入结束,分别实现下列功能:

(1)统计不及格人数并打印不及格学生名单;

(2)统计成绩在全班平均分及平均分之上的学生人数, 并打印这些学生的名单; (3)统计各分数段的学生人数及所占的百分比。

注:将成绩分为六个分数段, 60 分以下为第 0 段,60~69 为第 1 段,70~79 为第 2 段,80~89 为第 3 段,90~99为第 4 段,100 分为第 5 段。

编程要求 :

1. 较好的用户输入输出提示信息

2. 使用子函数来实现上述各个功能, 并且要使用结构体数组来实现, 该结构体中 包括学生学号和成绩

3. 最好不要使用全局变量

#include

#define ARR_SIZE 30

typedef struct tagStudent {

long num;//学生学号 float score;//学生分数 }Student;

int ReadScore(Student stu[]); int GetFail(Student stu[], int n); float GetAver(Student stu[], int n); int GetAboveAver(Student stu[], int n); void GetDetail(Student stu[], int n);

main()

...

...

{

int n, fail, aboveAver; Student stu[ARR_SIZE];

printf(\n = ReadScore(stu);

printf(\fail = GetFail(stu, n);

printf(\aboveAver = GetAboveAver(stu, n);

printf(\GetDetail(stu, n); }

/* 函数功能:从键盘输入一个班学生某门课的成绩及其学号 当输入成绩为负值时,输入结束

函数参数: 存放学生信息的 Student 结构体数组 函数返回值:学生总数 */

int ReadScore(Student stu[]) {

int i = 0;

scanf(\while (stu[i].score >= 0) {

i++;

scanf(\} return i; }

/* 函数功能:统计不及格人数并打印不及格学生名单 函数参数:存放学生信息的 整型变量 n,存放学生总数 函数返回值:不及格人数 */

int GetFail(Student stu[], int n) {

int i, count;

Student 结构体数组

...

...

printf(\count = 0; for (i=0; i

if (stu[i].score < 60) {

printf(\count++;

} }

return count; }

/* 函数功能:计算全班平均分 函数参数:存放学生信息的 整型变量 n,存放学生总数 函数返回值:平均分 */

float GetAver(Student stu[], int n) {

int float

i; sum = 0;

Student 结构体数组

for (i=0; i

sum = sum + stu[i].score; }

return sum/n; }

/* 函数功能:统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单 函数参数:存放学生信息的 整型变量 n,存放学生总数

函数返回值:成绩在全班平均分及平均分之上的学生人数 */

int GetAboveAver(Student stu[], int n) {

int

i, count; float aver;

aver = GetAver(stu, n); printf(\

Student 结构体数组

...

...

printf(\count = 0; for (i=0; i

if (stu[i].score >= aver) {

printf(\count++;

} }

return count; }

/* 函数功能:统计各分数段的学生人数及所占的百分比 函数参数:存放学生信息的 Student 结构体数组 整型变量 n,存放学生总数 函数返回值:无 */

void GetDetail(Student stu[], int n) {

int i, j, stuLevel[6]; for (i=0; i<6; i++) {

stuLevel[i]=0; }

for (i=0; i

if (stu[i].score < 60) {

j = 0;

} else {

j = ((int)stu[i].score - 50) / 10;

}

stuLevel[j]++; }

for (i=0; i<6; i++) {

if (i == 0) {

printf(\

}

%d %.2f%%\\n\

(float)stuLevel[i]/(float)n*100);

...

...

else if (i == 5) {

printf(\

%d %d %.2f%%\\n\(float)stuLevel[i]/(float)n*100);

} else {

printf(\

%d %.2f%%\\n\

stuLevel[i],(float)stuLevel[i]/(float)n*100); } } }

2.成绩排名次

某班期末考试科目为数学( MT)、英语(EN)和物理( PH),有最多不超过 参加考试。要求:

(1)计算每个学生的总分和平均分;

(2)按总分成绩由高到低排出成绩的名次;

(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分; (4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数

#include

#define STU 30

typedef struct tagStudent {

long num;// 学号 float aver;// 平均分 int sum;// 总分

int math;// 数学( MT) int english;// 英语( EN) int physics;// 物理( PH) }Student;

void Input(Student stu[], int n); void GetSumAver(Student stu[],int n); void Sort(Student stu[],int n); void Print(Student stu[],int n); int Search(Student stu[],int n,long x); main() {

...

30 人

本文来源:https://www.bwwdw.com/article/ix3t.html

Top