下表是进行血常规检验的正常值参考范围,及化验值异常的临床意义:
表 血常规检验正常值参考范围列表
给定一张化验单,判断其所有指标是否正常,如果不正常,统计有几项不正常。化验单上的值必须严格落在正常参考值范围内,才算是正常。正常参考值范围包括边界,即落在边界上也算正常。
输入格式:
输入的第一行包含一个正整数k(0<k<100),表示有k组测试数据;接下来k行,每行包含一组测试数据。每组测试数据第一项是一个英文单词(male,男或者female,女),表示受测者的性别;第二项是白细胞的值(以10^9/L为单位);第三项是红细胞的值(以10^12/L为单位);第四项是血红蛋白的值(以g/L为单位);第五项是红细胞比积的值(以%为单位);第六项是血小板计数的值(以10^9/L为单位)。每两项用一个空格分开。
输出格式:
对于每组测试数据,输出一行。如果所有检验项目正常,则输出:normal;否则输出不正常的项的数目。
输入样例:
2
female 4.5 4.0 115 37 200
male 3.9 3.5 155 36 301
输出样例:
normal
3
代码(可能会有点笨,但是思路就这样,应该会有更简洁的表达)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int main(int argc, char *argv[]) {
int i,k,p[5]={0};
scanf("%d",&k);
char n[6];//性别
float a,b,c,d,e;
int j,m;
for(i=0;i<k;i++){
scanf("%s",n);
scanf("%f %f %f %f %f",&a,&b,&c,&d,&e);
if(strcmp(n,"female")==0){
if(a>=4&&a<=10) p[0]=1;
else p[0]=0;
if(b>=3.5&&b<=5.5) p[1]=1;
else p[1]=0;
if(c>=110&&c<=150) p[2]=1;
else p[2]=0;
if(d>=36&&d<=40) p[3]=1;
else p[3]=0;
if(e>=100&&e<=300) p[4]=1;
else p[4]=0;
m=0;
for(j=0;j<5;j++){
if(p[j]==1) m++;
}
if(m==5) printf("normal\n");
else printf("%d\n",5-m);
}
if(strcmp(n,"male")==0){
if(a>=4&&a<=10) p[0]=1;
else p[0]=0;
if(b>=3.5&&b<=5.5) p[1]=1;
else p[1]=0;
if(c>=120&&c<=160) p[2]=1;
else p[2]=0;
if(d>=42&&d<=48) p[3]=1;
else p[3]=0;
if(e>=100&&e<=300) p[4]=1;
else p[4]=0;
m=0;
for(j=0;j<5;j++){
if(p[j]==1) m++;
}
if(m==5) printf("normal\n");
else printf("%d\n",5-m);
}
}
return 0;
}