C语言程序设计:指定分数范围的学生数据筛选
C语言程序设计:指定分数范围的学生数据的筛选
题目描述:
学生的记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组s中。请编写函数fun,其功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。
例如:输入的分数是60、69,则应当把分数在60~69的学生数据输出,包含60分和69分的学生数据。主函数中把60放在low中,把69放在heigh中。
代码示例:
#include <stdio.h>
#define N 16
typedef struct
{
char num[10];
int s;
} STREC;
int fun( STREC *a, STREC *b, int l, int h )
{
int count = 0;
for (int i = 0; i < N; i++) {
if (a[i].s >= l && a[i].s <= h) {
b[count] = a[i];
count++;
}
}
return count;
}
void main()
{
STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},
{"GA001",96},{"GA007",72},{"GA008",64},{"GA006",87},
{"GA015",85},{"GA013",94},{"GA012",64},{"GA014",91},
{"GA011",90},{"GA017",64},{"GA018",64},{"GA016",72}};
STREC h[N];
int i,n,low,heigh,t;
printf("Enter 2 integer number low & heigh : ");
scanf("%d%d", &low,&heigh);
if ( heigh< low )
{
t=heigh;
heigh=low;
low=t;
}
n=fun( s,h,low,heigh );
printf("The student's data between %d--%d :
",low,heigh);
for(i=0;i<n; i++)
printf("%s %4d\n",h[i].num,h[i].s);
printf("\n");
}
函数fun实现细节:
- 初始化计数器count为0,用于记录符合条件的学生人数。
- 遍历结构体数组a,判断每个学生的成绩是否在指定范围内(大于等于l且小于等于h)。
- 若符合条件,则将该学生数据复制到结构体数组b中,并计数器count加1。
- 最后返回计数器count,即符合条件的学生人数。
程序运行流程:
- 程序开始运行后,首先会初始化学生数据结构体数组s,并定义另一个结构体数组h来存放筛选后的学生数据。
- 程序提示用户输入最低分数low和最高分数heigh。
- 调用函数fun,将s、h、low、heigh作为参数传入,进行学生数据筛选。
- 函数fun返回符合条件的学生人数,并存储在变量n中。
- 程序输出筛选结果,包括筛选条件和符合条件的学生数据。
程序功能:
本程序通过函数fun实现了对学生数据的筛选功能,可以根据用户输入的最低分数和最高分数,从结构体数组中筛选出指定分数范围内的学生数据。
程序扩展:
本程序可以进一步扩展,例如:
- 增加对学生姓名、班级等信息的存储和筛选功能。
- 增加排序功能,将筛选后的学生数据按照学号、成绩等排序。
- 将程序改写成图形界面,提供更友好的用户交互方式。
程序学习价值:
本程序可以帮助学习者理解结构体、数组、函数等C语言基础知识,以及数据筛选和排序等常用算法。同时,程序也展示了如何将程序设计与实际问题相结合,解决实际问题。
原文地址: https://www.cveoy.top/t/topic/pbm1 著作权归作者所有。请勿转载和采集!