Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык C. Ч4.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
92 Кб
Скачать
☆

Int main(void)

{

int n = 0;

size_t intsize;

intsize = sizeof (int);

printf("n = %d, n состоит из %zd байтов; все значения int имеют %zd байтов.\n",

n, sizeof n, intsize );

return 0;

}

В языке С указано, что операция sizeof возвращает значение типа size_t. Это целочисленный тип без знака, но не совершенно новый тип. Он определен в терминах стандартных типов.

Операция деления по модулю: %

Операция деления но модулю применяется в целочисленной арифметике. Ее результатом является остаток от деления целого числа, стоящего слева от знака операции, на число, расположенное справа от него. Например, 13 % 5 (читается как “13 по модулю 5”) дает в результате 3, поскольку 5 умещается в 13 дважды с остатком, равным 3. Не пытайтесь выполнять эту операцию над числами с плавающей запятой. Она просто не работает.

На первый взгляд эта операция может показаться экзотическим инструментом, предназначенным только для математиков, но по существу она очень удобна и полезна. Обычно она используется, чтобы помочь управлять ходом выполнения программы. Предположим, например, что вы работаете над программой подготовки счетов, предназначенной для начисления дополнительной платы каждый третий месяц. Для этого достаточно разделить номер месяца по модулю 3 (т.е. month % 3) и проверить, не равен ли результат 0. Если равен, программа включает дополнительную плату.

В листинге 5.9 приведен еще один пример применения операции %. В нем также демонстрируется еще один способ использования цикла while.

Листинг 5.9. Программа min_sec.c

// min_sec.c -- переводит секунды в минуты и секунды

#include <stdio.h>

#define SEC_PER_MIN 60 // количество секунд в минуте

Int main(void)

{

int sec, min, left;

printf("Перевод секунд в минуты и секунды!\n");

printf("Введите количество секунд (<=0 для выхода):\n");

scanf("%d", &sec); // чтение количества секунд

while (sec > 0)

{

min = sec / SEC_PER_MIN; // усеченное количество минут

left = sec % SEC_PER_MIN; // количество секунд в остатке

printf("%d seconds is %d minutes, %d seconds.\n", sec, min, left);

printf("Введите следующее значение (<=0 для выхода):\n");

scanf("%d", &sec);

}

printf("Готово!\n");

return 0;

}

Вот как выглядит пример вывода:

Перевод секунд в минуты и секунды!

Введите количество секунд (<=0 для выхода):

154

154 секунд - это 2 минут(ы) 34 секунд.

Введите следующее значение (<=0 для выхода) :

567

5 67 секунд - это 9 минут (ы) 27 секунд.

Введите следующее значение (<=0 для выхода) :

0

Готово!

В коде из листинга 5.2 для управления циклом while применяется счетчик. Как только значение счетчика превысит заданный размер, цикл завершается. Однако для загрузки новых значений переменной sec код в листинге 5.9 использует функцию scanf (). Цикл продолжается до тех пор, пока это значение положительно. Когда пользователь вводит ноль или отрицательное значение, цикл завершается. Важной особенностью программы в обоих случаях является то, что каждая итерация цикла обновляет значение проверяемой переменной.

Операции инкремента и декремента: ++ и --

Операция инкремента решает простую задачу: она увеличивает (инкрементирует) значение своего операнда на 1. Существуют две разновидности этой операции. В первом случае символы ++ располагаются перед изменяемой переменной; это префиксная форма.

Во втором случае символы ++ следуют сразу за переменной; это постфиксная форма. Эти две формы отличаются друг от друга по моменту выполнения инкрементирования. Сначала мы объясним подобные черты этих форм, а затем обратимся к различиям. Короткий пример, представленный в листинге 5.10, демонстрирует работу операции инкремента.

Листинг 5.10. Программа add_one.c

/* add_one.c -- инкремент: префиксная и постфиксная формы*/

#include <stdio.h>