Меню сайта
Наш опрос
Оцените мой сайт
Всего ответов: 5
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » 2014 » Июль » 22 » Занятие 3. Ввод и вывод данных.Справочники функций. Уроки программирования для чайников. Язык Си.
16:12
Занятие 3. Ввод и вывод данных.Справочники функций. Уроки программирования для чайников. Язык Си.
Добрый день уважаемые читатели.В данном уроке мы подробно остановимся на вводе и выводе данных. Узнаем что такое стандартный поток ввода и вывода. Поговорим о том, зачем нужна стандартная библиотека функций. А так же научимся работать со справочниками по функциям. Это очень полезное умение. Рассмотрим на простом примере, который как раз будет в тему нашего урока.Пусть нам требуется ввести с клавиатуры в программу какое-то число. Дело в том, что в языке нет никаких специальных конструкций, определяющих ввод-вывод. Если вы внимательно читали первый урок, то я уже вскользь упоминал об этом (помните для того чтобы вывести на экран строчку, нам надо было включить в программу заголовочный файл stdio.h) . Так вот, в самом языке нет даже такой операции как возведение в степень числа, или вычисление квадратного корня. Но обычно, сам по себе язык и не используется. Вместе с языком программирования поставляется и стандартная библиотека функций. Это набор файлов с расширением *.h, в которых описаны различные дополнительные функции, которые любая программа может использовать. Как вы уже догадались, функции ввода вывода описаны в файле stdio.h. Помимо стандартной библиотеки функции, программисты пишут и свои библиотеки функции, и еще существует много других библиотек функций, написанных для какого-то определенного круга задач. Таким образом, разных готовых функций для языка Си очень-очень много, и знать их все вряд ли возможно, а учитывая то, что знать надо не только название функции, но и какие данные она принимает, какие возвращает, что она делает, то это становится почти невозможно задачей. Но к счастью, этого и не требуется. Для стандартной библиотеки функции существуют куча различных справочников и там подробно описано всё это. И вот именно работать с этими справочниками мы сегодня научимся. Так, приступим же.Символьный ввод и вывод данных. Стандартная библиотека включает несколько функций для чтения и записи одного символа. Простейшие из них мы сегодня и рассмотрим. Функции getchar и putchar.Теперь пришло время научиться работать со справочником функции. В интернете можно найти много различных справочников, можно купить так же справочник в книжном магазине, часто в конце различных учебников по программированию есть небольшие справочники по функциям стандартной библиотеки. В общем, не суть важно, какой использовать, содержание везде примерно одинаковое. Для примера используем справочник сайта CodeNet. Никакого скрытого смысла тут нет, просто если в google набрать «справочник по функциям С» то он будет на первой позиции. Выберем там функцию getchar. Вот её описание:Листинг 3.1getcharФункция            Вводит символ из потока stdin.Синтаксис          #include <stdio.h>                   int getchar(void);Файл, содержащий   stdio.hпрототипОписание           getchar -  это  макрокоманда,  вводящая  символ из                   потока stdin.  Она определена  следующим  образом:                   getc(stdin).Возвращаемое       При успешном завершении функция getchar возвращаетзначение           считанный символ      после       предварительного                   преобразования  его  в целое без расширения знака.                   При возникновении ситуации EOF или при ошибке  она                   возвращает EOF.Переносимость      Функция поддерживается на системах UNIX, описана                   Керниганом и Ритчи. Поддерживается стандартом ANSI                   C. Функция не совместима с Windows.Смотрите также     fdetc, fgetchar, getch, getche, gets, putc,                   putchar, scanf, ungetc.Пример:И примерно такое же описание будет в любом из справочников. Остановимся поподробнее.Блок «функция». Содержит краткое описание для чего предназначена функция. В нашем случае, функция getchar вводит символ из потока stdin. Кратко о потоках. Когда мы вводим символы с клавиатуры, они попадают, в так называемый стандартный поток ввода. Его можно представить себе просто как последовательность символов. Существует еще стандартный поток вывода ( называется stdout), это как вы уже догадались монитор компьютера. Таким образом, получается, что функция getchar просто берет первый символ из стандартного потока ввода, т.е. с клавиатуры.«Синтаксис». Описано как использовать в программе. Указано, какой файл нужно подключить чтобы использовать, каких типов должны быть входные параметры, и какое значение функция возвращает. В нашем случае:Листинг 3.2.#include <stdio.h>int getchar(void);Любая функция имеет общий формат:Формат прототипа функций в языке СиСледовательно, мы узнали, что необходимо подключить сначала файл stdio.h. И функция возвращает значение типа int. При этом не имеет параметров (это значит, что когда мы будем её использовать, в скобочках ничего писать не нужно), об этом говорит тип void в скобочках.«Файл, содержащий прототип» Это имя файла где описана функция, именно этот файл и нужно подключить чтобы с ней работать.«Описание». Представлено более полное описание того, что делает функция.«Возвращаемое значение» Описывает что функция возвращает после своей работы. В нашем случае, getchar возвращает значение целого типа, или если произошла ошибка значение EOF. EOF (аббревиатура от end of file - конец файла) - это константа целого типа. Она означает, что в потоке больше нет данных для считывания. Её значение определено в файле stdio.h.«Переносимость» Описывается в каких операционных системах работает данная функция ( в нашем случае getchar). Не удивляйтесь тому, что написано функция getchar не работает в Windows, формально мы сейчас создаем консольные приложения для MS DOS, поэтому у нас она будет работать.«Смотри так же» Здесь список функций выполняющих похожие действия, что и данная функция.«Пример» Обычно, небольшой пример использования в программе. Могут быть какие-то пояснения.Для того, чтобы не было сомнений в том, что во всех справочниках примерно одинаковое содержание, вот картинка из одного учебника по программированию:Описание функции getchar из справочника функцийКак видите, все основные данные о функции есть и тут.Функция putchar.Описана в файле stdio.h.Формат: int putchar(int d)Предназначена для вывода символа d в стандартный поток вывода, т.е. на экран монитора. Значение d должно быть целого типа. Если вывести символ удалось, то возвращается значение d, если нет – EOF.Небольшая программка для показания примера работы функций getchar и putchar.Листинг3.3#include <stdio.h>int main(){   int a,b;  \n");   putchar(c);   return(0);}Такая программа сначала считает в переменную а первый символ, а потом считает следующий символ, в переменную с. Пример, работы программы показан на рисунке ниже.Добавьте подписьНе стоит забывать, что пробелы, переносы строк, табуляции и т.д., это тоже символы которые записываются во входной поток. Так например, если в программе листинга 3.4 ввести "2 865", то, в переменную с сохранился бы пробел. Убедитесь в этом самостоятельно.Если надо с помощью getchar считать несколько символов, записанных через пробел, то можно например, использовать дополнительную переменную, в которую будем считывать пробел.Либо писать, несколько раз считывание одного символа. v 4", в переменную а считаем v, далее в переменную b считаем, пробел, и потом еще раз считаем в переменную b следующий символ, то есть 4. В итоге получим, то что нам и требуется.Теперь перейдём к нашим функциям форматного ввода и вывода данных printf и scanf.Называются они так, потому, что выводят и считывают данные в соответствии со строкой формата. Про это я уже говорил в конце второго урока. Основной принцип их работы разбирался там же. Сегодня мы рассмотрим специальный символы (начинаются со значка %) которые существуют, их еще называют спецификаторами формата. А так же поговорим о модификаторах формата, это такие значки, которые позволят задавать число знаков после запятой, или, например, по какому краю выравнивать символы.И так существуют следующие спецификаторы формата:%d или % i для целых чисел%c для отдельный символ.%f для вещественных чисел ( с точкой) Выводятся в привычном виде. Например, 23.40000 Количество знаков после запятой задается точностью. По умолчанию точность равна 6.%e для вещественных чисел. Выводится в научном виде например, 23.4 будет выведено как 2.340000e+001. Это означает что число 2.34 надо умножить на 10 в степени +1. Тут тоже количество знаков после запятой задается точностью. По умолчанию точность равна 6.% если никаких аргументов нет, то не преобразуются и печатается просто %.Для примера рассмотрим простейшую программу.Листинг ;           printf("Dva chelih %i %d \n",a,a);      printf("Odin simvol %c \n",d);      printf("Vewestvennoe obychnoe %f \n",b);      printf("vewestvennoe v nauchnom vide %e \n",b);      printf("Vewestvennoe obychnoe %f \n",c);      printf("vewestvennoe v nauchnom vide %e \n",c);           return(0);}Вот результат её работы.Программа демонстрирующая работу различных спецификаторов формата.Теперь стоит поговорить о модификаторах формата. Модификаторы формата пишутся после знака % перед спецификатором формата. Примеры:%-8.5f     %4.6f      %-2dИтак, пойдем по порядку. После % может стоять символ – это значит надо выровнять число по левому краю, если минуса нет, то значение выравнивается по правому краю. Дальше идет цифра, означающая ширину поля на экране предназначенного для вывода этой переменной. Если указанного количества не хватит, то оно будет само расширено. Дальше точка, это просто разделитель первой и второй цифры. Вторая цифра применяется для вещественных чисел, она указывает, количество знаков после запятой.Рассмотрим на примерах:Листинг |%i|\n", a);      //ширина 8 позиций, выравнивание по левому краю           printf("|%-8i|\n", a);      //ширина 8 позиций, выравнивание по правому краю          printf("|%8i|\n", a);      //число позиций 2, но в числе 777 больше двух цифр, поэтомк расширяется до минимального значения      printf("|%2i|\n", |%f|\n", b);      //ширина 8 позиций, выравнивание по левому краю, 3 знака после запятой      printf("|%-8.3f|\n", b);      //ширина 8 позиций, 2 знака после запятой, выравнивание по правому краю          printf("|%8.2f|\n", b);      //число позиций 4, 3 знака после запятой, но этого мало и поэтому расширяется до минимального значения ширина      printf("|%4.3f|\n", b);      return(0);}Результат работы:Программа иллюстрирующая работу модификаторов формата для целых и вещественных чисел.И на последок, помните мы говорили об управляющих последовательностях (например, \n) , их еще называют escape последовательности. Вот вам список некоторых из этих последовательностей:\а сигнал-звонок\f перевод-страницы\n новая-строка\t горизонтальная-табуляция\v вертикальная-табуляция\\ обратная наклонная черта\? знак вопроса\' одиночная кавычка\" двойная кавычкаПожалуй всё на сегодня.//UPD (5 июля 2012): И еще один небольшой, но важный комментарий. Рассмотрим простой пример.Листинг3.7#include <stdio.h>int main(){   int a;  ,a);   return(0);}Ниже представлен результат её работы.Как видите, ввели мы f, а на выходе получили 102. Чудеса, да и только.На самом деле все просто. Когда функция getchar считывает символ входного потока, она возвращает значение int этого символа, равное коду символа в таблице кодов ASCII.Каждому символу в этой таблицей ставится в соответствие его порядковый номер. Например, символу f соответствует номер 102, а цифре 1, номер 49. Т.е. если вы введете 1, то в переменную сохранится не 1, а 49. Таблицу кодов ASCII вы легко найдете в интернете. А как же быть, спросите вы.Да легко, можно воспользоваться для вывода символов функцией putchar, как мы уже это делали выше, а можно в спецификаторе формата использовать не %d, а %c. Тогда всё встанет на свои места. Резюме урока:Научились работать со справочниками функцийИзучили функции посимвольного ввода и выводаИзучили спецификаторы и модификаторы формата для функции printfНемножко поговорили о потоках в программированииЗадание для практической работы:Поэкспериментируйте с модификаторами формата для спецификатора %e.Напишите программу которая будет использовать различные escape-последовательности.Посмотрите и на сколько символов вправо сдвигает  курсор последовательность \t, посмотрите на сколько строчек вниз сдвигает курсор последовательность \v.Напишите программу которая считывает с клавиатуры 6 чисел, записанных через пробел. (1 2 64.3 0.624 25.07 43900) причем первые два числа считываются с помощью функции getchar. Для вывода запрещено использовать пробелы, все сдвиги оформляйте через табуляцию и с помощью модификаторов формата. Программа выводит данные на экран в виде такой таблицы:Если Вам понравился этот урок, расскажите о нем вашим друзьям. В этом  Вам могут помочь кнопки основных социальных сетей, расположенные ниже. Вам остается всего лишь кликнуть по любой из них.
Просмотров: 612 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Форма входа
Календарь
«  Июль 2014  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031
Архив записей