Программирование в C - Курсовая работа

бесплатно 0
4.5 37
C как компилируемый статически типизированный язык программирования общего назначения. История стандартов и необъектно-ориентированные возможности. Объектно-ориентированные особенности языка. Константные функции-члены, наследование и инкапсуляция.

Скачать работу Скачать уникальную работу

Чтобы скачать работу, Вы должны пройти проверку:


Аннотация к работе
Поддерживает такие парадигмы программирования как процедурное программирование, объектно-ориентированное программирование, обобщенное программирование, обеспечивает модульность, раздельную компиляцию, обработку исключений, абстракцию данных, объявление типов (классов) объектов, виртуальные функции. Язык возник в начале 1980-х годов , когда сотрудник фирмы Bell Labs Бьерн Страуструп придумал ряд усовершенствований к языку под собственные нужды. Так, язык Симула имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно, а язык BCPL достаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения. Вспомнив опыт своей диссертации, Страуструп решил дополнить язык C (преемник BCPL) возможностями, имеющимися в языке Симула. · исключение путаницы между языками при их совместном использовании («если два языка используются совместно, их различия должны быть или минимальными, или настолько большими, чтобы языки было невозможно перепутать»).В процессе курсовой работы мной были изучены методы создания циклов for, предложений if, в результате чего приобретены практические навыки в этих областях.

Введение
Объектно-ориентированное программирование (сокращенно ООП) - это в наше время совершенно естественный подход к построению сложных (и не очень сложных) программ и систем. Когда вы открываете любую программу, вы видите окно с множеством кнопок, разделов меню, окон редактирования, списков и т.п. Все это объекты. Причем сами по себе они ничего не делают. Они ждут каких-то событий - нажатия пользователем клавиш или кнопок мыши, перемещения курсора и т.д. Когда происходит подобное событие, объект получает сообщение об этом и как-то на него реагирует: выполняет некоторые вычисления, разворачивает список, заносит символ в окно редактирования и т.д. Все это можно описать и разработать с помощью языка С .

1. Теоретическая часть

1.1 Общее описание языка

C - компилируемый статически типизированный язык программирования общего назначения.

Поддерживает такие парадигмы программирования как процедурное программирование, объектно-ориентированное программирование, обобщенное программирование, обеспечивает модульность, раздельную компиляцию, обработку исключений, абстракцию данных, объявление типов (классов) объектов, виртуальные функции. Стандартная библиотека включает, в том числе, общеупотребительные контейнеры и алгоритмы. C сочетает свойства как высокоуровневых , так и низкоуровневых языков . В сравнении с его предшественником - языком , - наибольшее внимание уделено поддержке объектно-ориентированного и обобщенного программирования .

C широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. Область его применения включает создание операционных систем , разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (игр). Существует множество реализаций языка C , как бесплатных, так и коммерческих и для различных платформ. Например, на платформе x86 это GCC , Visual C , Intel C Compiler , Embarcadero (Borland) C Builder и другие. C оказал огромное влияние на другие языки программирования, в первую очередь на Java и C# .

Синтаксис C унаследован от языка . Одним из принципов разработки было сохранение совместимости с C. Тем не менее, C не является в строгом смысле надмножеством C; множество программ, которые могут одинаково успешно транслироваться как компиляторами C, так и компиляторами C , довольно велико, но не включает все возможные программы на C.

1.2 История создания

Язык возник в начале 1980-х годов , когда сотрудник фирмы Bell Labs Бьерн Страуструп придумал ряд усовершенствований к языку под собственные нужды. Когда в конце 1970-х годов Страуструп начал работать в Bell Labs над задачами теории очередей (в приложении к моделированию телефонных вызовов), он обнаружил, что попытки применения существующих в то время языков моделирования оказываются неэффективными, а применение высокоэффективных машинных языков слишком сложно изза их ограниченной выразительности. Так, язык Симула имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно, а язык BCPL достаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения.

Вспомнив опыт своей диссертации, Страуструп решил дополнить язык C (преемник BCPL) возможностями, имеющимися в языке Симула. Язык C, будучи базовым языком системы UNIX , на которой работали компьютеры Bell, является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами. В результате практические задачи моделирования оказались доступными для решения как с точки зрения времени разработки (благодаря использованию Симула-подобных классов), так и с точки зрения времени вычислений (благодаря быстродействию C). В первую очередь в C были добавлены классы (с инкапсуляцией ), наследование классов, строгая проверка типов, inline-функции и аргументы по умолчанию. Ранние версии языка, первоначально именовавшегося «C with classes» («Си с классами»), стали доступны с 1980 года .

Разрабатывая C с классами, Страуструп написал программу cfront - транслятор , перерабатывающий исходный код C с классами в исходный код простого C. Это позволило работать над новым языком и использовать его на практике, применяя уже имеющуюся в UNIX инфраструктуру для разработки на C. Новый язык, неожиданно для автора, приобрел большую популярность среди коллег и вскоре Страуструп уже не мог лично поддерживать его, отвечая на тысячи вопросов.

При создании C Бьерн Страуструп хотел: · Получить универсальный язык со статическими типами данных, эффективностью и переносимостью языка C.

· Непосредственно и всесторонне поддерживать множество стилей программирования, в том числе процедурное программирование , абстракцию данных , объектно-ориентированное программирование и обобщенное программирование .

· Дать программисту свободу выбора, даже если это даст ему возможность выбирать неправильно.

· Максимально сохранить совместимость с C, тем самым делая возможным легкий переход от программирования на C.

· Избежать разночтений между C и C : любая конструкция, допустимая в обоих языках, должна в каждом из них обозначать одно и то же и приводить к одному и тому же поведению программы.

· Избегать особенностей, которые зависят от платформы или не являются универсальными.

· «Не платить за то, что не используется» - никакое языковое средство не должно приводить к снижению производительности программ, не использующих его.

· Не требовать слишком усложненной среды программирования.

Выбор именно C в качестве базы для создания нового языка программирования объясняется тем, что язык C: · является многоцелевым, лаконичным и относительно низкоуровневым языком;

· подходит для решения большинства системных задач;

· исполняется везде и на всем;

· стыкуется со средой программирования UNIX.

Несмотря на ряд известных недостатков языка C, Страуструп пошел на его использование в качестве основы, так как «в C есть свои проблемы, но их имел бы и разработанный с нуля язык, а проблемы C нам известны». Кроме того, это позволило быстро получить прототип компилятора (cfront), который лишь выполнял трансляцию добавленных синтаксических элементов в оригинальный язык C.

По мере разработки C в него были включены другие средства, которые перекрывали возможности конструкций C, в связи с чем неоднократно поднимался вопрос об отказе от совместимости языков путем удаления устаревших конструкций. Тем не менее, совместимость была сохранена из следующих соображений: · сохранение действующего кода, написанного изначально на C и прямо перенесенного в C ;

· исключение необходимости переучивания программистов, ранее изучавших C (им требуется только изучить новые средства C );

· исключение путаницы между языками при их совместном использовании («если два языка используются совместно, их различия должны быть или минимальными, или настолько большими, чтобы языки было невозможно перепутать»).

К 1983 году в язык были добавлены новые возможности, такие как виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев (//). Получившийся язык уже перестал быть просто дополненной версией классического C и был переименован из C с классами в «C ». Его первый коммерческий выпуск состоялся в октябре 1985 года .

Имя языка, получившееся в итоге, происходит от оператора унарного постфиксного инкремента C (увеличение значения переменной на единицу).

До начала официальной стандартизации язык развивался в основном силами Страуструпа в ответ на запросы программистского сообщества. Функцию стандартных описаний языка выполняли написанные Страуструпом печатные работы по C (описание языка, справочное руководство и так далее).

1.3 История стандартов

В 1985 году вышло первое издание «Языка программирования C », обеспечивающее первое описание этого языка, что было чрезвычайно важно изза отсутствия официального стандарта. В 1989 году состоялся выход C версии 2.0. Его новые возможности включали множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищенные члены. В 1990 году вышло «Комментированное справочное руководство по C », положенное впоследствии в основу стандарта. Последние обновления включали шаблоны, исключения, пространства имен, новые способы приведения типов и булевский тип.

Стандартная библиотека C также развивалась вместе с ним. Первым добавлением к стандартной библиотеке C стали потоки ввода-вывода, обеспечивающие средства для замены традиционных функций C printf и scanf. Позднее самым значительным развитием стандартной библиотеки стало включение в нее Стандартной библиотеки шаблонов .

В 1998 году был опубликован стандарт языка ISO/IEC 14882:1998 (известный как C 98),[8] разработанный комитетом по стандартизации C (ISO /IEC JTC1/SC22/WG21 working group). Стандарт C не описывает способы именования объектов, некоторые детали обработки исключений и другие возможности, связанные с деталями реализации, что делает несовместимым объектный код, созданный различными компиляторами. Однако для этого третьими лицами создано множество стандартов для конкретных архитектур и операционных систем .

В 2003 году был опубликован стандарт языка ISO/IEC 14882:2003, где были исправлены выявленные ошибки и недочеты предыдущей версии стандарта.

В 2005 году был выпущен отчет Library Technical Report 1 (кратко называемый TR1). Не являясь официально частью стандарта, отчет описывает расширения стандартной библиотеки, которые, как ожидалось авторами, должны быть включены в следующую версию языка C . Степень поддержки TR1 улучшается почти во всех поддерживаемых компиляторах языка C .

С 2009 года велась работа по обновлению предыдущего стандарта, предварительной версией нового стандарта сперва был C 09, а спустя год C 0x, сегодня - C 11, куда были включены дополнения в ядро языка и расширение стандартной библиотеки, в том числе большую часть TR1.

C продолжает развиваться, чтобы отвечать современным требованиям. Одна из групп, разрабатывающих язык C и направляющих комитету по стандартизации C предложения по его улучшению - это Boost , которая занимается, в том числе, совершенствованием возможностей языка путем добавления в него особенностей метапрограммирования .

Никто не обладает правами на язык C , он является свободным. Однако сам документ стандарта языка (за исключением черновиков) не доступен бесплатно.

1.4 Обзор языка

Стандарт C на 2003 год состоит из двух основных частей: описание ядра языка и описание стандартной библиотеки.

Кроме того, существует огромное количество библиотек C , не входящих в стандарт. В программах на C можно использовать многие библиотеки C.

Стандартизация определила язык программирования C , однако за этим названием могут скрываться также неполные, ограниченные, достандартные варианты языка. Первое время язык развивался вне формальных рамок, спонтанно, по мере встававших перед ним задач. Развитию языка сопутствовало развитие кросс-компилятора cfront . Новшества в языке отражались в изменении номера версии кросс-компилятора. Эти номера версий кросс-компилятора распространялись и на сам язык, но применительно к настоящему времени речь о версиях языка C не ведут.

1.5 Необъектно-ориентированные возможности

В этом разделе описываются возможности, непосредственно не связанные с объектно-ориентированным программированием (ООП), но многие из них, однако, особенно важны в сочетании с ООП.

1. Комментарии: С поддерживает как комментарии в стиле C: « /* это комментарий, который может состоять из нескольких строчек

*/» так и однострочные: «// вся оставшаяся часть строки является комментарием», где // обозначает начало комментария, а ближайший последующий символ новой строки, который не предварен символом \ (либо эквивалентным ему обозначением ??/), считается окончанием комментария.

2. Типы

В C доступны следующие встроенные типы: · Символьные: char, wchar_t (char16_t и char32_t, в стандарте C 11 ).

· Целочисленные знаковые: signed char, short int, int, long int (и long long int, в стандарте C 11 ).

· Целочисленные беззнаковые: unsigned char, unsigned short int, unsigned int, unsigned long int(и unsigned long long int, в стандарте C 11 ).

· С плавающей точкой: float, double, long double.

· Логический: bool, имеющий значения true и false.

Операции сравнения возвращают тип bool. Выражения в скобках после if, while приводятся к типу bool.

Функции могут принимать аргументы по ссылке . Например, функция void f(int &x) {x=3;} присваивает своему аргументу значение 3. Функции также могут возвращать результат по ссылке, и ссылки могут быть вне всякой связи с функциями. Например, {double &b=a[3]; b=sin(b);} эквивалентно a[3]=sin(a[3]);. При программировании ссылки в определенной степени сходны с указателями , со следующими особенностями: перед использованием ссылка должна быть инициализирована; ссылка пожизненно указывает на один и тот же адрес; в выражении ссылка обозначает непосредственно тот объект или ту функцию, на которую она указывает, обращение же к объекту или функции через указатель требует разыменование указателя. Существуют и другие отличия в использовании указателей и ссылок. Концептуально ссылка - другое имя переменной или функции, другое название одного и того же адреса, существует лишь только в тексте программы, заменяемое адресом при компиляции; а указатель - переменная, хранящая адрес, к которому обращаются.

1.6 Объектно-ориентированные особенности языка

C добавляет к C объектно-ориентированные возможности. Он вводит классы, которые обеспечивают три самых важных свойства ООП : инкапсуляцию , наследование и полиморфизм .

В стандарте C под классом (class) подразумевается пользовательский тип, объявленный с использованием одного из ключевых слов class, struct или union, под структурой (structure) подразумевается класс, определенный через ключевое слово struct, и под объединением (union) подразумевается класс, определенный через ключевое слово union.

1. Описание функций в теле класса

В теле класса можно указать только заголовок функции, а можно описать всю функцию (см. пример с функцией Alloc ниже. В этом случае она считается встраиваемой (inline)).

2. Константные функции-члены

Нестатические функции-члены (и только они) могут иметь описатель const class Array

{

... inline double operator[] (int n) const;

Такие функции не имеют права изменять поля класса (кроме полей, определенных как mutable). Если они пытаются это сделать, компилятор должен выдать сообщение об ошибке.

3. Наследование

В C при наследовании одного класса от другого наследуется реализация класса, плюс класс-наследник может добавлять свои поля и функции или переопределять функции базового класса. Множественное наследование разрешено.

Конструктор наследника вызывает конструкторы базовых классов, а затем конструкторы нестатических членов-данных, являющихся экземплярами классов. Деструктор работает в обратном порядке.

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

Наследник - это больше чем базовый класс, поэтому, если наследование открытое, то он может использоваться везде, где используется базовый класс, но не наоборот.

4. Полиморфизм

Семантика системы типов С не полиморфна (в отличие от потомков ML , в том числе гибридных с Си - BITC , Cyclone ), однако есть несколько способов обеспечить полиморфное поведение . Прежде всего это перегрузка методов классов при наследовании - традиционный для ООП способ обеспечения абстракции данных. Затем есть два способа реализации параметрического полиморфизма (в С -сообществе обычно называемого «обобщенным программированием»). Первый способ унаследован из Си - использование бестипового указателя и приведение типа в зависимости от других данных - хотя в С этот способ традиционно считается неидеоматичным и опасным. Второй заключается в использовании шаблонов но, в отличие от обычных реализаций параметрического полиморфизма, в С происходит автоматическая генерация семейства перегруженных мономорфных функций на основании полиморфного определения (шаблона) в соответствии с контекстами его использования - то есть параметрический полиморфизм на уровне исходного кода транслируется в ситуативный (ad hoc) на уровне машинного, за что С подвергается критике. В С также есть третий вид перегрузки - перегрузка операторов - которая в сочетании с наследованием классов предоставляет еще большие возможности повышения читабельности кода путем ввода т. н. «синтаксического сахара ».

Для обеспечения абстракции данных необходимо связать несколько классов в иерархию наследования и назначить функциям одинаковые спецификации.

5. Инкапсуляция

Основным способом организации информации в C являются классы. В отличие от структуры (struct) языка C, которая может состоять только из полей и вложенных типов, класс (class) C может состоять из полей, вложенных типов и функций-членов (member functions). Инкапсуляция в С реализуется через указание уровня доступа к членам класса: они бывают публичными (открытыми, public), защищенными (protected) и собственными (закрытыми, приватными, private). В C структуры формально отличаются от классов лишь тем, что по умолчанию члены и базовые классы у структуры публичные, а у класса - собственные.

Проверка доступа происходит во время компиляции, попытка обращения к недоступному члену класса вызовет ошибку компиляции.

6. Конструкторы и деструкторы

В классах всегда есть специальные функции - конструкторы и деструкторы , которые могут быть объявлены явно или неявно.

Конструктор вызывается для инициализации объекта (соответствующего типа) при его создании, а деструктор - для уничтожения объекта. В частности, конструктор может быть вызван для выполнения преобразования к классовому типу.

Конструкторы обозначаются как одноименные классу функции (например, Array::Array), деструкторы - как имя класса, предваренное тильдой (например, Array::~Array). Для конструкторов и деструкторов нельзя указывать тип возвращаемого значения. Деструктор нельзя объявлять как принимающий аргументы. Класс может иметь сколько угодно конструкторов (с разными наборами параметров), в том числе шаблонных, и только один (причем нешаблонный) деструктор.

Конструктор без параметров или конструктор, все параметры которого имеют аргументы по умолчанию, называется конструктором по умолчанию, нешаблонный конструктор с первым параметром-ссылкой на тот же класс (например, Array::Array(const Array&)) и остальными параметрами (если таковые есть), имеющими аргументы по умолчанию, - конструктором копирования, он вызывается при создании нового объекта, являющегося копией уже существующего объекта.

Если в классе нет явно объявленных конструкторов, класс имеет неявно объявленный конструктор без параметров, который конструирует подобъекты классов-родителей и инициализирует поля класса, вызывая для них конструкторы по умолчанию. Если в классе нет явно объявленных копирующих конструкторов, то класс имеет неявно объявленный копирующий конструктор, который выполняет прямое копирование всех объявленных полей объекта-источника в соответствующие поля объекта-приемника с помощью соответствующих копирующих конструкторов. Если в классе нет явно объявленного деструктора, то класс имеет неявно объявленный деструктор.

Конструкторы в C не могут быть объявлены виртуальными, а деструкторы - могут, и обычно так и объявляются, чтобы гарантировать правильное уничтожение доступного по ссылке или указателю объекта независимо от того, какого типа ссылка или указатель.

2. Практическая часть

2.1. Задача 1

Составить программу поиска трехзначных чисел которые при делении на 47 дают в остатке 43, а при делении на 43 дают в остатке 47.

Текст программы: #include

#include

#include using namespace std;

main ()

{ int i,j;

for (i=100; i<1000; i )

{if ((iG==43) or (iC==47)) cout<<i<<endl;

}

_getch();

}

Выходные данные:

2.2 Задача 2

Дано натуральное число. Определить номер цифры «8» в нем, считая от конца числа. Если такой цифры нет, ответом должно быть число 0, если таких цифр в числе несколько - должен быть определен номер самой левой из них.

Текст программы: #include

#include

#include

#include

#include using namespace std;

main ()

{ long a;

char j[25];

int dlina,i,bufer,k;

bufer=-1;

k=1;

cout << "Vvedite naturalnoe chislo:";

cin >> a;

if (a<=0) cout<<"Chislo "<<a<<" ne podhodit pod uslovie zadachi"<<endl;

if (a>0) itoa(a,j,10);

dlina = strlen(j)-1;

for (i=dlina;i!=-1;i-)

{ if (j[i]=="8")

{ bufer=k;

} k=k 1;

} if (bufer != -1) cout<<bufer<<endl;

else cout<<"0"<<endl;

_getch();

}

Входные, выходные данные

Вывод
В процессе курсовой работы мной были изучены методы создания циклов for, предложений if, в результате чего приобретены практические навыки в этих областях. Для этого использовалась главная функция main, обеспечивающая всю необходимую и правильную работу программы. наследование инкапсуляция константный функция

Список литературы
1. Джарод Холингвэрт, Дэн Баттерфилд, Боб Сворт, Джэйми Оллсоп C Builder 5. Руководство разработчика.

2. Borland C Builder 5. Энциклопедия программиста. Калверт Ч., Рейсдорф К., "ДИАСОФТ" - 2001, 944 стр.

3. Галерея «ПЕТРОПОЛЬ». Неформальное введение в C и TURBO VISION. 1992г.

4. М.И. Болски. Язык программирования Си. 1988г.

5. Герберт Шилдт. C для начинающих. Пер. с англ. М: ЭКОМ Паблишерз 2007.

6. Герберт Шилдт. Полный справочник по C 4-е издание. Пер. с англ. М: издательский дом « Вильямс » 2010.

Размещено на .ur

Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность
своей работы


Новые загруженные работы

Дисциплины научных работ





Хотите, перезвоним вам?