Файл: Информация и формы ее представления Информационные процессы и технологии.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 298
Скачиваний: 1
СОДЕРЖАНИЕ
1.3. ЭВМ как средство обработки информации
1.1 Информация и формы ее представления
1.2 Информационные процессы и технологии
1.3 ЭВМ как средство обработки информации
Структура и принципы функционирования ЭВМ
Основные характеристики вычислительной техники
Перспективы развития вычислительных средств
2.4 Операционная система MS-DOS
Файловая структура логического диска
Раздел 3 Основные принципы программирования
3.1. Этапы подготовки и решения задач на ЭВМ
3.2. Алгоритмы и способы их описания
3.3. Компиляция и интерпретация программ
3.1 Этапы подготовки и решения задач на ЭВМ
3.2 Алгоритмы и способы их описания
3.3. Компиляция и интерпретация программ
Раздел 9 Объектно-ориентированное программирование
Логические программы, в принципе, имеют небольшое быстродействие, так как вычисления осуществляются методом проб и ошибок, поиском с возвратами к предыдущим шагам.
Объектно-ориентированное программирование
Прототипом объектно-ориентированного программирования послужил ряд средств, входящих в состав языка SIMULA-67. Но в самостоятельный стиль оно оформилось с появлением языка SMALLTALK, разработанного А. Кеем в 1972 году и первоначально предназначенного для реализации функций машинной графики.
В основе объектно-ориентированного стиля программирования лежит понятие объекта, а суть его выражается формулой: «объект = данные + процедуры». Каждый объект интегрирует в себе некоторую структуру данных и доступные только ему процедуры обработки этих данных, называемые методами. Объединение данных и процедур в одном объекте называется инкапсуляциейи присуще объектно-ориентированному программированию.
Для описания объектов служат классы. Класс определяет свойства и методы объекта, принадлежащего этому классу. Соответственно, любой объект можно определить как экземпляр класса.
Программирование рассматриваемого стиля заключается в выборе имеющихся или создании новых объектов и организации взаимодействия между ними. При создании новых объектов свойства объектов могут добавляться или наследоватьсяот объектов-предков. В процессе работы с объектами допускается полиморфизм — возможность использования методов с одинаковыми именами для обработки данных разных типов.
К наиболее современным объектно-ориентированным языкам программирования относятся C++ и Java.
Язык C++ был разработан в начале 80-х годов Б. Страуструпом, сотрудником лаборатории Bell корпорации AT&T. Им была создана компактная компилирующая система, в которой за основу был взят язык Си, дополненный элементами языков BCPL, Simula-67 и Algol-68. К июлю 1983 года появился язык Си с классами, а чуть позднее — C++. К 1990 году была выпущена третья версия языка C++, принятая комитетом ANSI в качестве исходного материала для его стандартизации.
В 1990 году сотрудник корпорации Sun Д. Гослинг на основе расширения C++ разработал объектно-ориентированный язык Oak, основным достоинством которого было обеспечение сетевого взаимодействия различных по типу устройств. Новая интегрируемая в Internet версия языка, получила название Java. Первый браузер, который поддерживал язык Java, разработан программистом корпорации Sun П. Нафтоном и получил название HotJava. С января 1995 года Java получает распространение в Internet.
Согласно официальному определению авторов, Java является простым объектно-ориентированным и архитектурно-нейтральным языком интерпретирующего типа, обеспечивающим надежность, безопасность и переносимость, обладающим высокой производительностью в сочетании с многопоточностью и динамичностью.
Принципиальной разницей между Java и C++ является то, что первый из них является интерпретируемым, а второй – компилируемым. Синтаксис языков практически полностью совпадает.
С точки зрения возможностей собственно объектно-ориентированных средств язык Java обладает рядом преимуществ перед языком C++. Так, язык Java демонстрирует более гибкую и мощную систему инкапсуляции информации. Механизм наследования, реализованный в Java, обязывает к более строгому подходу к программированию, что улучшает надежность и понимаемость кода. Язык же C++ обладает сложной, неадекватной и трудной для понимания системой наследования. Возможности динамического связывания объектов одинаково хорошо представлены в обоих языках, однако, синтаксическая избыточность C++ заставляет и здесь отдать предпочтение языку Java.
В силу своей конструктивности идеи объектно-ориентированного программирования используются во многих универсальных процедурных языках. Так, например, в состав интегрированной системы программирования на языке PASCAL (корпорации Borland International) версии 5.5 входит специальная библиотека объектно-ориентированного программирования Turbo Vision.
В последнее время многие программы, в особенности объектно-ориентированные, реализуются как системы визуального программирования. Отличительной особенностью таких систем является мощная среда разработки программ из готовых «строительных блоков», позволяющая создать интерфейсную часть программного продукта в диалоговом режиме, практически без кодирования программных операций. К числу объектно-ориентированных систем визуального программирования относятся; Visual Basic, Delphi, C++Builder и Visual C++.
Контрольные вопросы
-
Этапы подготовки и решения задач на ЭВМ -
Свойства алгоритма -
Способы представления алгоритма -
Базовые структуры -
Что такое компилятор? -
Что такое интерпретатор? -
Какие языки высокого уровня вы знаете?
Раздел 4 Основы программирования на языке C++
4.1 Пример готовой программы
Продемонстрируем пример простейшей программы на языке Cи, которая запрашивает у пользователя два целочисленных значения переменных a и b, анализирует их и выводит наибольшее число.
01 #include
02 #include
03 int main(void)
04 {
05 int a,b,max;
06 cout << "a="; //приглашение ввести значение a
07 cin >> a; //ввод значения переменной а
08 cout << "b="; //приглашение ввести значение b
09 cin >> b; //ввод значения переменной b
10 if(a>b) max=a; //если a>b то max=a
11 else max=b; //иначе max=b
12 cout << "max="<
13 getch(); //останов до нажатия любой клавиши
14 return 0; //выход из функции main
15 }
Номера, которые проставлены в начале каждой строки программы, не являются принадлежностью программы. Они введены только для упрощения ссылок на описание действия тех или иных строк. Строки 01 и 02 подключают (include – включить) к тексту программы так называемые заголовочные (h от header – заголовок) файлы системы. В этих файлах описаны системные функции и их аргументы. Используя эти описания, компилятор проверяет правильность вызова системных функций. В нашем случае программа использует системные функции ввода (cin >>) и вывода (cout <<), описания которых находятся в заголовочном файле iostream.h, а также функцию ожидания нажатия какой-либо клавиши (getch), описание которой находится в заголовочном файле conio.h. Названия заголовочных файлов зачастую образовываются от каких-либо аббревиатур английских слов, их полезно научиться понимать, а не запоминать. В нашем примере: io – input/output (ввод/вывод), stream (поток), con (console – пульт оператора, т.е. клавиатура и дисплей).
Строка 03 содержит заголовок функции main. Функция с таким названием обязана присутствовать в каждой программе на языке C, C++. Именно с нее начинается выполнение программы, она – главная (именно так переводится служебное слово main). Предшествующее ей служебное слово int (от integer – целый) сообщает, что результатом работы функции main должно быть целое число. По возвращаемому функцией значению операционная система, запустившая программу main, может "сообразить", правильно или неправильно завершилась работа программы. По общепринятому соглашению нулевое значение, возвращаемое функцией main, свидетельствует о нормальном завершении работы программы. Служебное слово void (дословно – пустота), указанное в круглых скобках, сообщает, что у функции main аргументы отсутствуют.
Текст программы (тело функции) заключается в фигурные скобки (строки 04 и 15). В большинстве последующих строк присутствует пояснительный текст на русском языке, следующий после пары символов // – это комментарий, на содержание которого система не обращает внимания.
В строке 05 объявлены три переменные с именами a, b и max, которые могут принимать только целочисленные значения (тип – int).
Строка 06 является первой строкой программы, которая производит некоторое действие – она выводит на дисплей сообщение, состоящее из двух символов (a=). Текст сообщения заключен в двойные кавычки. Строка 07 организует приостанов работы программы до тех пор, пока пользователь не наберет на клавиатуре какое-либо число и нажмет клавишу Enter. Поступившее значение будет хорошо воспринято, если оно целое, и направлено в переменную a. Точно таким же образом в строках 08 и 09 будет организован ввод значения числовой переменной b.
В строке 10 сравниваются (if – если) текущие значения переменных a и b. Если проверяемое условие выполнено, т.е. значение переменной a больше, то оно присваивается переменной max – выполняется действие, записанное после проверки условия. В противном случае (else – иначе) в переменную max заносится значение b.
Строка 12 выводит на дисплей два сообщения – текстовое (max=) и числовое (значение переменной max).
Обращение к функции getch (строка 13) приводит к задержке на экране сообщения программы до тех пор, пока пользователь не нажмет какую-либо клавишу (getch – от get character, дай символ).
Последняя выполняемая строка с номером 14 возвращает управление операционной системе (return – вернуться) и выдает в качестве значения функции нулевой результат.
Обратите внимание на следующие детали. Если программа обращается к каким-либо системным функциям, то в первых ее строках обязательно должно стоять указание о подключении соответствующих заголовочных файлов. Программа может содержать более чем одну функцию, но среди них обязательно должна присутствовать функция с именем main. Каждая строка программы, содержащая какое-либо объявление или выполняемое действие, оканчивается точкой с запятой. Тело функции обязательно заключается в фигурные скобки
4.2 Алфавит языка
При написании программ на алгоритмическом языке можно пользоваться лишь символами, предусмотренными алфавитом этого языка.
Алфавит языка Си включает в себя следующие символы.
Строчные и прописные буквы латинского алфавита
|а|b|с| ... |x|y|z|A|B|C| ... |X|Y|Z|
Арабские цифры
|0|1 |2| ...|9|
Специальные символы
|+|-|*|/| = |>|>=|< |<=|==|!|.|,|:|;|’(|)|[|]|{| |}|&|@|$|#|
В алфавит языка Си также включается набор зарезервированных слов, имеющих строго определенное назначение. Например, слова IF, ELSE используются в условном операторе, слово DEFAULT обозначает выбор по умолчанию. Назначение отдельных зарезервированных слов будет поясняться в процессе изучения языка.
4.3 Константы и переменные
Константы
Константами являются величины, которые не меняют своего значения при выполнении программы. В качестве констант на языке Си используются целые и вещественные числа, логические константы, символы и строки.
Целые числа записываются со знаком или без него по обычным арифметическим правилам.
Например: 15 +1000 -47 02
Вещественные числа могут записываться либо в форме десятичного числа, либо с указанием порядка.
В записи десятичного числа целая часть отделяется от дробной части точкой.
Например: 2.5 -14.0 +0.33 0.0
Числа с указанием порядка имеют вид: а.10р , где a являетсямантиссой; р - десятичным порядком.
На языке Си числа с порядком записываются с использованием буквы Е, за которой следует порядок. Буква Е читается как «умножить на 10 в степени».
Мантисса может быть целым или десятичным числом. Порядок всегда является целым числом. Следует помнить, что в написании вещественного числа с порядком должны обязательно присутствовать мантисса и порядок.
Примеры записи чисел с порядком
Математическая запись | Запись на языкеСи |
3,14.105 | 3.14Е5 |
-17.10-2 | -17Е-2 |
25,625 | 2.5625Е1 |
10-6 | 1Е-6 |
0,00048 | 4.8Е-4 |
Логические константы могут принимать одно из двух логических значений, записанных либо словом TRUE (истина), либо словом FALSE (ложь).
Символьная константа - это любой символ ПК, заключенный в апострофы, например: ‘7’ или ‘S’ или ‘ *’.
Строковая константа (строка) - любая последовательность символов из набора символов ПК, заключенная в кавычки, например:
“Х=”
“Максимальное значение =”
Строки используются при выводе текстов и комментариев.
Переменные
Для обработки данных их необходимо хранить в памяти. При этом к этим данным надо как-то обращаться. Обычно люди обращаются друг к другу по имени, такой же способ используется в программировании: каждой ячейке памяти (или группе ячеек) дается свое собственное имя. Используя это имя можно прочитать информацию из ячейки и записать туда новую информацию.
Имя представляет собой последовательность латинских букв и цифр, которая начинается с буквы. В имени может присутствовать символ подчеркивания. Длина имени составляет от 1 до 63 символов. Следует помнить, что пробелы не должны входить в написание имени.
Примеры записи имен переменных
Математическая запись | x | ap | y1 | α | ∑ | d-21 |
Запись на языке Си | x | ap | y1 | alpha | S | d_27 |
Переменная - это ячейка в памяти компьютера, которая имеет имя и хранит некоторое значение. Значение переменной может меняться во время выполнения программы. При записи в ячейку нового значения старое стирается.
С точки зрения компьютера все данные в памяти - это числа (более точно - наборы нулей и единиц). Тем не менее, и вы (и компьютер) знаете, что с целыми и дробными числами работают по-разному. Поэтому в каждом языке программирования есть разные типы данных (переменных), для обработки которых используются разные методы. Основными данными в языке Си являются
- целые переменные (тип int - от английского integer - целый) занимают 2 байта в памяти;
- вещественные переменные, которые могут иметь дробную часть (тип float – от английского floating point - плавающая точка), занимают 4 байта в памяти;
-символы (тип char - от английского character - символ) занимают 1 байт в памяти.
Для использования все переменные необходимо объявлять - то есть сказать компьютеру, чтобы он выделил на них ячейку памяти нужного размера и присвоил ей нужное имя. Переменные обычно объявляются в начале программы. Для объявления надо написать название типа переменных (int, float или char), а затем через запятую имена всех объявляемых переменных. При желании можно сразу записать в новую ячейку нужное число, как показано в примерах ниже. Если переменной не присваивается никакого значения, то в ней находится "мусор", то есть то, что было там раньше.
Примеры.
int a; // выделить память под целую переменную a
float b, c; // две вещественных переменных b и c
int Tu104, Il86=23, Yak42; // три целых переменных,
//причем в Il86 сразу записывается число 23.
float x=4.56, y, z; // три вещественных переменных,
// причем в x сразу записывается число 4.56.
char c, c2='A', m; // три символьных переменных,
//причем в c2 сразу записывается символ 'A'.
Переменные, подобно константам, могут быть разных типов. Типы задаются стандартными именами:
integer - целый тип;
long – длинный целый тип;
short – целый тип с меньшим диапазоном;
float - вещественный тип;
double - вещественный тип с двойной точностью;
boolean - логический тип;
char - символьный тип;
По описанию переменной в памяти компьютера резервируется ячейка для хранения значения переменной. В зависимости от объявленного типа переменной ячейка может иметь разную внутреннюю структуру, т.е. содержать различное число байт.
Целый гип. Длина ячейки составляет 2 байта, что соответствует диапазону от -32768 до +32767 целых чисел.
Вещественный тип. Длина ячейки - 6 байт. Вещественные числа хранятся в памяти с указанием порядка. Диапазон значений порядка составляет от 1Е-39 до 1Е+38. Мантисса занимает до 11 значащих десятичных цифр.
4.4 Арифметические выражения
Арифметические выражения строятся из операндов, арифметических операций и круглых скобок.
Операндами могут быть константы, переменные и функции.
В бесскобочных арифметических выражениях операции выполняются слева направо в соответствии с их приоритетом.
1. * (умножение); / (деление); % ( остаток от деления целых чисел).
2. + (сложение); - (вычитание).
Изменить порядок выполнения операций можно с помощью
круглых скобок. Выражение, заключенное в круглые скобки, выполняется в первую очередь. Например, выражению а/b*с соответствует математическая запись , а выражению а/(b*с) – запись .
Тип арифметического выражения определяется типом входящих и него операндов.
Арифметическое выражение является целым, если все входящие и него операнды целого типа. Результат вычисления целого арифметического выражения - целый.
Если в арифметическом выражении содержится хотя бы один вещественный операнд, то результат - вещественный. Целые операнды в вещественном арифметическом выражении всегда преобразуются к вещественному типу.
Операция выделения остатка или деление по модулю ( % ) применима только к целым числам. Результат ее выполнения - целый.
Исключение составляет операция деления с использованием символа ‘/’ (косая черта). Результат выполнения этой операции всегда вещественный, независимо от типа операндов.
Например, значением выражения 2/5 будет вещественное число 0.4.
Примеры вычисления арифметических выражений
Арифметические выражения | Результат | Тип результата |
6 + 4 * (5 - 3) | 14 | Целый |
6 + 4 * (5 - 3.0) | 14.0 | Вещественный |
| | |
7 % 2 | 1 | Целый |
7/2 | 3.5 | Вещественный |
Стандартные функции
Часто используемые в арифметических выражениях элементарные математические функции оформлены в виде стандартных подпрограмм, которые хранятся в библиотеке системы Турбо Си (файл с именем math.h).
Для правильного обращения к стандартной функции необходимо записать имя функции, за которым в круглых скобках следует аргумент (параметр). Приоритет вычисления функций выше, чем приоритет арифметических операций.
В таблице ниже представлен набор стандартных функций с указанием типов функции и аргумента. В таблице приняты обозначения: I - целый тип, F - вещественный тип.
Математическая запись | Запись на языке Си | Тип аргумента | Тип функции |
| abs(x) | I F | I F |
tg x | tan(x)(x) | I F | I F |
sin x | sin(x) | I или F | F |
cos x | cos(x) | I или F | F |
ln x | log(x) | I или F | F |
| sqrt(x) | I или F | F |
π | pi | F | F |
Округление до ближайшего целого > x | ceil(x) | F | I |
Округление до ближайшего целого < x | floor(x) | F | I |
Возведение в степень xn | pow(x,n) | I F | I F |
| exp(x) | I или F | F |
arcsin(x) - арксинус | asin(x) | I или F | F |
arccos(x) - арккосинус | acos(x) | I или F | F |
arctg(x) - арктангенс | atan(x) | I или F | F |
десятичный логарифм. | log10(x) | I или F | F |
гиперболический синус | sinh(x) | I или F | F |
гиперболический косинус | cosh(x) | I или F | F |
гиперболический тангенс | tanh(x) | I или F | F |
Округление по правилам математики | round(x) | I или F | I |
Примеры программирования арифметических выражений
Математическая запись | Запись на языке Си |
| (a+12*b)/(с1 - 1.8E3) |
| exp((2*sin(4*x)+pow((cos(x* x),2)))/(3*x)) |
| log(abs(tan(al)-sin(pow(al,3)))) |
4.5 Линейные вычислительные процессы
Линейный вычислительный процесс представляет собой последовательность действий, выполняемых один за другим. Основу программы линейного вычислительного процесса составляют оператор присваивания и операторы ввода-вывода данных.
4.5.1. Оператор присваивания
Оператор присваивания служит для вычисления выражения и записи результата в память компьютера.
Общий вид записи оператора
переменная=выражение;
Знак = читается как «присвоить». Конец любого оператора на языке Си фиксируется точкой с запятой.
Работа оператора присваивания
При выполнении оператора присваивания происходит замена текущего значения переменной, стоящей слева от знака присваивания, новым значением, полученным в результате вычисления выражения, стоящего справа от знака равенства, например
c = a + b; // вычислить сумму a и b и запишет результат в c.
Тип результата выполнения оператора
При записи оператора присваивания необходимо строго следить за типом переменной, стоящей в левой части оператора, и типом выражения:
• если переменная слева - вещественного типа, то арифметическое выражение может быть как целым, так и вещественным.
В случае целого арифметического выражения происходит преобразование его результата к вещественному типу. Например, при выполнении оператора
m=20+15/4;
вещественной переменной т будет присвоено значение 23.0;
• если переменная слева - целого типа, то арифметическое
выражение будет приведено к целому типу. Например, задано
следующее описание типа переменных.
float a, b, c;
int n;
Тогда записать оператор присваивания в виде: n=а*b/с; приведет к усечению результата до целого типа.
В операторе присваивания конечный результат вычисления выражения в правой части приводится к типу переменной, которой должно быть присвоено это значение. Данный процесс может привести к повышению типа, как описано выше, или к понижению, при котором величина приводится к типу данных, имеющему более низкий приоритет. Последовательность имен типов, упорядоченных от высшего типа к низшему, выглядит так: double, float, long, int, short, char. Применение ключевого слова unsigned повышает ранг соответствующего типа данных со знаком. Повышение типа обычно происходит гладко, в то время как понижение может привести к затруднениям.
Примеры использования оператора присваивания
1. Записать оператор присваивания, который позволяет вычислить расстояние между двумя точками на плоскости с координатами (х1,у1)и (х2, у2).
Ответ: d=sqrt(pow(x1-x2,2)+pow(y1-y2,2));
2. Записать последовательность операторов присваивания,
обеспечивающих обмен значениями переменных х и у в памяти
компьютера.
Ответ: с=х;
х=у;
у=с;
Странные операторы присваивания
В программировании часто используются несколько странные операторы присваивания, например: i = i + 1;
Если считать это уравнением, то оно бессмысленно с точки зрения математики. Однако с точки зрения информатики этот оператор служит для увеличения значения переменной i на единицу.
Буквально это означает: взять старое значение переменной i, прибавить к нему единицу и записать результат в ту же переменную i.
Инкремент и декремент
В языке Си определены специальные операторы быстрого увеличения на единицу
(инкремента)
i ++; или ++ i;
что равносильно оператору присваивания
i = i + 1;
и быстрого уменьшения на единицу (декремента)
i - -; или - - i;
что равносильно оператору присваивания
i = i - 1;
Между первой и второй формами этих операторов есть некоторая разница, но только тогда, когда они входят в состав более сложных операторов или условий.
4.5.2. Операторы ввода-вывода
Операторы ввода-вывода данных служат для обмена информацией между внутренней памятью компьютера и внешними устройствами (монитор, клавиатура, принтер, накопители на жестких и гибких магнитных дисках и др.).
Информация, представленная на внешних устройствах, организуется в файлы. Файлы, предназначенные для хранения исходных данных, называются входными. Результаты вычислений (выходные данные) записываются в выходные файлы. В системе Турбо Си определены стандартные устройства ввода (клавиатура) и вывода (экран), для которых имена стандартных файлов не указываются, т.е. используются по умолчанию.
Операторы ввода исходных данных с клавиатуры
Работа оператора ввода
Операторы ввода обеспечивают чтение данных с клавиатуры, преобразование их из внешнего представления во внутреннее и присваивание значений переменным, указанным в списке.
Потоковый ввод данных числового типа
Для начинающих программистов проще всего организовать в программе ввод числовой информации из буфера потока, связанного с так называемым стандартным устройством ввода (stdin). Данные в этом буфере оказываются в тот момент, когда программа обращается к пользователю и ждет окончания набора затребованных числовых значений с клавиатуры. Программа может запросить одно или несколько значений:
cin >> d;
...........
cin >> x1 >> x2 >> x3;
Первая строка соответствует запросу на ввод значения единственной переменной d. Следующая строка программы представляет запрос на ввод трех числовых значений, первое из которых будет присвоено переменной x1, второе значение предназначается для переменной x2, третье значение - для переменной x3. В ответ на запрос программы пользователь должен набрать на клавиатуре затребованные числа, разделяя их, по крайней мере, одним пробелом. Набор строки завершается нажатием клавиши Enter. Количество числовых значений, набираемых пользователем в пределах строки, может оказаться как меньше, так и больше, чем требуется программе. В первом случае продолжение программы задержится до тех пор, пока пользователь не введет дополнительные строки с недостающими значениями. Если пользователь наберет слишком много значений в вводимой строке, то лишние числовые данные сохранятся в буфере ввода и будут переданы программе при выполнении следующего оператора cin.
Тип набираемого числового значения и его величина должны соответствовать типу переменной, в которую это значение должно быть введено. Забота об этом целиком возлагается на пользователя.
Для обеспечения потокового ввода к программе следует подключить заголовочный файл iostream.h:
#include
int main()
{ int i;
float f;
double d;
..........
cin >> i >> f >> d;
В переменные типа char или unsigned char из потока числовые значения ввести невозможно, т.к. они в данном случае воспринимаются системой не как числовые данные, а как символьные. В такие переменные попадет только первый символ набранного значения.
Форматный ввод
Гораздо более сложным для начинающих программистов является ввод числовых данных, организуемый с помощью функции scanf, использующей так называемую форматную строку:
Общий вид записи оператора ввода
scanf(“ список форматов“,
форматы ввода адреса вводимых переменных
Форматы ввода - это строка в кавычках, в которой перечислены один или несколько форматов ввода данных:
%d - ввод целого числа (переменная типа int)
%f - ввод вещественного числа (переменная типа float)
%с - ввод одного символа (переменная типа char)
После форматов ввода через запятую перечисляются адреса ячеек памяти, в которые надо записать введенные значения. Почувствуйте разницу:
a - значение переменной a
&a - адрес переменной a
Например:
#include
int main()
{ int i;
float f;
double d;
..........
scanf("%d %f %lf",&i,&f,&d);
Для обеспечения форматного ввода к программе следует подключить заголовочный файл stdio.h. Строка вводимых данных поступает со стандартного устройства ввода (stdin), которым по умолчанию считается клавиатура. Завершение набора строки ввода - нажатие клавиши Enter.
Первый аргумент функции scanf представляет форматную строку, управляющую процессом преобразования числовых данных, набранных пользователем в строке ввода, в машинный формат, соответствующий типам переменных, адреса которых указаны вслед за форматной строкой.
В приведенном примере переменной i (в списке ввода указан ее адрес - &i), объявленной с помощью спецификатора типа int, соответствует форматный указатель %d. Это означает, что первым числовым значением, набранным на клавиатуре, может быть только целое десятичное число со знаком (d - от decimal, десятичный). Вещественной переменной f типа float в форматной строке соответствует указатель %f. Это означает, что второе числовое значение в строке ввода должно принадлежать диапазону, предусмотренному для коротких вещественных данных. Для переменной d типа double использован форматный указатель %lf (l (это буква эль)- от long).
Количество форматов в строке должно быть равно количеству адресов в списке.
Кроме того, тип переменных должен совпадать с указанным: например, если a и b - целые переменные, то следующие вызовы функций ошибочны
scanf ( "%d%d", &a );
неясно, куда записывать второе введенное число;
scanf ( "%d%d", &a, &b, &c );
переменная c не будет введена, так как на нее не задан формат;
scanf ( "%f%f", &a, &b );
нельзя вводить целые переменные по вещественному формату.
Если значения данных вводятся в одной строке, то они отделяются друг от друга одним или несколькими пробелами.
Пример ввода:
Пусть в задаче определены следующие исходные данные:
а = 4; х = 3,8; у =1,2-104; к=5; т = 74
Оператор ввода:
scanf(“%d%f%f%d%d”, &a, &х, &у, &k, &m);
вызывает чтение данных с клавиатуры, набранных следующим
образом:
4 3.8 1.2Е4 5 74 [Enter]
%d%f%f%d%d - такой список форматов будет соответствовать следующему описанию переменных в программе:
main()
{ int a,k,m;
float x,y;
Операторы вывода данных на экран