Array M. УЭИТ - Язык Си - руководство для начинающих

Тут можно читать онлайн Array M. УЭИТ - Язык Си - руководство для начинающих - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Мир, год 1988. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Язык Си - руководство для начинающих
  • Автор:
  • Жанр:
  • Издательство:
    Мир
  • Год:
    1988
  • Город:
    Москва
  • ISBN:
    5-03-001309-1 /русск./
  • Рейтинг:
    3/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 60
    • 1
    • 2
    • 3
    • 4
    • 5

Array M. УЭИТ - Язык Си - руководство для начинающих краткое содержание

Язык Си - руководство для начинающих - описание и краткое содержание, автор Array M. УЭИТ, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
M. УЭИТ   С. ПРАТА    Д. МАРТИН
Язык Си — руководство для начинающих

Язык Си - руководство для начинающих - читать онлайн бесплатно полную версию (весь текст целиком)

Язык Си - руководство для начинающих - читать книгу онлайн бесплатно, автор Array M. УЭИТ
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

static randx = 1;

rand( )

{

Немного позже мы приведем пример, в котором будет необходим этот тип переменной.

РИС 101 Внешние и внешние статические переменные Регистровые переменные - фото 58

РИС. 10.1. Внешние и внешние статические переменные.

Регистровые переменные

Обычно переменные хранятся в памяти машины. К счастью, регистровые переменные запоминаются в регистрах центрального процессора, где доступ к ним и работа с ними выполняются гораздо быстрее, чем в памяти. В остальном регистровые переменные аналогичны автоматическим переменным. Они создаются следующим образом:

main( )

{

register int quick;

Мы сказали "к счастью", потому что описание переменной как регистровой, является скорее просьбой, чем обычным делом. Компилятор должен сравнить ваши требования с количеством доступных регистров, поэтому вы можете и не получить то, что хотите. В этом случае переменная становится простой автоматической переменной.

Какой класс памяти применять?

Ответ на вопрос почти всегда один - "автоматический". В конце концов почему этот класс памяти выбран по умолчанию? Мы знаем, что на первый взгляд использование внешних переменных очень соблазнительно. Опишите все ваши переменные как внешние, и у вас никогда не будет забот при использовании аргументов и указателей для связи между функциями в прямом и обратном направлениях. К сожалению, у вас возникнет проблема с функцией С, коварно изменяющей переменные в функции А, а это совсем не входит в паши интересы. Неоспоримый совокупный опыт использования машин, накопленный в течение многих лет, свидетельствует о том, что такая проблема значительно перевешивает кажущуюся привлекательность широкого использования внешних переменных.

Одно из золотых правил защитного программирования заключается в соблюдении принципа "необходимо знать только то, что нужно". Организуйте работу каждой функции автономно, насколько это возможно, и используйте глобальные переменные только тогда, когда это действительно необходимо.

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

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

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(" Введите, пожалуйста, значение зерна. \n");

scanf(" %d, &seed);

srand(seed);

printf(" Введите число сторон кости, 0 для завершения. \n");

scanf(" %d", &sides);

while(sides > 0)

{ printf(" Сколько костей?\n");

scanf(" %d", &dice);

for( roll = 0, count = 1; count <= dice; count++)

roll + = rollem(sides); /* бросание всех костей набора */

printf(" У вас выпало %d, для %d %.0f-сторонних костей.\n", roll, dice, sides);

printf(" Сколько сторон? Введите 0 для завершения.\n");

scanf(" %f", &sides);

} printf(" Удачи вам!\n");

}

Теперь давайте используем эту программу:

Введите значение зерна

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

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

ФУНКЦИЯ ПОЛУЧЕНИЯ ЦЕЛЫХ ЧИСЕЛ: getint( )

План

К счастью, мы уже выработали стратегию. Во-первых, заметим, что любую вводимую информацию можно читать как строку символов. Целое число 324, например, можно прочитать как строку из трех символов: символ '3', символ '2'и символ '4'. Это подсказывает нам следующий план:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Array M. УЭИТ читать все книги автора по порядку

Array M. УЭИТ - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Язык Си - руководство для начинающих, автор: Array M. УЭИТ. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x