给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含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;
}