📄 化学分子式.c
字号:
#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;
if(c=='\n') return 0.0;
if(c>='A'&&c<='Z')
{
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=_________)<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=_________)<1.0) return -1.0;
c=*pos++;
if(c>'0'&&c<='9')
{
n=0;
while (c>'0'&&c<='9')
{
n=________;
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=__________)<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].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=factor())>0.0)
if(*pos!='\0') printf("分子式不完整!\n");
else printf("分子式的分子量为%f\n",num);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -