习题3-2分子量(Molar Mass)

3-2分子量(Molar Mass)

给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol)。例如,C6H5OH的分子量为94.108g/mol。

解题思路:

也是对于逻辑思维的实践,逻辑思维是什么?是步骤,还是步骤之后的思想。
一个问题摆在这里,怎么去解决,对于这个问题,如何去层层剖析。

外围问题:如何输入分子式
是用getchar或者scanf边输入字符边判断,还是先直接输入一个字符串到数组,对数组进行分解判断。
getchar和scanf读取字符时存在一个问题,它们对于换行符也会读取,gets也会读取之前剩下的换行符,现行的C语言标准貌似已经废弃了gets函数。
C++的一个优势也在于此,cin和cout是真的好使。

核心问题:如何分解分子式计算分子量
逻辑过程如下:首先分子式肯定是以字符打头了,根据题目,只存在一下几种形式(X指代CNOH任一元素,D指代数字):
1.XX式 2.XD式 不存在(XX)D式
那么判断就很容易了,首先从头开始读取mass数组,首先肯定是字母,只要判断接下来一个字符是否是数字就行了,是的话,就拿当前的这个元素分子量乘以数字,然后加到sum里,不是的话就直接加到sum,看下一个字符就行了。
这个逻辑过程理顺之后程序就水到渠成了。

第一版代码有问题,没考虑D为两位数三位数甚至更多的情况,往下有修改过之后AC的代码。

#include <stdio.h>
#include <string.h>
#include <ctype.h>
float gmol(char c){
   
    if(c=='C') return 12.01;
    if(c=='H') return 1.008;
    if(c=='O') return 16.00;
    if(c=='N') return 14.01;
    else 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值