分子量问题

top啦它 2020-01-10 10:10:08
给出一种物质的分子式(不带括号),求分子量。本题中的分子式包含若干种原子(要手动输入),例如C,H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01 (单位: g/mol)。 例如,C6H5OH的分子量为94. 108g/mol。

#include<stdio.h>
#include<syslib.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
#define min 101
struct yuansu {
char name[128];
double hight;
};
int main(void)
{
struct yuansu *ss;
ss = (struct yuansu *)malloc(sizeof(struct yuansu));
if(ss != NULL)
{
printf("动态内存申请成功\n");
}
int n = 4;//元素的种类
while(n--) //输入元素的种类
{
scanf("%s%lf",&ss[n].name,&ss[n].hight);
printf("%s %.2f",ss[n].name,ss[n].hight);
}
int j;
scanf("%d",&j);
while(j--)
{
double sum = 0.0,res;
char a[min],p[10];
int i = 0;
scanf("%s",a);
while(a[i] != '\0')
{
p[0] = a[i];
for(int r = 0;r < n;r++)
{
if(p[0] == ss[r].name)
break;
}
i++;
while(isdight(a[i]))
{
sum = sum * 10 + a[i] - '0';
i++;
}
if(sum)
{
res += sum * ss[r].hight;
}
else
{
res += ss[r].hight;
}
}
printf("%.3f\n",res);
}
return 0;
}

问题如图

当加上#include<syslib.h>这个头文件时,错误一个

去掉后如上图
...全文
244 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
GKatHere 2020-01-11
  • 打赏
  • 举报
回复
勉强能跑

#include<stdio.h>
//#include<syslib.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
#define min 101
struct yuansu {
	char name;
	float hight;
};


int aa(void)
{
	struct yuansu *ss;
	ss = (struct yuansu *)malloc(sizeof(struct yuansu)*4);
	if (ss != NULL)
	{
		printf("\n动态内存申请成功\n");
	}
	int n = 4;//元素的种类
	for (int i = 0; i < n; i++) //输入元素的种类
	{
		//flush();
		printf("\n请输入第%d个元素名称与原子量\n", i + 1);
		scanf_s("%c %f", &ss[i].name,1, &ss[i].hight, 4);
		fflush(stdin);
		printf("输入为%c - %.2f", ss[i].name, ss[i].hight);
	}
	int j =0;
	printf("\n\n请输入要求的物质个数\n");
	scanf_s("%d", &j);
	for (int ji = 1; ji <= j; ji++)
	{
		double sum = 0.0;
		char a[min];// , p[10];
		int i = 0;
		printf("\n请输入第%d个物质的分子式\n", ji);
		scanf_s("%s", a, min);
		double preHight = 0;
		while (a[i] != '\0')
		{
			if (isdigit(a[i]))
			{
				printf("输入物质分子式错误\n");
				break;;
			}

			int r = 0;
			for (; r < n; r++)
			{
				if (a[i] == ss[r].name)
					break;
			}
			if (r >= n)
			{
				printf("输入物质分子式错误\n");
				break;;
			}
			i++;

			if (!isdigit(a[i]))
			{
				sum += ss[r].hight;
				continue;
			}


			int dv = 0;
			while (isdigit(a[i]))
			{
				dv = dv * 10 + a[i] - '0';
				i++;
			}
			sum += ss[r].hight *dv;
			
		}
		printf("%s的分子量为%.3f\n", a, sum);
	}
	free(ss);
	return 0;
}

柒贰伍玖 2020-01-11
  • 打赏
  • 举报
回复
看编译报错 isdight 写错了,应该是isdigit
GKatHere 2020-01-11
  • 打赏
  • 举报
回复
isdigit 你输错了

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧