注意:本篇文章有点长耐心看完
案例描述:
2014年秋季起,我国执行学生体质健康测试的新标准,大学生体测成绩低于50分将不能毕 业,按结业或肄业处理。此项标准的执行引起了学校以及诸多在校大学生的密切关注,学校建议 各级学生参与晨练,部分学生也自觉开始进行适量运动,以提高身体素质。看表一
案例分析
表4-1中“单项指标”一栏分为7项,前五项为男生女生都需要测试的项目,后两项根据
性别决定需要测试的具体项目,这里可将项目简单分为这两类。
该系统的目的在于模拟体测成绩的判定机制,因此不要求实现所有项目成绩的判定,根据以
上分类,结合案例,对将要设计的程序,作如下要求:
(1)根据表4-2中给出的评分表,分别实现体重指数、肺活量、引体向上、仰卧起坐这四
项指标的计算功能;
(2)可以根据用户的选择,进行单项指标的成绩换算;
(3)实现总成绩的计算功能,并根据表4-3对总成绩进行判定(优秀、良好、及格、不
及格);
(4)以菜单的形式向用户展示所有功能。
总成绩的计算方式为:各项成绩与其所占比重相乘,将相乘后的成绩相加,具体公式如下。 (1)男生:体重指数x25%+肺活量x35%+引体向上x40%;
(2)女生:体重指数x25%+肺活量x35%+仰卧起坐x40%。
案例实现
1.案例设计
案例要求实现体重指数、肺活量、引体向上、仰卧起坐这四项指标的计算功能,在案例分析 中我们将7个指标粗略划分为两类,根据划分结果可知,其中体重指数和肺活量为一类,引体向 上和仰卧起坐为一类。
按其分类,体重指数和肺活量可设置为同一类函数,这类函数可根据性别,执行不同的代码 段,完成针对某条记录的计算;引体向上和仰卧起坐可设置为同一类函数,即只针对性别为男的同学的引体向上成绩的计算,或只针对性别为女的同学的仰卧起坐成绩的计算。 若要实现上述四项指标的计算功能,需要实现四个功能函数。
案例要求程序可以菜单的形式向用户展示所有的功能,为了使程序模块化,可将菜单功能实 现为一个函数。菜单函数应能向用户展示所有功能,并获取用户的选择。
同时案例要求程序可实现对某位同学各项总成绩的计算功能,该功能同样可模块化为一个 函数。
综上,本案例的所有功能可由如下几个函数实现:
(1)求体重指数成绩的函数;
(2)求肺活量成绩的函数;
(3)求引体向上成绩的函数;
(4)求仰卧起坐成绩的函数;
(5)求总成绩的函数;
(6)菜单函数。
当然必不可少的还有主函数,主函数中可根据菜单函数返回的选项,选择需要实现的功能
Sleep函数是<windows.h>里等待函数
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int sex=0;//性别由外部转入,计算时避免性别的出现
int conutBMI(int sex)//体重指数
{
float weight,height;
printf("请输入体重(kg),身高(m):");
scanf("%f%f",&weight,&height);
float BMI=weight/(height*height);
int seo=0;
switch(sex)
{
case 0://男生
if(BMI>17.9&&BMI<23.9)
seo=100;
else if(BMI>17.8||(BMI>24.0&&BMI<27.9))
seo=80;
else
seo=30;
break;
case 1://女生
if(BMI>17.2&&BMI<23.9)
seo=100;
else if(BMI>17.1||(BMI>24.0&&BMI<27.9))
seo=80;
else
seo=30;
break;
default:
seo=0;
break;
}
printf("体重指数为:%.2f,成绩为%d\n",BMI,seo);
return seo;
}
int conutFVC()//肺活量
{
int FVC,seo;
printf("请输入肺活量(ml):");
scanf("%d",&FVC);
switch(sex)
{
case 0:
if(FVC>4800)
seo=100;
else if(FVC>4180&&FVC<=4800)
seo=80;
else if(FVC>3100&&FVC<=4180)
seo=60;
else
seo=30;
break;
case 1:
if(FVC>3400)
seo=100;
else if(FVC>3000&&FVC<=3400)
seo=80;
else if(FVC>2050&&FVC<=3000)
seo=60;
else
seo=30;
break;
default:
break;
}
return seo;
}
int conutChinups()//引体向上
{
if(sex==1)
{
printf("引体向上是男生特有项目!\n");
Sleep(2000);
exit(0);
}
int Ups,seo;
printf("引体向上计数为:");
scanf("%d",&Ups);
if(Ups>19)
seo=100;
else if(Ups>15&&Ups<=19)
seo=80;
else if(Ups>10&&Ups<=15)
seo=60;
else
seo=30;
return seo;
}
int conutSitup()//仰卧起坐
{
if(sex==0)
{
printf("仰卧起坐为女生特有项目!\n");
Sleep(2000);
exit(0);
}
int Ups,seo;
printf("仰卧起坐计数为:");
scanf("%d",&Ups);
if(Ups>56)
seo=100;
else if(Ups>52&&Ups<=56)
seo=80;
else if(Ups>26&&Ups<=52)
seo=60;
else
seo=30;
return seo;
}
void getNum()//总成绩
{
int BMI,FVC,Cups,Sups;
double num;
BMI=conutBMI(sex);
FVC=conutFVC(sex);
if(sex==0)
{
Cups=conutChinups();
num=BMI*0.25+FVC*0.35+Cups*0.4;
}
else
{
Sups=conutSitup();
num=BMI*0.25+FVC*0.35+Sups*0.4;
}
if(num>95)
printf("综合成绩为%.2f,优秀\n",num);
else if(num>80&&num<95)
printf("综合成绩为%.2f,良好\n",num);
else
printf("综合成绩为%.2f,及格\n",num);
}
int menu()//菜单
{
int sec;
printf("功能菜单:\n");
printf("========\n");
printf("1.体重指数\n");
printf("2.肺活量\n");
printf("3.引体向上\n");
printf("4.仰卧起坐\n");
printf("5.总成绩\n");
printf("6.退出\n");
printf("========\n");
printf("请输入性别(男:0,女:1):");
scanf("%d",&sex);
while(sex!=1&&sex!=0)
{
printf("选择有误!\n请重新输入:");
scanf("%d",&sex);
}
printf("请输入想要的功能:");
scanf("%d",&sec);
while(sec>5||sec<0)
{
printf("选择有误!\n请重新输入:");
scanf("%d",&sec);
}
return sec;
}
int main()
{
int sec=menu();
switch(sec)
{
case 0:
exit(0);
break;
case 1:
conutBMI(sex);
break;
case 2:
conutFVC(sex);
break;
case 3:
conutChinups();
break;
case 4:
conutSitup();
break;
case 5:
getNum();
default:
break;
}
return 0;
}
这里给出两种例子:
下期见