Резюме: Классы памяти

Резюме: Классы памяти

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( )] изменило бы вашу программу угадывания чисел: компьютер стал бы выбирать, а вы угадывать, вместо того чтобы сделать наоборот.

     Разработаем еще некоторые функции. Сначала мы хотим создать функцию, которая читает целые числа.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

4.4 Классы Памяти

Из книги Сущность технологии СОМ. Библиотека программиста автора Бокс Дональд

4.4 Классы Памяти Есть два описываемых класса памяти: автоматический и статический.Автоматические объекты локальны для каждого вызова блока и сбрасываются по выходе из него.Статические объекты существуют и сохраняют свое значение в течение выполнения всей


Классы и IDL

Из книги Программирование автора Козлова Ирина Сергеевна


35. Классы

Из книги Справочное руководство по C++ автора Страустрап Бьярн

35. Классы Предназначение понятия класса заключается в том, чтобы предоставить инструмент для образования новых типов, таких же удобных в обращении, как и встроенные типы. В идеальном случае новый тип способом применения не должен отличаться от встроенных типов, только


R.3.5 Классы памяти

Из книги Delphi. Учимся на примерах автора Парижский Сергей Михайлович

R.3.5 Классы памяти Существует два описываемых класса памяти: автоматический и статический.Автоматические объекты становятся локальными при передаче управления в каждый блок.Статические объекты существуют и сохраняют свое значение во все время выполнения


Классы

Из книги Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT автора Фролов Александр Вячеславович

Классы Класс — это структура, предназначенная для хранения данных (полей и свойств), а также кода, обрабатывающего эти данные (методы). Поля, методы и свойства называют членами класса.Класс может быть создан на основе другого класса — в этом случае он называется


Классы

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Классы В программах, написанных на языке С, данные и функции, предназначенные для их обработки определяются отдельно. Такое разделение затрудняет структурированное программирование и создает дополнительные возможности для ошибок, которые трудно обнаружить.В С++


Классы

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

Классы ОО-метод основан на понятии класса. Неформально, класс - элемент ПО, описывающий абстрактный тип данных и его частичную или полную реализацию. Абстрактный тип данных - множество объектов, определяемое списком компонентов (features) - операций, применимых к этим


Отложенные классы как частичные интерпретации: классы поведения

Из книги Язык Си - руководство для начинающих автора Прата Стивен

Отложенные классы как частичные интерпретации: классы поведения Не все отложенные классы так близки к АТД как STACK. В промежутке между полностью абстрактным классом, таким как STACK, в котором все существенные компоненты отложены, и эффективным классом, таким как FIXED_STACK,


Классы памяти

Из книги C++ для начинающих автора Липпман Стенли

Классы памяти Спецификация класса памяти переменной определяет, какое время жизни она имеет (глобальное или локальное), и влияет на область действия переменной. Объект с глобальным временем жизни существует и имеет значение на протяжении всего времени выполнения


10. Классы памяти и разработка программ

Из книги Описание языка PascalABC.NET автора Коллектив РуБоард

10. Классы памяти и разработка программ ЛОКАЛЬНЫЕ И ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕКЛАССЫ ПАМЯТИФУНКЦИЯ ПОЛУЧЕНИЯ СЛУЧАЙНЫХ ЧИСЕЛПРОВЕРКА ОШИБОКМОДУЛЬНОЕ


Инициализация массивов и классы памяти

Из книги автора

Инициализация массивов и классы памяти      Для хранения данных, необходимых программе, часто используют массивы. Например, в массиве из 12 элементов можно хранить информацию о количестве дней каждого месяца. В подобных случаях желательно иметь удобный способ


ПРИЛОЖЕНИЕ Г. ТИПЫ ДАННЫХ И КЛАССЫ ПАМЯТИ  

Из книги автора

ПРИЛОЖЕНИЕ Г. ТИПЫ ДАННЫХ И КЛАССЫ ПАМЯТИ   Основные типы данных Ключевые слова: Основные типы данных определяются с помощью следующих семи ключевых слов: int, long, short, unsigned, char, float, double Целые со знаком: Могут иметь положительные и отрицательные значения.int: основной тип


Классы памяти

Из книги автора

Классы памяти I.Ключевые слова: auto, external, static, registerII. Основные замечания Класс памяти переменной определяет область ее действия и продолжительность использования. Класс памяти определяется местом задания переменной и соответствующим ключевым словом. Переменные,


13. Классы

Из книги автора

13. Классы Механизм классов в C++ позволяет пользователям определять собственные типы данных. По этой причине их часто называют пользовательскими типами. Класс может наделять дополнительной функциональностью уже существующий тип. Так, например, IntArray, введенный в главе 2,