Помогите доработать код на C, квадратный трехчлен

Описать тип struct Quadric, задающий квадратный трехчлен с
коэффициентами a, b, c. Реализовать в виде отдельных функций
следующие операции над переменными этого типа: а) проверка
невырожденности трехчлена (неравенство нулю коэффициента при
старшей степени); б) проверка равенства двух трехчленов; в)
вычисление значения трехчлена для заданного значения
переменной; г) сложение двух трехчленов; д) вычисление корней
трехчлена; е) вычисление значения абсциссы, соответствующего
вершине параболы, описываемой трехчленом; ж) проверка,
представим ли трехчлен в виде квадрата линейного двучлена. С
использованием описанных типа и функций разработать
программу, которая для заданного набора из N трехчленов находит

  1. трехчлен с максимальным произведением модулей корней; 2)
    пару трехчленов с наиболее близкими, но не совпадающими
    корнями, среди трехчленов, непредставимых в виде квадрата
    линейного двучлена.

Есть наброски программы (есть 3 ошибки с объявлением)

#define _CRT_SECURE_NO_WARNINGS
#define EPS 1E-6
#include <stdio.h>
#include <windows.h>
#include <string.h>
 
typedef struct Quadric_t {
    double a;
    double b;
    double c;
} Quadric;
 
Quadric q = { 1,-2,4 };
Quadric p;
p.a = -1;
p.b = 4;
p.c = 2;
double value(Quadric q, double x0) {         //вычисление знач для некоторого х
    return q.a * x0 * x0 + q.b * x0 + q.c;
}
void main() {
    Quadric p = { 1, -2, 4 };
    double x0 = 0.1;
    double v = value(p, x0);
    printf("p(%1d)=%1d", x0, v);             //вычисление знач для некоторого х
}
Quadric sum(Quadric q, Quadric p) {          //сложение 2-х трехчленов
    Quadric r;
    r.a = q.a + p.a;
    r.b = q.b + p.b;
    r.c = q.c + p.c;
    return r;
}
void main() {
    Quadric u = { 1,-2,4 }, v = { 1.5,0,-1 }, w;
    w = sum(u, v);                          //сложение 2-х трехчленов
}
typedef struct Complex_t {                  //вычисление корней
    double re, im;
}Complex;
Complex root(Quadric q, int i) {
    double D = q.b * q.b - 4 * q.a * q.c;
    double s = (i == 1) ? -1 : 1;
    Complex c = { 0,0 };
    if (D >= 0)
        c.re = (-q.b + s * sqrt(D)) / (2 * q.a);
    else {
        c.re = -q.b / (2 * q.a);
        c.im = s * sqrt(fabs(D)) / (2 * q.a);
    }
    return c;                               //вычисление корней
}
void main() {
    Quadric u = { 14,12,2009 };
    Complex x1 = root(u, 1), x2 = root(u, 2);
    printf("x1 = %1f + %1f*i\n", x1.re, x1.im);
    printf("x2 = %1f + %1f*i\n", x2.re, x2.im); //вычисление корней
}
int is_roots_equal(Quadric q, Quadric p) {      //проверка равенства корней 2-х трехчленов
    return is_equal(root(q, 1), root(p, 1)) && is_equal(root(q, 2), root(p, 2));
}                                               //проверка равенства корней 2-х трехчленов
double parabola_x(Quadric q) {                  //Вычисление параболы
    return -q.b / (2 * q.a);

Нужна проверка на невырожденность трехчлена, трехчлен с максимальным произведением модулей корней, пару трехчленов с наиболее близкими, но не совпадающими
корнями, среди трехчленов, непредставимых в виде квадрата
линейного двучлена.

какие?

Подчеркивает и требует перед p “;”

Разве не нужно присвоить тип для p ?

Это внутри какой-нибудь функции должно быть, в С++ нельзя просто так воткнуть инструкции куда попало.

Понял, учту этот момент