C语言学习笔记 - 12.C语言简介 - 一元二次方程详解

一、VS Code创建C语言项目基础操作

1.1 新建工作区

  1. 打开VS Code,点击"文件" → "打开文件夹"

  2. 选择或创建一个文件夹作为项目根目录

  3. 点击"打开"按钮

1.2 创建C源文件

有多种方式创建C文件:

方法一:通过资源管理器

  1. 点击左侧资源管理器图标

  2. 在项目文件夹上右键 → "新建文件"

  3. 输入文件名,必须以.c结尾,如:hello.c

方法二:通过菜单栏

  1. 点击"文件" → "新建文件"

  2. Ctrl+S保存文件

  3. 在保存对话框中选择.c扩展名

方法三:通过快捷键

  • Ctrl+N新建文件

  • Ctrl+S保存,命名为*.c


二、一元二次方程求解程序设计思路

一元二次方程通用形式为 ax2+bx+c=0,程序求解的核心逻辑与数学解题思路一致,分为三步:

  1. 数据存储:定义变量保存方程的三个系数 a、b、c。

  2. 判别式计算:计算判别式 Δ=b2−4ac并存储。

  3. 解的判断与计算

    • Δ>0:方程有两个不相等的实数解,公式为 x=2a−b±Δ​​。

    • Δ=0:方程有一个唯一的实数解(两个相等实数解),公式为 x=2a−b​。

    • Δ<0:方程无实数解。


三、一元二次方程求解程序实现

3.1 头文件与核心变量定义

3.1.1 头文件引入

使用标准输入输出函数(如printf)需引入<stdio.h>,使用平方根函数sqrt()需引入<math.h>

复制代码
#include <stdio.h>  // 引入标准输入输出头文件,支持printf等函数
#include <math.h>   // 引入数学库头文件,支持sqrt等数学函数
3.1.2 变量定义

需定义不同类型变量存储系数、判别式及方程的解(double类型避免精度丢失):

复制代码
int main()
{
    // 定义并初始化一元二次方程的系数a、b、c
    int a = 1;
    int b = 5; 
    int c = 6;

    double delta;  // 存储判别式b²-4ac的计算结果
    double x1, x2; // 存储方程的两个解

3.2 判别式计算

判别式需通过算术运算符实现,注意:平方运算用b*b(无直接平方符号),乘法需显式写*(如4*a*c而非4ac):

复制代码
// 计算判别式delta的值
    delta = b*b - 4*a*c;

3.3 条件判断与解的计算

使用if-else if-else语句判断判别式值,分别计算不同场景下的解:

复制代码
if(delta > 0) // delta大于0,有两个不相等的实数解
    {
        printf("有两个不同的解\n");
        // sqrt(delta)求delta的平方根,括号保证运算符优先级
        x1 = (-b + sqrt(delta)) / (2*a);
        x2 = (-b - sqrt(delta)) / (2*a);
        printf("x1 = %f\n", x1);
        printf("x2 = %f\n", x2);
    }
    else if(delta == 0) // delta等于0,有一个唯一的实数解
    {
        printf("有两个相等的解\n");
        x1 = -b / (2*a);
        x2 = x1; // 两个解相等,将x1的值赋给x2
        printf("x1 = %f\n", x1);
        printf("x2 = %f\n", x2);
    }
    else // delta小于0,无实数解
    {
        printf("无解\n");
    }

    return 0;
}

3.4 关键语法说明

  1. 赋值与相等判断

    • 单个等号=赋值运算符 (如a = 1,将1赋值给变量a)。

    • 两个等号==相等判断运算符 (如delta == 0,判断delta是否等于0)。

  2. 平方根函数sqrt()

    • 属于数学库函数,必须引入<math.h>才能使用。

    • 用法:sqrt(数值),返回该数值的平方根(如sqrt(delta))。

  3. 运算符优先级

    分式计算需用括号明确优先级(如(-b + sqrt(delta)) / (2*a)),避免因优先级导致计算错误。


四、程序编译运行与常见问题处理

4.1 编译警告与错误处理

  1. 精度丢失警告

    • 原因 :将double类型值赋值给float类型变量,编译器提示精度丢失。

    • 解决方案 :将存储判别式、解的变量定义为double类型(精度高于float)。

  2. 变量名错误

    • 问题 :变量名拼写不一致(如delta误写为DRTA)会导致编译错误。

    • 排查:核对变量定义与使用的名称,确保完全一致。

4.2 软件假死处理

若VC++软件出现"假死"(点击无反应、无法关闭),强制关闭步骤:

  1. 按下Ctrl + Alt + Delete打开任务管理器。

  2. 在"应用程序"栏找到VC++进程,点击"结束任务"。

  3. 若未生效,在"进程"栏找到msdev.exe进程并结束。

4.3 程序扩展方向

基础版程序系数为固定值,可扩展为交互式程序(后续学习流程控制后实现):

  1. 增加输入功能,运行时由用户输入abc的值。

  2. 增加循环逻辑,支持用户多次求解,直至选择退出。

4.4 编译运行流程

  1. 确认代码无语法错误后,点击编译按钮完成编译。

  2. 编译无错误、无警告后,点击运行按钮。

  3. 查看控制台输出结果验证正确性(如a=1b=5c=6时,解为x1=-2.000000x2=-3.000000)。

相关推荐
记录无知岁月2 小时前
【C/C++】头文件包含问题分析
c语言·开发语言·c++
Joseph Cooper2 小时前
STM32MP157 Linux驱动学习笔记(五):子系统与工程边界(V4L2/IIO/devmem/UIO)
linux·stm32·学习
自信150413057593 小时前
重生之从0开始学习c++之string(上)
开发语言·c++·学习
笨笨饿3 小时前
66_C语言与微控制器底层开发
linux·c语言·网络·数据结构·算法·机器人·个人开发
Cathy Bryant3 小时前
微分几何:度规(度量)metric
笔记·线性代数·矩阵·高等数学·物理
南境十里·墨染春水3 小时前
linux学习进展 线程
java·linux·学习
HABuo3 小时前
【linux网络基础(二)】理解端口号&UDP、TCP协议&网络字节序
linux·服务器·c语言·网络·c++·ubuntu·centos
久菜盒子工作室4 小时前
TCL是哪个板块的,去年大涨的原因是什么
人工智能·学习