C++化学元素周期表

C++化学元素周期表,第1张

C++化学元素周期表

翻遍全网都没有,所以我自己写了一个

const string chemh[119]= {                                 //元素周期表
  "It is EMPTY",
  "氢","氦","锂","铍","硼","碳","氮","氧","氟","氖",
  "钠","镁","铝","硅","磷","硫","氯","氩","钾","钙",
  "钪","钛","钒","铬","锰","铁","钴","镍","铜","锌",
  "镓","锗","砷","硒","溴","氪","铷","锶","钇","锆",
  "铌","钼","锝","钌","铑","钯","银","镉","铟","锡",
  "锑","碲","碘","氙","铯","钡","镧","铈","镨","钕",
  "钷","钐","铕","钆","铽","镝","钬","铒","铥","镱",
  "镥","铪","钽","钨","铼","锇","铱","铂","金","汞",
  "铊","铅","铋","钋","砹","氡","钫","镭","锕","钍",
  "镤","铀","镎","钚","镅","锔","锫","锎","锿","镄",
  "钔","锘","铹","","","","","","","",
  "","RE","RE","","镆","RE","RE","RE"//RE即打不出来或打出“釒”
};

const float chemn[119]= {                                  //相对原子质量
  0,1,4,7,9,11,12,14,16,19,20,23,24.31,27,28,31,32,35.5,40,39,40,
  45,48,51,52,55,56,59,58.69,63.5,65.5,69.72,72.5,75,79,80,84,85.5,87.5,89,91.22,
  93,96,98,101,103,106.4,107.9,112.4,114.8,118.7,121.8,127.6,126.9,
  131.3,132.9,137.3,138.9,140.1,140.9,144.2,145,150.4,152,157.3,158.9,
  162.5,164.9,167.3,168.9,173,175,178.5,180.9,183.8,186.2,190.2,192.2,
  195.1,197,200.6,204.4,207.2,209,209,210,222,223,226,227,232,231,238,237,
  244,243,247,247,251,252,257,258,259,262,267,270,269,270,270,278,281,281,285,
  286,289,289,293,293,294
};

const string chemf[119]= {                                 //元素符号
  "It is EMPTY",
  "H","He","Li","Be","B","C","N","O","F","Ne",
  "Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca",
  "Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn",
  "Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr",
  "Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn",
  "Sb","Te","I","Xe","Cs","Ba","La","Ce","Pr","Nd",
  "Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb",
  "Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg",
  "Tl","Pb","Bi","Po","At","Rn","Fr","Ra","Ac","Th",
  "Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm",
  "Md","No","Lr","Rf","Db","Sg","Bh","Hs","Mt","Ds",
  "Rg","Cn","Nh","Fl","Mc","Lv","Ts","Og"
};

顺便送个完整的化学库w

//This file is .
#ifndef _CHEMISTRY_H_
#define _CHEMISTRY_H_

#include
#include
#include

#ifndef _FASTOIER_H_
using namespace std;
#endif

inline int chnum(string);                                  //查询原子序数
inline void chsearch(string);                              //给定元素符号查询信息
inline float chrmm(string);                                //计算相对分子质量
inline int chsolve(string);                                //配平总函数

const string chemh[119]= {                                 //元素周期表
  "It is EMPTY",
  "氢","氦","锂","铍","硼","碳","氮","氧","氟","氖",
  "钠","镁","铝","硅","磷","硫","氯","氩","钾","钙",
  "钪","钛","钒","铬","锰","铁","钴","镍","铜","锌",
  "镓","锗","砷","硒","溴","氪","铷","锶","钇","锆",
  "铌","钼","锝","钌","铑","钯","银","镉","铟","锡",
  "锑","碲","碘","氙","铯","钡","镧","铈","镨","钕",
  "钷","钐","铕","钆","铽","镝","钬","铒","铥","镱",
  "镥","铪","钽","钨","铼","锇","铱","铂","金","汞",
  "铊","铅","铋","钋","砹","氡","钫","镭","锕","钍",
  "镤","铀","镎","钚","镅","锔","锫","锎","锿","镄",
  "钔","锘","铹","","","","","","","",
  "","RE","RE","","镆","RE","RE","RE"//RE即打不出来或打出“釒”
};

const float chemn[119]= {                                  //相对原子质量
  0,1,4,7,9,11,12,14,16,19,20,23,24.31,27,28,31,32,35.5,40,39,40,
  45,48,51,52,55,56,59,58.69,63.5,65.5,69.72,72.5,75,79,80,84,85.5,87.5,89,91.22,
  93,96,98,101,103,106.4,107.9,112.4,114.8,118.7,121.8,127.6,126.9,
  131.3,132.9,137.3,138.9,140.1,140.9,144.2,145,150.4,152,157.3,158.9,
  162.5,164.9,167.3,168.9,173,175,178.5,180.9,183.8,186.2,190.2,192.2,
  195.1,197,200.6,204.4,207.2,209,209,210,222,223,226,227,232,231,238,237,
  244,243,247,247,251,252,257,258,259,262,267,270,269,270,270,278,281,281,285,
  286,289,289,293,293,294
};

const string chemf[119]= {                                 //元素符号
  "It is EMPTY",
  "H","He","Li","Be","B","C","N","O","F","Ne",
  "Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca",
  "Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn",
  "Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr",
  "Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn",
  "Sb","Te","I","Xe","Cs","Ba","La","Ce","Pr","Nd",
  "Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb",
  "Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg",
  "Tl","Pb","Bi","Po","At","Rn","Fr","Ra","Ac","Th",
  "Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm",
  "Md","No","Lr","Rf","Db","Sg","Bh","Hs","Mt","Ds",
  "Rg","Cn","Nh","Fl","Mc","Lv","Ts","Og"
};

inline int chnum(string ch) {                              //查询原子序数
  for(int i=1; i<=118; ++i)
    if(chemf[i]==ch)
      return i;
  return -1;
}

inline void chsearch(string ch) {                          //给定元素符号查询信息
  int num=chnum(ch);
  if(num==-1) {
    cout<<"No Find."<='a'&&(n)<='z')
#define isbig(n) ((n)>='A'&&(n)<='Z')
#define isnumber(n) ((n)>='0'&&(n)<='9')

inline float chrmm(string ch) {                            //计算相对分子质量
  //rmm,Relative Molecular Mass,相对分子质量
  if(!isbig(ch[0]))return -1;
  int len=ch.length(),i=0,i2,di;
  float tot=0;
  char c[3]="",c2[11]="";//防溢出
  while(i0?x.a:-x.a,q=x.b>0?x.b:-x.b;
  return (frac) {
    p,q
  };
}
char s[110];
int fun[55][55];
int Map[27][27];//手动MAP
frac M[55][55];//求解矩阵
frac ans[55];//解
int Ans[55];//整数解
int cnt,c1,c2,flag=1,N,K;//cnt数元素,c1数反应物,c2总数 (未知数的数量)
char mat[55][55];//存储物质的名称
void print() {
  printf("%d %dn",N,K);
  for(int i=1; i<=K; i++) {
    for(int j=1; j<=N+1; j++)
      printf("%d ",M[i][j].a);
    printf("n");
  }
  printf("n");
}
inline int getint(int pos) {//读数
  pos++;
  if(s[pos]>='a'&&s[pos]<='z')pos++;
  if(s[pos]<'0'||s[pos]>'9')return 1;//没数就是1
  else {
    int x=0;
    while(s[pos]>='0'&&s[pos]<='9')x=x*10+s[pos]-'0',pos++;//读元素后面的数字
    return x;
  }
}
inline void scan(int l,int r) {//处理物质
  c2++;
  for(int i=0; i<=r-l; i++)mat[c2][i]=s[l+i];//存下元素的名字
  if(flag==1)c1++;//统计一下反应物数量
  int tmp=1;//tmp是小括号倍数
  for(int i=l; i<=r; i++) {
    if(s[i]==')')tmp=1;
    if(s[i]=='(') {
      int j=i+1;
      while(s[j]!=')')j++;//找这个括号的范围
      tmp=getint(j);//读")"右边的数字
    }
    if(s[i]>='A'&&s[i]<='Z') {//发现元素
      int x=s[i]-'A'+1,y=0;
      if(s[i+1]>='a'&&s[i]<='z')//看一眼是一个字母的还是两个的
        y=s[i+1]-'a'+1;
      if(!Map[x][y])Map[x][y]=++cnt;//判重
      fun[Map[x][y]][c2]+=flag*getint(i)*tmp;//把这个物质里的这种元素数量放进矩阵里,坐标(map[x][y],c2)
    }
  }
}
inline bool Solve() {//解方程
  ans[c2]=1;//令最后一个解为1
  for(int i=1; i<=cnt; i++) {
    for(int j=1; j<=c2; j++)
      M[i][j]=fun[i][j];
  }
  for(int i=1; i<=cnt; i++)
    M[i][c2].a=-M[i][c2].a;
  //高斯消元
  N=c2-1,K=cnt;
  for(int k=1; k<=N; k++) {
    frac maxm=(frac) {
      -1,1
    };
    int maxi;
    for(int i=k; i<=K; i++)
      if(maxm1)cout<

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5691128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存