用C语言编写解二元一次方程的程序?

如何编写程序,使得当我输入10x+4y=100(整组同时输入,即只输入一次回车),能给变量赋予系数的值?1、当系数为1的情况呢?例:3x+y=10(我使用scanf()语... 如何编写程序,使得当我输入10x+4y=100(整组同时输入,即只输入一次回车),能给变量赋予系数的值?

1、当系数为1的情况呢?例:3x+y=10(我使用scanf()语句无法解决,现在的思路是用getchar()赋值给数组,但无法区分系数的位数以及系数属于哪个未知数)

2、当方程中有减号时,如何与数字一起赋给变量?例:x-y=10
展开
 我来答
梅森琦
2019-10-28 · 擅长 LaTeX 排版方面的问题。
梅森琦
采纳数:147 获赞数:638

向TA提问 私信TA
展开全部

假设的情况:

  1. 输入没有错误;

  2. x 总是在前面,y 总是在后面;

  3. 不存在某个变量系数为 0 的情况(即总是二元方程);

  4. 不考虑小数,其实考虑小数也简单,你可以自己思考如何实现。

首先,使用 scanf() 将回车之前的整个字符串扫描进来,放进 str 变量中;

之后,分别以 x y = 为界,找到它们分隔的三个字符串,即从 str 的第一位开始循环,当遇到 'x' 时,停止并将之前的所有字符存到 x 的系数字符串 xStr 中,再从 x 之后开始寻找,遇到 'y' 时将找到的 'x' 与 'y' 之间的字符存到 y 的系数字符串 yStr 中,再向后从 '=' 开始直到结束,存为结果字符串 sumStr。

这样,我们得到的三个字符串都具有相同的格式,一定可以通过某种方式将其转换为一个数字,使用同一个函数就可以做到。

对于某个字符串来说,它可能是以负号 '-' 开头,也可能以正号开头 '+',也可能没有符号,也可能为空,分别考虑:以负号开头的,将其作为负数,以正号开头或没有符号的,将其作为正数;为空的字符串将其视为 1。

截取符号之后,如果没有剩余字符了,将其视为 1,再与符号相乘,就是最终结果。

如果还有剩余,那么之后的字符都是纯数字了(不考虑小数),从字符串的最后一位往前开始循环,下标记为 i(从0开始一直到最前面的数字位数),每一位字符记为 ch,则 n=(int)(ch-'0') 就是当前字符所代表的数字,用 n*pow(10, i) 就得到了当前数字的实际值,把所有的乘积都加起来,就得到了总的系数的绝对值,再乘以符号,就得到了系数值。


实现了这个部分之后,假设的情况也可以一一实现了,无非就是标记归属的问题。我没有贴代码是因为我看到你问的问题非常认真,我希望你可以通过我的描述自己去实现它。这里用到了一些字符串相关的函数,例如 strlen(str) 可以获得 str 字符串的长度,strncpy(dest, src, 3) 可以将 src 字符串的前三位拷贝到 dest 字符串中,strncpy(dest, src+3, 3) 可以将 src 字符串的 4~7 位拷贝到 dest 字符串中。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式