Смекни!
smekni.com

Основы программирования на языке Си (стр. 3 из 27)

таким образом, решатьзадачуивыдаватьнаэкранрезультат. "Декларативные" языки

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

ствий компьютера.

"Объектно-ориентированныеязыки" рассчитанынаприменениеособогопод-

хода кописаниюзадач, согласнокоторомувзадачевыделяютсянекоторые "объекты"

с характернымдляних "поведением" ивзаимодействующиемеждусобой. Одиниз

9

первых объектно-ориентированныхязыков–Смоллток, онпредназначенисключи-

тельно дляобъектно-ориентированногопрограммирования. Вотличиеотнего, язык

Си++ обладаеткакобъектно-ориентированнымивозможностями, такисредствами

традиционного процедурногопрограммирования.

Радикальные приверженцыразличныхязыковистилей программирования

иногда делаютэкстравагантныезаявления, выделяющиесемействоязыковилиодин

язык какисключительныйиидеальноподходящийдлялюбыхзадач. Например, до-

вольно распространеномнение, чтообъектно-ориентированныйподходнаиболее

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

те составитьсобственноемнение, т.к. абсолютноистинного, очевидно, нет.

2. Происхождение языка Си++

Язык Си++ былразработанвначале 1980-хгг. БьерномСтрауструпомизком-

пании AT&T Bell Laboratories. Си++ основаннаязыкеСи. Двасимвола "++" вназва-

нии –этоиграслов, символами "++" вязыкеСиобозначаетсяоперацияинкремента

(увеличениезначенияпеременнойна 1). Т.о., Си++ был задуманкакязыкСисрас-

ширенными возможностями. БольшаячастьязыкаСивошлавСи++ какподмножест-

во, поэтомумногиепрограммынаСиможноскомпилировать (т.е. превратитьвнабор

низкоуровневых команд, которыекомпьютерможетнепосредственновыполнять) с

помощью компилятораСи++.

При классификацииязыковпрограммированияязыкСивызываетнекоторые

трудности. Посравнениюсассемблером, этовысокоуровневыйязык. ОднакоСисо-

держит многонизкоуровневых средствдлянепосредственныхоперацийспамятью

компьютера. ПоэтомуязыкСиотличноподходитдлянаписанияэффективных "сис-

темных" программ. НопрограммыдругихтиповнаСимогутоказатьсядовольно

сложными дляпонимания, иестьрядошибок, которымпрограммынаСиособенно

подвержены. Дополнительныеобъектно-ориентированныевозможностиСи++ были

добавлены вСи, вчастности, дляустраненияэтихнедостатков.

3. Стандарт ANSI Си++

Национальный ИнститутСтандартизацииСША (American National Standards

Institution, ANSI) разработал "официальные" стандартыдлямногихязыковпрограм-

мирования, втомчиследляСииСи++. Этистандартысталиобщепринятымииони

имеют оченьбольшоезначение. Программу, целикомнаписанную на ANSI Си++, га-

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

лятор ANSI Си++. Другимисловами, стандартгарантируетпереносимостьпрограмм

на языке ANSI Си++.

В действительностибольшинствоверсийСи++ представляютсобойстандарт-

ный ANSI Си++, дополненныйнекоторымимашинно-зависимымивозможностями.

Эти специфическиесредствапредназначеныдляоблегчениявзаимодействияпро-

грамм сконкретнымиоперационнымисистемами. Вообще, впрограммах, которые

должны бытьпереносимыми, подобнымиспецифическимивозможностямиследует

пользоваться какможнореже. ВтакихслучаяхчастипрограммынаСи++, вкоторых

используются не-ANSI компонентыязыка, целесообразноособымобразомпомечать,

так, чтобыихлегкоможнобылоотделитьотосновнойчастипрограммыимодифи-

цировать длядругихкомпьютеровиоперационныхсистем.

10

4. Среда разработки Microsoft Developer Studio Visual С++

Известно, чтолучшийспособизученияязыкапрограммированиязаключаетсяв

том, чтобыписатьнанемпрограммыипроверять, какониработаютнакомпьютере.

Для этогонеобходимынесколькопрограмм:

•Текстовый редактор, спомощьюкоторогоможнонабиратьиредактировать

исходный текстпрограммнаСи++.

•Компилятор. Этапрограммавыполняетпреобразованиеисходноготекстав

машинные команды, которыекомпьютерможетнепосредственновыпол-

нять.

•Компоновщик, которыйсобираетотдельныескомпилированныечастипро-

граммы вединоецелоеи, принеобходимости, добавляеткнимкомпоненты

из готовыхбиблиотек. Врезультатекомпоновкиполучаетсяготоваякза-

пуску программа–исполняемыйфайл.

•Отладчик, спомощьюкотороголегчеискатьошибкивпрограмме. Ошибки

могут обнаружитьсякакприкомпиляции, такивовремяработыпрограм-

мы.

В данномкурсеизученияСи++ практическиеупражненияпредполагаетсявы-

полнять всредеразработкипрограммMicrosoft Developer Studio Visual C++ для

IBM-совместимыхПКподуправлениемWindows 95/NT. Вэтомпакетеинтегрирова-

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

удобную средупрограммирования. КраткоеописаниеработысосредойVisual C++

приведено вПриложении.

5. Пример программы на Си++

Ниже приведенисходныйтекстпростойпрограммынаСи++.

// В языке Си++ с двойной косой черты начинаются комментарии

// (например, как эта строка). Компилятор игнорирует комментарии,

// начиная от первой черты и до конца строки.

/* Второй способ записи комментариев – после косой черты со звездочкой.

После текста комментария надо поставить звездочку, а затем – косую

черту. Комментарии, записанные подобным образом, могут занимать

больше одной строки. */

/* В программе ОБЯЗАТЕЛЬНО должно быть достаточное количество

комментариев! */

/* Эта программа запрашивает у пользователя текущий год, возраст

пользователя и еще один год. Затем программа вычисляет возраст

пользователя, который будет у него во втором введенном году.*/

#include <iostream.h>

int main()

{

int year_now, age_now, another_year, another_age;

cout << "Введите текущий год и нажмите ENTER.&bsol;n";

cin >> year_now;

cout << "Введите свой возраст (в годах).&bsol;n";

cin >> age_now;

11

cout << "Введите год, для которого вы хотите узнать свой возраст.&bsol;n";

cin >> another_year;

another_age = another_year - (year_now - age_now);

if (another_age >= 0)

{

cout << "В " << another_year << " году вам будет ";

cout << another_age << "&bsol;n";

}

else

{

cout << "В " << another_year << " вы еще не родились!&bsol;n";

}

return 0;

}

Программа 5.1.

Некоторые свойствапрограммы 5.1 являютсяобычнымидлябольшинствапро-

грамм наСи++. Программаначинается (послекомментариев) соператора

#include <iostream.h>

Этот операторназывается "директивойinclude". Докомпилятораисходный

текст обрабатываетсяпрепроцессором –специальнойпрограммой, котораямодифи-

цирует текстпрограммыпоспециальнымкомандам–директивам. Директивыпре-

процессора начинаютсяссимвола "#". Директиваinclude предназначена длявклю-

чения висходныйтекстсодержимогодругогофайла. Например, впрограмму 5.1

включается файлiostream.h, содержащийописанияфункцийстандартнойбиблиоте-

ки ввода/выводадляработысклавиатуройиэкраном. (Стандартныебиблиотекиязы-

ка Си++ будутрассматриватьсяпозже).

Алгоритм, записанныйвпрограмме 5.1, оченьпростой. Поэтомуструктуру

программы легкопредставитьввидеспискапоследовательновыполняемыхкоманд

(операторов). Схематичнопрограмму, содержащуюсяпоследирективы#include,

можно представитьввиде:

int main()

{

Первый оператор;

...

...

Последний оператор;

return 0;

}

Подобная структураявляетсяобщейдлявсехпрограммнаСи++. Каждыйопе-

ратор втелепрограммызавершаетсяточкойсзапятой. Вхорошоразработанной

большой программебольшинствооператоровявляютсяобращениями (вызовами) к

подпрограммам, которыезаписываютсяпосле функцииmain() или вотдельных

файлах. Каждаяподпрограмма (функция) имеетструктуру, подобнуюфункции

main(). Нофункцияmain() в каждойпрограмметолькоодна. Именноснееначина-

ется выполнениепрограммы. (Подробнеефункциибудутрассматриватьсядалее.)

В концефункцииmain() записана строка:

12

return 0;

Эта строказначит "вернутьоперационнойсистемевкачествесигналаобус-

пешном завершениипрограммызначение 0". Операторвозвратаreturn применяется

не толькопризавершениипрограммы, ноипризавершенииотдельныхподпрограмм.

В любомслучаеэтотоператорвозвращаетопределенноезначениенаболеевысокий

уровень управления.

В программе-примереиспользуются четырепеременные:

year_now, age_now, another_year и another_age

Переменные впрограммированииотличаютсяотматематическихпеременных.

Они используютсякаксимволические имена "фрагментовоперативнойпамятиком-

пьютера". Привыполнениипрограммывразличныемоментывременипеременные

могут хранитьразличныезначения. Впрограмме 5.1 первоеупоминаниечетырехпе-

ременных содержитсявстрокесоператоромописанияпеременных:

int year_now, age_now, another_year, another_age;

Этот операторуведомляеткомпилятор, что дляхранениячетырехпеременных

типа "целоечисло" (integer –int) требуетсявыделитьнеобходимоеколичествопамя-

ти. Этаобластьпамятибудетзарезервированавтечениевыполненияоставшейсячас-

ти программы. Переменныевсегдадолжныбытьописаныдопервогоиспользования.

В программированиихорошимстилемсчитаетсяописаниевсехпеременных, исполь-

зуемых вподпрограмме, вначалеэтойподпрограммы. ВСи++ естьнесколькораз-

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

6. Выполнение ввода/вывода данных и присваивание значений

После компиляции программы ееможнозапустить на выполнение. Результат

выполнения наэкранебудетвыглядетьпримернотак:

Введите текущий год и нажмите ENTER.

2000

Введите свой возраст (в годах).

21

Введите год, для которого вы хотите узнать свой возраст.

2017

В 2017 году вам будет 38

Первая, третья, пятаяиседьмаястрокивыдаютсянаэкранпрограммойспо-

мощью следующегооператора:

cout << Выражение1 << Выражение2 << ... << ВыражениеN;