[程序5说明] 下列文法可用来描述化学分子式的书写规则(例如,A12(CO3)3”C

题型:问答题

问题:

[程序5说明]
下列文法可用来描述化学分子式的书写规则(例如,A12(CO3)3”Cu(OH)2):
λ→β\βλ
β→δ\δn
δ→ξ\ξθ\(λ)
其中:λ是—个分子式;δ或是一个元素,或是一个带括号的(子)分子式,元素或是一个大写字母(记为ξ),或是一个大写字母和一个小写字母(记为ξθ)β或是一个δ,或是在δ之后接上一个整数n,δn表示β有n个δ的元素或(子)分子式。—个完整的分子式由若干个β组成。
当然一个正确的分子式除符合上述文法规则外,还应满足分子式本身的语义要求。
下面的程序输入分子式,按上述文法分析分子式,并计算出该分子式的分子量。例如:元素H的原子量是1,元素O的原子量是16。输入分子式H2O,程序计算出它的分子量为18 (1×2+16)。程序中各元素的名及它的原子量从文件atom.dat中读入。
[程序5]
#include < stdio. h >
#include < string. h >
#define MAXN 300
#define GMLEN 30
struct elem { char name[ ]; /* 元素名*/
double v;/*原子量*/
} 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,nTbl[i]. name) ==0) return nTbl [i]. v;
printf (" \n元素表中没有所输入的无素: \t%s\n’,w); retur n - 1.0;
} elseif (c = =’(’) {
if((num= (1) ) <0.0)return -l.0; /*包括可能为空的情况*/
if( * pos ++ ! = ’)’) { printf (" 分子式中括号不匹配!/n") ;return - 1.0; }
return num;
}
printf ("分子式中存在非法字符:\t%c\n" ,c);
return - 1.0;
}
double mAtom( ) /* 处理文法符号β*/
{ double num ;int n = ];
if((num= (2) ) <0.0)return-l.0;
c= *pos++;
if(c >=’O’&&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(( hum = 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. dst"; /*元素名及其原子量文件*/
int i;double num;
if((fp=fopon(fname,"r" )) == NULL) { /*以读方式打开正文文件*/
prinff("Can net open%s file. \n’ ,fname) ;return /*程序非正常结束 */
i=0;
while(i < MAXN&&fscanf (fp," %s%lf,bTbl[i]. name,&nTbl[i]. v) ==2)
i++;
fclose(fp) ;nTbl[i]. v =-1.0;
while(1) [/*输入分子式和计算分子量循环,直至输入空行结束*/
printf(" \n 输入分子式! (空行结束) \n" ) ;gets(cmStr);
pos = cmStr;
if(cmStr[0] == ’\0’) break;
if( (num = later( ) ) > 0.0)
if( * pos! = ’\0’)printf("分子式不完整! \n" );
else printf("分子式的分子量为%f\n",num);
}

考点:计算机软件水平考试中级软件设计师中级软件设计师下午试题
题型:问答题

一种电风扇,每台售价80元,是进价的125%,卖出______台这样的电风扇才能获利800元.

题型:问答题

“可使血管收缩,神经兴奋性增高,肌张力提高”的是()

A.温水浴

B.热水浴

C.热水浴、冷水浴

D.冷水浴、凉水浴

E.不感温水浴

题型:问答题

企业的存货由于计量、收发错误导致的盘亏,由企业承担的部分应作为()内对外提供。

A.营业外支出

C.坏账损失

B.其他业务支出

D.管理费用

题型:问答题

冬虫夏草药材的显微特征是()

A.子座中央充满菌丝,每个子囊内有2~8个线形子囊孢子;子座具不育顶端

B.菌丝细长有分支,无色或棕色,不含草酸钙晶体及淀粉粒

C.菌丝大多无色,含草酸钙结晶

D.子座中央充满菌丝,每个子囊内有2~8个线形子囊孢子;子座具能育顶端

E.菌丝大多无色,含草酸钙结晶及淀粉粒极多,还有少量纤维

题型:问答题

腹主动脉瘤查体时可见()

A.肿块边缘清楚

B.股动脉搏动增强

C.股动脉搏动减弱

D.腹部有搏动性肿块

E.腹壁上可听到杂音

更多题库