Тема_1,2_Основы_алгоритмизации_Операторы_ввода_и_вывода_Типы_дан. 1. основы алгоритмизации. Язык программирования си. Операторы ввода и вывода. Типы данных
Скачать 2.17 Mb.
|
ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 1 Оглавление ИСТОРИЯ И ЭТАПЫ РАЗВИТИЯ ЯЗЫКА С ................................................................................. 2 Появление языка С ......................................................................................................................... 2 Причины популярности языка С ................................................................................................... 2 Происхождение языка С ................................................................................................................ 6 История развития ........................................................................................................................... 8 Сравнительный анализ языка «C» с другими языками программирования. ............................. 12 ТЕОРИЯ АЛГОРИТМОВ ................................................................................................................ 17 Понятие алгоритма. ...................................................................................................................... 17 Свойства алгоритма ..................................................................................................................... 18 Виды алгоритмов: ........................................................................................................................ 19 Блок-схемы ................................................................................................................................... 20 Пример описания алгоритма........................................................................................................ 21 Основные понятия языка Си ........................................................................................................... 23 Компилятор, линковщик и интерпретатор ...................................................................................... 25 Установка Visual Studio ................................................................................................................... 29 Создание проекта в Visual Studio .................................................................................................... 40 Обзор средств разработки ................................................................................................................ 42 Анализ первой программы. ............................................................................................................. 45 Escape-последовательности ............................................................................................................. 48 Комментарии .................................................................................................................................... 49 ТИПЫ ДАННЫХ. ............................................................................................................................ 50 Логический тип ............................................................................................................................ 52 Символьные типы ........................................................................................................................ 52 Целые типы .................................................................................................................................. 52 Вещественные типы .................................................................................................................... 53 Тип void ......................................................................................................................................... 54 ПЕРЕМЕННЫЕ ................................................................................................................................ 56 ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 2 ИСТОРИЯ И ЭТАПЫ РАЗВИТИЯ ЯЗЫКА С Появление языка С Деннис Ритчи из компании Bell Labs создал язык С в 1972 году, когда они вместе с Кеном Томпсоном работали над созданием операционной системы Unix. Однако сам язык С зародился в голове Ритчи не просто так. Его предшественником был язык В, созданный Томпсоном на основе..., впрочем, это уже другая история. Наиболее важным является тот факт, что С задумывался как инструментальное средство для программистов-практиков, следовательно, его главной целью в этом случае было создание полезного языка программирования. Большинство языков программирования создавались с целью быть полезными, но довольно часто перед ними ставились другие вопросы. Например, изначально язык Pascal предназначался для облегчения изучения принципов программирования. С другой стороны, язык BASIC создавался как язык программирования, приближенный к естественному английскому языку, чтобы облегчить задачу изучения языков программирования для студентов, не знакомых с компьютерами. Это были важные цели, но они не всегда соответствовали прагматичному подходу к решению повседневных задач. Тем не менее, разработка С, как языка, предназначенного для программистов, сделала его одним из наиболее востребованных в настоящее время. Причины популярности языка С В течение последних четырех десятилетий С стал одним из основных и наиболее широко распространенных языков программирования. Его популярность росла потому, что люди предпринимали попытки работать с ним и ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 3 убеждались в его достоинствах. За последнее десятилетия или два многие программисты перешли на такие языки, как C++, Objective С и Java, но язык С все еще остается важным и сам по себе, и как путь перехода на указанные языки. По мере изучения С вы убедитесь, что он обладает многими достоинствами. Некоторые из них отметим сейчас: Конструктивные особенности. С представляет собой современный язык программирования, включающий управляющие средства, которые теория и практика вычислительной техники рассматривает как полезные и желательные. Его конструкция хорошо подходит для нисходящего планирования, для структурного программирования и для модульного проектирования. Все это позволяет получать надежные и понятные программы Эффективность С является эффективным языком программирования. Его конструкция продуктивно использует возможности компьютеров, на которых он установлен. Программы на С отличаются компактностью и быстротой исполнения. По сути дела С обладает некоторыми средствами точного управления, обычно характерными разве что для языка ассемблера. (Язык ассемблера - это мнемоническое представление множества инструкций, используемых конкретным центральным процессором; различные семейства центральных процессоров имеют разные языки ассемблера.) При желании программы можно настроить на максимальную скорость выполнения или на более эффективное использование памяти. Переносимость С является переносимым языком, и это означает, что программу, написанную на С для одной системы, можно выполнять на другой системе всего лишь с небольшими изменениями, а иногда удается обойтись вообще без модификаций. В тех случаях, когда изменения неизбежны, они ограничиваются простым редактированием нескольких записей в заголовочном файле, ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 4 сопровождающем главную программу. Многие языки декларируются как переносимые, однако тем, кто преобразовывал программу на языке BASIC, предназначенном для ПК компании IBM в программу на языке BASIC для компьютера Apple (они были близкими родственниками), либо предпринимал попытки выполнить в среде Unix программу на языке FORTRAN, которая предназначена для 1 мэйнфрейма IBM, хорошо известно, что такой перенос — в лучшем случае весьма трудоемкая операция. Язык С является лидером в смысле переносимости. Компиляторы языка С (программы, преобразующие код на С в инструкции, которые компьютер использует для внутренних целей) доступны для многих компьютерных архитектур, от 8-разрядных микропроцессоров до суперкомпьютеров Cray. Однако следует отметить, что фрагменты программы, написанной специально для доступа к конкретным аппаратным устройствам, таким как монитор или специальные функции операционных систем, подобных Windows 8 или OS X, обычно не принадлежат к числу переносимых. Поскольку язык С тесно связан с Unix, операционные системы семейства Unix поставляются с компилятором С в виде части соответствующего пакета. Установка операционной системы Linux также обычно включает компилятор языка С. Доступно несколько компиляторов языка С, предназначенных для персональных компьютеров, в том числе для работающих под управлением различных версий ОС Windows и Macintosh. Таким образом, используете вы домашний компьютер, профессиональную рабочую станцию или мэйнфрейм, у вас высокие шансы получить компилятор языка С для вашей конкретной системы. МОЩЬ и гибкость Язык С является мощным и гибким (это два наиболее предпочитаемых определения в литературе компьютерной тематики). Например, большая часть кода мощной и гибкой операционной системы Unix была написана на С. На языке С были реализованы многие компиляторы и интерпретаторы для других языков, таких как FORTRAN, Perl, Python, Pascal, LISP, Logo и BASIC. В результате, когда вы используете FORTRAN на машине Unix, в конечном итоге именно ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 5 программа, написанная на С, выполняет работу по созданию окончательной исполняемой программы. Программы на С применялись для решения физических и инженерных задач и даже для анимации специальных эффектов для множества фильмов. Ориентация на программистов Язык С ориентирован на удовлетворение потребностей программистов. Он предоставляет вам доступ к оборудованию и позволяет манипулировать отдельными фрагментами памяти. Он также предоставляет богатый выбор операций, которые позволяют лаконично выражать свой подход к решению задач. В плане ограничения того, что можно делать, язык С менее строг, чем, скажем, Pascal или даже C++. Такая гибкость является достоинством и одновременно представляет определенную опасность. Достоинство заключается в том, что решать многие задачи, такие как преобразование форматов данных, в С намного проще, чем в других языках. Опасность состоит в том, что есть шанс допускать такие ошибки, которые в других языках попросту невозможны. Язык С предоставляет большую свободу действий, но при этом налагает и более высокую ответственность. Наряду с этим, большинство реализаций языка С сопровождаются обширной библиотекой полезных функций на С. Эти функции способны удовлетворить многие потребности, с которыми сталкивается программист. Недостатки Язык С не лишен недостатков. Часто, как это бывает у людей, недостатки и достоинства являются противоположными сторонами одного и того же свойства. Например, как мы уже упоминали, свобода выражений в языке С также требует дополнительной ответственности. В частности, использование в С указателей означает возможность появления программных ошибок, которые трудно отследить. Как отметил один из известных людей, ценой свободы является постоянная бдительность. ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 6 Выразительность языка С в сочетании с богатством его операций делает возможным написание кода, который исключительно сложно понять. Конечно, вы отнюдь не обязаны писать неясный код, но такая возможность имеется. В конце концов, для какого еще языка устраивается ежегодный конкурс на самый запутанный код? Происхождение языка С В начале восьмидесятых годов прошлого столетия С уже был доминирующим языком программирования в среде миникомпьютеров, функционировавших под управлением операционных систем Unix. С тех пор он распространился на персональные компьютеры (микрокомпьютеры) и мэйнфреймы (большие вычислительные машины). Многие компании по разработке и поставке программного обеспечения предпочитают использовать именно язык С при создании программ для текстовых процессоров, крупномасштабных электронных таблиц, компиляторов и других программных продуктов. Эти компании убедились в том, что с помощью С можно создавать компактные и эффективные программы. А еще важнее то, что эти в программы легко вносить изменения и легко адаптировать к новым моделям компьютеров. ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 7 Где используется язык С Все, что хорошо для компаний и ветеранов языка С, хорошо также и для других пользователей. Все больше и больше пользователей компьютеров обращаются к языку С, чтобы задействовать его преимущества. Для программирования на языке С вовсе не надо быть компьютерным профессионалом. В девяностых годах прошлого столетия многие компании, изготавливающие и поставляющие программное обеспечение, при реализации крупных программных проектов стали переходить на язык C++. Язык C++ добавляет к С инструментальные средства объектно-ориентированного программирования. (Объектно-ориентированное программирование представляет собой философию, которая пытается формировать язык таким образом, чтобы он соответствовал задаче, в отличие от формулирования задачи так, чтобы она соответствовала языку программирования.) В первом приближении C++ можно рассматривать как надмножество языка С в том смысле, что программа на С также является или ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 8 почти является программой на C++. Изучая язык С, вы фактически изучаете многие аспекты C++. Несмотря на популярность более новых языков вроде C++ и Java, язык С сохраняет лидирующее положение по способности решать задачи из области разработки программного обеспечения, обычно входя в десятку наиболее востребованных языков программирования. В частности, С неизменно используется для программирования встроенных систем. Иначе говоря, он все чаще применяется для программирования обычных микропроцессоров, встроенных в автомобили, камеры, DVD-проигрыватели и другие современные бытовые устройства. Наряду с этим С посягает на долговременное господство языка FORTRAN в области научного программирования. И, наконец, как язык, создававшийся для разработки операционных систем, он играет ключевую роль в построении операционной системы Linux. Таким образом, и во второй декаде двадцать первого века С продолжает удерживать за собой сильные позиции. Короче говоря, С является одним из наиболее важных языков программирования и надолго останется таковым. Если вы хотите заниматься разработкой программ, то на вопрос, можете ли вы работать на языке С, вы непременно должны ответить утвердительно. История развития K&R C. В 1978 году Брайан Керниган и Деннис Ритчи опубликовали первую редакцию книги «Язык программирования Си». Эта, известная среди программистов как «K&R», книга служила многие годы неформальной спецификацией языка. Версию языка Си, описанную в ней, часто называют «K&R C». Вторая редакция этой книги посвящена более позднему стандарту ANSI C, описанному ниже. K&R ввёл следующие особенности языка: ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 9 структуры (тип данных struct); длинное целое (тип данных long int); целое без знака (тип данных unsigned int); оператор += и подобные ему (старые операторы =+ вводили анализатор лексики компилятора Си в заблуждение, например, при сравнении выражений i =+ 10 и i = +10). K&R C часто считают самой главной частью языка, которую должен поддерживать компилятор Си. Многие годы даже после выхода ANSI C, он считался минимальным уровнем, которого следовало придерживаться программистам, желающим добиться от своих программ максимальной переносимости, потому что не все компиляторы тогда поддерживали ANSI C, а хороший код на K&R C был верен и для ANSI C. После публикации K&R C в язык было добавлено несколько возможностей, поддерживаемый компиляторами AT&T и некоторых других производителей: функции, не возвращающие значение (с типом void) и указатели, не имеющие типа (с типом void *); функции, возвращающие объединения и структуры; имена полей данных структур в разных пространствах имён для каждой структуры; присваивания структур; спецификатор констант (const); стандартная библиотека, реализующая большую часть функций, введённых различными производителями; перечислимый тип (enum); дробное число одинарной точности (float). ISO C. В конце 1970-х годов Си начал вытеснять Бейсик с позиции ведущего языка для программирования микрокомпьютеров. В 1980-х годах он был адаптирован для использования в IBM PC, что привело к резкому росту его популярности. В то же время Бьёрн Страуструп и другие в лабораториях Bell Labs ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 10 начали работу по добавлению в Си возможностей объектно-ориентированного программирования. Язык, который они в итоге сделали, C++, оказал большое влияние на разработку ПО, но так и не смог сравняться по популярности с Си, особенно в UNIX-подобных системах. В 1983 году Американский национальный институт стандартов (ANSI) сформировал комитет для разработки стандартной спецификации Си. По окончании этого долгого и сложного процесса в 1989 году он был наконец утверждён как «Язык программирования Си» ANSI X3.159-1989. Эту версию языка принято называть ANSI Cили C89. В 1990 году стандарт ANSI C был принят с небольшими изменениями Международной организацией по стандартизации (ISO) как ISO/IEC 9899:1990. Одной из целей этого стандарта была разработка надмножества K&R C, включающего многие особенности языка, созданные позднее. Однако комитет по стандартизации также включил в него и несколько новых возможностей, таких как прототипы функций (заимствованные из C++) и более сложный препроцессор. ANSI C сейчас поддерживают почти все существующие компиляторы. Почти весь код Си, написанный в последнее время, соответствует ANSI C. Любая программа, написанная только на стандартном Си, гарантированно будет правильно выполняться на любой платформе, имеющей соответствующую реализацию Си. Однако большинство программ написаны так, что они будут компилироваться и исполняться только на определённой платформе, потому, что: 1. они используют нестандартные библиотеки, например, для графических дисплеев; 2. они используют специфические платформо-зависимые средства; 3. они рассчитаны на определённое значение размера некоторых типов данных или на определённый способ хранения этих данных в памяти для конкретной платформы. C99. После стандартизации в ANSI спецификация языка Си оставалась относительно неизменной в течение долгого времени, в то время как C++ ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 11 продолжал развиваться (в1995 году в стандарт Си была внесена Первая нормативная поправка, но её почти никто не признавал). Однако в конце 1990-х годов стандарт подвергся пересмотру, что привело к публикации ISO 9899:1999 в 1999 году. Этот стандарт обычно называют «C99». В марте 2000 года он был принят и адаптирован ANSI. Некоторые новые особенности C99: подставляемые функции (inline); объявление локальных переменных в любом операторе программного текста (как в C++); новые типы данных, такие как long long int (для облегчения перехода от 32- к 64-битным числам), явный булевый тип данных _Bool и тип complex для представления комплексных чисел; массивы переменной длины; поддержка ограниченных указателей (restrict); именованная инициализация структур: struct { int x, y, z; } point = { .y=10, .z=20, .x=30 }; поддержка однострочных комментариев, начинающихся на //, заимствованных из C++ (многие компиляторы Си поддерживали их и ранее в качестве дополнения); несколько новых библиотечных функций, таких как snprintf; несколько новых заголовочных файлов, таких как stdint.h. Интерес к поддержке новых особенностей C99 в настоящее время смешан. В то время как GCC, компилятор Си от Sun Microsystems и некоторые другие компиляторы в настоящее время поддерживают большую часть новых особенностей C99, компиляторы компаний Borland и Microsoft не делают этого, причём, похоже, что две эти компании и не думают их добавлять. C11. 8 декабря 2011 опубликован новый стандарт для языка Си (ISO/IEC 9899:2011). Некоторые возможности нового стандарта уже поддерживаются компиляторами GCC и Clang. Основные изменения: ТЕМА 1. ОСНОВЫ АЛГОРИТМИЗАЦИИ. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ. ОПЕРАТОРЫ ВВОДА И ВЫВОДА.ТИПЫ ДАННЫХ. Сотник Евгений Александрович Sotnik_e@itstep.academy Страница 12 поддержка многопоточности; улучшенная поддержка юникода; обобщенные макросы (type-generic expressions, позволяют статичную перегрузку); анонимные структуры и объединения (упрощают обращение ко вложенным конструкциям); управление выравниванием объектов; статичные утверждения (static assertions); удаление опасной функции gets (в пользу безопасной gets_s); новый режим эксклюзивного открытия файла. |