计算由CHON构成的分子的分子量

2023-12-18 06:11:35

UVa1586

给出一种物质的分子式(不带括号),求分子量。本题的分子式只包含4种原子,分别为C,H,O,N,原子量分别为12.01,1.008,16.00,14.01(单位:g/mol)。例如,C6H5OH的分子量为94.108g/mol。

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 256

int main()
{
	double element[MAX] = {0};//存放原子的原子量
	element['C'] = 12.01;
	element['H'] = 1.008;
	element['O'] = 16.00;
	element['N'] = 14.01;
	char s[MAX];//分子式
	scanf("%s", s);
	size_t num = strlen(s);
	int count = 0;//原子的个数
	double ans = 0;//分子量
	for (int i = 0; i < num; i++)//分子式剖析为各个字符
	{
		char c = s[i];
		if (isupper(s[i]) && isdigit(s[i + 1]))//情况一:原子后面有大于1的数
		{
			while (isdigit(s[i + 1]))//统计原子后面的数字
			{
				count = 10 * count + (s[i + 1] - 48);
				i++;//这里i++有两个作用:1,为了统计下一个数字,比如C12原本i下标对应C,现在i++对应1,接下来就统计下一位数字;2,倘若下一位不是数字,这里i++后指向数字,到了for循环结尾又会i++指向下一个字母
			}
			ans += count * element[c];//注意这里要用element[c],不能用element[s[i]],因为这里的i不是刚开始的i了
			count = 0;//为下一次做准备
		}
		else
		{
			ans += element[s[i]];//情况二:原子后面没有数字,即为一个原子
		}
	}
	printf("%.3fg/mol\n", ans);

	return 0;
}

文章来源:https://blog.csdn.net/cookies_s_/article/details/135051383
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。