刘汝佳算法入门经典习题3-2分子量

本文介绍了一种使用C++编程语言计算分子式中C、H、O、N四种原子分子量的方法。通过逐个读取字符,判断字符类型并计算相应原子的数量,最终计算出分子的总质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

代码和注释如下,对于输入除了数字和CHON之外的字符可以进行报错处理,这里没有考虑。
c++,vc6正常运行,希望大家多多指教。

#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;

int main()
{
	char a;
	int count[4];
	for (int k = 0; k<4; k++ )count[k]=0;//每种元素的个数数组,创建并清零
	int currentcount = 0,num=0;//currentcount指的是当前是何种元素,num指的是当前这种元素后面跟了什么数字,若没跟数字就是1

	
	//可以实现在线执行,不必读入整个数组,思路是逐个读入字符,
	//1.若是读入字母(设定字母只有一位CHON),则当前元素改为该字母对应的currentcount
	//2.若是读入数字,数字可以有多位,而且会分别读入,所以引入了onend变量
	//3.为了实现能够在线输入,所以代码要准备好随时结束输入,那么就要对每一个输入更新我们的元素数组,
	//可以对每一个字符都修改num,如果之前加的num是不完全的num,可以减去之,修改后在最后进行累加
	for(int onend=0; cin>>a; )//这里定义了onend变量,是为了确定当前读入的数字字符是否属于连续,即同一个数字
						
		{	
			
			if(isalpha(a))
				{  
					if(a=='C')currentcount=0;
					if(a=='H')currentcount=1;
					if(a=='O')currentcount=2;
					if(a=='N')currentcount=3;
					num =1;					//读入字母时num设为1
					onend=0;				//数字连续读入中断,设为0
				
				}
			else if(isdigit(a))
				{
					count[currentcount]-=num;  //因为读入了数字,所以上一步的num加的是错误的,应该减去,并对num进行修改
					if(onend==1)num=num*10+(a-48);
					else num=(a-48);
					onend=1;				//读入数字进入连续。设为1
				}
			else break;						//读到的是错误的字符
			count[currentcount]+=num;		//用新的num加到个数上
		}
	double mass = count[0]*12.01+count[1]*1.008+count[2]*16.00+count[3]*14.01;//计算质量
	cout<<mass<<endl;
	return 0; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值