问题描述:
N名学生的数据已经存储在结构体数组中,编写一个函数fun(),将某一成绩范围的学生的信息资料找出,并存储在另一个数组中,输出另一个数组中的数据。
输入样例:
001 lzj 85
002 jda 86
003 ryt 89
004 lyl 74
005 pda 95
80 90
输出样例:
学号 姓名 成绩
001 lzj 85
002 jda 86
003 ryt 89
004 lyl 74
005 pda 95
在 80分和90分之间学生的成绩的数据为:
学号 姓名 成绩
001 lzj 85
002 jda 86
003 ryt 89
算法分析:
定义了函数fun(),其中有四个形参,分别是:
struct student s[]:接收主函数传递的包含N个学生信息的数组地址。
struct student b[]:存储当成绩在n,m之间的学生信息。
m,n表示需要完成统计的成绩的区间。
定义了函数output()用来输出数据,由于完成后的数据可能会比第一次的少因此还需要定义变量来统计在m,n区间的人数。
Code:
#include<stdio.h>
#define N 5
struct student
{
int no;
char name[10];
int score;
};
int fun(struct student s[],struct student b[],int m,int n);
void output(struct student x[],int n);
int main()
{
int i;
struct student s[N];
for(i=0;i<N;i++)
{
scanf("%d",&s[i].no);
scanf("%s",s[i].name);
scanf("%d",&s[i].score);
}
int m,n,k;
struct student a[N];//调用在m,n之间的数据
scanf("%d%d",&m,&n);
output(s,N);
k=fun(s,a,m,n);
printf("在%d和%d之间的分数的学生的数据为:\n",m,n);
output(a,k);
return 0;
}
int fun(struct student s[],struct student b[],int m,int n)
{
int i,k=0;
for(i=0;i<N;i++)
{
if(s[i].score>=m&&s[i].score<=n)
b[k++]=s[i];//用了另一个数组b[]来储存统计后的数据,用k来表示出人数。
}
return k;
}
void output(struct student x[],int n)
{
int i;
printf("学号 姓名 成绩\n");
for(i=0;i<n;i++)
{
printf("%d %10s %d\n",x[i].no,x[i].name,x[i].score);
printf("\n");
}
}
反思:
其实我也想过不用宏定义来实现人数输出自由的,我那会想的是设立一个input输入函数的,只是最近几天刚好看了宏定义就用了下。 并不是我懒~~
by:一个学习c语言的大学生