输出的结果不对,如何解决?

求一元二次方程式的根,输出的结果一直不对


#include
#include
#include
void main()
{
    float a, b, c, disc, x1, x2, p, q;
    scanf_s("a=%f,b=%f,c=%f", &a, &b, &c);
    disc = b * b - 4 * a * c;
    p = (- b) / (2 * a);
    q = sqrt(disc) / (2 * a);
    x1 = p + q;
    x2 = p - q;
    printf("%f\n,%f\n", x1, x2);
    system("pause");
}

你这个就要按照这个格式去输入数据,比如 a=1,b=2,c=3,是这样输入的么,也没有判断disc小于0的情况呀,这样试试看

img

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void main()
{
float a, b, c, disc, x1, x2, p, q;
printf("请输入一元二次方程的系数a,b,c:\n");
scanf_s("%f,%f,%f", &a, &b, &c);
disc = b * b - 4 * a * c;
if (disc < 0) {
printf("无实数解\n");
}
else {
p = (-b) / (2 * a);
q = sqrt(disc) / (2 * a);
x1 = p + q;
x2 = p - q;
printf("x1=%f,x2=%f\n", x1, x2);
}
system("pause");
}

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7545035
  • 这篇博客你也可以参考下:逆序输出 之(单词整体顺序不变,单词的每个字母逆序输出)
  • 除此之外, 这篇博客: 二分法查找中的 采用二分法查找时,数据需是有序不重复的。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •  

    基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功;若 x 小于当前位置值,则在数列的前半段中查找;若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止。

    public class MyArrays {
    
        public int dichotomySearch(double[] arr, double value){
            int start = 0;
            int end = arr.length - 1;
            while (start <= end){
                int middle = (start + end) / 2;
                if (value < arr[middle]){
                    end = middle - 1;
                }else if (value > arr[middle]){
                    start = middle + 1;
                }else {
                    return middle;
                }
            }
            return -1;
        }

     

    使用二分查找法在arr数组中查找value的下标,如果value不存在,就返回-1,如果数组arr不是有序的,结果将不一定正确

    public int  binarySearch(int[]  arr,  int  value){
            //调用排序算法,使数组有序
            sort(arr);
            int start = 0;
            int end = arr.length - 1;
            while (start <= end){
                int middle = (start + end) / 2;
                if (value < arr[middle]){
                    end = middle - 1;
                }else if (value > arr[middle]){
                    start = middle + 1;
                }else {
                    return middle;
                }
            }
            return -1;
        }

     

    因此可以先给arr数组从小到大排序,用冒泡排序实现

     public void sort(char[] arr){
            char temp;
            for (int i = 0; i < arr.length - 1; i++) {
                for (int j = 0; j < arr.length - 1 - i; j++) {
                    if (arr[j] > arr[j + 1]){
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
        }

     

  • 您还可以看一下 孙玖祥老师的图解数据结构与算法课程中的 平衡二叉树的定义和不平衡原因分析小节, 巩固相关知识点