早教吧 育儿知识 作业答案 考试题库 百科 知识分享
早教吧考试题库频道 --> 计算机类考试 -->软考中级 -->

阅读下列程序说明和C代码,将应填人(n)处的字句写在对应栏内。 [程序5说明] 下列文法可用来描述化

题目

阅读下列程序说明和C代码,将应填人(n)处的字句写在对应栏内。

[程序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);

}

参考答案
正确答案:(1)factor()(2)atom()(3)n*10+c-'0'(4)mAtom()(5)num+=d
(1)factor()(2)atom()(3)n*10+c-'0'(4)mAtom()(5)num+=d 解析:(1)查找“(”后的子分子式的分子量。(2)得到元素的原子量。(3)计算元素后面的数字。(4)计算文法符号的分子量。(5)将分子式的各个部分的分子量进行累加。atom()查找输入字符串一个元素,并输出它的原子量;遇到括号时,使用递归对括号后的元素进行识别和计算,输出后,检查是否括号匹配;遇到其他字符则直接返回-1;0表示失败。mAtom()对元素及其后面的数字进行辨识,并调用atom()计算它们的原子量。Factor()对整个分子式进行辨识并计算其分子量。
看了阅读下列程序说明和C代码,将应...的网友还看了以下:

小说明是用来描述加工的。小说明的描述方法有哪些?请分别用这些描述方法描述加工 1.2。 计算机类考试 2020-05-26 …

李克强总理将"全民阅读"写入了《政府工作报告》,倡导全民热爱阅读.请根据提示用英文向English 英语 2020-06-13 …

学法用法,依法自护阅读下述材料,结合所学知识回答问题:2016年“3•15”消费者权益日主题是“新 政治 2020-07-29 …

"全民阅读"被写入了《政府工作报告》,目的是倡导全民热爱阅读.请根据提示用英文向EnglishPos 英语 2020-11-01 …

写作“全民阅读”被写入了《政府工作报告》,目的是倡导全民热爱阅读。请根据提示用英文向EnglishP 英语 2020-11-02 …

谁知道语文文章中所有描写方法,修辞方法,叙述方法,说明方法,顺序和它们每种方法的作用(好处).例:叙 语文 2020-11-03 …

做阅读学英语最有效?听老师说学英语,一等聪明做阅读,二等聪明背单词,三等聪明练语法.此种说法真的是否 其他 2020-11-14 …

我在做说明文训练时,一直弄不清是事物还是事理.我也明白事物说明文是描述具体事物的,事理说明文是对抽象 语文 2020-11-21 …

阅读下面一段话,说说这段文字的观点是什么?作者采用什么方法阐述这一观点的?“读史使人明智,读诗使人灵 语文 2020-12-19 …

灯光照着碧水,明月照亮大海。用了对偶的修辞方法,用另一种修辞手法加以描述、快快快快快快快快!!!!! 其他 2021-02-05 …