Алгоритмизации
Скачать 1.15 Mb.
|
ГЛАВА 5. Обзор базовых инструкций языка СиСтандартнаябиблиотекаязыкаСиВ любой программе кроме операторов и операций используются средства библиотек, входящих в среду программирования. Часть библиотек стандартизована и поставляется с компилятором. Функции, входящие в библиотеку языка Си, намного облегчают создание программ. Расширение библиотечных файлов *.lib. В стандартную библиотеку входят также прототипы функций, макросы, глобальные константы. Это, как вы уже знаете, заголовочные файлы с расширением *.h, которые хранятся в папке includeи подключаются на этапе предпроцессорной обработки исходного текста программ. Рассмотрим наиболее часто используемые функции из стандартной библиотеки языка Си. СтандартныематематическиефункцииМатематические функции языка Си декларированы в файлах math.hи stdlib.h.В приведенных здесь функциях аргументы и возвращаемый результат имеют тип double. Аргументы тригонометрических функций должны быть заданы в радианах (2π радиан = 360o).
ФункциивыводаданныхнадисплейВ языке Си нет встроенных средств ввода/вывода данных. Ввод/вывод информации осуществляется с помощью библиотечных функций и объектов. Декларации функций ввода/вывода, как уже упоминалось, приведены в заголовочном файле stdio.h. Для вывода информации на экран монитора (дисплей) в языке Си чаще всего используются функции: printf() иputs(). Формат функции форматного вывода на экран: printf(управляющаястрока,списокобъектоввывода); В управляющей строке, заключенной в кавычки, записывают: поясняющий текст, который выводится на экран без изменения (комментарии), список модификаторов форматов, указывающих компилятору способ вывода объектов (признак модификатора формата– символ %) и специальные символы, управляющие выводом (признак – символ \). В спискеобъектоввыводауказываются идентификаторы печатаемых объектов, разделенных запятыми: переменные, константы или выражения, вычисляемые перед выводом. Количество и порядок следования форматов должен совпадать с количеством и порядком следования выводимых на экран объектов. Функция printfвыполняет вывод данных в соответствии с указанными форматами, поэтому формат может использоваться и для преобразования типов выводимых объектов. Если признака модификации (%) нет, то вся информация выводится как комментарии. Основные модификаторы формата: %d(%i) – десятичное целое число; %c– один символ; %s– строка символов; %f– число с плавающей точкой, десятичная запись; %е– число с плавающей точкой, экспоненциальная запись; %g– используется вместо f, eдля исключения незначащих нулей; %o– восьмеричное число без знака; %x– шестнадцатеричное число без знака. Для чиселlongдобавляется символl, например, %ld– длинное целое, %lf– число вещественное с удвоенной точностью – double. Если нужно напечатать сам символ %, то его нужно указать 2 раза: printf("Только%d%%предприятийнеработало.\n",5);Получим: Только5%предприятийнеработало. Управляют выводом специальные последовательности символов: \n– новая строка; \t– горизонтальная табуляция; \b– шаг назад; \r– возврат каретки; \v – вертикальная табуляция; \\ – обратная косая; \' – апостроф; \" – кавычки; \0 – нулевой символ (пусто). Пример: #define PI 3.14159 . . . int number = 5; float bat = 255; int cost = 11000; . . . printf(" %d студентов съели %f бутербродов. \n", number, but); printf(" Значение числа pi равно %f. \n", pi); printf(" Стоимость этой вещи %d %s. \n", cost, "Руб."); . . . В модификаторах формата функции printf после символа % можно указывать число, задающее минимальную ширину поля вывода, например, %5d– для целых, %4.2f– для вещественных– две цифры после запятой для поля шириной 4 символа. Если указанных позиций для вывода целой части числа не хватает, то происходит автоматическое расширение. Если после «%» указан знак «минус», то выводимое значение будет печататься с левой позиции поля вывода, заданной ширины, например: % – 10d. Использование функции printfдля преобразования данных: 1) printf("%d", 336.65); получим: 336; 2) printf("%o", 336); получим: 520, т.е. 5*8**2+2*8+0*1 = 336; printf("%x", 336); получим: 150 (шестнадцатеричное). Можно использовать функцию printfдля нахождения кода ASCII некоторого символа: printf (" %c – %d\n", 'a', 'a'); получим десятичный код ASCII символа а: a – 65 . Функция puts(IDстроки); выводит на экран дисплея строку символов, автоматически добавляя к ней символ перехода на начало новой строки (\n). Аналогом такой функции будет: printf(“%s \n”, IDстроки); Функция putchar() выдает на экран дисплея один символ без добавления символа ‘\n’. ФункциивводаинформацииФункция, предназначенная для форматированного ввода исходной информации с клавиатуры: scanf(управляющаястрока, списокадресовобъектовввода); в управляющей строке указываются только модификаторы форматов, количество и порядок следования которых должны совпадать с количеством и порядком следования вводимых объектов, а тип данных будет преобразовываться в соответствии с модификаторами. Список объектов ввода представляет собой адреса переменных, разделенные запятыми, т.е. для ввода значения переменной перед ее идентификатором указывается символ &, обозначающий операцию «взять адрес». Если нужно ввести значение строковой переменной, то использовать символ & не нужно, т.к. строка – это массив символов, а IDмассива является адресом его первого элемента. Например: int course; double grant; char name[20]; printf (" Укажите курс, стипендию, имя \n "); scanf ("%d %lf %s", &course, &grant, name); Вводить данные с клавиатуры можно как в одной строке через пробелы, так и в форме разных строк, нажимая после ввода текущего объекта клавишу Enter. Функция scanf() использует практически тот же набор модификаторов форматов, что и printf(); отличия от функции вывода следующие: отсутствует формат %g, форматы %e,%f– эквивалентны. Для ввода коротких целых чисел введен модификатор формата %h. Внимание. Функцией scanf() по формату %sстрока вводится только до первого пробела. Для ввода фраз, состоящих из слов, разделенных пробелами, используется функция gets(IDстроковойпеременной); Символы вводятся при помощи функции getch(). Причем простой ее вызов организует паузу, при которой система программирования приостановит выполнение программы и будет ждать нажатия любой клавиши. Так поступают в том случае, когда нужно просмотреть какие-то результаты работы, при выводе их на экран монитора. Если же использовать ее в правой части операции присваивания, например: char c; . . . c = getch(); то символьная переменная сполучит значение кода нажатой клавиши. С началом работы любой программы автоматически открываются стандартные потоки для ввода (stdin) и вывода данных (stdout), которые по умолчанию связаны с клавиатурой и экраном монитора соответственно. Внимание. Ввод данных функциями gets(), getch() выполняется с использованием потока stdin. Если указанная функция не выполняет своих действий (проскакивает), перед использованием необходимо очистить поток (буфер) ввода с помощью функции fflush(stdin); В языке С++ существует наиболее простая с точки зрения использования возможность ввода-вывода − потоковый ввод-вывод, основы которого рассмотрены в разд. 16.1, 16.2. СоветыпопрограммированиюПри выполнении вариантов заданий придерживайтесь следующих ключевых моментов. Выбирайте тип для переменных с учетом диапазона их возможных значений и требуемой точности представления данных. Старайтесь давать переменным ID (имена), отражающие их назначение. При вводе данных с клавиатуры выводите на экран пояснения: что нужно ввести, т.е. организуйте диалог. Для контроля сразу же после ввода выводите исходные данные на дисплей (хотя бы в процессе отладки). До запуска программы подготовьте тестовые примеры, содержащие исходные данные и ожидаемые результаты. Отдельно нужно проверить реакцию программы на заведомо неверные исходные данные. Для таких ситуаций необходимо предусмотреть вывод сообщений, например, «Ошибка! Решения нет». При составлении выражений учитывайте приоритет используемых операций. В функциях ввода/вывода printfи scanfдля каждой переменной указывайте спецификацию формата, соответствующую ее типу. Не забывайте, что в функции scanf передается адрес переменной, а не ее значение. При использовании стандартных функций требуется с помощью директивы препроцессору includeподключить к программе соответствующие заголовочные файлы. Установить, какой именно файл необходим, можно с помощью справочной системы Visual C++ 6.0 – «MSDN». Данные при вводе разделяйте пробелами, символами перевода строки или табуляции, но не запятыми. Не смешивайте в одной программе ввод/вывод с помощью стандартных функций (в стиле Си) с вводом/выводом в потоке (в стиле C++). |