Чтение онлайн

ЖАНРЫ

Конец холивара. Pascal vs C

Кривцов М. А.

Шрифт:

#include <assert. h>

#include <stdio. h>

int main 

{

int x, y;

printf (“Введите два целых числа через пробел\n”);

int r = scanf (”%d%d”, &x, &y);

assert (r == 2);

while (x!= y)

if (x> y)

x = x – y;

else

y = y – x;

printf (“НОД=%d\n”, x);

getchar ;

return 0;

}

Для

проверки соответствия ввода пользователя требованиям программы мы сохраняем (=) результат выполнения scanf – количество успешно измененных переменных – в целочисленной переменной с именем r (int r), после чего требуем равенства её значения двум

(assert (r == 2);

Для этого и нужна директива препроцессора

#include <assert. h>

2.2.2. Цикл, который выполняется не меньше одного раза

Обратите внимание, что в цикле используется условие продолжения, а не завершения повторения! Это не цикл “до”, подобный REPEAT… UNTIL в Pascal, хотя назначение его то же – позволить телу цикла выполнится хотя бы один раз.

Пример 2.5: Решение предыдущей задачи.

#include <assert. h>

#include <stdio. h>

int main 

{

int x, y;

printf (“Введите два целых числа через пробел\n”);

int r = scanf (”%d%d”, &x, &y);

assert (r == 2);

do

if (x> y)

x = x – y;

else

y = y – x;

while (x!= y);

printf (“НОД=%d\n”, x);

getchar ;

return 0;

}

2.2.3. Цикл с параметром (со счётчиком)

Пример 2.6: Вычислить факториал числа (n!=1x2x3x…xn).

#include <stdio. h>

int main 

{

int f=1, k, n;

printf (“Введите целое положительное число\n”);

scanf (”%d”, &n);

for (k=1; k <=n; k++)

f=f*k;

printf (“n!=%d\n”, f);

getchar ;

return 0;

}

Для

этого цикла в Си Рис. 6 из части о Паскале даже более нагляден, чем там! Особенно, если заменить в этом операторе k++ на k=k+1, что его работы не изменит. Разве, что только незаметно замедлит, поскольку унарные операции выполняются быстрее бинарных.

Цикл с параметром в Си больше похож на аналогичный оператор в древнем Бейсике – там тоже был шаг цикла и этим он был более гибким, чем соответствующий оператор Паскаля.

В Си возможен, например, такой оператор цикла с параметром:

for (i=100; i>=10; i=i-5) {…};

Здесь переменная i уменьшается от 100 до 10 с шагом 5 и, соответственно, тело цикла в фигурных скобках будет выполнено 19 раз.

3. Функции

В C есть только функции, а процедур нет.

Тело функции не может содержать в себе определения других функций.

Функцию можно вызвать из другой функции.

Оператор return возвращает выполнение программы в точку вызова функции.

При использовании return; функция не возвращает никакого значения.

При использовании такого вида – return выражение; результатом функции становится значение данного выражения. Тип этого выражения должен либо совпадать с типом функции, либо относиться к числу типов, допускающих автоматическое преобразование к типу функции.

Оператор return может не присутствовать в явном виде в теле функции. Тогда он подразумевается перед закрывающей тело функции фигурной скобкой. Эту подстановку производит сам компилятор.

Глобальные переменные описываются до функций, которые их будут “видеть”.

Пример 2.7: Из главной функции вызывается функция вычисляющая факториал.

#include <stdio. h>

#include <stdlib. h>

int fakt (int n)

{

int f=1, k;

for (k=1; k <=n; k++)

f=f*k;

return f;

}

int main (void)

{

int n;

printf (“Введите целое положительное число\n”);

scanf (”%d”, &n);

int f = fakt (n);

printf (“n! = %d\n”, f);

getchar ;

return 0;

}

4. Массивы и индексированные переменные

Пример описания одномерных массивов:

int x [15], y [30];

Пример описания двумерного массива:

float z [10] [20];

Нумерация элементов массива начинается с нуля.

Пример 2.9: Программа генерирует таблицу умножения и оформляет вывод результатов в матрицу 10 на 10 используя двумерный массив.

Поделиться с друзьями: