程序设计入门9 分子量

给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含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>
char element[] = "CHON";
double mol[] = { 12.01, 1.008, 16.00, 14.01 };
char formula[80];
int main()
{
	int length;
	int i, j, k, l;
	double sum = 0;
	int count = 0;
	int part, mul;
	scanf("%s",formula);
	length = strlen(formula);
	for (i = 0; i < length; i++)
	{
		if (formula[i] >= 65 && formula[i] <= 90)
		{
			for (j = 0; j < 4; j++)
			{
				if (formula[i] == element[j])
				{
					if (formula[i + 1] < 50 || formula[i + 1]>57)
					{
						sum += mol[i];
					}
					else
					{
						count = 0;
						part = 0;
						mul = 1;
						do
						{
							i++;
							count++;
							for (l = 1; l < count; i++)
							{
								mul = 10
							}
							
						} while (formula[i + 1] >= 50 || formula[i + 1] <= 57);
						for (;;)
						{
							part += (formula[i - count + 1] - '0');
							count--;
						}
					}
				}
			}
		}
	}
	printf("%lf",sum);
	return 0;
不周详之处:

1,格式方面,用<ctype.h>里面的isdigit()和isalpha()更好。

2,不知道若是字母后面有两位该如何处理。(应该先给一个变量赋一个值,往后遍历以为把这个值乘以10再加上下个值,以此类推)。

3,字母后面若有数字,不知道如何找到那个字母。

二 ,标准答案 

#include<stdio.h>
#include<ctype.h>
//这里的数组标记方法极好,把寻找字母和寻找字母的分子量全给表示出来!注意精髓,是数组的顺序能派上大用场
double array[] = { 0,0,12.01,0,0,0,0, 1.008,0,0,0,0,0,14.01,16.00 };
char s[20];
int main()
{
	int i;
	int length;
	double sum = 0;
	char x;
	scanf("%s",s);
	//若输入的是字符串,判断其长度可以不用strlen了,可用是否为'\0'
	for (i = 0; s[i] != '\0'; ++i)
	{
		if (isalpha(s[i]))
		{
			//注意这里的技巧,把当前的那个字母保存下来,如果下一位或者下两位是数字好寻找是哪个字母的。
			x = s[i];
			sum += array[s[i] - 'A'];
		}
		else
		{
			int n = s[i] - '0';
			if (isdigit(s[i + 1]))
			{
				n = n * 10 + s[i + 1] - '0';
				i++;
			}
			sum += array[x - 'A'] * (n - 1);
		}
	}
	printf("%.3lf",sum);
	return 0;
}


猜你喜欢

转载自blog.csdn.net/qq2285580599/article/details/79093040