⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 化学分子式.c

📁 C++经典算法之 化学分子式 常用算法 方便使用
💻 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 + -