Федеральное государственное образовательное учреждение высшего профессионального образования Нижегородский государственный педагогический университет им К. Минина Факультет математики, информатики, физики Кафедра информатики и информационных технологий КУРСОВАЯ РАБОТА на тему: Выполнила: Орлова Ксения Студентка 333 группы Руководитель: Гришина А.В. кандидат психологических наук, доцент г. Нижний Новгород 2013 г. 1 Оглавление Введение ....................................................................................................................................................... 3 Глава 1. Введение в основы программирования на языке С++ 1.1.1 1.1.2 1.2.1 1.2.2 1.2.3 1.3.1 1.3.2 1.4.1 1.4.2 1.4.3 1.4.4 1.5.1 1.5.2 1.6.1 1.6.2 1.6.3 1.7.1 1.7.2 1.7.3 1.7.4 Описание языка С++ ......................................................................................... 5 Объектно-ориентированное программирование ........................................ 5 Ввод программы .................................................................................................... 6 Компиляция программы ................................................................................... 7 Принципы построения алгоритмов на языке программирования C++ ....... 8 Объявление переменных в C++ ......................................................................... 10 Изменение и сравнение величин ................................................................... 11 Структура программы в C++ ......................................................................... 12 Пример программы на С++ ................................................................................ 15 Управляющие символы С++ .......................................................................... 18 Арифметические операции в языке программирования С++ ..................... 20 Типы данных С++ ................................................................................................ 23 Таблица ASCII ................................................................................................. 27 Оператор выбора if.......................................................................................... 28 Циклы в языке С++.............................................................................................. 30 Массивы в С++ ................................................................................................ 35 Функции языка программирования С++ .......................................................... 41 Библиотеки C++ .............................................................................................. 43 Ключевые слова языка программирования С++ ............................................. 44 Идентификаторы С++ ..................................................................................... 45 Глава 2 .Решение типовых задач в программировании на языке С++ 2.1 Решение задач части С демонстрационного варианта контрольных измерительных материалов единого государственного экзамена 2013 года по информатике и ИКТ на языке С++ .......................................................................... 46 2.2 Типология задач на массивы с программной реализацией на языке программирования С++ ............................................................................................ 53 Заключение ............................................................................................................... 62 Список использованных источников ................................................................. 63 2 Введение С++ компилируемый язык программирования общего назначения, сочетает свойства как высокоуровневых, так и низкоуровневых языков программирования. В сравнении с его предшественником, языком программирования С, наибольшее внимание уделено поддержке объектноориентированного и обобщенного программирования. Название «язык программирования С++» происходит от языка программирования С, в котором унарный оператор ++ обозначает инкремент переменной. Язык программирования широко используется для разработки программного обеспечения. А именно, создание разнообразных прикладных программ, разработка операционных систем, драйверов устройств, а также видео игр и многое другое. Существует несколько реализаций языка программирования С++ как бесплатных, так и коммерческих. Их производят проекты: GNU, Microsoft и Embarcadero(Borland). Проект GNU – проект разработки свободного программного обеспечения(СПО). Язык программирования С++ был создан в начале 1980-х годов, его создатель сотрудник фирмы Bell Laboratories –Бьёрн Страуструп. Он придумал ряд усовершенствований к языку программирования С, для собственных нужд. Т.е. изначально не планировалось создание языка программирования С++. Ранние версии языка С++, известные под названием «Си с классами», начали появляться с 1980 года. Язык С, будучи базовым языком системы UNIX, на которой работали компьютеры Bell, является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами, тем самым зародил предпосылки нового, основанного на синтаксисе С, языка программирования. Синтаксис С++ был основан на синтаксисе С, так как Бьёрн Страуструп стремился сохранить совместимость с языком С. 3 В 1983 году произошло переименование языка из «Си с классами» в «язык программирования С++». В него были добавлены новые возможности: виртуальные функции, перезагрузка функций и операторов, ссылки, константы и многое другое. Его первый коммерческий выпуск состоялся в октябре 1985 года. Предмет исследования: реализация средствами языка программирования С++, типовых алгоритмов изучение основ и тонкостей объектно-ориентированных языков и их применения для решения задач широкого круга направленности , так же объектно-ориентированный язык С ++ как приемник языка С вобрал в него лучшие качества данного языка, а благодаря развитию, обновлению и улучшению инструментов данного языка можно решить практически любые задачи стоящие перед программистом. В свете развития информационных технологий все больше требуются грамотные специалисты в области объектно-ориентированного программирования. Но даже с развитием технологий вырастить грамотного специалиста в области ООП языков довольно трудоемкий процесс и изучить самостоятельно изучить С++ представляет большую проблему . Актуальность изучения основ С++ всегда играет большую роль в обучении ООП , так как на данном этапе закладываться базовые знания по основным направлениям ООП без которых не получиться качественного понимания программирования в целом. Объект исследования: Возможности объектно-ориентированного языка программирования С ++. Цель работы заключается в исследовании возможностей языка программирования С++ при создании учебных программ. Задачами являются: 1) Изучит основы языка программирования С++ 2) Написать программы для решения задач. 4 Глава 1. Введение в основы программирования на языке С++ 1.1.1 Описание языка С++ C++ — компилируемый статически типизированный язык программирования общего назначения. Поддерживает такие парадигмы программирования как процедурное программирование, объектно-ориентированное программирование, обобщенное программирование, обеспечивает модульность, раздельную компиляцию, обработку исключений, абстракцию данных, объявление типов (классов) объектов, виртуальные функции. Стандартная библиотека включает, в том числе, общеупотребительные контейнеры и алгоритмы. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования. Являясь одним из самых популярных языков программирования, C++ широко используется для разработки программного обеспечения. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений . Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ. Например, на платформе x86 это GCC,Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder и другие. C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C#. 1.1.2Объектно-ориентированное программирование. Центральным свойством С++ является поддержка объектно-ориентированного программирования (ООП). ООП послужило стимулом к созданию С++. Объектно- ориентированное программирование вобрало в себя лучшие идеи структурного программирования и скомбинировало их с некоторыми 5 новыми концепциями. В результате возник новый и лучший способ организации программы. Программу можно организовать двумя способами, положив во главу угла либо коды (описывающие, что происходит), либо данные(над которыми выполняется действие). В основе организации объектно-ориентированных программ лежат данные, и их принцип заключается в том что, «данные управляют доступом к коду». Используя объектно-ориентированный язык, можно определить данные и процедуры, которым разрешается обрабатывать эти данные. В результате тип данного однозначно определяет, какого рода операции допустимо выполнять над этими данными. С целью поддержки принципов объектно-ориентированного программирования все объектно-ориентированные языки, включая С++, обеспечивают три характерных принципа: инкапсуляцию, полиморфизм, и наследование. Инкапсуляция – это программный механизм, который связывает данные с обрабатывающими их кодами и защищает и те, и другие от внешних воздействий и ошибочных действий. Полиморфизм обозначает средство, позволяющее посредством единого интерфейса получить доступ к целому классу действий. Наследование является процессом, который позволяет одному объекту приобретать свойства другого объекта. 1.2.1 Ввод программы. Для ввода программ понадобится текстовый редактор. На платформе Windows можно воспользоваться редактором WordPad(Блокнот) или другой программой ввода текста. Имя файла, в котором содержится исходный код, может быть каким угодно. Однако С++ - программы обычно хранятся в файлах с расширением .cpp . 6 Таким образом можно дать файлу с С++ программой любое имя, но оно должно иметь расширение .cpp . Например, назовем исходный файл Sample.cpp 1.2.2 Компиляция программы. Способ компиляции файла Sample.cpp зависит от компилятора и от используемых опций. Многие компиляторы, в частности, Microsoft Visual C++ и Borland C++ Builder, представляют два различных способа компиляции программы: компилятор командной сроки и интегрированную среду разработки (Integrated Developmen Environment, IDE).Поэтому затруднительно привести обобщенные инструкции по компиляции С++ - программы. Для Visual C++ или C++ Builder простейший способ компиляции и запуска программ заключается в использовании компиляторов командной строки, входящих в эти пакеты. Например, для компиляции Sample.cpp с помощью Visual C++ следует вывести на командной строке следующую команду: С: \ … > c1 –GX Sample.cpp Опция – GX ускоряет компиляцию. Чтобы использовать компилятор командной строки Visual C++ необходимо запустить командный файл VRS32.BAT, входящий в пакет Visual C++. (Visual Studio.NET также представляет готовую среду командной строки, которую можно активизировать, выбрав пункт Visual Studio.NET Command Prompt из списка инструментальных средств, перечисленных в меню Microsoft Visual Studio.NET, которое активизируется выбором Start │Programs [Пуск│Программы] с панели задач). Чтобы откомпилировать Sample.cpp с помощью С++ Builder, необходимо вывести следующую команду: С: \ … > bcc32 Sample.cpp В результате компиляции получим выполнимый объектный код. В среде Windows выполнимый файл будет иметь то же имя что и исходный файл, но расширение .exe. Таким образом, выполнимый вариант программы Sample.cpp будет находится в файле Sample.exe. 7 1.2.3 Принципы построения алгоритмов на языке программирования C++ Язык C++ представляет собой набор команд, которые говорят компьютеру, что необходимо сделать. Этот набор команд, обычно называется исходный код или просто код. Командами являются или «функции» или «ключевые слова». Ключевые слова (зарезервированные слова С++) являются основными строительными блоками языка. Функции являются сложными строительными блоками так как записаны в терминах более простых функций. Такая структура функций напоминает содержание книги. Содержание может показывает главы книги, каждая глава в книге может иметь своё собственное содержание, состоящее из пунктов, каждый пункт может иметь свои подпункты. Хотя C++ предоставляет очень много общих функций и зарезервированных слов, которые можно использовать, все таки возникает потребность в написании своих собственных функций. Каждая программа в C++ имеет одну функцию, её называют главная или main-функция, выполнение программы начинается именно с этой функции. Из главной функции, можно вызывать любые другие функции, неважно, являются ли они написанными, или, как упоминалось ранее, предоставляются компилятором. Чтобы получить доступ к стандартным функциям, которые поставляются с компилятором, необходимо подключить заголовочный файл #include. Пример программы: 1 2 3 4 5 6 7 8 #include <iostream> using namespace std; int main() { cout << "Моя первая программа на С++\n"; cin.get(); } Рассмотрим подробно элементы программы. #include это директива «препроцессору», которая сообщает компилятору поместить код из заголовочного файла iostream в программу перед тем как создать исполняемый 8 файл. Подключив к программе заголовочный файл, получаем доступ к множеству различных функций. Например, оператору сout требуется ioistream. Строка using namespace std; сообщает компилятору, что нужно использовать группу функций, которые являются частью стандартной библиотеки std. В том числе эта строка позволяет программе использовать операторы, такие как cout. Точка с запятой является частью синтаксиса C++. Она сообщает компилятору, что это конец команды. Следующая важная строка программы int main(). Эта строка сообщает компилятору, что есть функция с именем main, и что функция возвращает целое число типа int. Фигурные скобки { и } сигнализируют о начале { и конце } функции. Фигурные скобки используются и в других блоках кода, но обозначают всегда одно — начало и конец блока, соответственно. В C++ объект cout используется для отображения текста (произносится как «Cи аут»). Он использует символы <<, известные как «оператор сдвига», чтобы указать, что отправляется к выводу на экран. Результатом вызова функции cout << является отображение текста на экране. Последовательность \n фактически рассматривается как единый символ, который обозначает новую строку. Символ \n перемещает курсор на экране на следующую строку. Точка с запятой, добавляется в конец, после каждого оператора С++. Следующая команда cin.get(). Это еще один вызов функции, которая считывает данные из входного потока данных и ожидает нажатия клавиши ENTER. Эта команда сохраняет консольное окно от закрытия, до тех пор пока не будет нажата клавиша ENTER. Это даёт время для того, чтобы посмотреть результат выполнения программы. По достижении конца главной функции (закрывающая фигурная скобка), программа вернёт значение 0 для операционной системы. Это возвращаемое значение является важным, поскольку, проанализировав его, ОС может судить о том, успешно завершилась программа или нет. Возвращаемое значение 0 означает успех и возвращается автоматически (но только для типа данных int, другие функции, требуют вручную возвращать значение). 9 1 2 3 4 5 6 7 8 9 10 #include <iostream> using namespace std; int main() { cout<<"Моя первая программа на С++\n"; cin.get(); return 1; } 1.3.1 Объявление переменных в C++ Чтобы объявить переменную используется синтаксис тип <имя>;. Некоторые примеры объявления переменных: 1 int num; 2 char character; 3 float num_float; Допустимо объявление нескольких переменных одного и того же типа в одной строке, для этого каждая из них должна быть отделена запятой. 1 int x, y, z, d; Использование переменных 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Пример программы, демонстрирующий использование переменной: #include <iostream> using namespace std; int main() { int number; cout << "Введите число: "; cin >> number; cin.ignore(); cout << "Вы ввели: "<< number <<"\n"; cin.get(); } Ключевое слово int говорит о том, что number — целое число. Функция cin >> считывает значение в number, пользователю необходимо нажать ввод после введенного числа. cin.ignore () - функция, которая считывает символ и игнорирует его. После ввода числа, нажимаем клавишу ENTER, символ 10 которой также передаётся в поток ввода. Отбрасываем его. Имейте в виду, что переменная была объявлена целого типа, если пользователь попытается ввести десятичное число, то оно будет обрезано (то есть десятичная часть числа будет игнорироваться). При печати из переменной кавычки не используются. Отсутствие кавычек сообщает компилятору, что есть переменная, и, следовательно, о том, что программа должна проверять значение переменной для того, чтобы заменить имя переменной на её значение при выполнении. Несколько операторов сдвига в одной строке вполне приемлемо и вывод будет выполняться в том же порядке. Необходимо разделять строковые литералы (строки, заключенные в кавычки) и переменные, давая каждому свой оператор сдвига <<. Попытка поставить две переменные вместе с одним оператором сдвига << выдаст сообщение об ошибке. 1.3.2 Изменение и сравнение величин Независимо от того, какой тип данных используется, переменные не представляют особого интереса без возможности изменения их значения. Далее показаны некоторые операторы, используемые совместно с переменными: * умножение, - вычитание, + сложение, / деление, = присвоение, == равенство, > больше, < меньше. != неравно >= больше или равно <= меньше или равно 11 Операторы, которые выполняют математические функции должны быть использованы справа от знака присвоения, для того, чтобы присвоить результат переменной слева. Примеры: a = 4 * 6; // использование строчного комментария и точки с запятой, 1 a равно 24 2 a = a + 5; // равно сумме исходного значения и пяти 3 a == 5 // не присваивается пять, выполняется проверка, а равно 5 или нет Часто используются == в таких конструкциях, как условные операторы и циклы. 1 a < 5 // Проверка, a менее пяти? 2 a > 5 // Проверка, a больше пяти? 3 a == 5 // Проверка, a равно пяти? 4 a != 5 // Проверка, а неравно пяти? 5 a >= 5 // Проверка, a больше или равно пяти? 6 a <= 5 // Проверка, a меньше или равно пяти? 1.4.1 Структура программы в C++ Прежде чем приступить к написанию программ, необходимо изучить структуру программ на языке программирования С++. Структура программ это разметка рабочей области (области кода) с целью чёткого определения основных блоков программ и синтаксиса. Структура программ несколько отличается в зависимости от среды программирования. Структура программ для Microsoft Visual Studio. 1 2 3 4 5 6 // struct_program.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" //здесь подключаем все необходимые препроцессорные директивы void main() { // начало главной функции с именем main //здесь будет находится ваш программный код } В строке 1 говорится о точке входа для консольного приложения, это значит, что данную программу можно запустить через командную строку Windows указав имя программы, к примеру, такое struct_program.cpp . Строка 1 12 является однострочным комментарием, так как начинается с символов // . В строке 2 подключен заголовочный файл "stdafx.h" . Данный файл похож на контейнер, так как в нем подключены основные препроцессорные директивы (те, что подключил компилятор, при создании консольного приложения), тут же могут быть подключены и вспомогательные (подключенные программистом). include — директива препроцессора, т. е. сообщение препроцессору. Строки, начинающиеся с символа # обрабатываются препроцессором до компиляции программы. Препроцессорные директивы также можно подключать и в строках, начиная после записи #include "stdafx.h" до начала главной функции. Такой способ подключения библиотек является основным, использование "stdafx.h" — это дополнительная возможность подключения заголовочных файлов, которая есть только в Microsoft Visual Studio. С 4-й по 6ю строки объявлена функция main . Строка 4 – это заголовок функции, который состоит из типа возвращаемых данных (в данном случае void ), этой функцией, и имени функции, а также круглых скобок, в которых объявляются параметры функции. void — тип данных не имеющий значения, т.е он не может хранить никакой информации. Между фигурными скобочками размещается основной программный код, называемый телом функции. Структура программы для C++ Builder. При создании консольного приложения мастер создания проектов создает автоматически следующий код: //препроцессорная директива, автоматически подключённая мастером создания проектов 13 1 2 3 4 5 6 #include <vcl.h> int main() { return 0; } У функции поменялся тип данных, место void написано int . Это говорит о том, что по завершении работы функция вернет какое-то целочисленное значение. Целочисленное потому, что int – это тип данных для целых чисел, таких как 4, 5, 6, 456, 233 и т. д. Если тип возвращаемых данных у функции main - это int или любой другой, кроме void , следует писать строку типа этой: return <возвращаемое значение>; В строке 2 подключена библиотека vcl.h – её автоматически подключает мастер создания приложений, поэтому удалять её не следует, иначе проект не будет рабочим. Например: 1 int main(int argc, char* argv[]) 2 { 3 return 0; 4 } Такой пример структуры генерируется мастером в в Microsoft Visual Studio 2010. Данный main немного отличается. Пример структуры программы в Microsoft Visual Studio2010 с подключенными библиотеками. 1 2 3 4 #include "stdafx.h" #include <iostream> using namespace std; void main() 14 5 6 { } Имя подключаемых библиотек пишется внутри знаков больше, меньше. Заголовочные файлы и имя подключаемых библиотек - синонимы. Синтаксис подключения заголовочных файлов: #include <имя заголовочного файла> Более старые заголовочные файлы подключаются так (этот стиль подключения библиотек унаследован у языка программирования C): #include <имя заголовочного файла.h> Различие состоит в том, что после имени ставится расширение .h . Язык программирования С++ является регистрозависимым. Например: -не правильно, будет ошибка компиляции. Return0; return 0; – правильно! 1.4.2 Пример программы на С++ Рассмотрим программу на языке С++ печатающую текстовое сообщение. Программный код в этом случае будет содержать только одну функцию main() и некоторые препроцессорные директивы. Рассмотрим каждую строку программы, печатающей текстовое сообщение. 1 2 3 4 5 6 7 8 9 10 11 12 // first_program.cpp: определяет точку входа для консольного приложения. // <DEN><программа печатающая текст><15:40><23.07.2010> #include "stdafx.h" #include <iostream> using namespace std; int main(int argc, char* argv[]) { cout << "My first program!" << endl; system("pause"); return 0; 15 13 } Строка 1 начинается с символов // , которые показывают, что данная строка является комментарием. Точка входа для консольного приложения — это имя программы, которое надо ввести в консоли, чтобы запустить эту программу через консоль. Консоль - это набор устройств ввода/вывода присоединенных к компьютеру непосредственно (не через сеть): клавиатура, монитор, мышь. В C++ существует два способа записи комментариев: 1. Две косые черты // - однострочный комментарий. Такие комментарии комментируют всю строчку, не более и не менее. 2. Многострочный комментарий. Такой комментарий начинается с символов /* и заканчивается символами */ . В Microsoft Visual Studio 2010 комментарии выделяются зеленым цветом. Данная программа была написана в Microsoft Visual Studio 2010. Данная среда разработки выбрана в качестве основной, так как она является наиболее удобной средой разработки программ на языке программирования С++ под Windows. Microsoft Visual Studio активно развивается и улучшается корпорацией Microsoft. Строки 3 и 7 пустые и нужны только для того, что бы было удобно просматривать ранее написанный код. В строке 4 подключен так называемый «контейнер» — заголовочный файл "stdafx.h" . Данный файл предназначен для сокрытия некоторых подключаемых библиотечных файлов, так что файлы можно подключать в "stdafx.h" , а в файле с функцией main() просто будет подключён данный контейнер. Контейнер "stdafx.h" можно и не использовать, но удалять нельзя. Такой заголовочный файл "stdafx.h" существует только в Microsoft Visual Studio. 16 Строка 5 позволяет выводить данные на экран. Данная строка включает в программу заголовочный файл потоков ввода/вывода. Данный файл должен быть включен во все программы, где предусматривается вывод текста на экран или считывание его с клавиатуры. Всякий оператор С++ должен оканчиваться точкой с запятой ; . Директивы препроцессора #include, фигурные скобочки {}, заголовки функции int main() не оканчиваются точкой с запятой. Строка 6 определяет пространство имен std . В строке 8 прописан заголовок главной функции int main() .Строка 10 печатает текст, находящийся в кавычках, пробелы между словами не игнорируются. В дальнейшем текст между кавычками будем называть сообщением или строковым литералом. Символы << называются операцией передачи в поток. Данные символы используются вместе с оператором вывода cout . Оператор endl переносит курсор на следующую строку. Если написать так: cout << "My first program!"; тогда следующее сообщение печатается в текущей строке (см. рисунок 1). Рисунок 1 — Пример программы на С++ Так как после оператора cout стоит оператор endl , то каретка переводится на следующую строку, тогда следующее сообщение будет печататься в новой строке (см. рисунок 2). Рисунок 2 — Пример программы на С++ 17 Строка 11 необходима только для того чтобы программа не завершала свою работу сразу после вывода сообщения на экран. 1.4.3 Управляющие символы С++ Управляющие символы (escape-последовательность) — символы которые выталкиваются в поток вывода, с целью форматирования вывода или печати некоторых управляющих знаков С++. Основной список управляющих символов языка программирования C++ представлен ниже (см. Таблица 1). Таблица 1 — Управляющие символы С++ Символ Описание \r возврат каретки в начало строки \n новая строка \t горизонтальная табуляция \v вертикальная табуляция \» двойные кавычки \’ апостроф \\ обратный слеш \0 нулевой символ \? знак вопроса \a сигнал бипера (спикера) компьютера Все управляющие символы, при использовании, обрамляются двойными кавычками, если необходимо вывести какое-то сообщение, то управляющие символы можно записывать сразу в сообщении, в любом его месте. Ниже показан код программы, использующей управляющие символы. Рассмотрим программу, показывающую возможности вывода через функцию cout. 1 2 3 4 5 6 // in_out.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include <iostream> using namespace std; 18 7 8 9 10 11 12 13 14 15 int main() { cout << "\t\tcontrol characters C++"; // две табуляции и печать сообщения cout << "\rcppstudio.com\n"; // возврат каретки на начало строки и печать сообщения cout << "\'nformatting\' output with \"escape characters\""; // одинарные и двойные кавычки cout << "\a\a\a\a\a\a\a\a\a\a\a\a\a\a" <<endl; //звуковой сигнал бипера system("pause"); return 0; } В строке 9 в выходной поток поступают две табуляции \t\t, после чего печатается сообщение control characters C++. В строке 10 управляющий символ \r возвращает каретку в начало строки и печатает сообщение cppstudio.com, причём данное сообщение займет место двух табуляций из строки 9. После этого каретка будет переведена на новую строку, так как в конце сообщения строки 10 стоит символ \n. В строке 11 первое и последнее слова сообщения обрамлены одинарными и двойными кавычками соответственно. В строке 12 в выходной поток сдвигаются управляющие символы \a, эти символы запускают спикер компьютера. Результат работы программы показан ниже (см. рисунок 3). Рисунок 3 — Управляющие символы C++ Управляющие форматированного символы вывода, но C++ — наиболее это не простой основной и способ наиболее часто используемый. 1.4.4 Арифметические операции в языке программирования С++ Язык С++ содержит большое количество встроенных операций. Их роль в С ++ значительно больше, чем в других языках программирования. Рассмотрим арифметические операции в языке программирования С++. + - сложение; 19 - - вычитание; * - умножение; / - деление; % - остаток от деления. Ниже представлен программный код использующий арифметические операции в C++. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 // arithmetic.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, char* argv[]) { double sum, razn, pow, div; // объявление переменных через запятую double a1; // отдельное объявление переменной a1 double a2; // отдельное объявление переменной a2 cout << "Vvedite pervoe chislo: "; cin >> a1; cout << "Vvedite vtoroe chislo: "; cin >> a2; sum = a1 + a2; // операция сложения razn = a1 - a2; // операция вычитания pow = a1 * a2; // операция умножения div = a1 / a2; // операция деления cout << a1 << "+" << a2 << "=" << sum << endl; cout << a1 << "-" << a2 << "=" << razn << endl; cout << a1 << "*" << a2 << "=" << pow << endl; cout << a1 << "/" << a2 << "=" << div << endl; system ("pause"); return 0; } В строке 9 объявляются переменные с именами sum, razn, pow, div тип данных у которых double – вещественный тип данных (то есть эти переменные могут хранить такие числа: 0.99; 3.0; 21.6; — 43.15; 345.342). Любые переменные можно использовать только после объявления. Переменные можно также и инициализировать при объявлении, пример: 1 1double sum = 10; 20 Объявили переменную с именем sum типа double и присвоили ей значение 10. Переменные можно инициализировать и объявлять как через запятую так и по отдельности каждую (строки 10 и 11). 1 cin >> a1; // прочитать первое число в переменную а1. 1 cin >> a2; // прочитать второе число в переменную а2. Символы >> называются операцией извлечения из потока. Данные символы используются вместе с оператором ввода cin. sum = a1 + a2; // сложить два числа и записать их сумму в переменную sum 1 2 3 4 razn = a1 - a2; // вычесть из первого числа второе и записать их разность в переменную razn pow = a1 * a2; // умножить два числа и записать их произведение в переменную pow div = a1 / a2; // разделить первое число на второе и записать их частное в переменную div 20-й по 23-ю строки выводим результаты арифметических операций. Также как и в математике в языке программирования С++ с помощью скобочек формируется порядок вычислений в сложных выражениях, например: ((a+b)*c)-d Первое действие: a+b; Второе действие: умножение на с; Третье действие: вычитание d; Результат работы программы, выполняющей четыре арифметические операции +, -, *, /, над двумя введенными числами, показан ниже (см.рисунок 4). Рисунок 4 — Арифметические операции C++ 21 Рассмотрим еще одну арифметическую операцию % - остаток от деления. 1 // ost_division.cpp: определяет точку входа для консольного приложения. 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, char* argv[]) { cout << "8 % 4 = " << 8 % 4 << endl; // выполнение операции "остаток от деления" cout << "7 % 4 = " << 7 % 4 << endl; cout << "2 % 4 = " << 2 % 4 << endl; cout << "43 % 10 = " << 43 % 10 << endl; system("pause"); return 0; } Результат работы программы, выполняющей операцию «остаток от деления» (см. рисунок 5). Рисунок 5 — Арифметические операции C++ 1-й случай: четверка может два раза поместиться в восьмерке остаток будет равен 0; 2-й случай: четверка может один раз поместиться в семерке и остаток будет равен 3; 3-й случай: четверка в двойке поместиться не может по этому остаток будет равен 2; 4-й случай: десять может четыре раза поместиться в сорока трех, и остаток будет равен 3; 1.5.1 Типы данных С++ Язык программирования С++ является расширяемым языком программирования. Понятие расширяемый означает то, что кроме встроенных 22 типов данных, можно создавать свои типы данных. Поэтому в С++ существует огромное количество типов данных. Ниже представлены основные из них.(см Таблицу 2) Таблица 2. Типы данных С++. Тип байт Диапазон принимаемых значений целочисленный (логический) тип данных bool 1 0 / 255 целочисленный (символьный) тип данных char 1 0 / 255 short int 2 -32 768 unsigned short int 2 0 / 65 535 int 4 -2 147 483 648 / целочисленные типы данных / 32 767 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 int 4 0 / 4 294 967 295 4 -2 147 483 648.0 / 2 147 типы данных с плавающей точкой float 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 23 В таблице 2 представлены основные типы данных в С++. Таблица содержит три столбца. В первом указывается зарезервированное слово, которое будет определять тип данных. Во втором столбце - указывается количество байт, которое отводится под переменную с соответствующим типом данных. В третьем столбце показан диапазон допустимых значений.В таблице все типы данных расположены от меньшего к большему. Тип данных bool Первый в таблице — это тип данных bool - целочисленный тип данных, так как диапазон допустимых значений — целые числа от 0 до 255. Так как bool используется исключительно для хранения результатов логических выражений. У логического выражения может быть один из двух результатов true или false . true - если логическое выражение истинно, false если логическое выражение ложно. Но так как диапазон допустимых значений типа данных bool от 0 до 255, то необходимо было как-то сопоставить данный диапазон с определёнными в языке программирования логическими константами true и false . Таким образом, константе true эквивалентны все числа от 1 до 255 включительно, тогда как константе false эквивалентно только одно целое число — 0. Тип данных char Тип данных char - это целочисленный тип данных, который используется для представления символов. То есть, каждому символу соответствует определённое число из диапазона [0;255]. Тип данных char также ещё называют символьным типом данных, так как графическое представление символов в С++ возможно благодаря char . Для представления символов в C++ типу данных char отводится один байт, в одном байте — 8 бит, тогда возведем двойку в степень 8 и получим значение 256 — 24 количество символов, которое можно закодировать. Таким образом, используя тип данных char можно отобразить любой из 256 символов. Все закодированные символы представлены в таблице ASCII (смотри таблицу 3 ). ASCII ( от англ. American Standard Code for Information Interchange) — американский стандартный код для обмена информацией. Целочисленные типы данных Целочисленные типы данных используются для представления чисел. В таблице 2 их шесть штук: short int , unsigned short int , int , unsigned int , long int , unsigned long int . Все они имеют свой собственный размер занимаемой памяти и диапазоном принимаемых значений. В зависимости от компилятора, размер занимаемой памяти и диапазон принимаемых значений могут изменяться. В таблице 2 все диапазоны принимаемых значений и размеры занимаемой памяти взяты для компилятора Microsoft Visual Studio 2010. Причём все типы данных в таблице 2 расположены в порядке возрастания размера занимаемой памяти и диапазона принимаемых значений. Диапазон принимаемых значений, так или иначе, зависит от размера занимаемой памяти. Соответственно, чем больше размер занимаемой памяти, тем больше диапазон принимаемых значений. Также диапазон принимаемых значений меняется в случае, если тип данных объявляется с приставкой unsigned - без знака. Приставка unsigned говорит о том, что тип данных не может хранить знаковые значения, тогда и диапазон положительных значений увеличивается в два раза, например, типы данных short int и unsigned short int . Приставки целочисленных типов данных: short - приставка укорачивает тип данных, к которому применяется, путём уменьшения размера занимаемой памяти; long - приставка удлиняет тип данных, к которому применяется, путём увеличения размера занимаемой памяти; 25 unsigned (без знака) - приставка увеличивает диапазон положительных значений в два раза, при этом диапазон отрицательных значений в таком типе данных храниться не может. Следовательно, один целочисленный тип для представления целых чисел — это тип данных int . Благодаря приставкам short , long , unsigned появляется некоторое разнообразие типов данных int , различающихся размером занимаемой памяти и (или) диапазоном принимаемых значений. Типы данных с плавающей точкой В С++ существуют два типа данных с плавающей точкой: float и doudle . Типы данных с плавающей точкой предназначены для хранения чисел с плавающей точкой. Типы данных float и double могут хранить как положительные, так и отрицательные числа с плавающей точкой. У типа данных float размер занимаемой памяти в два раза меньше, чем у типа данных double , а значит и диапазон принимаемых значений тоже меньше. Если тип данных float объявить с приставкой long , то диапазон принимаемых значений станет равен диапазону принимаемых значений типа данных double . В основном, типы данных с плавающей точкой нужны для решения задач с высокой точностью вычислений, например, операции с деньгами. 1.5.2 Таблица ASCII ASCII ( Interchange) — от англ. American американский Standard стандартный Code код for для Information обмена информацией. ASCII представлена в виде таблицы печатных символов и некоторых специальных управляющих символов, каждому символу соответствует уникальный код в диапазоне от [0;255]. ASCII представляет собой кодировку для представления десятичных цифр, латиницы и кириллицы, знаков препинания и управляющих символов. Таблица 3 — Таблица символов ASCII 26 № 0 1 2 3 4 5 6 7 8 9 0 nul sox stx etx eot enq ack bel bs ht 1 nl vt ff cr so si dle dc1 dc2 dc3 2 dc4 nak syn etb can em sub esc fs gs 3 rs us space ! « # $ % & ‘ 4 ( ) * + , - . / 0 1 5 2 3 4 5 6 7 8 9 : ; 6 < = > ? @ A B C D E 7 F G H I J K L M N O 8 P Q R S T U V W X Y 9 Z [ \ ] ^ _ ‘ a b c 10 d e f g h i j k l m 11 n o p q r s t u v w 12 x y z { | } ~ del А Б 13 В Г Д Е Ж З И Й К Л 14 М Н О П Р С Т У Ф Х 15 Ц Ч Ш Щ ъ Ы Ь Э Ю Я 16 а б в г д е ж з и й 17 к л м н о п р с т у ф х 18 19 20 21 22 23 ц ч ш щ ъ ы ь э ю я 24 Ё ё Є є Ї ї Ў ў ° · 25 · № ¤ Таблица 3 представляет собой полный набор символов ASCII. В таблице ASCII, символы с нулевого по 31 включительно, являются 27 управляющими ASCII символами. Это значит, что данные символы выполняют некоторые действия, причём эти символы печатаются с сочетанием клавиши Ctrl. В таблице 3 записано обозначение управляющих ASCII символов, но не их отображение при печати. Остальные же символы с 32 по 254 не являются управляющими и имеют вид как и в таблице 3. Благодаря таблице ASCII появилась новая форма представления изображений, с помощью символов таблицы ASCII. 1.6.1 Оператор выбора if. C помощью условного предложения языка С++ if можно селективно выполнять определенный участок программы. Предложение if языка С++ действует так же, как и в любом другом языке. Оно, в частности, синтаксически идентично предложениям if языков С, Java и С #. Его простейшая форма выглядит следующим образом: If (условие) предложение; Здесь условие представляет собой выражение, результат которого воспринимается либо как истина(true), либо как ложь(false). В С++ истина соответствует ненулевому значению, а ложь - нулевому. Если условие истинно, предложение будет выполняться. Например, следующий фрагмент выводит на экран фразу 10 меньше 11, потому что 10 действительно меньше 11. If (10<11) cout << «10 меньше 11»; Рассмотрим следующее предложение: If (10<11) cout << «Эта строка не выводится»; В этом случае, поскольку 10 не больше 11, предложение cout выполняться не будет. Разумеется, операнды внутри предложения if не обязательно должны быть константами. В качестве операндов можно использовать и переменные. В С++ определен полный набор операндов, которые используются в условных выражениях. Эти операнды перечислены в таблице 4: Таблица 4 — Операнды 28 Оператор Значение < Меньше чем <= Меньше чем или равно > Больше чем >= Больше чем или равно == Равно != Не равно Проверка на равенство требует использования двойного знака равенства. Рассмотрим пример программы, иллюстрирующей использование предложения if: // Демонстрация использования #include <iostream> using namespace std; int main () { int a, b, c; a=2; b = 3; if (a < b) cout " а меньше чем b\n "; Предложение if // // это предложение ничего не выведет на экран if(a== b) cout « " это вы не увидите \n "; cout<<" \n "; c = a - b; // c содержит -1 cout << "С СОДЕРЖИТ -l\n" ; if (c >= 0) cout « " с неотрицательно\n " ; if (c < 0) cout « "c отрицательно \n" ; cout << " \n" ; 29 c = b-a; //c теперь содержит 1 cout << "С СОДЕРЖИТ l\n" ; if (c >= 0) cout << " с неотрицательно\n " ; if (c < 0) cout << "c отрицательно \n" ; return 0 ; Ниже приведен пример этой программы: а меньше чем b с содержит -1 с отрицательно с содержит 1 с неотрицательно 1.6.2 Циклы в языке С++ ЦИКЛ for С помощью конструкции цикла можно повторно выполнять некоторую последовательность кодов. В С++ предусмотрен богатый ассортимент конструкций циклов. Ниже приведена простейшая форма цикла for: for (инициализация; условие; приращение) предложение; В этой конструкции инициализация устанавливает начальное значение управляющей переменной, условие является выражением, которое анализируется в каждом шаге цикла, приращение представляет собой выражение, определяющее, как будет изменяться значение управляющей переменной в каждом шаге цикла. Приводимая ниже программа демонстрирует простой цикл for. Она выводит на экран числа от 1 до 100. // Программа, иллюстрирующая цикл for. 30 #include <iostream> using namespace std; int main () { int count; for(count=l; count <= 100; cout=count+1) <- Это цикл for count<<count<<" " ; return 0; В этой программе переменная count инициализируется числом 1. В каждом шаге цикла проверяется условие count <= 100 Если результат истинен, значение count выводится на экран, после чего count увеличивается на 1. Когда count достигает значения, большего 100, условие становится ложным и цикл прекращает свое выполнение. Цикл while Оператор цикла while или цикл while - цикл, повторяющий одно и то же действие, пока условие продолжения цикла while остаётся истинным. 1 2 3 4 5 6 // форма записи цикла while while (/*условие продолжения цикла while*/) { /*блок операторов*/; /*управление условием*/; } Условие продолжения цикла должно быть истинно true, как только условие стало ложным, выполняется выход из цикла. Также как и в условных операторах выбора, фигурные скобочки могут опускаться в том случае, если тело цикла — это один оператор. Но, как правило, в цикле выполняется несколько операторов, так как кроме выполнения полезного действия необходимо делать условие цикла while ложным, иначе цикл будет бесконечным, а это, в свою очередь, приведет к зависанию программы. По циклу while разработаем игру «Отгадай число». На псевдокоде это будет так: 1 // Пока загаданное число не угадано, продолжать угадывать его 31 Загадывать число будет компьютер, а мы — отгадывать. Используя генератор случайных чисел, компьютер загадает число от 1 до 10, включительно, пока мы не отгадаем число выход из цикла не произойдет. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 // ygadai.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include <iostream> #include <ctime> using namespace std; int main(int argc, char* argv[]) { srand( time( 0 ) ); int unknown_number = 1 + rand() % 10; // загадываемое число int enter_number; // переменная для хранения введённого числа cout << "Enter unknown number [1:10] : "; // начинаем отгадывать cin >> enter_number; while ( enter_number != unknown_number ) { cout << "Enter unknown number [1:10] : "; cin >> enter_number; // продолжаем отгадывать } cout << "You win!!!\n"; system("pause"); return 0; } Чтобы войти в цикл необходимо инициализировать переменную enter_number, тогда цикл while начнёт корректную проверку условия, вот для этого перед циклом while запрашиваем пользователя ввести число. После того как пользователь ввёл число, начинает работать цикл while, выйти из которого получится только в случае угадывания числа. Результат работы программы (см. Рисунок 6 ). Рисунок 6 — Цикл while в C++ Цикл do while 32 Цикл do while отличается от цикла while тем, что в do while сначала выполняется тело цикла, а затем проверяется условие продолжения цикла. Изза такой особенности do while называют циклом с постусловием. Таким образом, если условие do while заведомо ложное, то хотя бы один раз блок операторов в теле цикла do while выполнится. В итоге do while отличается от цикла while структурой. Если в while сначала выполняется проверка условия продолжения цикла, и если условие истинно, то только тогда выполняется тело цикла. Цикл do while работает с точностью да наоборот, сначала выполняется тело цикла, а потом проверяется условие, вот почему тело цикла do while , хотя бы раз, выполнится. 1 // форма записи оператора цикла do while: 2 do // начало цикла do while 3 { 4 /*блок операторов*/; 5 } 6 while (/*условие выполнения цикла*/); // конец цикла do while В начале цикла do while пишется зарезервированное слово do , после идут фигурные скобочки, которые можно опускать, в случае использования одного оператора в теле цикла do while . После закрывающей фигурной скобочки, обозначающей конец тела цикла do while , стоит условие цикла do while , после которого обязательно нужно ставить точку с запятой. Вспомним программу «Угадай число», из раздела: Цикл while . В этой задаче правильней было бы использовать цикл do while , код уменьшится на две строки. 1 // ygadai2.cpp: определяет точку входа для консольного приложения. 33 2 3 #include "stdafx.h" 4 #include <iostream> 5 #include <ctime> 6 using namespace std; 7 8 int main(int argc, char* argv[]) 9 { 10 srand( time( 0 ) ); 11 int unknown_number = 1 + rand() % 10; // загадываемое число 12 int enter_number; // переменная для хранения введённого числа 13 do 14 { 15 cout << "Enter unknown number [1:10] : "; 16 cin >> enter_number; // отгадываем 17 } while ( enter_number != unknown_number ); 18 cout << "You win!!!\n"; 19 system("pause"); 20 return 0; 21 } Так как while - цикл с предусловием, то необходимо было сначала считать число перед началом while , а потом уже выполнять проверку продолжения цикла while . В случае с do while не нужно считывать число до начала цикла, так как проверка условия в do while идет в конце цикла. В зависимости от ситуации, используется цикл while или do while , они друг друга дополняют. 1.6.3 Массивы в С++ 34 Массив это структура данных, представленная в виде группы ячеек одного типа, объединенных под одним единым именем. Массивы используются для обработки большого количества однотипных данных. Имя массива является указателем. Отдельная ячейка данных массива называется элементом массива. Элементами массива могут быть данные любого типа. Массивы могут иметь как одно, так и более одного измерений. В зависимости от количества измерений массивы делятся на одномерные массивы, двумерные массивы, трёхмерные массивы и так далее до n-мерного массива. Чаще всего в программировании используются одномерные и двумерные массивы. Одномерные массивы в С++ Одномерный массив — массив, с одним параметром, характеризующим количество элементов одномерного массива. Фактически одномерный массив — это массив, у которого может быть только одна строка, и n-е количество столбцов. Столбцы в одномерном массиве — это элементы массива. На рисунке 6 показана структура целочисленного одномерного массива a. Размер этого массива — 16 ячеек. Рисунок 6 — Массивы в С++ Максимальный индекс одномерного массива a равен 15, но размер массива 16 ячеек, потому что нумерация ячеек массива всегда начинается с 0. Индекс ячейки – это целое неотрицательное число, по которому можно обращаться к каждой ячейке массива и выполнять какие-либо действия над ней (ячейкой). 1 2 //синтаксис объявления одномерного массива в С++: 3 /*тип данных*/ /*имя одномерного массива*/[/*размерность одномерного массива*/]; 4 35 //пример объявления одномерного массива, изображенного на рисунке 1: int a[16]; где, int - целочисленный тип данных; а - имя одномерного массива; 16 — размер одномерного массива, 16 ячеек. Всегда сразу после имени массива идут квадратные скобочки, в которых задаётся размер одномерного массива, этим массив и отличается от всех остальных переменных. 1 //ещё один способ объявления одномерных массивов 2 int mas[10], a[16]; Объявлены два одномерных массива mas и а размерами 10 и 16 соответственно. Причём в таком способе объявления все массивы будут иметь одинаковый тип данных, в нашем случае - int . 1 // массивы могут быть инициализированы при объявлении: 2 int a[16] = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // инициализация одномерного массива Инициализация одномерного массива выполняется в фигурных скобках после знака равно, каждый элемент массива отделяется от предыдущего запятой. 1 int a[]={5,-12,-12,9,10,0,-9,-12,-1,23,65,64,11,43,39,-15}; // инициализации массива без определения его размера. В данном случае компилятор сам определит размер одномерного массива. Размер массива можно не указывать только при его инициализации, при обычном объявлении массива обязательно нужно указывать размер массива. Разработаем простую программу на обработку одномерного массива. 1 // array.cpp: определяет точку входа для консольного приложения. 2 36 3 #include "stdafx.h" 4 #include <iostream> 5 using namespace std; 6 7 int main(int argc, char* argv[]) 8 { 9 cout << "obrabotka massiva" << endl; 10 int array1[16] = { 5, -12, -12, 9, 10, 0, -9, 11 -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // объявление и инициализация одномерного массива 12 cout << "indeks" << "\t\t" << "element massiva" << endl; // печать заголовков 13 for (int counter = 0; counter < 16; counter++) //начало цикла 14 { 15 //вывод на экран индекса ячейки массива, а затем содержимого этой ячейки, в нашем случае - это целое число 16 cout << "array1[" << counter << "]" << "\t\t" << array1[counter] << endl; 17 } 18 system("pause"); 19 return 0; 20 } В строках 10 — 11 объявлен и проинициализирован целочисленный одномерный массив с именем array1 , размер которого равен 16 ячейкам, то есть такой массив может хранить 16 чисел. Любая обработка массива осуществима только совместно с циклами. Переменную-счётчик counter используем для обращения к элементам одномерного массива array1 . В 37 условии продолжения цикла for стоит строгий знак неравенства, так как шестнадцатого индекса в одномерном массиве array1 нет. А так как нумерация ячеек начинается с нуля, то элементов в массиве 16. В теле цикла for оператор cout печатает элементы одномерного массива(см.Рисунок7). Рисунок 7 — Массивы в С++ Двумерные массивы в С++ В таблице есть две характеристики: количество строк и количество столбцов. Также и в двумерном массиве, кроме количества элементов массива, есть такие характеристики как, количество строк и количество столбцов двумерного массива. То есть, визуально, двумерный массив — это обычная таблица, со строками и столбцами. Фактически двумерный массив — это одномерный массив одномерных массивов. Структура двумерного массива, с именем a , размером m на n показана ниже (см. Рисунок 8). Рисунок 8 — Массивы в С++ 38 где, m - количество количество n - строк двумерного столбцов двумерного массива; массива; m * n - количество элементов массива. // синтаксис объявления двумерного массива 1 /*тип данных*/ /*имя массива*/[/*количество строк*/][/*количество 2 столбцов*/]; В объявлении двумерного массива, также как и в объявлении одномерного массива, первым делом, нужно указать: тип данных; имя массива. После чего, в первых квадратных скобочках указывается количество строк двумерного массива, во вторых квадратных скобочках — количество столбцов двумерного массива. Двумерный массив визуально отличается от одномерного второй парой квадратных скобочек. Рассмотрим пример объявления двумерного массива. Допустим необходимо объявить двумерный массив, с количеством элементов, равным 15. В таком случае двумерный массив может иметь три строки и пять столбцов или пять строк и три столбца. 1 // пример объявление двумерного массива: 2 int a[5][3]; a - имя целочисленного массива число в первых квадратных скобках указывает количество строк двумерного массива, в данном случае их 5; число во вторых квадратных скобках указывает количество столбцов двумерного массива, в данном случае их 3. 1 // инициализация двумерного массива: 2 int a[5][3] = { {4, 7, 8}, {9, 66, -1}, {5, -5, 0}, {3, -3, 30}, {1, 1, 1} }; 39 В данном массиве 5 строк, 3 столбца. После знака присвоить ставятся общие фигурные скобочки, внутри которых ставится столько пар фигурных скобочек, сколько должно быть строк в двумерном массиве, причём эти скобочки разделяются запятыми. В каждой паре фигурных скобочек записывать через запятую элементы двумерного массива. Во всех фигурных скобочках количество элементов должно совпадать. Так как в массиве пять строк, то и внутренних пар скобочек тоже пять. Во внутренних скобочках записаны по три элемента, так как количество столбцов — три. Графически наш массив будет выглядеть, как двумерная таблица (см. Рисунок 9). Рисунок 9 — Массивы в С++ В каждой ячейке двумерного массива a показано значение, в нижнем правом углу показан адрес данной ячейки. Адресом ячейки двумерного массива является имя массива, номер строки и номер столбца. 1.7.1 Функции языка программирования С++ С++ - программа конструируется из строительных блоков, называемых функциями. Функцией называется подпрограмма, содержащая одно или несколько предложений С++. У каждой функции есть имя, оно используется для вызова функции. Для того чтобы вызвать функцию, необходимо указать в исходном тексте программы ее имя, сопровождаемой парой круглых скобок. Предположим, что некоторая функция названа MyFunc. Для того чтобы вызвать MyFunc, необходимо написать: MyFunc ( ); 40 Вызов функции приводит к тому, что управление передается этой функции, в результате чего выполняется код, содержащийся внутри функции. После того, как выполнятся все предложения, составляющие функцию, управление возвращается назад в вызывающую программу. Таким образом, функция выполняет некоторую задачу, в которой возникла необходимость по ходу программы. Некоторые функции требуют указания одного или нескольких аргументов, которые передаются функции при ее вызове. Аргумент представляет собой значение, передаваемое функции. Перечень аргументов указывается внутри круглых скобок в предложении вызова функции. Если, например, функция MyFunc ( ) требует в качестве аргумента целое число, то приведенная ниже строка вызовет MyFunc ( ) с передачей ей в качестве аргумента числа 2: MyFunc ( 2); Если аргументов два или больше, они разделяются запятыми. Не всем функциям требуются аргументы. Если аргументы не нужны, при вызове функции скобки остаются пустыми. Функция может возвращать значение в вызывающий ее код. Но не все функции возвращают значение, хотя многие это делают. Значение, возвращаемое функцией, может быть присвоено переменной в вызывающем коде путем помещения вызова функции с правой стороны предложения присваивания. Если, например, функция MyFunc ( )возвращает значение, ее можно вызвать таким образом: х = MyFunc (2); Это предложение выполняется следующим образом. Прежде всего вызывается MyFunc ( ).Когда осуществляется возврат из функции, возвращаемое ею значение присваивается переменной х. Допустимо также использовать вызов функции в выражении. Например, х = MyFunc (2)+10; 41 В этом случае возвращаемое функцией MyFunc ( ) значение прибавляется к 10, и результат присваивается переменной х. Всегда, когда имя функции встречается в предложении, она вызывается автоматически, что дает возможность получить возвращаемое ею значение. Аргументом называется значение, передаваемое в функцию. Возвращаемое значение — это данное, которое передается назад в вызывающий код. Ниже приведена короткая программа, демонстрирующая вызов функции. Она использует одну из встроенных в С++ функций, которая называется аbs ( ), чтобы вывести на экран абсолютное значение числа. Функция аbs ( ) принимает один аргумент, преобразует его в абсолютное значение и возвращает результат. // Использование функции аbs( ). #include <iostream> #include <cstdlib> using namespace std; int main ( ) { int result; result = аbs( -10) <= Здесь вызывается функция аbs( )и выполняется присваивание возвращаемого ею значения переменной result. cout << result; return 0; } В приведенной программе значение -10 передается функции аbs( ) в качестве аргумента. Функция аbs( ) получает аргумент, с которым она вызывается, и возвращает его абсолютное значение, которое В данном случае составляет 10. Это значение присваивается переменной resut. В результате программа выводит на экран "10". Во всех случаях, если используются библиотечные функции, необходимо включать заголовок, в котором она описана. Включение в программу заголовка <cstdlib> требуется для функции аbs( ). В программах используются функции двух видов. Один вид функций — это те функции, текст которых пишется программистом; примером такой 42 функции является main().Существующие С++- программы всегда содержат большое число функций, написанных пользователем. Функции второго вида предоставляются компилятором. Примером такой функции является аbs( ), использованная в предыдущей программе. После имени функции ставятся круглые скобки. Если, например, функция имеет имя getval, то при использовании этого имени необходимо писать getval( ). Такой прием помогает отличить имена переменных от имен функций. 1.7.2 Библиотеки C++ Функция аbs( ) поставляется вместе с компилятором С++. Эта функция, как и много других, хранится в стандартной библиотеке. В С++ определен большой набор функций, содержащихся в стандартной библиотеке функций. Эти функции выполняют различные задачи общего назначения, включая операции ввода-вывода, математические вычисления и обработку строк. Если использовать библиотечную функцию, компилятор С++ автоматически связывает объектный код этой функции с объектным кодом вашей программы. Стандартная библиотека С++ очень велика; она содержит большое количество функций, которые потребуются при написании программ. Библиотечные функции действуют как строительные блоки, из которых собирается нужная конструкция. В дополнение к стандартной библиотеке функций, каждый компилятор С++ содержит библиотеку классов, являющуюся объектно-ориентированной библиотекой. 1.7.3 Ключевые слова языка программирования С++ К настоящему времени в стандартном С++ определены 63 ключевых слова; все они приведены в таблице 5. Вместе с формальным синтаксисом С++ они образуют язык программирования С++. Язык С++ различает прописные и строчные буквы, при этом он требует, чтобы все ключевые слова вводились строчным буквами (на нижнем регистре клавиатуры). 43 Таблица 5. Ключевые слова С++ asm auto bool break case catch char class const const_cast continue default delete do double dynamic_cast else enum explicit export extern false float for friend goto if inline int long mutable namespace new operator private protected public register reinterpret_cast return short signed sizeof static static_cast struct switch template this throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while 1.7.4 Идентификаторы С++. Идентификаторами называются имена, присваиваемые переменным, константам, типам данных и функциям, используемым в программах. После описания идентификатора можно ссылаться на обозначаемую им сущность в любом месте программы. Идентификатор представляет собой последовательность символов произвольной длины, содержащую буквы, цифры и символы подчеркивания, но начинающуюся обязательно с буквы или символа подчеркивания. Компилятор распознает только первые 31 символ. Язык C++ чувствителен к регистру букв. Компилятор распознает прописные и строчные буквы как разные символы. Так, переменные NAME_LENGTH и Name_Length будут рассматриваться как два разных идентификатора, представляющих различные ячейки памяти. Использование как прописных, так и строчных букв 44 в идентификаторах позволяет сделать программный код более читабельным. Совпадение имени идентификатора с зарезервированным именем вызовет конфликт в работе программы. Два символа подчеркивания (_) в начале имени идентификатора применяются в стандартных библиотеках языка C++. Ниже показаны примеры идентификаторов: i szfirst_name Ifrequency imax iMax iMAX NULL EOF Недопустимо начинать идентификатор с цифры. Так, 980ОК не может служить идентификатором. Хороший стиль программирования требует, чтобы идентификаторы отражали существо обозначаемых ими объектов. 45 Глава 2 .Решение типовых задач в программировании на языке С++ 2.1 Решение задач части С демонстрационного варианта контрольных измерительных материалов единого государственного экзамена 2013 года по информатике и ИКТ на языке С++ Часть С насчитывает 4 задания, один из которых повышенной сложности, а три – высокого уровня сложности. Задания требуют развернутого ответа в свободной форме. Они направлены на проверку знаний учащихся в области « Технологии программирования». Задания части С проверяют умения выпускников записывать и анализировать алгоритмы или писать программы, которые предусмотрены требованиям к обязательному уровню подготовки по информатике. С1 предлагает прочесть фрагмент программы на одном из языков программирования и исправить пропущенные ошибки. В С2 необходимо написать короткую несложную программу в 10-15 строк. С3 проверяет умения выпускника строить дерево игры по предложенному алгоритму и аргументировать выигрышную стратегию. С4 проверяет умения создавать собственную программу в 30-50 строк и относится к разряду олимпиадных задач. Задания в ЕГЭ по информатике предлагаются на четырех языках программирования: Бейсик, Паскаль, Си++, алгоритмический. 46 Рассмотрим решения задач части С демонстрационного варианта контрольных измерительных материалов единого государственного экзамена 2013 года по информатике и ИКТ на языке С++ Решение: #include "stdafx.h"//стандартная библиотека #include <iostream>//- подключаем библиотеки:iostream-для потокового вводавывода,conio.h - для getch()(чтобы программа не закрывалась сразу же #include "conio.h" #include "time.h" //-библиотека time.h для рандомной функции srand using namespace std; //-стандартное пространство имен для использования cout и cin void main(void) //главная функция 47 { int x; //переменная х типа инт cout« "Enter x" «endl;//вывод сообщения «enter x» cin » x; //ввод х if(x>=-3) // соблюдение условий if(x<=9) if(x>1) cout « "ne prenadlegit" « x « endl; //вывод принадлежности или нет else //иначе printf("prenadlegit"); system("pause"); //задержка экрана } 48 Решение: #include "stdafx.h" #include <iostream> //-подключаем библиотеки:iostream-для потокового вводавывода,conio.h - для getch()(чтобы программа не закрывалась сразу же #include "conio.h" #include "time.h" #define N 30 //принятие 30 как N using namespace std; //стандартное пространство имен 49 #include <iostream> #include <string> using std::cout;//можно заменить using namespace std; using std::cin; using std::endl; int main() { int p=1;//переменная р инициализируеться со значением 1 int arr[5];//одномерный массив размером 5 // Заполняем массив с клавиатуры for (int i = 0; i < 5; i++) {//цикл который предлагает введи элементы //и считывает их cout « "[" « i + 1 « "]" « ": "; cin » arr[i];} for (int i = 0; i < 5; i++) if (arr[i]%2!=0 && arr[i]%3==0) //отбор элементов массива нечетных //делящихся на 3 p*=arr[i];//умножение элементов массива на переменную р cout« p«endl;//вывод результирующей переменной Р system ("pause");//задержка экрана } 50 Решение: #include"stdafx.h" #include<locale> #include <iostream> //-подключаем библиотеки:iostream-для потокового вводавывода,conio.h - для getch()(чтобы программа не закрывалась сразу же #include"conio.h" #include"time.h" #include "string.h"//-библиотека time.h для рандомной функции srand using namespace std;//стандартное простраство имен int main(){//главная функция const int N=3 ;//переменные типа инт const int K=10; int masN[N]={0};//одномерные массивы с нулями int masK[K]={0}; char c [256] ;//переменные типа чар char c1 [256]; int time1,time2;//переменные типа инт char name [256]=" "; //переменная char for (int i=0;i<N;i++)//ввод имени пользователя { 51 cout«"vvedite im polz"«endl; while (c[256]=' ') {cin»c; strcpy(name,c);//преобразование типов } cin»c»c1; time1=60*((int) c )- ((int) '0')*10 +((int )c1)- ((int) '0'); cin»c; cout«" : "; cin»c1; time1=time1+((int) c )- ((int) '0')*10 +((int )c1)- ((int) '0'); cin»c; cout«" : "; cin»c1; time2=60*((int) c )- ((int) '0')*10 +((int )c1)- ((int) '0'); cin»c; cout«" : "; cin»c1; time2=time2+((int) c )- ((int) '0')*10 +((int )c1)- ((int) '0'); for (int j=0;j<K;j++) { if (masK[j]<=time1)//условие при котором печатается имя { masK[j]=time2; cout«name« ' '« j;//вывод данных по клиенту } else break;//остановка если условие не выполняется } } } 52 2.2 Типология задач на массивы с программной реализацией на языке программирования С++. Несколько переменных одного типа можно объединить под одним именем. Такая переменная будет представлять собой массив. Массив – это тип данных, представляющий собой ограниченный набор упорядоченных элементов одного и того же типа, имеющих одно и то же имя. Элементом массива является переменная. Количество элементов массива определено заранее при объявлении массива. Все элементы упорядочены – каждому присвоен порядковый номер, который называется индексом. Доступ к конкретному элементу массива осуществляется с помощью индекса. В языке C++ все массивы располагаются в отдельной непрерывной области памяти. Первый элемент массива имеет наименьший адрес, а последний – наибольший. Элементы массива могут быть как простыми переменными, так и составными. Элемент массива может иметь несколько индексов. Количество индексов переменной определяет размерность массива. Размерность массивов в языке C++ не ограничена, но чаще используются одномерные и двумерные массивы. Рассмотрим задачи на массивы с программной реализацией на языке программирования С++. 1.Добавление элемента в массив. // Добавление элемента в массив // #include "stdafx.h"//подключение библиотек для ввода и вывода #include <iostream> #include <cstdlib> #include <conio.h> using namespace std;//используем стандартное пространство имён void Show (int *arr, int Size)//функция вывода 53 { cout<<"New mas: ";//вывод сообщения New mas for (int i=0; i<Size; i++)//цикл ввода массива { cout<<arr[i]<<" "; } getch();//задержка экрана } void main () { int size=0;//переменная типа инт равная 0 int *mas=new int[size]; //создание нового одномерного массива if (size==0)//если size равно нулю, то ввод нулевого элемента массива и прибавление к size +1 { cout<<"Mas empty\n";//вывод что массив пуст cout<<"Enter first element of mas: ";//запрос на ввод первого элемента size++;//увеличение размера массива на 1 cin>>mas[0];ввод нулевого элемента массива } int *temp=new int[size+1];//создание временного массива с размером больше на 1 cout<<"Enter element: ";//предложение ввести элемент cin>>temp[0];//ввод нулевого элемента for (int i=0; i<size; i++) { temp[i+1]=mas[i];//присвоение значений массива предыдущего со сдвигом на +1 } size++;//увелечение сайз на 1 for (int i=0; i<size; i++) { mas[i]=temp[i];//присвоение массиву mas значений массива temp } Show (mas, size); //вызов функции Show и передача ему массива mas и переменной size delete [] temp;//удаление временного массива delete [] mas; //удаоление самого массива 54 } 2.Сумма элементов массива. // сумма элементов.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h"//подключаем библиотеки #include <iostream> using namespace std; //используем стандартное пространство имен int main()//главная функция { const int arraySize = 10; // указывает размер массива int A[arraySize]; // объявление массива cout<<"vvedite 10 elementov massiva. \n";//запрос на ввод for (int j=0; j<arraySize; j++)//цикл ввода массива { cout<<"A["<<j<<"]= ";//вывод запроса на ввод cin>>A[j]; //ввод элементов массива } int Sum = 0; // обьявление сум с значением 0 for (int j=0; j<arraySize; j++) { if(A[j]!=A[9])//условие прибавления { Sum += A[j];//прибавление к сумм элемента массива а{j} } } cout << "summa znachenii = " << Sum << '\n';//вывод результата system("pause");//задержка экрана } 55 3. Вывод четных элементов массива. // выводит четные элементы массива // #include "stdafx.h"//подключение библиотек #include <iostream> using namespace std;//использование стандартного пространства имен int main()//главная функция { int N, i;//переменный int cout<<"kol-vo elemebtov massiva "<<endl;//запрос на ввод кол -ва массивов cin >> N;//ввод кол -во элемента массива int *arr = new int[N];//создание нового массива одномерного cout<<"vvedite elements massiva"<<endl; for(int i = 0; i<N; i++) cin >> arr[i];//введение элементов массива циклом For for(int i = 0; i<N; i++) if(arr[i]%2==0) cout<<endl << arr[i];//вывод четных элементов массива delete[] arr;//освобождение памяти и удаление массива из памяти system("pause");//задержка экрана return 0;//возврат 0 } 56 4.Удаление из массива максимального элемента, если все элементы разные. // m,m.cpp: определяет точку входа для консольного приложения. //Задача. Удалить из массива максимальный элемент, если все элементы разные. #include "stdafx.h"//подключаем библиотеки #include <iostream> #include <cstdlib> #include <ctime> using namespace std; //используем стандартное пространство имен int main() { cout<<"massiv"<<endl;//вывод сообщения массив const size_t size = 10;//постоянная переменная со значением 10 int arr[size]; //одномерный массив размера size srand(unsigned(time(0))); //вывоз рандомизатора for (size_t n = 0; n < size; n++) arr[n] = rand(); //заполнение массива случайными числами// for (size_t n = 0; n < size; n++) cout<< arr[n] << ' '; //вывод элементов массива cout << endl; //перенос строки int max = arr[0], index = 0; //переменные типа int for (size_t n = 1; n < size; n++) if (max < arr[n]) { //цикл поиска мах элемента max = arr[n]; index = n; } if (index == size - 1) arr[index] = 0; else { for (size_t n = index; n < size - 1; n++) arr[n] = arr[n + 1]; 57 arr[size - 1] = 0; cout<<"polich"<<endl; } for (size_t n = 0; n < size - 1; n++) cout << arr[n] << ' '; cin.get(); return 0; } 5. Нахождение суммы элементов матрицы. // Найти сумму элементов ccs матрицы // #include "stdafx.h" #include <iostream> //-подключаем библиотеки:iostream-для потокового ввода-вывода,conio.h - для getch()(чтобы программа не закрывалась сразу же #include "conio.h" #include "time.h" //-библиотека time.h для рандомной функции srand using namespace std; //-стандартное пространство имен для использование cout и cin void tmt(int **matr,int n,int m) //-функция упаковки исходной матрицы в три матрицы NA,IA,JA { const int a=100; //-размеры для наших матрицы const int b=100; const int c=100; int NA[a]={0}; //-инициализируем их нулями int JA[b]={0}; int IA[c]={0}; int sum =0; //-sum -сумма значащих элементов cout<<"Number Matrix NA " ; 58 for (int i=0;i<n;i++) { for (int j=0;j<m;j++) //-заполняем матрицу NA с помощью двух счетчиков и условия if(matr[i][j]!=0) { if(matr[i][j]!=0) { NA[i]=matr[i][j]; cout<<NA[i]<<' '; sum+=NA[i]; } } } cout<<endl<<endl<<" Col matrix JA "; for (int i=0;i<n;i++) { for (int j=0;j<m;j++) if(matr[i][j]!=0) //-заполняем матрицу, которая включает в себя индексы столбцов ненулевых элементов { JA[i]=j+1; cout<<JA[i]<<' '; } } cout<<endl<<endl<<"Index matrix IA "; for (int i=0;i<n;i++) { for (int j=0;j<m;j++) if(matr[i][j]!=0) { IA[i]=j+1; cout<<IA[i]<<' '; //-матрица первых ненулевых элементов строки break -выход из счетчика-как только первый ненулевой элемент найден ,переходим к следующей break; } } cout<<"\n Summa elementov ="<<sum<<endl; } 59 int main(){ srand(unsigned(time(0))); //-для рандомных чисел стандартная функция int n=0; int m=0; int xnull=0; //-счетчики нулевых и ненулевых элементов соотвественно int xnum=0; cout<<"vvedite razmer massiva"<<endl; //-задаем n-кол-во строк,m-число столбцов cin>>n; cin>>m; int **Mas1= new int*[n]; //-создаем двумерный массив с помощью динамического выделения памяти, сначала для строк потом для столбцов for(int i=0; i<n; ++i) Mas1[i] = new int[m]; for (int i=0;i<n;i++) { for(int j=0; j<m; j++) { Mas1[i][j]=(rand()%2); //-заполняем массив нулями и единицами изначально if(Mas1[i][j]==0) xnull++; //-далее включаем в работу счетчики else xnum++; if(xnull<=xnum/2) //-сравниваем их для проверки на "Разреженность" матрицы { if ((Mas1[i][j]!=0)&&(i/2==0)&&(j/2==0)) //заполнение в случае нехватки нулей в матрице Mas1[i][j]=0; else Mas1[i][j]=(rand()%100); //-остальное забиваем числами до 100 } } } for(int i=0; i<n; i++) //-выводим исходную матрицу на экран { for(int j=0; j<m; j++) { cout<<Mas1[i][j]<<' '; } cout<<endl; } 60 tmt(Mas1,n,m); //-вызываем функцию упаковки в контейнеры и подсчета суммы в качестве аргументов кидаем исходную матрицу и ее размер for (int i = 0; i < n; i++) //-! ВАЖНО освободить память от матрицы исходной delete[] Mas1[i]; delete[] Mas1; getch(); //-предотвращаем моментальное закрытие программы ... system("pause") return 0; } 61 Заключение. В моей курсовой работе был поставлен вопрос : изучить основы программирования языка С++ и реализовать задачи на данном языке. В заключение работы можно сделать следующие выводы: В настоящее время язык программирования С++ является одним из основных в практическом программировании. Достоинства языка С++ это прежде всего простота и лаконичность. Язык С++ легко учится. Структура данных в С++ позволяет обрабатывать переменные такие как целочисленные, строковые, с плавающей запятой и массивы. С помощью данного языка можно решать широкий спектр задач, такие как написание прикладных программ, пользовательских приложений разработку игр и программ узкого назначения. Программирование на С++ в настоящий момент становиться все более популярным и привлекает множество последователей. На С++ пишутся игры , приложения , прикладные программы , интерпретаторы и CAD системы. А так же выполняется широкий спектр задач вычислительной математики, методов оптимизации и теорий цепей и сетей. 62 Список использованных источников 1.Азаров А. "Программирование на C/C++. Часть 1". 2.Скляров В. "Программирование на языках С и С++". 3.Шилдт Герберт. С++ - для начинающих.Серия «Шаг за шагом» -М.:ЭКОМ Паблишерз, 2011.640 с.:ил. 4. Герберт Шилдт - С++. Руководство для начинающих 5. wikipedia. ru 6. http://cppstudio.com 7. http://www.softsvet.ru 63 2 слайд. С++ компилируемый язык программирования общего назначения, сочетает свойства как высокоуровневых, так и низкоуровневых языков программирования. В сравнении с его предшественником, языком программирования С, наибольшее внимание уделено поддержке объектно-ориентированного и обобщенного программирования. Название «язык программирования С++» происходит от языка программирования С, в котором унарный оператор ++ обозначает инкремент переменной. Язык программирования широко используется для разработки программного обеспечения. А именно, создание разнообразных прикладных программ, разработка операционных систем, драйверов устройств, а также видео игр и многое другое. Язык программирования С++ был создан в начале 1980-х годов, его создатель сотрудник фирмы Bell Laboratories –Бьёрн Страуструп. Он придумал ряд усовершенствований к языку программирования С, для собственных нужд. Т.е. изначально не планировалось создание языка программирования С++. Ранние версии языка С++, известные под названием «Си с классами», начали появляться с 1980 года. . Синтаксис С++ был основан на синтаксисе С, так как Бьёрн Страуструп стремился сохранить совместимость с языком С. В 1983 году произошло переименование языка из «Си с классами» в «язык программирования С++». В него были добавлены новые возможности: виртуальные функции, перезагрузка функций и операторов, ссылки, константы и многое другое. Его первый коммерческий выпуск состоялся в октябре 1985 года. 3 слайд. Цель работы заключается в исследовании возможностей языка программирования С++ при создании учебных программ. Задачами являются: 1) Изучит основы языка программирования С++ 2) Написать программы для решения задач. 4 слайд. Элементы языка. Язык Си включает следующие элементы: Ключевые слова — оформляют различные конструкции языка: else, int, return; Знаки — играют разделительную роль и обозначают некоторые операции: ;, +, &, (; Литералы (константы) — фиксированные значения: false, 0, 'Z', 25.4E2, ¨Привет¨; Идентификаторы (имена) — определяют конкретные объекты программы: main, scanf, Temp, atan2; Директивы препроцессору — определяют, как должен быть обработан код программы перед компиляцией: #include, #define; Комментарии — любой текст, заключённый между символами /* и */ и не содержащий символов */: /* Вычисление длины окружности */. 5 слайд. Каждая подпрограмма имеет структуру, подобную функции main(); Каждая программа содержит одну или несколько функций; Каждая функция содержит 4 основных элемента: 1. тип возвращаемого значения; Int 2. имя функции; main() 3. список параметров, {return 0;} заключённый в круглые скобки 4. тело функции - эта строка значит "вернуть операционной системе в качестве сигнала об успешном завершении программы значение 0". 6 слайд. 64 На данном слайде показан ввод вывод данных в языке программирования С++ 7 слайд. Основные типы. Целочисленные: char short int int long int long long int Логический Вещественные: float double long double «Пустой»: void 8 слайд. Целочисленные типы Перед указанием типа можно ставить signed (знаковый) или unsigned (беззнаковый). По умолчанию все типы — signed: char ~ signed char. Указание типа int можно опускать, если это не единственное слово в описании типа: unsigned int ~ unsigned; long int ~ long. Для определения разрядности типа можно использовать функцию sizeof(): sizeof(int). 9 слайд. В Microsoft Visual C++ по умолчанию тип long double соответствует типу double. Переменная типа long double может занимать 96 или 128 бит из-за особенностей распределения памяти. «Рабочими» при этом остаются только 80 бит. Для вещественных чисел, характерны потери точности, особые значения («отрицательный» ноль, «не число», бесконечность). Вещественное число, полученное разными способами, может оказаться не равным самому себе. Если есть возможность, при решении задач лучше избегать работы с вещественными числами. 10 слайд. Логический тип В стандартах языка Си полная поддержка логического типа отсутствует. Тип имеет имя _Bool. Определены два значения данного типа — 1 (истина) и 0 (ложь). При подключении заголовочного файла stdbool.h можно использовать имя типа bool и литералы true (истина) и false (ложь). _Bool — с одним символом подчёркивания. 11слайд. «Пустой» тип Тип void используется в тех случаях, когда по синтаксису какой-либо тип требуется указать, но сам тип не нужен. Процедура — это функция, которая не возвращает значения. 12 слайд. Переменные Переменная — ячейка памяти, предназначенная для хранения некоторого значения. Переменная имеет: 65 значение; тип — определяет, значения какого типа она может хранить; адрес в памяти, по которому можно обратиться к значению; имя (как правило), по которому можно обратиться к значению. 13 слайд. Переменные Чтение значения из переменной также называется обращением к значению переменной. Запись значения в переменную также называется присваиванием переменной значения. Почему идентификатор не должен начинаться с цифры? Желательно не начинать имена с символа подчёркивания — такие имена могут быть уже заняты системными объектами. (Чтение значения из переменной — обращение к переменной (к значению переменной). Запись значения в переменную — присваивание значения переменной. Имя (идентификатор) — последовательность символов, определяющая переменную (и другие сущности): может состоять из заглавных и строчных латинских букв, цифр и знаков подчёркивания: A … Z, a … z, 0 … 9, _; не должно начинаться с цифры; не должно совпадать с ключевыми словами языка Си. Желательно не начинать имена с символа _. Регистр символов в именах различается: main ≠ Main.) 14 слайд. Переменные При объявлении переменных сначала указывается их тип, затем список имён переменных. Завершается объявление, как и любая команда, точкой с запятой. 15 слайд. Переменные Оператором присваивания является знак равенства. Операция присваивания может сама возвращать присваиваемое значение, поэтому возможно следующая запись цепочки присваиваний. Здесь трём переменным присваивается значение 5 (с конца): сначала переменной c, потом b, затем a. 16слайд. Программа Программа на языке Си состоит из функций. Описание функции: тип имя(список формальных параметров) { тело функции } Здесь тип — тип возвращаемого функцией значения. Скобки { и } — начало и конец тела функции. Имя (идентификатор) функции подчиняется тем же требованиям, что и имена переменных. Пробелы, символы табуляции и перевода строк не несут смысловой нагрузки. 17 слайд. Программа Выполнение программы начинается с функции, имеющей имя main. Функция с таким именем должна быть в программе, которую предполагается запускать. Часто функция main не принимает аргументов и ничего не возвращает. При создании программы на языке Си среда разработки сама создаёт эту функцию. 18 слайд Операторы С++ 66 Программа на языке С++ состоит из последовательности операторов, каждый из них определяет значение некоторого действия; Все операторы разделены на 4 группы: - операторы следования; - операторы ветвления; - операторы цикла; - операторы передачи управления. 19 слайд Операторы следования К ним отн-ся : оператор выражение и составной оператор. Выражение, завершающееся точкой с запятой, рассматривается как оператор (вычислении значения выражения или выполнении законченного действия); ++i; //оператор инкремента х+=у; //оператор сложение с присваиванием f(a, b) //вызов функции x= max (a, b) + a*b; //вычисление сложного выражения Составной оператор или блок представляет собой последоват-ть операторов, заключенных в фигурные скобки. Операторы ветвления К ним отн-ся : условный оператор if и оператор выбора switch, они позволяют изменить порядок выполнения операторов в программе; Условный оператор if if используется для разветвления процесса обработки данных на два направления. if имеет формы: сокращенную или полную. 20 слайд. Операторы цикла Операторы цикла используются для организации многократно повторяющихся вычислений. - цикл с предусловием while, - цикл с постусловием do while - цикл с параметром for. Цикл с предусловием while: Оператор цикла while организует выполнение одного оператора (простого или составного) неизвестное заранее число раз. Формат цикла while: while (В) S; В - выражение, истинность которого проверяется (условие завершения цикла); S - тело цикла: один оператор (простой или составной). 21 слайд. Цикл с параметром for Цикл с параметром имеет следующую структуру: for (<инициализация>; <выражение>; <модификации>) <оператор>; Инициализация используется для объявления и присвоения начальных значений величинам, используемым в цикле Выражение определяет условие выполнения цикла: - если его результат истинен, цикл выполняется. Модификации выполняются после каждой итерации цикла и служат обычно для изменения параметров цикла. 22 слайд. Одномерный массив Одномерный массив - это фиксированное количество элементов одного и того же типа, объединенных общим именем, где каждый элемент имеет свой номер. Элементы массива могут быть любого типа, в том числе и структурированного (кроме файлового). 67 Между указателями и массивами существует взаимосвязь: любое действие над элементами массивов, которое достигается индексированием, может быть выполнено и с помощью указателей 23 слайд . Двумерные массивы Двумерные массивы (матрицы, таблицы) - представляют собой фиксированное количество элементов одного и того же типа, объединенных общим именем, где каждый элемент определяется номером строки и номером столбца, на пересечении которых он находится. Двумерные массивы находят свое применение тогда, когда исходные данные представлены в виде таблицы, или когда для хранения данных удобно использовать табличное представление. Нумерация строк и столбцов начинается с нулевого номера. В C++ двумерный массив реализуется как одномерный, каждый элемент которого также массив. 24 слайд. В моей курсовой работе были выполнены следующие задачи: Решение задач части С демонстрационного варианта контрольных измерительных материалов единого государственного экзамена 2013 года по информатике и ИКТ на языке С++ Типология задач на массивы с программной реализацией на языке программирования С++. (Показываю несколько программ на Visual Studio 2010) 25 слайд. Заключение. В моей курсовой работе был поставлен вопрос : изучить основы программирования языка С++ и реализовать задачи на данном языке. В заключение работы можно сделать следующие выводы: В настоящее время язык программирования С++ является одним из основных в практическом программировании. Достоинства языка С++ это прежде всего простота и лаконичность. Язык С++ легко учится. . 68