计算分子量 郑州大学软件工程卓越班课程设计题目4

题目:计算分子量                  

纯净物都有一定的组成,可用一个相应的化学式来表示其组成成分。化学式是用元素符号表示物质组成及原子个数的式子。用化学符号表示物质分子的组成的化学式称为分子式,它的含义是:组成该化合物的元素,各元素原子数之比,各元素原子的重量之和。

化学式可以表示物质的1个分子,以及组成分子的元素种类和原子数量,如果要表示某物质的几个分子,可以在化学式前加上系数.标明该物质的分子数.如2个氧分子可用2O2表示,四氧化三铁可以用Fe3O4表示。

化学式的相对分子质量(简称分子量)是化学式中各原子的原子量的总和,即同种元素的相对原子质量与其原子个数相乘,不同原子的相对原子质量相加。例如:CO2, 碳是12, 氧是16, 那么,CO2分子量就是12+16×2=44

已知各化学分子式用到的元素原子量如下:

 

N

C

O

Cl

S4

H

Al

Ca

Zn

Na

14

12

16

35

32

2

27

40

65

23

计算各分子式的分子量。

【标准输入】 

第一行: T     表示T个分子式。接下来有T行,每行是一个分子式。

【标准输出】

对于每个分子式,输出占一行,一个整数,即对应的分子量。

【约束条件】

2≤T≤8  ,化学式的长度不超过38

【 样  例 】

 

标准输入

标准输出

4

CO2

H2Na2SO4

N(NO2)3

(NH4)2SO4

44

146

152

140

 

要求:1:不带括号的分子式求解

      2:带一层括号的分子式求解

进一步要求:带一层括号的分子式求解   

***********************************************************************************************

笔者水平不高,是标准小白,下面的代码只能赞赏不能吐槽!谢谢配合!

#include<cstdio>
#include<iostream>
#include<stack>
#include<cstdlib>
#include<string>
#include<string.h>
using namespace std;
int All(char s[]){
	char s1[40];
	int i=0,sum=0,tem=0;
	while(s[i]!='\0'){
		if(s[i]=='('){
			int j=0;
			i++;
			while(s[i]!=')')	s1[j++]=s[i++];				
			s1[j]=='\0';
			i++;
			tem = All(s1);	
			if('0'<s[i]&&s[i]<'9'){ tem = tem*(s[i]-'0');	i++;	}					//括号 
		}else if(s[i]=='C'){
			if(s[i+1]=='l'){	tem=36;		i=i+2;//Cl
			}else if(s[i+1]=='a'){	tem=40; 	i=i+2;//Ca 
			}else{	tem=12;		i++;	}//C 
			if('0'<s[i]&&s[i]<'9'){ tem = tem*(s[i]-'0');	i++;	}
		}else if(s[i]=='N'){
			if(s[i+1]=='a'){
				tem=23;
				i=i+2;
			}else{
				tem=14;
				i++;
			}
			if('0'<s[i]&&s[i]<'9'){ tem = tem*(s[i]-'0');	i++;	}	//N Na
		}else if(s[i]==79){
			tem=16;
			i++;
			if('0'<s[i]&&s[i]<'9'){ tem = tem*(s[i]-'0');	i++;	}	//  O
		}else if(s[i]=='S'){
			tem=32;
			i++;
			if('0'<s[i]&&s[i]<'9'){ tem = tem*(s[i]-'0');	i++;	}	// S
		}else if(s[i]=='H'){
			tem=2;
			i++;
			if('0'<s[i]&&s[i]<'9'){ tem = tem*(s[i]-'0');	i++;	}   // H
		}else if(s[i]=='A'){
			tem=27;
			i++;i++;
			if('0'<s[i]&&s[i]<'9'){ tem = tem*(s[i]-'0');	i++;	}     // Al
		}else if(s[i]=='Z'){
			tem=65;
			i++;i++;
			if('0'<s[i]&&s[i]<'9'){ tem = tem*(s[i]-'0');	i++;	}    //Zn
		}
		sum = sum+tem;
	}
	return sum;
}

int main(){
	int T,x;
	char s[40];
	scanf("%d",&T);
	while(T--){
		scanf("%s",s);
		printf("%d\n",All(s));
	}
	return 0;
}

感觉这个程序代码更像是一片作文,平淡的很~

猜你喜欢

转载自blog.csdn.net/xizi_ghq/article/details/82426126