于是今天这节课讲的是函数
练习一:
编写函数fun:从n个学生的成绩中统计出低于平均分的学生人数
,由函数返回值返回,平均分存放在形参
ptr_
aver所指的存储单
元中
(即平均分由参数返回)
。
函数原型为:
int fun( float *s, int n, float* ptr_ aver ) ;
int fun( float *s, int n, float* ptr_ aver ) ;
例如
:
若输入8名学生的成绩
如下
80.5
60 72 90.5 98
51.5 88
64
则低于平均分的学生人数为:4
(
平均分
:
75.5625
)
。
#include <stdio.h>
void fun(float *s, int n, float *ptr_aver, int *count);
void main(){
float s[100]; //存放学生成绩
float grade = 0; //成绩Temp
int cursor = 0; //游标
int count = 0; //计数器
printf("Input grades:\n");
while(scanf("%f",&grade)){
if(grade<0) //用输入负数作为终止符
break;
cursor++;
s[cursor] = grade;
}
fun(s, cursor, &grade, &count); //计算
printf("%d students' grade is below the average grade %3.1f\n", count, grade);
}
void fun(float *s, int n, float *ptr_aver, int *count){
int i, cou = 0;
float sum = 0;
for(i = 0; i < n; i++){
sum+= s[i+1];
}
*ptr_aver = sum/n; //计算平均值
for(i = 0; i < n; i++){
if(s[i+1]<sum/n)
cou++; //计算小于平均值的人数
}
*count = cou;
}
练习2:
某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:
1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;
2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;
3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;
4) 西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;
5) 班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;
只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。
例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。
Input
输入的第一行是一个整数N(1 <= N <= 100),表示学生的总数。
输入的第一行是一个整数N(1 <= N <= 100),表示学生的总数。
接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。每两个相邻数据项之间用一个空格分隔。
Output
输出包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。第三行是这N个学生获得的奖学金的总数。
输出包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。第三行是这N个学生获得的奖学金的总数。
#include <stdio.h>
struct info{ //存放学生信息的结构体
char name[20]; //学生姓名
int avg; //学生平均成绩
int clg; //学生班级评定成绩
char lead; //学生是否是班级干部
char west; //学生是否来自西部
int pub; //学生发表的论文
int money; //学生该获得的奖学金
}student[100];
int cal(int index);
void main(){
int i,people = 0, max = 0, sum = 0;
printf("Input sum of students:");
scanf("%d",&people);
for(i = 0; i < people; i++){
fflush(stdin);
scanf("%[^ ] %d %d %c %c %d",student[i].name,&student[i].avg,&student[i].clg,&student[i].lead,&student[i].west,&student[i].pub);
sum += cal(i);
}
for(i = 0; i < people; i++){
if(student[i].money > student[max].money)
max = i;
}
printf("%s\n",student[max].name);
printf("%d\n",student[max].money);
printf("%d\n",sum);
}
int cal(int index){
int sum = 0;
if(student[index].avg>80 && student[index].pub>0)
sum+=8000;
if(student[index].avg>85 && student[index].clg>80)
sum+=4000;
if(student[index].avg>90)
sum+=2000;
if(student[index].west == 'Y' && student[index].avg > 85)
sum+=1000;
if(student[index].lead == 'Y' && student[index].clg > 80)
sum+=850;
student[index].money = sum;
return sum;
}