问题 解答题

足球比赛的记分规则为:胜一场得3分,平一场得1分,输一场得0分,一支足球队在某个赛季中共需比赛14场,现已比赛了8场,输了一场,得17分,请问:

(1)前8场比赛中这支球队共胜了多少场?

(2)这支球队打满14场比赛,最高能得多少分?

(3)通过对比赛情况的分析,这支球队打满14场比赛,得分不低于29分,就可以达到预期的目标,请你分析一下,在后面的6场比赛中,这支球队至少要胜几场,才可能达到预期目标。

答案

解:(1)设这支球队胜x场,则平了(8-1-x)场,根题题意,得

3x+(8-1-x)=17,解得x=5,

所以前8场比赛中,这支球队共胜了5场;

(2)打满14场比赛最高能得17+(14-8)×3=35(分);

(3)由题意知,以后的6场比赛中,只要得分不低于12 分即可,所以胜的场数不少于3场,即胜4场或胜3场 平3场,才可能达到预期目标。

问答题

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

单项选择题