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

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

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

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

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

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

Интервал:

Закладка:

Сделать

hibyt = divisor / 256; /* на два байта */

count = TIMESCALE * time; /* преобразует время в единицы таймера */

outp(T_MODEPORT, TIMERMODE); /* подготавливает таймер к вводу */

outp(FREQPORT, lobyt); /* устанавливает младший байт регистра таймера */

outp(FREQPORT, hibyt); /* устанавливает старший байт регистра таймера */

port = inp(BEEPPORT); /* запоминает состояние порта */

outp(BEEPPORT, ON) /* включает громкоговоритель */

for(i = 0, i < count; i++)

; /* отметка задержки */

outp(BEEPPORT, port); /* выключает Громкоговоритель, восстанавливает состояние */

Мы определяем TIMESCALEв директиве #defineкак целое тип long, потому что вычисление TIMESCALE * timeбудет выполняться для типа long, а не int. Иначе результат, если он больше 32767 будет усекаться перед занесением в count.

Использование функции tоnе( )

Наша функция tone( )в значительной степени дублирует действие оператора SOUNDязыка Бейсик для компьютера IBM PC Здесь мы используем ее для создания довольно ограниченной ( 8 нот, одна октава) клавиатуры, в которой используются 8 клавишей, начиная с А, для воспроизведения нот. Ниже приведена соответствующая программа, а также некоторые пояснения к ней.

/* простая музыкальная клавиатура */

#include /* использует небуфсризованный ввод-вывод */

#include

#define С 262 /* определяет частоты */

#define D 294

#define E 330

#define F 349

#define G 392

#define А 440

#define В 494

#define C2 524

main( )

{

int key, freq, tempo, time;

puts(" Введите, пожалуйста, основной темп: 10 = 1 с.");

scanf(" %d", &tempo);

printf(" %d \n \r", tempo); /* эхо-ввод */

puts(" Спасибо. Используйте клавиши а - k для воспроизведения нот.\n\r");

puts(" Клавиша переключения регистра удваивает продолжительность звучания.

Символ ! прекращает работу.");

while((key = getchar( )) != '!')

{ time = isupper(key)? 2 * tempo : tempo;

key = tolower(key);

switch (key) {

case 'a' : tone(C, time);

break;

case 's' : tone(D, time);

break;

case 'd' : tone(E, time);

break;

case 'f' : tone(E, time);

break;

case 'g' : tone(G, time);

break;

case 'h' : tone(A, time);

break;

case 'j' : tone(B, time);

break;

case 'k' : tone(C2, time);

break;

default : break; }

}

рuts("До свидания!\n\r");

} }

Главной особенностью созданной программы является оператор switch, который присваивает разные звуки восьми клавишам от А до К. Кроме того, программа удваивает продолжительность звучания ноты, если вы используете верхний регистр. Эта продолжительность ( time) устанавливается перед оператором switch, затем верхний регистр переключается на нижний, чтобы сократить число необходимых меток.

Вторая важная особенность заключается в том, что мы используем заголовочный файл conio.h. Этот файл содержит директивы #define, которые заменяют обычные функции ввода-вывода [такие, как getchar( )] на версии "пультового ввода-вывода", являющиеся не буферизованными. И в результате, если вы нажимаете, скажем, клавишу [ а], немедленно звучит нота, и вам нe нужно нажимать клавишу [ ввод]. Между прочим, эти функции не только не выполняют эхо-печать, но и не начинают автоматически новую строку. Поэтому мы вставили оператор printf( )для эхо-печати вводимой переменной tempoи использовали символы \nи \rдля перемещения курсора на новую строку и возврата его к левой сторонe экрана. Если вы хотите, чтобы символы, которые соответствуют нажимаемым клавишам, отображались одновременно на экране, вставьте

putchar(key);

в программу.

Хотя ввод не буферизован, клавиатура имеет свой собственный буфер. Это позволяет вам, если вы хотите, заранее набирать все требуемые символы. А ноты будут звучать в собственном устойчивом темпе. Вот, пример, начало мелодии "Радость мира"

KjhGfdsA

Предоставляем вам возможность закончить эту мелодию.

ПРИЛОЖЕНИЕ И. РАСШИРЕНИЕ ЯЗЫКА СИ

Версия 7 ОС UNIX предоставляет два важных расширения языка Си. Первое заключается в том, что можно использовать саму структуру (а нe только адрес или элемент структуры) в качестве аргумента функции. Второе расширение позволяет использовать новую форму данных, называемую "перечислимый тип данных". Теперь рассмотрим эти расширения.

Структуры в качестве аргументов функции

В не расширенном языке Си можно передавать функции адрес структуры. Например, если montana является структурной переменной структурного типа player, мы можем обратиться к функции следующим образом:

stats(&montana);

Функция stats( )будет иметь примерно такой заголовок:

stat(name) struct player * name;

После вызова функции указатель nameбудет ссылаться на структуру montana и функция будет использовать montana в своих манипуляциях.

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

stats(montana);

Теперь функция stats( )должна иметь несколько иной заголовок:

stats(name) struct player name;

На этот раз после вызова функции создается новая структурная переменная типа player. Новая переменная получает название name, и каждый элемент name имеет такое же значение, как и соответствующий элемент структуры montana.

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

Будьте осторожны : Некоторые компиляторы допускают обращение вида

stats(montana);

но на самом деле интерпретируют его как

stats(&montana);

В этом случае передается адрес, и функция работает с самой исходной структурной переменной, а не с ее копией.

Перечислимые типы

Ключевое слово enumпозволяет создавать новый тип и определять значения, которые он может иметь. Приведем пример:

enum spectrum (red, orange, yellow, green, blue, violet);

enum spectrum color;

Первый оператор объявляет новый тип: spectrum. Он перечисляет также возможные значения переменных типа spectrum: red, orangeи т. д. Они являются константами типа spectrumтак же, как 4 является константой типа int, a ' g' - константой типа char.

Второй оператор объявляет colorпеременной типа spectrum. Вы можете присвоить переменной colorлюбую константу типа spectrum;например:

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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