Тема_1,2_Основы_алгоритмизации_Операторы_ввода_и_вывода_Типы_дан. 1. основы алгоритмизации. Язык программирования си. Операторы ввода и вывода. Типы данных
Скачать 2.17 Mb.
|
input/оutput stream — поток ввода-вывода. Возможно, вас удивляет, почему одно из основных средств языка — процедуры ввода-вывода — не включается компилятором в программу автоматически. Дело в том, что этот пакет используется далеко не всегда, а ведь одна из целей создания языка Си — получение компактного объектного кода. Между прочим, упомянутая строка не является даже оператором языка Си. Символ # указывает, что она должна быть обработана "препроцессором" языка Си. Как вы уже могли предположить из названия, препроцессор осуществляет некоторую предварительную обработку текста программы перед началом компиляции. Using namespace std – подключение стандартного пространства имен. Таких пространств может быть очень много и об этом вы узнаете позднее. Сейчас же мы будем использовать только одно пространство. Об этом и заявляем в начале программы. В принципе делать это было не обязательно. Но тогда при каждом выводе любой переменной, нам бы пришлось дописывать перед ней std, говорящее, что переменная взята из стандартного пространства. main() Выбор имени main в качестве названия нашей программы довольно очевиден; более того, назвать ее как-то по-другому и нельзя. Дело в том, что программа, написанная на языке Си, всегда начинает выполняться с функции, называемой main(), поэтому мы имеем возможность выбирать имена для всех используемых нами Функций кроме той, с которой начинается выполнение программы. Зачем здесь скобки? Как уже упоминалось, они указывают на то, что main() — имя функции. В круглых скобках в общем случае содержится информация, ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 47 передаваемая этой функции. В нашем простом примере передача информации отсутствует и, следовательно, в скобках ничего не содержится. { и }: Фигурные скобки { } (и только они) отмечают начало и конец тела функции. Для этой цели не используются ни круглые (), ни квадратные [] скобки. Фигурные скобки применяются также для того, чтобы объединить несколько операторов программы в сегмент или "блок". Если вы знакомы с такими языками, как Паскаль или VBA, вы легко сообразите, что такие скобки аналогичны операторам begin и end в этих языках. int num;: "Оператор описания переменной" — одно из важнейших средств языка Си. Как уже упоминалось выше, в нашем простом пример вводятся два понятия. Первое — использование в теле функции "переменной", имеющей имя num; второе — с помощью слова int объявляется, что переменная num принимает целые значения. Точка с запятой в конце строки указывает на то, что в ней содержится оператор языка Си, причем этот символ является здесь частью оператора, а не разделителем операторов, как в Паскале. Слово int служит "ключевым словом", определяющим один из основных типов данных языка Си. Ключевыми словами называются специальные зарезервированные слова, используемые для по строения фраз языка В языке Си все переменные должны быть объявлены. Это означает, что, во- первых, в начале программы вы должны привести список всех используемых переменных, а во-вторых, необходимо указать "тип" каждой из них. Вообще объявление переменных считается "хорошим стилем" программирования. num = 1;: ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 48 "Оператор присваивания" является одним из основных средств языка. Приведенную выше строку программы можно интерпретировать так: "присвоить переменной num значение 1". Дело в том, что, согласно оператору в четвертой строке программы, переменной num была выделена ячейка памяти, и только теперь в результате выполнения оператора присваивания переменная получает свое значение. Отметим, что этот оператор тоже заканчивается точкой с запятой. cout << "Я простая" ; cout << "вычислительная машина.\n" ; cout << "Мое любимое число " << num << " потому что оно самое первое.\n" ; Во всех этих строках используется функция, называемая cout; Строка символов, заключенная в кавычки, является информацией, передаваемой функции cout из нашей главной функции [main()]. Такая информация называется "аргументом"; в первом случае аргументом является строка "Я простая". Возникает вопрос: что функция cout делает с этим аргументом? Ответ довольно очевиден: она просматривает все символы, содержащиеся между кавычками, и выводит их на экран терминала. Что можно сказать по поводу следующей строки программы? В ней имеются символы \n, которые не появились на экране. В чем дело? Эти символы служат директивой начать новую строку на устройстве вывода. Комбинация \n на самом деле представляет собой один символ, называемый "новая строка". Его смысл рассмотрим дальше. Escape-последовательности Сочетания символов, состоящих из косой черты (\), за которой следует буква или набор цифр, называются escape-последовательностями. Для представления знака новой строки, одиночной кавычки или некоторых других ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 49 символов в символьной константе, необходимо использовать escape- последовательности. Escape-последовательность рассматривается как один символ и, следовательно, является допустимой символьной константой. Escape-последовательности обычно используются для указания действий, например возврата каретки или табуляции, на терминалах и принтерах. Они также используются для предоставления буквенных представлений непечатаемых символов, а также символов, которые обычно имеют специальное значение, например двойных кавычек ("). В следующей таблице перечислены escape- последовательности ANSI и представляемые ими значения. Escape- последовательность Представляет \a Звонок (предупреждение) - Звуковой сигнал \b Удаление предыдущего символа \n Новая строка \t Горизонтальная табуляция \ " Двойная кавычка \\ Обратная косая черта Комментарии Комментарии - это примечания, помогающие понять смысл программы. В Си комментарии записываются между значками /* */. Содержание комментариев ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 50 компилятору совершенно безразлично: все, что находится между символами начала и конца комментария, им игнорируется. Комментарии можно располагать на той же строке, что и операции, которые они объясняют. Длинные комментарии могут занимать несколько строк. Для комментария не требуется в конце точка с запятой. При разработке программы комментарии могут оказать неоценимую помощь, особенно если приходится оставлять работу на длительное время, а затем возвращаться к ней. При наличии комментариев гораздо легче продолжить работу с того места, где вы остановились. Кроме того, с их помощью гораздо проще впоследствии адаптировать уже написанные программы к новым задачам. Внутри набора символов, который представляет комментарий, не может быть специальных символов, определяющих начало и конец комментариев. /* комментарии к программе многострочные комментарии */ // Это однострочный комментарий ТИПЫ ДАННЫХ. Некоторые данные в программе являются числами, некоторые - буквами, или, более обобщенно, символами. Компьютер должен иметь возможность идентифицировать и обрабатывать требуемым образом данные любого из этих типов. В языке Си предусмотрено использование нескольких основных типов данных. ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 51 Типы данных относятся к самым фундаментальным свойствам любого языка программирования. Данные, с которыми работает программа, хранятся в оперативной памяти. Компилятору необходимо знать, сколько места они занимают, и какие действия с ними можно выполнять. Т.О. тип данных однозначно определяет возможный диапазон значений переменной и допустимые над ней действия. Простые типы данных. Простые типы делятся на целочисленные типы и типы с плавающей точкой. Для описания стандартных типов определены следующие ключевые слова: Тип байт Диапазон принимаемых значений целочисленный (логический) тип данных bool 1 0 / 255 целочисленный (символьный) тип данных char 1 0 / 255 целочисленные типы данных short int 2 -32 768 / 32 767 unsigned short int 2 0 / 65 535 int 4 -2 147 483 648 / 2 147 483 647 unsigned int 4 0 / 4 294 967 295 long int 4 -2 147 483 648 / 2 147 483 647 unsigned long 4 0 / 4 294 967 295 ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 52 Тип байт Диапазон принимаемых значений int типы данных с плавающей точкой float 4 -2 147 483 648.0 / 2 147 483 647.0 long float 8 -9 223 372 036 854 775 808 .0 / 9 223 372 036 854 775 807.0 double 8 -9 223 372 036 854 775 808 .0 / 9 223 372 036 854 775 807.0 Логический тип Логический (булевый) тип обозначается словом bool. Данные булевого типа могут принимать только два значения: true и false. Значение false обычно равно числу 0, значениеtrue — числу 1. Под данные булевого типа отводится 1 байт. Символьные типы Тип char используется для представления символов в соответствии с системой кодировки ASCII (American Standard Code for Information Interchange — Американский стандартный код обмена информации). Это семибитный код, его достаточно для кодировки 128 различных символов с кодами от 0 до 127. Символы с кодами от 128 до 255 используются для кодирования национальных шрифтов, символов псевдографики и др. Целые типы ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 53 Целый тип данных предназначен для представления в памяти компьютера обычных целых чисел. Основным и наиболее употребительным целым типом является тип int. Гораздо реже используют его разновидности: short (короткое целое) и long (длинное целое). Также к целым типам относится тип char (символьный). Кроме того, при необходимости можно использовать и тип long long (длинное-предлинное!), который хотя и не определён стандартом, но поддерживается многими компиляторами C. По-умолчанию все целые типы являются знаковыми, т.е. старший бит в таких числах определяет знак числа: 0 — число положительное, 1 — число отрицательное. Кроме знаковых чисел на C можно использовать беззнаковые. В этом случае все разряды участвуют в формировании целого числа. При описании беззнаковыхцелыхпеременных добавляется слово unsigned (без знака). Вещественные типы Особенностью вещественных (действительных) чисел является то, что в памяти компьютера они практически всегда хранятся приближенно, а при выполнении арифметических операций над такими данными накапливается вычислительная погрешность. Имеется три вещественных типа данных: float, double и long double. Основным считается тип double. Так, все математические функции по-умолчанию работают именно с типом double. Тип long double в настоящее время, как правило, совпадает с типом double и на практике обычно не применяется. При использовании старых 16-ти разрядных компиляторов данные типа long double имеют размер 10 байт и обеспечивают точность до 19 десятичных цифр. Рекомендуется везде использовать только тип double. Работа с ним всегда ведётся быстрее, меньше вероятность заметной потери точности при большом количестве ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 54 вычислений. Тип float может пригодиться только для хранения больших массивов при условии, что для решения поставленной задачи будет достаточно этого типа. Тип void Тип void — самый необычный тип данных языка C++. Множество значений этого типа пусто, т.е. нельзя переменной такого типа присвоить какое-нибудь значение. Более того, нельзя даже описать переменную этого типа. Зачем же нужно то, чем вроде бы невозможно воспользоваться? Оказывается, это очень полезный тип данных! Он используется: для определения функций, которые не возвращают результата своей работы; для указания того, что список параметров функции пуст; Перечисляемый тип enum Перечисление состоит из набора именованных целочисленных констант. Объявление типа перечисления предоставляет имя тега перечисления (необязательно) и определяет набор именованных целочисленных идентификаторов (называемых "набор перечисления", "константы перечислителя", "перечислители" или "члены").Переменная с типом перечисления хранит одно из значений набора перечисления, определенных этим типом. К членам набора перечисления применяются следующие правила. Набор перечисления может содержать повторяющиеся постоянные значения. Например, значение 0 можно связать с двумя разными идентификаторами, такими как null и zero, в одном и том же наборе. Идентификаторы в списке перечисления должны отличаться от других идентификаторов в той же области с той же видимостью, включая обычные имена переменных и идентификаторы в других списках перечисления. ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 55 К тегам перечисления применяются обычные правила области. Они должны отличаться от всех тегов перечислений, структур или объединений с такой же видимостью. ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 56 ПЕРЕМЕННЫЕ Компьютер, выполняя программу, может заниматься разнообразной деятельностью. Он может складывать числа, сортировать имена, заниматься распознаванием речи и изображения на экране видеодисплея, вычислять орбиты комет, подготавливать список почтовых адресов абонентов, чертить фигуры, делать логические выводы или что-нибудь еще, что только вы можете себе представить. Чтобы заниматься всем этим, программам необходимо работать с "данными" - числами и символами, т. е. объектами, которые несут в себе информацию, предназначенную для использования. Некоторые данные устанавливаются равными определенным значениям еще до того, как программа начнет выполняться, а после ее запуска сохраняют такие значения неизменными на всем протяжении работы программы. Это "константы". Другие данные могут изменяться, или же им могут быть присвоены значения во время выполнения программы; они называются "ПЕРЕМЕННЫМИ". Различие между переменной и константой довольно очевидно: во время выполнения программы значение переменной может быть изменено (например, с помощью присваивания), а значение константы - нет. Указанное различие приводит к тому, что обработка переменных компьютером оказывается немного сложнее и требует больше времени, чем обработка констант, но, несмотря на это, он вполне справляется с такой деятельностью. ИДЕНТИФИКАТОРЫ (ИЛИ ОБОЗНАЧЕНИЯ) - это имена, которые даются переменным, типам, функциям и меткам в программе. Имена идентификаторов должны отличаться по написанию и регистру от всех ключевых слов. Нельзя использовать ключевые слова (языка C или специфические Microsoft) как идентификаторы; они зарезервированы для специального использования. Идентификатор создаётся при указании его в объявлении переменной, типа или функции. В этом примере result является идентификатором ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 57 для целочисленной переменной, а main и printf - имена идентификаторов для функций. #include { int result; if ( result != 0 ) cout<< "Bad file handle\n"; } Объявив один раз, можно использовать идентификатор в последующих операторах программы для обращения к связанному значению. Первый символ имени идентификатора должен быть не цифрой (т. е. первым знаком должен быть либо символ подчеркивания, либо прописная или строчная буква). Компилятор C считает, что прописные и строчные буквы - это отдельные символы. Эта особенность, называемая "чувствительность к регистру" позволяет создать отдельные идентификаторы, которые имеют одинаковое написание, но разные регистры для одной или нескольких букв. Например, каждый из следующих идентификаторов является уникальным: add ADD Add aDD КЛЮЧЕВЫЕ СЛОВА - это слова, которые имеют специальное значение для компилятора C. В языке C используются следующие ключевые слова: ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 58 auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void Default goto sizeof volatile do if static while Переопределить ключевые слова невозможно. Тем не менее, можно указать текст, который будет заменён на ключевые слова перед компиляцией при использовании директивы препроцессора C. Блок, относящийся только к системам Microsoft Стандарт ANSI C допускает идентификаторы с двумя находящимися впереди знаками подчеркивания, которые резервируются для реализаций компилятора. По этой причине существует соглашение Microsoft - предварять имена специфических ключевых слов Microsoft двойным подчеркиванием. Эти слова нельзя использовать в качестве имён идентификаторов. Следующие ключевые слова и специальные идентификаторы распознаются компилятором C корпорации Microsoft. __asm dllimport2 __int8 naked 2 __based 1 __except __int16 __stdcall ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 59 __cdecl __fastcall __int32 thread2 __declspec __finally __int64 __try dllexport 2 __inline __leave ОПИСАНИЕ И ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ Объявление переменной в C происходит таким образом: сначала указывается тип данных для этой переменной, а затем название этой переменной. int a; // объявление переменной a целого типа. float b; // объявление переменной b типа данных с плавающей запятой. double c = 14.2; // инициализация переменной типа double. char d = 's'; // инициализация переменной типа char. bool k = true; // инициализация логической переменной k. В C оператор присваивания (=) — не является знаком равенства и не может использоваться для сравнения значений. Оператор равенства записывается как «двойное равно» — ==. Присваивание используется для сохранения определенного значение в переменной. Например, запись вида a = 10 задает переменной a значение числа 10. |