C语言典型例题39

《C程序设计教程(第四版)------谭浩强》

例题3.7 求ax²+bx+c=0方程的解。要求能处理任何情况下a、b、c的组合。


数学知识:

①当a=0时,为一次方程bx+c=0;x=-c/b;

②当a≠0时,为二次函数ax²+bx+c=0。b²-4c≥0时,有两个实根;

b²-4c≤0,有两个共轭复根。


代码:

复制代码
//《C程序设计教程(第四版)------谭浩强》
//例题3.7 求ax²+bx+c=0方程的解。要求能处理任何情况下a、b、c的组合。

//数学知识:①当a=0时,为一次方程bx+c=0;x=-c/b;②当a≠0时,为二次函数ax²+bx+c=0。b²-4c≥0时,有两个实根;b²-4c≤0,有两个共轭复根

#include <stdio.h>
#include <math.h>
int main()
{
	float a = 0;
	float b = 0;
	float c = 0;
	 
	float d = 0;
	
	float x = 0;
	float x1 = 0;
	float x2 = 0; 
	
	printf("请输入a b c的值(三个值用空格隔开):\n");
	scanf("%f %f %f",&a,&b,&c);
	
	if(a!=0)
	{
		//d=pow(b,2)-4*a*c;//d=b²-4c
		d=b*b-4*a*c;
		if(d>=0)//b²-4c≥0时,有两个实根
		{
			x1=(-b+sqrt(d))/(2*a);
			x2=(-b-sqrt(d))/(2*a);
			if(d>0)
			{
				printf("当a≠0且△>0时,二次方程有两个不等实根,x1=%.2f,x2=%.2f\n",x1,x2);
				//printf("%.2f,%.2f",x1,x2);
			}
			else
			{
				printf("当a≠0时且a=0,二次方程有两个相等实根,x1=%.2f,x2=%.2f\n",x1,x2);
				//printf("%.2f,%.2f",x1,x2);
			}
		}
		else//b²-4c﹤0,有两个共轭复根
		{
			float p = 0;//实部
			float q = 0;//虚部
				
			p=-b/(2*a);
			q=sqrt(-d)/(2*a);
				
			printf("当a≠0时且a<0,二次方程有两个共轭复根,x1=%.2f+%.2fi,x2=%.2f-%.2fi\n",p,q,p,q);
			//printf("x1=%.2f+%.2fi,x2=%.2f-%.2fi",p,q,p,q);
		}
	}
	else//当a=0时,bx+c=0,x=-c/b
	{
		if(b==0)
		{
			printf("当a=0且b=0时,x=%.2f\n",c);	
		}
		else
		{
			x=-c/b;
			printf("当a=0时,一次方程bx+c=0有一个根,x=%.2f\n",x);	
		}
		
	}
	return 0;
}

运行结果:(只写4中情况)

(1)a=0,b=0

(2)a=0,b≠0

(3)a≠0且a>0,b≠0

(4)a≠0且a=0,b≠0

(5)a≠0且a<0,b≠0

代码编写过程中需要注意的问题:

(1)printf中的符号不要随便加

例如:在printf("");加一个符号

原来:

加上之后:(这个符号是在符号大全上随便添加的)

【运行出错!!!】
错误:

33 12 D:\课?套?业\C语言\C语言?伪?例?鈂??3.7.c [Error] converting to execution character set: Illegal byte sequence

Error\] converting to execution character set: Illegal byte sequence 转换为执行字符集:非法字节序列 ##### 这个错误信息 "**converting to execution character set: Illegal byte sequence**" 通常与字符编码有关,尤其是在处理文本时。可能是由于使用了不符合指定字符集的字符,或输入的文件中含有无法识别的字节序列,通常在编程的上下文中

  1. 检查文件编码

    • 如果是从某个文件读取内容,确保这个文件是以正确的编码格式保存的,例如 UTF-8。可以使用文本编辑器(如 Visual Studio Code、Notepad++)来检查和更改文件编码。
  2. 使用合适的编码

    • 在程序中,确保你设定了正确的编码。例如,在 C/C++ 中,标准输入输出默认使用系统编码,如果你使用的字符集不是该编码,就可能引发此错误。
    • 如果你在处理字符串时,确保字符串都是合法的字符,比如避免使用空字节或其他无法显示的字符。
  3. 环境设置

    • 检查你的开发环境或编译环境的字符集设置。在某些系统中,可能需要在命令行或配置文件中指定字符集。例如,在 UNIX/Linux 系统下可以使用 命令查看当前字符集设置。locale
  4. 用 UTF-8 编码编译

    • 确保你的源代码文件是用 UTF-8 编码的。如果是 Windows 系统,确保使用翻译成 ANSI、UTF-8 (无 BOM) 编码,不然字符在读取时可能导致错误。
  5. 清理输入

    • 如果你的程序会接受外部输入,考虑对输入内容进行检查和清理,确保没有奇怪的字节序列被包含在输入中。
例外情况:

如果你正在使用 Terminal 或 IDE,并且使用的语言和库需要特定的编码(如utf-8Python 的 ),确保你的环境支持这些设置。

(2)

C语言相关知识点:

(1)次方的写法(以b²为例)

d=pow(b,2);//这种写法高次幂 更方便,但是要注意写上头文件include <math.h>

d=b*b;//这种写法更易理解,但是仅仅只适用于低次幂 或者次幂固定时更方便

(2)if语句的嵌套使用

  1. 嵌套层次不要过多:过多的嵌套会使代码看起来混乱且难以理解,应尽量避免。

  2. 每个if或else if语句后面都应该有对应的花括号 包围的语句组,即使只有一行代码(虽然可以省略,但建议不要省略,容易出错还不容易培养好的代码风格)。

  3. 在嵌套的if语句中,else关键字只与最内层的if最相邻的if匹配。

相关推荐
沙尘暴炒饭几秒前
vuex持久化vuex-persistedstate,存储的数据刷新页面后导致数据丢失
开发语言·前端·javascript
Msshu1233 分钟前
诱骗协议芯片支持PD2.0/3.0/3.1/PPS协议,支持使用一个Type-C与电脑传输数据和快充取电功能
c语言·开发语言·电脑
双叶83630 分钟前
(51单片机)LCD展示动画(延时函数)(LLCD1602教程)
c语言·数据库·c++·单片机·嵌入式硬件·51单片机
景天科技苑44 分钟前
【Rust结构体】Rust结构体详解:从基础到高级应用
开发语言·后端·rust·结构体·关联函数·rust结构体·结构体方法
倔强的石头1061 小时前
【C++指南】位运算知识详解
java·开发语言·c++
攻城狮7号1 小时前
Python爬虫第19节-动态渲染页面抓取之Splash使用下篇
开发语言·爬虫·python·python爬虫
SophiaSSSSS1 小时前
无标注文本的行业划分(行业分类)算法 —— 无监督或自监督学习
学习·算法·分类
天天进步20151 小时前
Python项目--基于计算机视觉的手势识别控制系统
开发语言·python·计算机视觉
mozun20202 小时前
QT:Qt5 串口模块 (QSerialPort) 在 VS2015 中正确关闭串口避免被占用
开发语言·c++·qt·串口·串口调试·上位机软件
小刘同学++2 小时前
Qt 中线程使用
开发语言·qt