Разбор арифметического выражения и его вычисление - C (СИ)
Формулировка задачи:
Имеется программа для решения квадратных уравнений
Проблема лишь в одном..
Точнее в "%fx^2%fx%f". Если именно указывать x^2, переменные b и c будут нулями. Как можно сделать, чтобы вводить всё же можно было кв.уравнение с x^2? Например, 2x^2+4x-2. Чтобы программа именно различала 2 перед x^ и последующий коэффициент b?
Заранее спасибо)
#include <stdio.h> #include <math.h> int main(int argc, char *argv[]) { float a, b, c, x1, x2, d; int s; sscanf(argv[1],"%fx^2%fx%f", &a, &b, &c); printf("a=%f, b=%f, c=%f\n", a, b, c); printf("========\n Решаем \n========\n"); d=pow(b,2)-(4*(a*c)); printf("D=%f\n", d); if (d<0) { printf("Корни не определены.\n");} else if (d=0) { x1=(b*(-1)+1)/(2*a); printf("X=%f",x1);} else if (d>=0) { x1=((b*(-1))-sqrt(d))/(2*a); x2=((b*(-1))+sqrt(d))/(2*a); printf("X1=%f, X2=%f\n", x1, x2);} getchar(); return 0;}
sscanf(argv[1],"%fx^2%fx%f", &a, &b, &c);
Решение задачи: «Разбор арифметического выражения и его вычисление»
textual
Листинг программы
#include <stdio.h> #include <string.h> #define SIZE_BUFER ( 4 ) int main() { const char* const liter = "3x^2+3x+4"; /* "3x^2+3x+4" выражение должно быть приведено к виду без пробелов или прочих непозволительных символов, или проверяться на наличие таких символов и завершать программу при их обнаружении. выражение "3x^2 + 3x + 4" уже будет обработано программой иначе */ char buf[ SIZE_BUFER ]; float x, y, z; memset( buf, 0, SIZE_BUFER ); sscanf( liter, "%f%3s%f%*c%f", &x, buf, &y, &z ); fprintf( stdout, "%3f%s + %3fx + %3f \n", x, buf, y, z ); return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и строками.
- Определение константы SIZE_BUFER, которая задает размер буфера в байтах.
- Вход в функцию main().
- Объявление константной строки liter, содержащей арифметическое выражение
3x^2+3x+4
. - Создание массива buf типа char с фиксированным размером SIZE_BUFER для хранения промежуточных результатов.
- Инициализация всех элементов массива buf нулевыми значениями при помощи функции memset().
- Использование функции sscanf() для разбора строки liter и сохранения значений переменных x, y и z в соответствующие переменные.
- Вывод на экран значений переменных x, y и z с помощью функции fprintf().
- Возврат значения 0 из функции main(), что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д