摩尔质量的计算

目录

概述

分析 

简单的实现方式


概述

这是一道算法题。

题目是:给一串分子式,求它的相对分子质量
只含C,H,O,N
C=12.01 g/mol
H=1.008 g/mol
O=16.00 g/mol
N=14.01 g/mol

例如:

输入

C

C2

C2H2

c2h3o5n6

输出

12.01

24.02

26.036

191.104

分析 

首先需要分析一下这个问题。

在计算摩尔质量的时候,主要是挨个扫描,找到对应的质量,累加,当遇到数字的时候,需要累乘。那么可以得到如下编码步骤:

  1. 定义一个输入数组,从开始到结尾扫描。
  2. 区分字符和数字。
  3. 将结果累加起来。 

简单的实现方式

简单的实现方式,是指实现的思想简单,但是代码较多。

逻辑如下:

  1. 开始扫描输入的数组,并挨个判断是字符还是数字。 
  2. 遇见不为指定字母的,即为数字(那么此刻就出现了一个问题,就是例如c2,先计算了c,遇见2之后又将c*2,然后会发现,多计算了一个c,所以每次遇见数字,需要减去上一个字符)。
  3. 数字-'0'(ASCII相减,就能得到数字的ASCII,但是并没有将字符型数字,转化为整型数字)。
  4. 设置两个中间变量来计算,总的值(一个用于保存当前扫描的到数字,一个用于保存之前的字符,而结果就是数字*字符,而且中间变量每次计算完当前的,字符数字组合之后,都要置为0,否则之后就会累加,计算错误)。
  5. 打印最后结果。
#include <stdio.h>
#include <string.h>

int main()
{
	double c=12.01,h=1.008,o=16.00,n=14.01,sum,temp1,temp2;//temp1存储数字,temp2存储数字前的字符 ;
	int i;
	char chem[100];
	double ipt[100];//输入字符
	sum=0;
	scanf("%s",chem); 
	for(i=0;i<strlen(chem);i++)
	{
		if(chem[i]=='c')
		{
			sum=sum+c;
		}
		if(chem[i]=='h')
		{
			sum=sum+h;
		}
		if(chem[i]=='o')
		{
			sum=sum+o;
		}
		if(chem[i]=='n')
		{
			sum=sum+n;
		}
		else{
			
			temp1=chem[i]-'0'; //存储数字
			//(此时为什么要-0呢?因为0的ASCII为48,而字符类型的数字,与数字类型的数字刚好差48,当前此时也能自己写一个,字符型转数字型的方法来实现) 
			if(chem[i-1]=='c')
			{
				temp2 = c;
			}
			if(chem[i-1]=='h')
			{
				temp2 = h;
			}
			if(chem[i-1]=='o')
			{
				temp2 = o;
			}
			if(chem[i-1]=='n')
			{
				temp2 = n;
			}
			sum = temp1*temp2+sum-temp2;
			
			temp1=0;
			temp2=0;//每次结束之后将temp1和temp2的值置为0,以免后续累加 
		}
		printf("第%d次sum值为%.3f\n",i,sum);
	}
	
	printf("%.3f\n",sum);
	
	return 1; 
}

摩尔质量的计算

上一篇:CF Round #550 (Div. 3) (A、B)


下一篇:2021年G3锅炉水处理考试内容及G3锅炉水处理考试总结