Приглашаем сайты с посещаемостью от 2-х человек в сутки!

BUY WinRAR

Скачай WinRAR сейчас!

120x90-p1m001.gif (7489 bytes)

Партнерская программа для русскоязычных сайтов

Обмен программами по FTP

Первоклассный софт для всех.

2. Операции, выражения и операторы.

2.1 Вывод и ввод данных.

Как известно в языке Паскаль для ввода и вывода информации используются функции read, readln и write, writeln. Язык Си имеет больше функций ввода/вывода.

Для начала исследуем четыре функции ввода-вывода: printf, scanf, putchar и getchar. Первые две предназначены для реализации форматного вывода и ввода данных. С функцией printf мы уже встречались, теперь поговорим о ней подробней.

Рассмотрим, довольно простую программу на Си.

Результатом работы этой программы, будет вывод на экран:

Теперь рассмотрим программу подробнее. Первая строка программы, как всегда, комментарий.

#include <stdio.h> - Включение внешнего файла. Это не оператор Си, а директива препроцессора.

#define NEGATIVE –1Это тоже не оператор Си, а директива препроцессора. Вы наверно уже заметили, что общего у этих двух директив. Конечно же, это знак #. Именно этим знаком отмечается начало любой директивы препроцессора. Эта директива определяет константу по имени NEGATIVE, значение которой равно –1. Заметьте также, что в данной директиве препроцессора, имя константы и её значение отделены друг от друга пробелом.

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

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

Внимание! Если при делении одного целого числа на другое получается дробная часть, то она отбрасывается.

Ключевое слово float указывает, что переменная real может иметь дробную часть. Наличие дробной части соответствует типу с плавающей точкой. Числа с плавающей точкой примерно соответствуют тому, что в математике называется “вещественными числами”. Они включают в себя числа целые и дробные.

char letter; - Это описание кодов символов – целых положительных чисел в диапазоне от 0 до 255. Для него используется название символ или символьная переменная. В компьютере применяется ASCII код для перевода чисел в символы и обратно.

number=1; - В этом операторе переменной number присваивается значение равное 1. Она не изменится до тех пор, пока не окажется в другом операторе присваивания. В отличие от многих языков программирования, в том числе и Паскале, в языке Си знак = не означает равно. Он означает операцию присваивания некоторого значения. Элемент слева от знака – это имя (идентификатор) переменной, а элемент справа – её новое значение.

real=1.0; - В этом операторе производится присваивание вещественного числа 1.0 переменной real. Обратите внимание на появление точки в записи числа. Именно так представляются числа с дробной частью (числа с плавающей точкой).

letter=’a’; - В языке Си символы заключаются в апострофы. Принято правило, согласно которому значениями переменной типа char могут быть одиночные символы.

В последних строках программы, мы узнали кое-что ещё о том, как работает стандартная функция printf. В ней каждый знак % соответствует одному из последних аргументов, а информация, расположенная за знаком %, указывает на способ вывода. Для вывода целых чисел используется спецификатор %d, а для вывода символа – спецификатор %c.

%4.1fэто следующий пример применения функции printf для вывода целого и действительного чисел. Спецификатор для вывода дробного числа имеет кроме символа f ещё числовые параметры, указывающие на количество позиций, занимаемое выводимым числом и количество знаков после точки.

Замечание! Тот, кто программировал на Паскале, должен сразу вспомнить аналог данной записи. На языке Паскаль, вывод действительного числа, так же предусматривает указание количество позиций, занимаемое числом, и количество знаков после запятой. Делается это, например, так:

writeln(‘Длина окружности’,(2*pi*r):6:3); - здесь :6 – количество знаков в записи числа, :3 – количество знаков после запятой.

Тело функции main() заканчивается закрывающей фигурной скобкой. Парой фигурных скобок (открывающей и закрывающей) выделяется тело любой функции.

Мы уже так часто использовали для вывода результатов работы программы на экран функцию printf(), что настало время поговорить об этой функции подробней.

Функция printf() не является частью языка Си, однако стандарт языка требует от разработчиков компиляторов, чтобы эта функция входила в состав библиотеки stdio.h и имела определённый формат, который мы опишем ниже.

Как и на языке Паскаль, при выводе аргументов процедурами write() и writeln() (являющимися стандартными процедурами языка Паскаль), при обращении к функции printf() ей передаётся управляющая строка и список аргументов.

printf(Управляющая строка,Арг1,Арг2,…)

Надо заметить, что на Паскале, передаётся только список аргументов. Понятие управляющая строка – отсутствует:

write(Арг1,Арг2,…)

writeln(Арг1,Арг2,…)

Как и на Паскале, Арг1, Арг2, и т.д. – это печатаемые параметры, которые могут быть переменными, константами или даже выражениями, вычисляемыми вначале, перед выводом на печать. Напомним, что на Паскале, для перевода курсора на новую строку, используется стандартная процедура writeln(), а на Си, для перехода на новую строку, используют невидимый символ \n.

Управляющая строка – строка символов, показывающая, как должны быть напечатаны параметры.

Например: printf(“Радиус=%d, Площадь=%f \n”,r,s)

Управляющей строкой служит фраза в кавычках (строка символов), а r и s – аргументы или в данном случае значения двух переменных. В управляющей строке содержится информация двух различных видов:

  • Символы, печатаемые текстуально (Радиус=, Площадь=).
  • Идентификаторы данных, называемые также спецификациями преобразования (%d, %f).

Каждой спецификации типа в управляющей строке должен соответствовать свой аргумент из списка (%d – r, %f – s), следовательно число аргументов должно быть равно числу спецификаций в управляющей строке.

Спецификация преобразования начинается с символа %, и заканчивается некоторым символом, задающим преобразования. Между знаком % и символом преобразования могут встречаться: знак минус, указывающий, что преобразованный параметр должен быть выровнен влево в своём поле; строка цифр, задающая минимальный размер поля; точка, определяющая размер поля от последующей строки цифр; строка цифр, задающая максимальное число символов, которые нужно вывести, или же количество цифр, которые нужно вывести справа от десятичной точки в значениях типов float или double; символ длины 1, указывающий, что соответствующий аргумент имеет тип long. Далее записывается один, из ниже перечисленных, символов преобразования:

Спецификации преобразования.

Формат. Тип выводимой информации.
d Десятичное целое число
c Один символ
f Число с плавающей точкой, десятичная запись
e Число с плавающей точкой, экспоненциальная запись
o Восьмеричное целое число
x Шестнадцатеричное целое число
s Строка символов (вывод осуществляется до тех пор, пока не встретится признак

конца строки или же не будет выведено число символов, заданное точностью

g Исключение ввода нулей (используется как %e или %f)
u Беззнаковое целое число
p Указатель (адрес)

Если после знака % записан не символ преобразования, то он выводится на экран.

При наличии ошибок (например, в числе аргументов или типе преобразования) результат будет неверным.

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

Примеры модификации спецификаций.

Пример: %4d

4задаёт минимальную ширину поля вывода. Большее поле будет использоваться, если печатаемое число не помещается в исходном поле.

Пример: %4.2f

4 – ширина поля.

2 – число десятичных цифр после запятой.

Если в языке Паскаль для ввода форматного ввода информации используется функция read или readln, то в Си используется функция scanf. Напомним, что описание функций языка Паскаль осуществляется следующим образом:

read(Арг1,Арг2,…)

readln(Арг1,Арг2,…)

Функция scanf формально описывается следующим образом:

scanf(“Управляющая строка”,аргумент1,аргумент2,…);

Аргументы scanf должны быть указателями на соответствующие значения (перед именем записывается символ &). Назначение указателей будет рассмотрено далее.

Управляющая строка содержит спецификации преобразования и используется для установления количества и типа аргументов. В неё могут включаться: пробелы, символы табуляции и перехода на новую строку (все они игнорируются при выводе); спецификации преобразования, состоящие из знака %, возможно символа * (запрещение присваивания), возможно, числа, задающего максимальный размер поля, и самого символа преобразования; обычные символы, кроме % (считается, что они должны совпадать с очередными неизвестными символами во входном потоке).

В функции scanf допустимы многие из символов преобразования функции printf. Например: d, o, x, u, c, s, f, p. Для данных символов на входе ожидается появление чисел соответствующих символам функции printf. Отметим, что для p ожидается появление на входе указателя, в виде шестнадцатеричного числа.

Перед символами d, o, x, f может стоять буква l. В первых трёх случаях соответствующие переменные должны иметь тип long, а в последнем – double.

Для рассмотрения работы программы введём произвольные значения и рассмотрим, как будет выглядеть рабочий экран при работе программы (вводимые значения выделены курсивом):

Самый простой механизм ввода – чтение по одному символу из стандартного источника (с клавиатуры) с помощью функции getchar. Инструкция вида c=getchar( ); позволяет присвоить переменной c очередной вводимый символ. Аналогичная функция присутствует и в языке Паскаль. Это функция, из внешнего модуля CRT, readkey. При выполнении инструкции c:=readkey, переменной c так же присваивается вводимый символ. Однако, в языке Си, присутствует еще и функция putchar( ), которая выдаёт символьное значение переменной. Например, обращение putchar(c); выдаёт символьное значение переменной c в стандартный выходной поток (на экран). В Паскале вывод символа можно организовать с помощью функции write(c) или writeln(с). Переменная c должна иметь тип int или char (данные типы в языке Си можно использовать для переменных в одном выражении).

Рассмотрим фрагмент программы:

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

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

Google
Rambler's Top100 Яндекс цитирования PageRank

Регистрация доменов .RU по минимальной ценеРегистрация в системе обмена ссылками