Руководство полного чайника по программированию на языке Си


Задача: напечатать корни из чисел от 1 до 100


/* Задача: напечатать корни из чисел от 1 до 100.

Новая информация: Нам понадобится новый тип данных - ДЕЙСТВИТЕЛЬНЫЕ ЧИСЛА. Это числа, имеющие дробную часть (после точки). Как мы уже знаем, целые - это int. буква - это char. действительное число - это double. (есть еще слово float, но им пользоваться не рекомендуется).

Для вычисления корня используется итерационный алгоритм Герона.

q = корень из x;

q[0] := x; q[n+1] := 1/2 * ( q[n] + x/q[n] );

Главное тут не впасть в ошибку, не клюнуть на q[n] и не завести массив. Нам не нужны результаты каждой итерации, нам нужен только конечный ответ. Поэтому нам будет вполне достаточно ОДНОЙ, но изменяющейся в цикле, ячейки q. */

#include

/* Еще одно новое ключевое слово - const. Обозначает константы. В отличие от переменных, такие имена нельзя изменять. То есть, если где-то потом попробовать написать epsilon = ... ; то это будет ошибкой. */ const double epsilon = 0.0000001; /* точность вычислений */

/* Функция вычисления модуля числа */ double doubleabs(double x){ if(x < 0) return -x; else return x; }

/* Функция вычисления квадратного корня */ double sqrt(double x){

double sq = x;

/* Такая конструкция есть просто склейка двух строк: double sq; sq = x; Называется это "объявление переменной с инициализацией". */

while(doubleabs(sq*sq - x) >= epsilon){ sq = 0.5 * (sq + x/sq); } return sq; }

void main() { int n;

for(n=1; n <= 100; n++) printf("sqrt(%d)=%lf\n", n, sqrt((double) n) );

}

/* Здесь в операторе printf() мы печатаем ДВА выражения. ФОРМАТ ЗНАЧЕНИЕ ------ -------- %d -- n %lf -- sqrt((double) n)

По формату %d печатаются значения типа int. По формату %c печатаются значения типа char. По формату %lf (или %g) печатаются значения типа double.

Что значит "напечатать значение выражения sqrt(xxx)" ? Это значит: - вызвать функцию sqrt() с аргументом, равным xxx; - вычислить ее; - возвращенное ею значение напечатать по формату %lf, то есть как действительное число.

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




- Начало -  - Назад -  - Вперед -