所谓“水题”《化验诊断》
今天下午做了几道入门题,没想到第二道题就把我困住了接近一个小时也就是今天要说的《化验诊断》,幸好后面的题目还给点面子,平均20来分钟一个,也许是我运气好,没碰到难题,嘿嘿~~下面就把《化验诊断》拿出来分析一下,纪念一下这个“小错误,大问题!!”
描述
下表是进行血常规检验的正常值参考范围,及化验值异常的临床意义:
给定一张化验单,判断其所有指标是否正常,如果不正常,统计有几项不正常。化验单上的值必须严格落在正常参考值范围内,才算是正常。正常参考值范围包括边界,即落在边界上也算正常。输入
输出:
对于每组测试数据,输出一行。如果所有检验项目正常,则输出:normal;否则输出不正常的项的数目。
样例输入
2 female 4.5 4.0 115 37 200 male 3.9 3.5 155 36 301
样例输出
normal 3
源代码为:
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int main()
{
int i,k,n;
double WBC,RBC,HGB,HCT,PLT;
string p;
cin>>k;
for(int i=0;i<k;i++)
{ cin>>p>>WBC>>RBC>>HGB>>HCT>>PLT;
n=0;
if(WBC<4.0||WBC>10.0)
n++;
if(RBC<3.5||RBC>5.5)
n++;
if(PLT<100||PLT>300)
n++;
if(p=="male")
{
if(HGB<120||HGB>160)
n++;
if(HCT<42||HCT>48)
n++;
}
if(p=="female")
{
if(HGB<110||HGB>150)
n++;
if(HCT<36||HCT>40)
n++;
}
if(n==0)cout<<"normal"<<endl;
else cout<<n<<endl;
}
return 0;
}
题目分析:题目不难,一看就懂,无非就是输入k组数据,然后每一组有六个元素,一个是性别,五个是血样指标;
对每一组处理时,首先可以设一个n表示不正常的数目,先把不涉及性别的血样指标和标准值做比较,然后把涉及性别的指标分性别比较;有一个不正常的n就+1;
如果最终n==0,那么cout<<"formal";如果n不等于0,输出n;
错误原因:
1;字符串用char *p定义,这样为比较制造麻烦;
2:if(p=="female")以前用的是 if ( strcmp ( p , "female" ) );其中比较的两个数需要是固定的,所以错误.
3:最气人的就是这个:判断n是否为0时,硬是把 n==0;写成 n=0,判断变成赋值,还容易出现编译错误;最基本的小错误可能导致全盘皆输,就是这个道理,所以以后编程一定要小心再小心,呵呵。
书山有路勤为径,学海无涯苦作舟!!!
浙公网安备 33010602011771号