原子量计数

原文链接: http://www.cnblogs.com/arcfat/archive/2012/10/20/2732244.html

原子量计数

Description

给出一个化学原子式,仅含有C,H,O,N 四种元素,计算其总分子量。
例如,C6H5OH 的原子量为94.108g/mol,计算方法为:
6 × (12.01 g/mol) + 6 × (1.008 g/mol) +1 × (16.00 g/mol).

Input

输入的第一行是数字T,表示输入文件含有T个CASE。之后有T行,每行有一个长度小于100 的字符串,
表示要求的分子式。原子都用大写字母表示,没有括号,保证所有的式子都合法。

Output

输出每个式子的原子量。

 

Sample Input

4
C
C6H5OH
NH2CH2COOH
C12H22O11

 

Sample Output

12.010
94.108
75.070
342.296

//以下是代码:

#include<stdio.h>
#include<string.h>
#define newnum 0
#define oldnum 1
int main()
{
float c,h,o,n,cnt;
int i,j,len,t;
int tc,th,to,tn;
char str[101];
scanf("%d",&t);
for(j=0;j<t;j++)
{
  c=h=o=n=0;
  scanf("%s",str);
  len=strlen(str);
  str[len]='=';
  for(i=0;i<len+1;)
  {
    tc=th=to=tn=0;
    switch(str[i++]) //此处已经把向后移了一位
    {
      case 'C':
      if(str[i]>='0'&&str[i]<='9') //当前字符是数字的话
      {
        tc=str[i++]-'0';
        while(str[i]>='0'&&str[i]<='9')
        {
          tc=tc*10+(str[i++]-'0');
        }
        c+=tc;
      }
      else //当前不是数字的话
      {
        c++;
      }
      break;

      case 'H':
      if(str[i]>='0'&&str[i]<='9') //当前字符是数字的话
      {
        th=str[i++]-'0';
        while(str[i]>='0'&&str[i]<='9')
        {
          th=th*10+(str[i++]-'0');
        }
        h+=th;
      }
      else //当前不是数字的话
      {
        h++;
      }
      break;

      case 'O':
      if(str[i]>='0'&&str[i]<='9') //当前字符是数字的话
      {  
        to=str[i++]-'0';
        while(str[i]>='0'&&str[i]<='9')
        {
        to=to*10+(str[i++]-'0');
        }
        o+=to;
      }
      else //当前不是数字的话
      {
        o++;
      }
      break;

      case 'N':
      if(str[i]>='0'&&str[i]<='9') //当前字符是数字的话
      {
        tn=str[i++]-'0';
        while(str[i]>='0'&&str[i]<='9')
        {
        tn=tn*10+(str[i++]-'0');
        }
        n+=tn;
      }
      else //当前不是数字的话
      {
        n++;
      }
      break;
      }
    }
    cnt=c*12.01+h*1.008+o*16.00+n*14.01;
    printf("%.3f\n",cnt);
  }
  return 0;
}

转载于:https://www.cnblogs.com/arcfat/archive/2012/10/20/2732244.html

猜你喜欢

转载自blog.csdn.net/weixin_30551963/article/details/94789586
今日推荐