化学元素周期表(Element.txt):
1 H 氢 1
2 He 氦 4
3 Li 锂 7
4 Be 铍 9
5 B 硼 11
6 C 碳 12
7 N 氮 14
8 O 氧 16
9 F 氟 19
10 Ne 氖 20
11 Na 钠 23
12 Mg 镁 24
13 Al 铝 27
14 Si 硅 28
15 P 磷 31
16 S 硫 32
17 Cl 氯 35.5
18 Ar 氩 40
19 K 钾 39
20 Ca 钙 40
21 Sc 钪 45
22 Ti 钛 48
23 V 钒 51
24 Cr 铬 52
25 Mn 锰 55
26 Fe 铁 56
27 Co 钴 59
28 Ni 镍 59
29 Cu 铜 64
30 Zn 锌 66
31 Ga 镓 70
32 Ge 锗 73
33 As 砷 75
34 Se 硒 79
35 Br 溴 79
36 Kr 氪 84
37 Rb 铷 86
38 Sr 锶 88
39 Y 钇 89
40 Zr 锆 91
41 Nb 铌 93
42 Mo 钼 96
43 Tc 锝 98
44 Ru 钌 101
45 Rh 铑 103
46 Pd 钯 107
47 Ag 银 108
48 Cd 镉 113
49 In 铟 115
50 Sn 锡 119
51 Sb 锑 122
52 Te 碲 128
53 I 碘 127
54 Xe 氙 131
55 Cs 铯 133
56 Ba 钡 137
57 La 镧 139
58 Ce 铈 140
59 Pr 镨 141
60 Nd 钕 144
61 Pm 钷 145
62 Sm 钐 151
63 Eu 铕 152
64 Gd 钆 157
65 Tb 铽 159
66 Dy 镝 163
67 Ho 钬 165
68 Er 铒 167
69 Tm 铥 169
70 Yb 镱 173
71 Lu 镥 175
72 Hf 铪 179
73 Ta 钽 181
74 W 钨 184
75 Re 铼 186
76 Os 锇 190
77 Ir 铱 192
78 Pt 铂 195
79 Au 金 197
80 Hg 汞 201
81 Tl 铊 205
82 Pb 铅 207
83 Bi 铋 209
84 Po 钋 209
85 At 砹 210
86 Rn 氡 222
87 Fr 钫 223
88 Ra 镭 226
89 Ac 锕 227
90 Th 钍 232
91 Pa 镤 231
92 U 铀 238
93 Np 镎 237
94 Pu 钚 244
95 Am 镅 243
96 Cm 锔 247
97 Bk 锫 247
98 Cf 锎 251
99 Es 锿 252
100 Fm 镄 257
101 Md 钔 258
102 No 锘 259
103 Lr 铹 262
104 Rf 鑪 261
105 Db 钅杜 270
106 Sg 钅喜 273
107 Bh 钅波 274
108 Hs 钅黑 272
-1
[未完成的代码请多指教]:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
typedef struct Element//元素信息
{
int An;//原子序数
double Ar;//相对原子质量
char name_CN[3];//中文名字
char symbol[4];//元素符号
}Ele;
struct Material//化学式信息
{
int hxjls;//化学计量数
int e[30];//元素的原子序数
int num[30];//元素原子在化学式中所占个数
int tot;//有多少个元素
};
Ele map[120];
struct Material in[16],out[16];
int in_num=0,out_num=0;//有多少个反应物/生成物
void PutSingleMaterial(struct Material *input)
{
return ;
}
void ReadSingleMaterial(struct Material *input,char first)//用来进行单个化学式的输入
{
char ch=first;
char SElt[4];//Single Element单个元素
int i,i_SElt;
input->hxjls=0;//清零化学计量数
while(‘0‘<=ch&&ch<=‘9‘)//ch是化学计量数的一部分
{
input->hxjls*=10;
input->hxjls+=ch-‘0‘;
scanf("%c",&ch);
}
input->tot=0;
while(ch!=‘+‘&&ch!=‘=‘)//输入的是化学式
{
i_SElt=0;
while( (‘A‘<=ch&&ch<=‘Z‘) || (‘a‘<=ch&&ch<=‘z‘) )//ch属于元素部分
{
SElt[i_SElt]=ch;
i_SElt++;
scanf("%c",&ch);
}
SElt[i_SElt]=‘\0‘;
for(i=1;i<=108;i++)//匹配,确定元素原子序数
{
if(strcmp(SElt,map[i].symbol)==0)
{
input->e=i;
}
} //元素输入结束
while(‘0‘<=ch&&ch<=‘9‘)//ch是元素原子个数的一部分
{
input->num[input->tot]=input->num[input->tot]*10+ch-‘0‘;
scanf("%c",&ch);
}
input->tot++;
}
return ;
}
void PreLoad()//Stands for the edit
{
int i;
FILE *ein;
char ch;
ein=fopen("Element.txt","r");
//输入元素周期表
for(i=1;i<=108;i++)
{
fscanf(ein,"%d",&map[i].An);
fscanf(ein,"%c",&ch);
fscanf(ein,"%s",map[i].symbol);
fscanf(ein,"%c",&ch);
fscanf(ein,"%s",map[i].name_CN);
fscanf(ein,"%c",&ch);
fscanf(ein,"%lf",&map[i].Ar);
fscanf(ein,"%c",&ch);
}
fscanf(ein,"%c",&ch);
//Completed!!!
//输入化学方程式
struct Material *p;//它将指向当前所需要输入的化学式
scanf("%c",&ch);
while(ch!=‘=‘)// 输入反应物群
{
in[in_num].tot=0;//单个反应物元素个数初始化
p=&in[in_num];//将p指向当前所需输入的化学式
ReadSingleMaterial(p,ch);//进行单个化学式的输入
//PutSingleMaterial(p);
}
return ;
}
int main()//化学方程式配平
{
PreLoad();
return 0;
}