所谓“水题”《化验诊断》

今天下午做了几道入门题,没想到第二道题就把我困住了接近一个小时也就是今天要说的《化验诊断》,幸好后面的题目还给点面子,平均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,判断变成赋值,还容易出现编译错误;最基本的小错误可能导致全盘皆输,就是这个道理,所以以后编程一定要小心再小心,呵呵。

posted on 2013-07-31 21:37  天梦Interact  阅读(594)  评论(0)    收藏  举报