●试题五

阅读下列程序说明和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);

}

}

相关热点: 分子式   原子量  

查看答案

相关问题推荐

  • 某羧酸酯的分子式为1mol该酯完全水解可得到1mol羧酸和2mol乙醇,该羧酸的分子式为( )。

    A.

    B.

    C.

    D.

    查看答案
  • 甲苯的分子式是什么?

    查看答案
  • 萎缩型自我的特点和调整方法
    查看答案
  • ()奖励和惩罚就是利用条件反射的原理,在培养儿童的良好习惯和改造儿童的不良行为与习惯方面发挥着重要的作用。
    查看答案
  • 组合体拟定图示表达方案,含那些方面()。A.确定摆放位置
    B.选择正视图的投影方向C.确定视图数量
    D.视图中虚线少E.无要求
    查看答案
  • 计算甲公司2×18年12月31日上述行政管理用固定资产的暂时性差异,判断该差异为应纳税暂时性差异还是可抵扣暂时性差异,并编制确认递延所得税资产或递延所得税负债的会计分录。
    查看答案
  • 甲公司适用的企业所得税税率为25%,预计未来期间适用的企业所得税税率不会发生变化且能够产生足够的应纳税所得额用以抵减可抵扣暂时性差异,其2×18年年度财务报表批准报出日为2×19年4月15日。2X19年2月10日,甲公司调减了2X18年计提的坏账准备100万元,该调整事项发生时,企业所得税汇算清缴尚末完成。不考虑其他因素,上述调整事项对甲公司2X18年年度财务报表项目产生的影响有()。

    A.递延所得税资产减少25万

    B.所得税费用增加25万

    C.应交税费增加25万

    D.应收账款增加100万
    查看答案