Резюме: Классы памяти
Резюме: Классы памяти
I. Ключевые слова: auto, extern, static, register
II. Общие замечания:
Класс памяти определяет область действия переменной и продолжительность ее существования в памяти. Класс памяти устанавливается при описании переменной с соответствующим ключевым словом. Переменные, определенные вне функции, являются внешними и имеют глобальную область действия. Переменные, определенные внутри функции, являются автоматическими и локальными, если только не используются другие ключевые слова. Внешние переменные, определенные раньше функции, доступны ей, даже если не описаны внутри ее.
III. Свойства
КЛАСС ПАМЯТИ КЛЮЧЕВОЕ СЛОВО ПРОДОЛЖИТЕЛЬНОСТЬ СУЩЕСТВОВАНИЯ ОБЛАСТЬ ДЕЙСТВИЯ Автоматический auto Временно Локальная Регистровый register Временно Локальная Статический static Постоянно Локальная Внешний extern Постоянно Глобальная (все файлы) Внешний статический static Постоянно Глобальная (один файл)1. Разделим случайное число на 32768. В результате получим число х в диапазоне - 1 <= х < 1. (Мы должны превратить его в тип float, чтобы иметь десятичные дроби.)
2. Добавим 1. Наше новое число удовлетворяет отношению 0 < = х < 2.
3. Разделим на 2. Теперь имеем 0 <= х < 1.
4. Умножим на 6. Имеем 0 <= х < 6. (Близко к тому, что нужно, но 0 не является возможным значением.)
5. Прибавим 1: 1 <= х < 7. (Заметим, что эти числа все еще являются десятичными дробями.)
6. Преобразуем в целые числа. Теперь мы имеем целые в диапазоне от 1 до 6.
7. Для обобщения достаточно заменить значение 6 в п. 4 на число сторон.
Вот функция, которая выполняет эти действия:
/* электронное бросание костей */
#define SCALE 32768.0
rollem(sides) float sides;
{
float roll;
roll = ((float)rand( )/SCALE + 1.0) * sides/2.0 + 1.0;
return((int)roll);
}
Мы включили в программу два явных описания типа, чтобы показать, где выполняются преобразования типов. Обратимся к программе, которая использует эти средства:
/* многократное бросание кости */
main( )
{
int dice, count, roll, seed;
float sides;
printf(" Введите, пожалуйста, значение зерна. ");
scanf(" %d, &seed);
srand(seed);
printf(" Введите число сторон кости, 0 для завершения. ");
scanf(" %d", &sides);
while(sides > 0)
{ printf(" Сколько костей? ");
scanf(" %d", &dice);
for( roll = 0, count = 1; count <= dice; count++)
roll + = rollem(sides); /* бросание всех костей набора */
printf(" У вас выпало %d, для %d %.0f-сторонних костей. ", roll, dice, sides);
printf(" Сколько сторон? Введите 0 для завершения. ");
scanf(" %f", &sides);
} printf(" Удачи вам! ");
}
Теперь давайте используем эту программу:
Введите значение зерна
1
Введите число сторон кости, 0 для завершения.
6
Сколько костей?
2
У вас выпало 4 для 2 6-сторонних костей.
Сколько сторон ? Введите 0 для завершения.
6
Сколько костей ?
2
У вас выпало 7 для 2 6-сторонних костей.
Сколько сторон? Введите 0 для завершения.
0
Удачи Вам!
Спасибо.
Вы можете использовать функцию rollem( )по-разному. Пусть число сторон (sides) равно двум, тогда бросание) монеты даст следующий результат: "орел" выпал 2 раза, a "peшка" - один (или наоборот, смотря, что вы предпочитаете). Можно легко модифицировать программу, чтобы показать как отдельные результаты, так и итог. Или вы можете построить имитатор игры "крапс". Если вам нужно большое число бросаний, вы можете легко модифицировать свою программу и получить результат, подобный следующему:
Введите значение зерна.
10
Введите количество ходов; введите 0 для завершения.
18
Сколько сторон и сколько костей? 6 3
Здесь 18 ходов для 3 6-сторонних костей.
7 5 9 7 12 10 7 12 10 14
9 8 13 9 10 7 16 10
Сколько ходов? Введите 0 для завершения. 0
Использование функции rand( )[но не rоllem( )] изменило бы вашу программу угадывания чисел: компьютер стал бы выбирать, а вы угадывать, вместо того чтобы сделать наоборот.
Разработаем еще некоторые функции. Сначала мы хотим создать функцию, которая читает целые числа.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
35. Классы
35. Классы Предназначение понятия класса заключается в том, чтобы предоставить инструмент для образования новых типов, таких же удобных в обращении, как и встроенные типы. В идеальном случае новый тип способом применения не должен отличаться от встроенных типов, только
R.3.5 Классы памяти
R.3.5 Классы памяти Существует два описываемых класса памяти: автоматический и статический.Автоматические объекты становятся локальными при передаче управления в каждый блок.Статические объекты существуют и сохраняют свое значение во все время выполнения
Классы
Классы Класс — это структура, предназначенная для хранения данных (полей и свойств), а также кода, обрабатывающего эти данные (методы). Поля, методы и свойства называют членами класса.Класс может быть создан на основе другого класса — в этом случае он называется
10. Классы памяти и разработка программ
10. Классы памяти и разработка программ ЛОКАЛЬНЫЕ И ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕКЛАССЫ ПАМЯТИФУНКЦИЯ ПОЛУЧЕНИЯ СЛУЧАЙНЫХ ЧИСЕЛПРОВЕРКА ОШИБОКМОДУЛЬНОЕ
Инициализация массивов и классы памяти
Инициализация массивов и классы памяти Для хранения данных, необходимых программе, часто используют массивы. Например, в массиве из 12 элементов можно хранить информацию о количестве дней каждого месяца. В подобных случаях желательно иметь удобный способ
ПРИЛОЖЕНИЕ Г. ТИПЫ ДАННЫХ И КЛАССЫ ПАМЯТИ
ПРИЛОЖЕНИЕ Г. ТИПЫ ДАННЫХ И КЛАССЫ ПАМЯТИ Основные типы данных Ключевые слова: Основные типы данных определяются с помощью следующих семи ключевых слов: int, long, short, unsigned, char, float, double Целые со знаком: Могут иметь положительные и отрицательные значения.int: основной тип
Классы памяти
Классы памяти I.Ключевые слова: auto, external, static, registerII. Основные замечания Класс памяти переменной определяет область ее действия и продолжительность использования. Класс памяти определяется местом задания переменной и соответствующим ключевым словом. Переменные,
Классы памяти
Классы памяти Спецификация класса памяти переменной определяет, какое время жизни она имеет (глобальное или локальное), и влияет на область действия переменной. Объект с глобальным временем жизни существует и имеет значение на протяжении всего времени выполнения
13. Классы
13. Классы Механизм классов в C++ позволяет пользователям определять собственные типы данных. По этой причине их часто называют пользовательскими типами. Класс может наделять дополнительной функциональностью уже существующий тип. Так, например, IntArray, введенный в главе 2,
Классы
Классы В программах, написанных на языке С, данные и функции, предназначенные для их обработки определяются отдельно. Такое разделение затрудняет структурированное программирование и создает дополнительные возможности для ошибок, которые трудно обнаружить.В С++
4.4 Классы Памяти
4.4 Классы Памяти Есть два описываемых класса памяти: автоматический и статический.Автоматические объекты локальны для каждого вызова блока и сбрасываются по выходе из него.Статические объекты существуют и сохраняют свое значение в течение выполнения всей
Классы
Классы ОО-метод основан на понятии класса. Неформально, класс - элемент ПО, описывающий абстрактный тип данных и его частичную или полную реализацию. Абстрактный тип данных - множество объектов, определяемое списком компонентов (features) - операций, применимых к этим
Отложенные классы как частичные интерпретации: классы поведения
Отложенные классы как частичные интерпретации: классы поведения Не все отложенные классы так близки к АТД как STACK. В промежутке между полностью абстрактным классом, таким как STACK, в котором все существенные компоненты отложены, и эффективным классом, таким как FIXED_STACK,