●试题五
阅读下列程序说明和C代码,将应填入(n)处的字句写在答卷的对应栏内。
【程序5说明】
下列文法可用来描述化学分子式的书写规则(例如,Al2(CO3)3、Cu(OH)2):
λ→β\βλβ→δ\δn
δ→ξ\ξθ\(λ)
其中:λ是一个分子式;δ或是一个元素,或是一个带括号的(子)分子式,元素或是一个大写字母(记为ξ),或是一个大写字母和一个小写字母(记为ξθ);β或是一个δ,或是在δ之后接上一个整数n,δn表示β有n个δ的元素或(子)分子式。一个完整的分子式由若干个β组成。
当然一个正确的分子式除符合上述文法规则外,还应满足分子式本身的语义要求。
下面的程序输入分子式,按上述文法分析分子式,并计算出该分子式的分子量。例如:元素H的原子量是1,元素O的原子量是16。输入分子式H2O,程序计算出它的分子量为18(1×2+16)。程序中各元素的名及它的原子量从文件atom.dat中读入。
【程序5】
#include
#include
#define MAXN 300
#define GMLEN 30
struct elem{char name[];/*元素名*/
doublev;/*原子量*/
}nTbl[MAXN];
char cmStr[GMLEN],*pos;
int c;FILE*fp;
double factor();
double atom()/*处理文法符号δ*/
{char w[3];int i;double num;
while((c=*pos++)==′||c==′\t′);/*略过空白字符*/
if(c==′\n′)return 0.0;
if(c>=′A′ && C<=′Z′){/*将元素名存入W*/
w[i=0]=c;c=*pos++;
if(c>=′a ′&& c<=′z′)w[++i]=c;else pos--;
w[++i]=′\0′;
for(i=0;nTbl[i].v>0.0;i++)
if(strcmp(w,nTb[i].name)==0)returnnTbl[i].v;
printf("\n元素表中没有所输入的元素:\t%s\n",w);retur n-1.0;
}elseif(c==′(′){
if((num= (1) )<0.0)return-1.0;/*包括可能为空的情况*/
if(*pos++!=′)′){printf("分子式中括号不匹配!/n");return-1.0;}
returnnum;
}
printf("分子式中存在非法字符:\t%c\n",c);
return-1.0;
}
double mAtom()/*处理文法符号β*/
{double num;int n=1;
if((num= (2) )<0.0)return-1.0;
c=*pos++;
if(c>=′0′&&c<=′9′){
n=0;while(c>=0&&c<=′9′)
{n= (3) ;
c=*poss++;
}
}
pos--;
return num*n;
}
double factor()/*处理文法符号λ*/
{double num=0.0,d;
if((num=mAtom())<0.0)return-1.0;
while(*pos>=′A′&&*pos<=′Z′||*pos==′(′){
if((d= (4) )<0.0)return-1.0;
(5) ;
}return num;
}
void main()
{char fname[]="atom.dat";/*元素名及其原子量文件*/
int i;double num;
if((fp=fopen(fname,"r"))==NULL){/*以读方式打开正文文件*/
printf("Can not open%s file.\n",fname);return/*程序非正常结束*/
}
i=0;
while(i i++; fclose(fp);nTbl[i].v=-1.0; while (1) {/*输入分子式和计算分子量循环,直至输入空行结束*/ printf("\n输入分子式!(空行结束)\n");gets(cmStr); pos=cmStr; if(cmStr[0]==′\0′)break; if((num=fator())>0.0) if(*pos!=′\0′)printf("分子式不完整!\n"); else printf("分子式的分子量为%f\n",num); } }
相关标签: 分子式
原子量
相关问题推荐
-
对于钢印中没有充装气体名称或化学分子式的旧气瓶,应由气瓶充装单位补打充装气体名称或化学分子式钢印。
A、对
B、错
-
某烃在常温下是液体,常用作油漆的溶剂.为测定该烃的分子式,将0.1mol该烃在氧气中完全燃烧,得到的CO2在标准状况下的体积为13.44L,得到水的质量为5.4g,请写出该烃的分子式.若该烃不能使溴的四氯化碳溶液和酸性高锰酸钾溶液退色,试推测该烃的名称并写出其结构简式.
-
(11分)已知有机物
A、B、C、D、X有如下转化关系,请按要求回答相关问题:
(1)若C物质的结构中含有醛基,则X的结构简式为
(2)若X的分子式为C10H20O2,且A不能发生消去反应,则A的结构简式为 ,
请写出A→B的反应的化学方程式
(3)若X的分子式为C14H12O2,则X→A+D的反应的化学方程式为 。
(4)若X的分子式为C8H16O2,请写出所有符合题意的X的结构简式 。 -
室温时10mL某气态烃与过量的氧气混合,完全燃烧后的产物通过浓硫酸,再恢复到至室温,气体体积减少了35mL,剩余气体再通过氢氧化钠溶液,体积又减少了40mL。求气态烃的分子式并写出该分子式的同分异构体。
-
某羧酸酯的分子式为C18H26O5,1mol该酯完全水解可得到1mol羧酸和2mol乙醇,该羧酸的分子式为()
A、C14H18O5
B、C14H16O4
C、C14H22O5
D、C14H10O5