已知一个C原子的重量为12.01,一个H原子的重量为1.008,一个O原子的重量为16.00,一个N原子的重量为14.01(单位全部为g/mol)。然后需要求出一个分子式的重量(都是最简单的分子式,不含有括号)。
例如:C6H5OH的相对分子质量为94.108 g/mol。
输入描述
多组测试,输入一个K,表示K组样例。
然后K组输入,表示K个分子式。
分子式长度不超过500
输出描述
输出每个分子式的相对分子质量。
代码如下:
#include <stdio.h>
int main()
{
char str[20][500] ={0};
int i,j,k;
float c = 12.01;
float h = 1.008;
float o = 16.00;
float n = 14.01;
float sum = 0.0;
float tmp;
int flag = 0;
printf("请输入k:");
scanf("%d",&k);
getchar(); //吸收回车符
printf("请输入%d组样例\n",k);
for (i=0;i<k;i++)
gets(str[i]);
for(i=0;i<k;i++)
{
flag = 0;
sum = 0.0;
j = 0;
while(1)
{
if(str[i][j] == '\0')
break;
if(str[i][j] == 'C' || str[i][j] == 'c' )
tmp = c;
else if(str[i][j] == 'H' || str[i][j] == 'h')
tmp = h;
else if(str[i][j] == 'O' || str[i][j] == 'o')
tmp = o;
else if(str[i][j] == 'N' || str[i][j] == 'n')
tmp = n;
else
{
flag = 1;
break;
}
j++;
if(str[i][j] >= '0' && str[i][j] <= '9')
{
sum += tmp * (str[i][j] - '0');
j++;
}else
{
sum += tmp;
}
}
if(flag)
printf("未知的元素%c\n",str[i][j]);
else
printf("%f\n",sum);
}
return 0;
}