C语言笔记 | 一元一次方程

文章目录

0x00 前言

0x01 问题分析

0x02 代码设计

0x03 完整代码

0x04 运行效果

0x05 参考文献

0x06 总结


0x00 前言

        一元一次方程指只含有一个未知数、未知数的最高次数为 1 且两边都为整式的等式。一元一次方程只有一个根。一元一次方程最早见于约公元前 1600 年的古埃及时期。公元 820 年左右,数学家花拉子米在《对消与还原》一书中提出了“合并同类项”、“移项”的一元一次方程思想。十六世纪,数学家韦达创立符号代数之后,提出了方程的移项与同除命题。1859 年,数学家李善兰正式将这类等式译为一元一次方程。

        

        

0x01 问题分析

一元一次方程的一般形式:

ax + b = 0 (a \neq 0)

        其中,只含有 一个 未知数,且未知数的高次数是 1 ,等号两边都是整式,这样的方程叫做一元一次方程。

        

        

0x02 代码设计

#include <stdio.h>
#include <math.h>

        代码解析:先使用 #include 引入需要使用到的头文件,例如 C 框架中的标准输入输出库 <stdio.h> 以及需要使用 <math.h> 数学库计算一元一次方程的解。

        

double a = 0.0, b = 0.0, x;
printf("请输入两个系数:");

         代码解析:定义 double 双精度类型的变量 a 和 b ,以及一元一次方程的解设为 x 。使用 printf(); 函数提示用户输入两个系数。

        

        while (scanf("%lf %lf", &a, &b) != 2 || a <= 0.0)
        {
            printf("错误:请输入两个大于0的数值!\n");
            while (getchar() != '\n')
                continue;
        }

        代码解析:使用 while 循环语句判断用户输入的数值是否是两个数,并且判断 a 是否小于等于 0 。如果用户输入的数值不是两个数或者 a 为零或者为负数,那么则进入循环。如果进入循环中,那么会提示 “错误:请输入两个大于0的数值!” 并且执行 while 循环语句清空缓冲区,直到遇到换行符执行 continue 语句跳出当前循环。

        

        if (getchar() != '\n')
        {
            while (getchar() != '\n')
                continue;
            printf("警告:您输入了多余的字符,已被清除!\n");
            continue;
        }

        代码解析:使用 if 语句判断如果输入缓冲区中还有字符(不包括换行符号),那么执行 if 语句中的内容。其中, while 循环和上文中的代码一样是清空缓冲区,直到遇到换行符执行 continue 语句跳出当前循环。

         

        if (b == 0.0)
        {
            printf("此题有无数解\n");
        }
        else
        {
            x = -b / a;
            printf("此题有一个解,x = %.2lf\n", x);
        }

        代码解析:使用 if 语句判断用户输入的数值 b 是否等于 0 ,如果等于 0 那么此题有无数解。否则执行 else 计算方程解并用 printf 语句输出该方程有一个解。

        

        printf("a = %.2lf, b = %.2lf\n", a, b);
        break;

        代码解析:输出输入的系数 a b ,最后使用 break; 语句跳出 while 死循环。

        

double U_linear_E()
{
    while (1)
    {
        double a = 0.0, b = 0.0, x;
        printf("请输入两个系数:");

        while (scanf("%lf %lf", &a, &b) != 2 || a <= 0.0)
        {
        if (getchar() != '\n')
        {
        if (b == 0.0)
        {
        else
        {

        printf("a = %.2lf, b = %.2lf\n", a, b);
        break;
        return 0;
    }
}

        代码解析:为计算一元一次方程的代码添加 while 死循环,确保用户输入错误能重新执行程序获得用户输入并执行。并设置一个 double 类型的函数将循环代码封装到函数中,如果函数执行完毕,那么会返回 0 表示程序正常执行。

        

int main()
{
    U_linear_E();
    return 0;
}

        代码解析:主函数,调用 U_linear_E(); 函数用来求解一元一次方程,返回值为 0 时,表示程序执行完毕。

        

        

0x03 完整代码

#include <stdio.h>
#include <math.h>

double U_linear_E() // 一元一次方程求解函数
{
    while (1) // 无限循环,直到符合条件结束循环
    {
        double a = 0.0, b = 0.0, x; // 定义变量,其x为方程解
        printf("请输入两个系数:"); // 提示用户输入

        // 验证输入是否为数字
        while (scanf("%lf %lf", &a, &b) != 2 || a <= 0.0) // 如果输入不是两个数或者a为0或者负数,则进入循环
        {
            printf("错误:请输入两个大于0的数值!\n"); // 提示用户输入错误
            while (getchar() != '\n') // 清空输入缓冲区,直到遇到换行符
                continue;
        }

        if (getchar() != '\n') // 判断如果输入缓冲区中还有字符(不包括换行符)
        {
            while (getchar() != '\n') // 清空输入缓冲区,直到遇到换行符
                continue;
            printf("警告:您输入了多余的字符,已被清除!\n"); // 提示用户输入多余字符,并清除
            continue;
        }

        if (b == 0.0) // 如果b等于0,则方程有无数解
        {
            printf("此题有无数解\n"); // 输出有无数解
        }
        else // 如果b不等于0,则方程有唯一解
        {
            x = -b / a; // 计算方程解
            printf("此题有一个解,x = %.2lf\n", x); // 输出方程解
        }

        printf("a = %.2lf, b = %.2lf\n", a, b); // 输出输入的系数
        break; // 结束循环
        return 0; // 返回值为0,表示函数执行完毕
    }
}


int main()
{
    U_linear_E(); // 调用一元一次方程函数
    return 0; // 返回值为0,表示程序执行完毕
}

        

        

0x04 运行效果

请输入两个系数:1 2 3 4 5
警告:您输入了多余的字符,已被清除!
请输入两个系数:a b
错误:请输入两个大于0的数值!
0 1
错误:请输入两个大于0的数值!
1 2
此题有一个解,x = -2.00
a = 1.00, b = 2.00

--------------------------------
Process exited after 24.29 seconds with return value 0
请按任意键继续. . .

        

        

0x05 参考文献

[1].百度百科. 一元一次方程[EB/OL]. [2023-04-02]. https://baike.baidu.com/item/%E4%B8%80%E5%85%83%E4%B8%80%E6%AC%A1%E6%96%B9%E7%A8%8B?fromModule=lemma_search-box.

        

        

0x06 总结

文章内容为学习记录的笔记,由于作者水平有限,文中若有错误与不足欢迎留言,便于及时更正。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尼泊罗河伯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值