Кстати, это был письменный экзамен. Эти вопросы дали 4 балла каждый из возможных 100.
Вопрос 1:
Напишите небольшую программу, которая с помощью одного цикла while и оператора if выведет на экран следующее: [предупреждение: несколько чисел в строке или жесткое кодирование значений в переменные приведут к нулю точек]
1 4 9 16 25
1 4 9 16
1 4 9
1 4
1
Вопрос 2:
Ниже приведено уравнение для гармонического среднего. Напишите небольшую программу, которая может принимать значения массива и вычислять их среднее гармоническое значение.
x = n * (n сигма i = 1 (1 / xi))
У вас есть какие-нибудь ответы?
Вопрос 1:
#include <iostream>
int main()
{
int i = 1;
int j = 5;
while(j > 0)
{
std::cout << i*i << " ";
if(i == j)
{
i = 1;
--j;
std::cout << "\n";
}else
{
++i;
}
}
}
Выход:
1 4 9 16 25 1 4 9 16 1 4 9 1 4 1
Достаточно хорошо?
Поскольку рекурсия не была запрещена, можно попробовать это:
#include <iostream>
void printLn(int i) {
int j = 0;
while(++j <= i)
std::cout << j*j<<" ";
std::cout << "\n";
if(i > 1)
printLn(i - 1);
}
int main() {
printLn(5);
}
Посмотрите, как это работает в: http://ideone.com/mrKUx0
Он использует рекурсию для печати отдельных строк и цикл while для печати каждого числа в строках. If используется для прерывания рекурсии по окончании.
Другой код очень прост:
#include <iostream>
const int ARRAY_SIZE = 5;
int main() {
float array[ARRAY_SIZE] = {1, 2, 3, 4, 5};
float sum = 0;
for(int i = 0; i < ARRAY_SIZE; ++i)
sum += 1 / array[i];
std::cout << "Harmonic Mean: " << ARRAY_SIZE / sum;
}
Снова вижу: http://ideone.com/GQJqQn
Обратите внимание, что среднее гармоническое определяется как n/Sum(...)
не n * Sum(...)