Из C Primer Plus, 5-е издание: «Напишите программу, которая создает два массива типа double из восьми элементов и использует цикл, чтобы позволить пользователю вводить значения для восьми элементов первого массива. Попросите программу установить элементывторой массив к совокупной сумме элементов первого массива. Например, четвертый элемент второго массива должен равняться сумме первых четырех элементов первого массива, а пятый элемент второго массива должен равняться суммепервых пяти элементов первого массива. (Это можно сделать с помощью вложенных циклов, но используя тот факт, что пятый элемент второго массива равен четвертому элементу второго массива плюс пятый элемент первого массива,вы можете избежать вложения и просто использовать один цикл для этой задачи.) Наконец, используйте циклы для отображения содержимого двух массивов, причем первый массив отображается в одной строке, а каждый элемент второго массива отображается под соответствующим элементомпервый арЛуч. "
Я написал:
#include <stdio.h>
int main(void)
{
double first[8];
double second[8];
int i;
printf("Enter 8 'doubles':\n");
i = 0;
scanf("%lf", &first[i]);
second[i] = first[i];
i = 1;
while(i < 8)
{
scanf("%lf", &first[i]);
second[i] = first[i] + first[i-1];
i++;
}
for(i = 0; i < 8; i++)
{
printf("%.2lf ", first[i]);
}
printf("\n");
for(i = 0; i < 8; i++)
{
printf("%.2lf ", second[i]);
}
}
Мой вывод:
Enter 8 'doubles':
1
1
1
1
1
1
1
1
1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
1.00 2.00 2.00 2.00 2.00 2.00 2.00 2.00 Press any key to continue . . .
Ожидаемый вывод с 1 2 3 6 12 24 48 96
в нижнем ряду.Не могу понять, почему это работает только для первой итерации.Что я пропустил?
Заранее спасибо.
РЕДАКТИРОВАТЬ: Понятия не имею, почему это не «домашнее задание», я отметил это как упражнение ... Ах, хорошо.
EDIT2:
Этот код:
#include <stdio.h>
int main(void)
{
double first[8];
double second[8];
int i;
printf("Enter 8 'doubles':\n");
i = 0;
scanf("%lf", &first[i]);
second[i] = first[i];
i = 1;
while(i < 8)
{
scanf("%lf", &first[i]);
second[i - 1] = first[i] + first[i-1];
i++;
}
for(i = 0; i < 8; i++)
{
printf("%.2lf ", first[i]);
}
printf("\n");
for(i = 0; i < 8; i++)
{
printf("%.2lf ", second[i]);
}
}
Этот вывод:
1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
2.00 2.00 2.00 2.00 2.00 2.00 2.00 -925596313493178310000... etc