解题思路:
1.将分子量用double 数组记录下来
2.将字符串存储在字符数组中,从头向后扫描,一直记住“字母”,对下一个字符进行判断,是否是数字,如果是数字:用一个整数记录,本代码中用的sum,同时下标++。
进行判断,查看是否对数字进行了记录,即查看sum是否进入了while循环并被赋值,如果没有被赋值,说明下一个字符不是数字,直接对W(总记录)值进行赋值,为当前字符的权值(分子量),即double数组的中的值。如果被赋值,说明字符后面是一个数字,sum中存放了该“数字”,也是对w赋值,不过此时是赋sum倍的当前字符的权值(分子量)。
3.最后整个字符串循环完毕,输出总记录W即可。
#include <stdio.h> int main(void) { double darr[200]; int n,sum,p; double w; char c,carr[1000]; darr['C']=12.01; darr['H']=1.008; darr['O']=16.00; darr['N']=14.01; scanf("%d",&n); while(n--) { p=0; w=0; scanf("%s",carr); while(carr[p]!=' ') { sum=0; c=carr[p]; p++; while(carr[p]>='0' && carr[p]<='9') { sum=sum*10+carr[p]-'0'; p++; } if(sum) w=w+sum*(darr[c]); else w+=(darr[c]); } printf("%.3f ",w); } return 0; }