網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
C語(yǔ)言 求解一元二次方程
在用C語(yǔ)言求解一元二次方程的時(shí)候,首先,最重要的肯定是要引入"math.h"這個(gè)頭文件,其次要會(huì)運(yùn)用相關(guān)的數(shù)學(xué)庫(kù)函數(shù),如“sqrt”,“delta”等。
讓我們一起在代碼中尋找問題吧。
#include <stdio.h>
#include <math.h>
int main (void)
{
? ? int a = 1,b = 2,c = 1;
? ? float x1 , x2 , delta ;
? ? delta = b*b - 4*a*c ;
?
? ? if ( delta > 0 )
?
? ? {
? ? ? ? x1 = (-b-sqrt(delta)) / (2*a);
? ? ? ? x2 = (-b+sqrt(delta)) / (2*a);
? ? ? ? printf ("該方程有兩解,x1 = %f\n,x2 = %f\n",x1,x2);
? ? }
?
? ? else if (delta == 0)
? ? {
? ? ? ? x1 = (-b) / (2*a);
? ? ? ? x2 = x1;
? ? ? ? printf ("該方程有唯一解,x1 = x2 = %f\n",x1 = x2);
? ? }
?
? ? else if (delta < 0)
? ? {
? ? ? ? printf ("該方程無解\n");
? ? }
? ? return 0;
?}?
這是之前我發(fā)的第一個(gè)博客代碼,現(xiàn)在我看到“數(shù)一數(shù)二的白落”的評(píng)價(jià)后又優(yōu)化了一些,代碼如下:
#include <stdio.h>
#include <math.h>
int main (void)
{
? ? int a, b, c;
? ? printf("請(qǐng)輸入一元二次方程的三個(gè)系數(shù):\n");
? ? scanf("%d %d %d",&a,&b,&c);
? ? float x1 , x2 , delta ;
? ? delta = b*b - 4*a*c ;
?
? ? if ( delta > 0 )
?
? ? {
? ? ? ? x1 = (-b-sqrt(delta)) / (2*a);
? ? ? ? x2 = (-b+sqrt(delta)) / (2*a);
? ? ? ? printf ("該方程有兩解,x1 = %f\n,x2 = %f\n",x1,x2);
? ? }
?
? ? else if (delta == 0)
? ? {
? ? ? ? x1 = (-b) / (2*a);
? ? ? ? x2 = x1;
? ? ? ? printf ("該方程有唯一解,x1 = x2 = %f\n",x1 = x2);
? ? }
?
? ? else if (delta < 0)
? ? {
? ? ? ? printf ("該方程無解\n");
? ? }
? ? return 0;
?}?
求一元二次方程的解,考慮所有情況
假設(shè):ax2+bx+c=0
要求輸入a,b,c的值,判斷并求出方程的解。
有以下幾種情況:
1、a = 0
(1)b = 0
c = 0時(shí),x可以是任意數(shù);
c != 0時(shí),方程不成立;
(2)b != 0
方程為一元一次方程,x = - c b \frac{c}{b} bc?
2、a != 0
(1)△ =b^2-4ac >0,方程有兩個(gè)不等的實(shí)根;
(2)△ =b^2-4ac =0,方程有兩個(gè)相等的實(shí)根;
(3)△ =b^2-4ac <0,方程有兩個(gè)共軛復(fù)根;
#include <stdio.h> //編譯預(yù)處理
#include <math.h> //編譯預(yù)處理
int main()
{
double a,b,c,x1,x2,Delta,realpart,mipart;
//聲明函數(shù)變量
printf("a*x^2 + bx +c = 0,請(qǐng)輸入a,b,c的值:");
scanf("%lf,%lf,%lf",&a,&b,&c);
//獲取輸入的a,b,c三個(gè)系數(shù)的值
//printf("%.2f,%.2f,%.2f",a,b,c);
if (a == 0 ) //判斷a是否為0
{
if(b != 0)
{
x1 = -c / b;
printf("方程是一元一次方程,x1=%.2f\n",x1);
}
else
{
if (c ==0) printf("x可以是任意值。\n");
else printf("方程不成立。\n");
}
}
else
{
Delta = pow(b,2) - 4*a*c;
//判斷delta的值
if (Delta>0)
{
x1 = (-b+sqrt(Delta)) / (2*a);
x2 = (-b-sqrt(Delta)) / (2*a);
printf("方程的兩個(gè)根為x1 = %.2f,x2 = %.2f\n",x1,x2);
}
else
{
if (Delta == 0)
{
x1 = - b/(2*a);
x2 = - b/(2*a);
printf("方程有兩個(gè)相等的根:\nx1=%.2f\nx2=%.2f\n",x1,x2);
}
else
{
realpart = - b/(2*a); //實(shí)部
mipart = sqrt(-Delta) / (2*a);
printf("方程有兩個(gè)共軛復(fù)根:\n");
printf("x1 = %.2f+%.5fi\n",realpart,mipart);
//人為地加了i,以表示虛部
printf("x2 = %.2f-%.5fi\n",realpart,mipart);
}
}
}
return 0;
}
//每個(gè)if和else都用花括號(hào){}包起來,這樣程序識(shí)別時(shí)候不會(huì)認(rèn)為else沒有匹配的if。
原文鏈接:https://blog.csdn.net/m0_68165845/article/details/123515186
相關(guān)推薦
- 2023-02-15 VScode運(yùn)行C++中文終端亂碼的解決方案_C 語(yǔ)言
- 2024-03-01 【Promise】promise關(guān)鍵問題和解決辦法
- 2022-10-07 使用Cargo工具高效創(chuàng)建Rust項(xiàng)目_相關(guān)技巧
- 2022-06-27 使用AOP+redis+lua做方法限流的實(shí)現(xiàn)_Redis
- 2022-12-23 C++中類的構(gòu)造函數(shù)初始值列表解讀_C 語(yǔ)言
- 2022-10-31 Kotlin協(xié)程開發(fā)之Flow的融合與Channel容量及溢出策略介紹_Android
- 2023-04-17 淺談Golang數(shù)據(jù)競(jìng)態(tài)_Golang
- 2021-10-17 linux配置主機(jī)名詳細(xì)介紹_Linux
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支