求一元二次方程式的根,输出的结果一直不对
#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的情况呀,这样试试看
#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");
}
基本思想:假设数据是按升序排序的,对于给定值 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;
}
}
}
}