首页 > 其他 > 详细

Molar Mass

时间:2021-01-25 19:58:43      阅读:49      评论:0      收藏:0      [点我收藏+]

技术分享图片

附上翻译:

现给你若干个分子式需要你求分子量。

例如:C6H5OH的分子量为12.016+1.0085+16.00+1.008=94.108g/mol。

 

个人解法:我认为这道题的难点在于如何算出一个字母后的数字大小,我的做法是不断判断字符是否大于0小于10,直到到达一个字母,在这个过程中不断累加原子数量

代码如下:

#include<stdio.h>
#include<string.h>
#define C 12.01
#define H 1.008
#define O 16.00
#define N 14.01
int main(void)
{
    int n;
    scanf("%d", &n);
    while (n--)
    {
        char ch[999];
        scanf("%s", ch);
        int m = strlen(ch);
        double sum = 0;
        for (int i = 0; i < m; i++)
        {
            int q = 0;//用来记录字母后面是否有数字,如果有数字q就会变为1
            double count = 0;
            int rec = i+1;

       //while这个地方是可以用!isalpha(ch[rec])&&ch[rec]!=0代替掉的,如果不是字母那么就往后迭代,直到遇到字母或者字符串末尾

while (ch[rec] - 0 > 0 && ch[rec] - 0 < 10) // 一直找字母后是数字的字符 { q = 1; count = count*10+ch[rec]-0;//将每次找到的字符转换为数字加起来,注意每迭代一次,就需要将原来的count*10再加上新的数字 rec++; } if (q) { switch (ch[i]) { case C:sum += C * count; break; case H:sum += H * count; break; case O:sum += O * count; break; case N:sum += N * count; break; } i = rec-1;//因为中间都为数字所以不用考虑中间数字,直接将i移动到最后一个数字后的字母上,因为rec已经在字母的位置,每次迭代i会加1,所以这个地方i = rec-1 } else { switch (ch[i]) { case C:sum += C; break; case H:sum += H; break; case O:sum += O; break; case N:sum += N; break; } } } printf("%.3lf\n", sum); } return 0; }

 

Molar Mass

原文:https://www.cnblogs.com/loliconsk/p/14326985.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!