c语言-C语言代码,新手,帮忙看看哪里有错误

问题描述

C语言代码,新手,帮忙看看哪里有错误

#include
#include
int main()
{
double a,b,c,disc,x1,x2,realpart,imagpart;
scanf("%lf,%lf,%lf",&a,&b,&c);
printf("The equation");
if(fabs(a)<=1e-6)
printf("is not a quadratic.
");
else
{
disc=b*b-4*a*c;
if(fabs(disc)<=1e-6)
printf(" has two equal roots:%8.4f
",-b/(2*a));
else if(fabs(disc)>1e-6)
{
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf(" has two toots:%8.4fand%8.4f
",x1,x2);
}
else
{
realpart=-b/(2*a);
imagpart=(b*b-4*a*c)/(2*a);
printf(" has complex roots:
");
printf("%8.4f+%8.4fi",realpart,imagpart);
printf("%8.4f-%8.4fi",realpart,imagpart);
}
}
return 0;
}

解决方案

你的代码的错误点在于这两句:
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);

根据你提供的数据,b^2 - 4ac = 3*3-4*1*6 = -15;

而sqrt()函数的定义是:
double sqrt( double num );
功能: 函数返回参数num的平方根。如果num为负,产生域错误。

有num为负数了,所以sqrt()函数计算出错。

解决方案二:

大家帮忙看看下面的代码

解决方案三:

谢谢各位的耐心解答,问题终结了,修改几处就好了
else if(fabs(disc)>1e-6) 改为 else if(disc>1e-6) 绝对值去掉,防止disc<0还会进入sqrt函数

解决方案四:

楼主,你输入的三个值,只有a有给值,b跟c都是0
scanf("%lf,%lf,%lf",&a,&b,&c);中的两个逗号去掉。改成scanf("%lf%lf%lf",&a,&b,&c);

时间: 2024-09-28 17:51:39

c语言-C语言代码,新手,帮忙看看哪里有错误的相关文章

c语言-C语言小白请大神帮忙改一下代码,谢谢。

问题描述 C语言小白请大神帮忙改一下代码,谢谢. #include #include #include #include #include void choose();//选择函数 void shu();//猜数字函数 void paihang();//排行榜 void repaihang(int n);//更新排行榜 void replace();//初始化排行榜(没有记录时的排行榜) typedef struct { char name[10]; int score; }re; int ma

c语言-C语言的这个代码表达不了,大神帮忙看看。

问题描述 C语言的这个代码表达不了,大神帮忙看看. #include #define N 50 //学生人数 #define M 3 //课程门数 void Input(int score[][M+3], int n); { int i, j, sum; printf("Input Number and %d score:n",M); for (i = 0; i < n; i++) { sum = 0; printf("%d:",i+1); for (j =

c语言-求各位大师帮帮忙设计一个程序 C语言 写出代码

问题描述 求各位大师帮帮忙设计一个程序 C语言 写出代码 设计某班学生成绩管理系统,要求实现以下功能: 1.从键盘输入学号.姓名.各门课程成绩(不少于2门),并将其保存在文件中. 2.打开文件后,计算每个人的总分和平均分,排序并保存. 3.可以在文件中进行单项查询或多项查询的功能. 万谢 解决方案 人都这样,有了想法就不想写代码了,想叫别人写,所以才雇佣别人去做码农 解决方案二: 这种作业题在网上搜搜都会有的,比如这个http://blog.csdn.net/sdliujiangbo/artic

字符串-求大神帮忙看看这个c语言他题目代码的缺陷~~

问题描述 求大神帮忙看看这个c语言他题目代码的缺陷~~ 7.1连接两个字符串 不使用 strcat 函数,编写一个程序将两个字符串连接起来,注意程序首先需要通过键盘输入两个字符串,然后将它们连接起来,将连接后的字符串存储于新的字符数组中,再打印数出. #include<stdio.h> int main() { char a[50],b[50],c[50];int i=0,j; gets(a); gets(b); while(a[i]!='') { c[i]=a[i]; i++; } j=i,

编程c语言-写的c代码求帮忙找错误

问题描述 写的c代码求帮忙找错误 #include #include #include #include #include extern "C" { WINBASEAPI HWND WINAPI GetConsoleWindow(); } int main(int argc, char *argv[]) //主线程运行结束,辅助线程也结束. { HWND hwnd; HDC hdc; printf("There are some words in console window

初学者c语言动态汉诺塔帮忙注释

问题描述 初学者c语言动态汉诺塔帮忙注释 #include #include #define N 1000 void gotoxy(int x, int y); // 声明gotoxy函数 void colorxy(int x, int y); //声明colorxy函数 void hanoi(int n,char a,char b,char c); //声明hanoi函数 void move(int n,char a,char b); //声明move函数 void Print(); //声明

c语言-汉诺塔C语言编程问题,求帮忙

问题描述 汉诺塔C语言编程问题,求帮忙 Description 大家都听说过汉诺塔吧?有n个圆盘由小到大排列,套在a柱上,每次只能移动一个圆盘,而且只能大的在下,小的在上,让你把a柱上的圆盘移到b柱,给你一个多余的c柱,问你最少移动多少次才能完成任务. Input 输入有多组数据,每组包括一个整数n(n<=10000000),表示初始状态下有n个圆盘,当输入的n为0时,程序结束,n为负的情况不作处理. Output 对每个输入,对应一行输出,每行输出包括一个整数,即移动的最小次数,因为数目非常大

图片-悬赏40分 全英文的介绍的简单的两个c语言编程 求大神帮忙解答

问题描述 悬赏40分 全英文的介绍的简单的两个c语言编程 求大神帮忙解答 解决方案 #include int main() { int count; printf("输入"*"的个数:"); scanf("%d",&count); for(int i=0;i<=count;i++) { for(int j=0;j<i;j++) { printf("*"); } printf("n");

c语言-C语言求教,进制转换代码

问题描述 C语言求教,进制转换代码 请大家帮我看看我的程序有什么错误,感激不尽! /* num:数字 i:进制数 k:总位数 */ #include"stdio.h" #include"math.h" int firsttext(int num,int i){ int k; for(k=1;;k++){ if(num<((int)pow((float)i,(float)k))) break; } --k; return k; } int printouteve