给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol),输入t个分子式,输出分子量,保留三位小数。
输入:
4
C
C6H5OH
NH2CH2COOH
C12H22O11
输出:
12.010
94.108
75.070
342.296
哈哈哈,想不明白怎样分清数字和字母,参考大佬的,膜拜!!!
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define N 100
int search(char a,char* p){ //用于查找某字符在字符数组里的下标位置
int i;
for(i=0;i<4;i++)
if(a==p[i])
return i;
}
int main(){
char s[N],abc[]="CHON";
int num[4] = {0},t=0,i=0;
float sum;
scanf("%s",s);
while(isdigit(s[i])){
t = 10*t+s[i]-'0';
i++;
}
for(;i<strlen(s);i++){
if(isalpha(s[i]))
if(isdigit(s[i+1])&&isdigit(s[i+2]))
num[search(s[i],abc)] += 10*(s[i+1]-'0')+(s[i+2]-'0');
else
num[search(s[i],abc)]+=isdigit(s[i+1])?s[i+1]-'0':1;
}
sum=12.01*num[0]+1.008*num[1]+16*num[2]+14.01*num[3];
if(t==0) t=1;
printf("%.3fg/mol\n",t*sum);
return 0;
}