Помогите переписать код с C++ на C

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

int main()
{
    float a;
    float b;

    vector<float>s;
    vector<float>v;

    cin >> a;
    cin >> b;

    for (int i = 0; i < a; ++i)
    {
        float d;
        float e;

        cin >> d;
        cin >> e;

        s.push_back(d);
        v.push_back(e);
    }

    float dou = -1;

    while (true)
    {
        float sum = 0;

        for (int i = 0; i < s.size(); ++i)
        {
            sum += s[i] / (v[i] + dou);
        }

        if (sum <= b+0.01 && sum >= b-0.01)
        {
            cout << endl << dou << endl;
            break;
        }

        dou += 0.01;

        cout << dou << endl;
    }
}

Ответы (1 шт):

Автор решения: avp

Для начала (кстати, это замечание справедливо и для С++), измените тип переменной a, которая задает размер задачи, на целый и включите необходимые заголовочные (.h) файлы. Т.е.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

...

int   a;
float b;

Поскольку вы по сути вводите размеры векторов с клавиатуры, то просто перенесите их создание после ввода размера. Для ввода a и b вызывайте фунцию scanf(), которая возвращает количество успешно прочитанных переменных. Т.о. получите

if (scanf("%d %f", &a, &b) != 2) {
   puts("wrong input"); 
   exit(1);
}

float *s = malloc(a * sizeof(float));
float *v = malloc(a * sizeof(float));
if (s == 0 || v == 0) {
   puts("out of memory");
   exit(2);
}

Для ввода в цикле переменных d и e также используйте scanf, а введенные значения просто копируете в элементы динамических массивов s и v.

for (int i = 0; i < a; ++i)
{
    float d;
    float e;
    
    if (scanf("%f %f", &d, &e) != 2) {
       printf ("wrong array input at %d pair\n", i); 
       exit(1);
    }
    s[i] = d;
    v[i] = e;
}

Ну, далее вместо cout вызываете printf()

 printf("\n%f\n", dou);

и

 printf("%f\n", dou);

Собственно, все...

→ Ссылка