246071-Либерти-Освой-самостоятельно-С-за-21-день (852741), страница 7
Текст из файла (страница 7)
Символ \n — это специальный символ форматирования, который указывает объектуcoutнанеобходимостьвыводанаэкрансимволановойстроки(онпроизносится"слэш-эн"илипросторазрывстроки).Встроке6объектуcoutпередаютсятризначения,икаждоеизнихотделяетсяоператоромвывода.Первоезначениепредставляетсобойстроку"Hereis5:".Обратитевниманиенаналичиепробела после двоеточия: пробел является частью текстовой строки. Затем объекту cout спомощью оператора вывода передается значение 5, а за ним — символ разрыва строки (этотсимвол всегда должен быть заключен в двойные или в одинарные кавычки). При выполненииэтоговыражениянаэкранепоявитсястрокаHereis5:5Поскольку после первого значения нет символа разрыва строки, следующее значениевыводитсясразузапредыдущим.Этотпроцессназываетсяконкатенациейдвухзначений.В строке 7 на экран выводится информационное сообщение, после чего используетсяоператор endl.
Этот оператор также выводит на экран символ разрыва строки. (Другоеназначениеоператораendlрассматриваютсяназанятии16.)Примечание:Оператор endl расшифровывается как end line (конец строки) и читаетсякак"энд-эл",ане"энд-один"(иногдабуквуlпринимаютзаединицу).Встроке10используетсяещеодинсимволформатирования—\t,которыйвставляетсимволтабуляции, используемый обычно для выравнивания выводимой информации (строки 10-13).Строка10демонстрируетвозможностьвыводазначенийтипаlongint.Встроке11показано,чтообъект cout может выводить результат математической операции.
Объекту cout передается незначение,ацелоематематическоевыражение8+5,нонаэкранвыводитсячисло13.В строке 12 объект cout выводит результат другой математической операции — 5/8.Идентификатор (float) указывает объекту cout, что результат должен выводиться как дробноечисло. В строке 14 объекту cout передается выражение 7000 * 7000, а идентификатор (double)устанавливает вывод результата в экспоненциальном представлении. Использованиеидентификаторовdoubleиfloatдляустановкитиповзначенийрассматриваетсяназанятии3.В строке 16 нужно вставить свое имя. Если при выполнении программы вы увидите своеимя на экране, шансы стать профессиональным программистом у вас существенно возрастут,хотявэтомитакнетникакихсомнений.Дажекомпьютерэтознает!КомментарииКогдавыпишетепрограмму,вамвсегдаясно,чтовыстараетесьсделать.Однакоесличерезмесяцвампридетсявернутьсякэтойпрограмме,то,какэтониудивительно,окажется,чтовыпочтисовсемнепомните,очемидетречь,аодеталяхиговоритьнеприходится.Чтобы не казнить себя за пробелы в памяти и помочь другим понять вашу программу,используйте комментарии.
Комментарии представляют собой текст, который игнорируетсякомпилятором, но позволяет описать прямо в программе назначение отдельной строки илицелогоблока.ВидыкомментариевВ языке C++ используется два вида комментариев: с двойным слешем (//) и сочетаниемслеша и звездочки (/*). Комментарий с двойным слешем (его называют комментарием в стилеC++) велит компилятору игнорировать все, что следует за этими символами вплоть до концатекущейстроки.Комментарий со слешем и звездочкой (его называют комментарием в стиле С) велиткомпилятору игнорировать все, что следует за символами (/*) до того момента, пока невстретитсясимволзавершениякомментария:звездочкаислеш(*/).Каждойоткрывающейпаресимволов/*должнасоответствоватьзакрывающаяпарасимволов*/.Нетрудно догадаться, что комментарии в стиле С используются также и в языке С, носледуетпредупредить,чтодвойнойслешвязыкеСневоспринимаетсякаксимволкомментария.При программировании на C++ для выделения комментариев в основном используютсясимволы двойного слеша, а комментарии в стиле С используются только для временногоотключения больших блоков программы.
Впрочем, двойной слеш часто используется и длявременногоотключенияотдельныхстрокпрограммногокода.ИспользованиекомментариевРаньше считалось хорошим тоном предварять блоки функций и саму программукомментариями, из которых должно было быть понятно, что делает эта функция и какоезначениеонавозвращает.Исходя из собственного опыта, могу сказать, что такие комментарии не всегдацелесообразны. Комментарии в заголовке программы очень быстро устаревают, посколькупрактическиниктоихнеобновляетприобновлениитекстапрограммы.Функциидолжныиметьтакиеимена,чтобыуваснеоставалосьнитенисомнениявтом,чтоониделают,впротивномслучае имя функции нужно изменить. Зачем использовать бессмысленные итруднопроизносимыеимена,чтобыпотомраскрыватьихсмыслспомощьюкомментариев?Впрочем, одно другому не помеха. Лучше всего использовать понятные имена идополнительновноситькраткиеразъясненияспомощьюкомментариев.Листинг2.3демонстрируетиспользованиекомментариев,доказывая,чтоониневлияютнавыполнениепрограммыиеерезультаты.Листинг2.3.ДемонстрациякомментариевнапримерепрограммыHELLO.CPP1:#include<iostream.h>2:3:intmain()4:{5:/*этокомментарий,6:которыйпродолжаетсядотехпор,покане7:встретитсясимволконцакомментарияввидезвездочкиислэша*/8:cout<<"Helloworld!\n";9://Этоткомментарийоканчиваетсявконцестроки10:cout<<"Thatcommentended!\n";11:12://последвойногослешаможетнебытьникакоготекста,13:/*как,впрочем,имеждуэтимисимволами*/14:return0;15:}Резултат:Helloworld!Thatcommentended!Комментариивстроках5—7полностьюигнорируютсякомпилятором,какикомментариивстроках9,12и13.Комментарийвстроке9завершаетсявконцеэтойстроки,нодлязавершениякомментариев,начавшихсявстроках5и13,требуетсясимволокончаниякомментария(*/).Напоследокпредупреждение:осторожнеескомментариями!В комментариях, разъясняющих очевидные места, проку немного.
Но они могут дажевводитьвзаблуждение,еслиприизменениятекстапрограммывызабудетеихскорректировать.Однако очевидность — понятие относительное. То, что очевидно для одного человека, можетбыть непонятно другому. Всегда старайтесь разумно комментировать свои действия и незабывайтеобновлятькомментарииприобновлениипрограммы.Ипоследнее,комментариидолжныразъяснять,нечтоэтозаоператоры,адлячегоонитутиспользуются.ФункцииВы уже познакомились с функцией main(), правда, это необычная, единственная в своемродефункция.Чтобыприноситьпользу,функциядолжнабытьвызванавовремясеансаработыпрограммы.Функцияmain()вызываетсянепрограммой,аоперационнойсистемой.Программа выполняется по строкам в порядке их расположения в исходном тексте до техпор, пока не встретится вызов какой-нибудь функции.
Затем управление передается строкамэтой функции. После выполнения функции управление возвращается той строке программы,котораяследуетсразузавызовомфункции.Есть прекрасная аналогия для работы программы с функцией. Например, если во времярисованияувасломаетсякарандаш,выпрекращаетерисоватьизатачиваетеего.Послеэтоговывозвращаетесь к тому месту рисунка, где сломался карандаш. Когда программа нуждается ввыполнениинекоторойсервиснойоперации,вызываетсяфункция,ответственнаязавыполнениеэтой операции, после чего программа продолжает свою работу с того места, где была вызванафункция.Этаидеядемонстрируетсявлистинге2.4.Листинг2.4.Примервызовафункции1:#include<iostream.h>3://ФункцияDemonstrationFunction4://выводитнаэкранинформативноесообщение5:voidDemonstrationFunction()6:{7:cout<<"InDemonstrationFunction\n";8:}10://Функцияmainвыводитсообщение,затем11://вызываетфункциюDemonstrationFunctionи12://выводитнаэкранвтороесообщение.13:intmain()14:{15:cout<<"Inmain\n";16:DemonstrationFunction();17:cout<<"Backinmain\n";18:return0;19:}Результат:InmainInDemonstrationFunctionBackinmainВ строках 5—8 определяется функция DemonstrationFunction().
Она выводит на экрансообщениеивозвращаетуправлениепрограмме.Функция main() начинается в строке 13, и в строке 15 выводится на экран сообщение,уведомляющее о том, что сейчас управление программой находится в функции main(). Послевывода этого сообщения в строке 16 вызывается функция DemonstrationFunction(). В результатеэтоговызовавыполняютсякоманды,содержащиесявфункцииDemonstrationFunction().Вданномслучаевсяфункциясостоитизоднойкоманды,содержащейсявстроке7,котораявыводитдругоесообщение. По завершении выполнения функции DemonstrationFunction() (строка 8) управлениепрограммойвозвращаетсятуда,откудаэтафункциябылавызвана.Вданномслучаевыполнениепрограммы продолжается со строки 17, в которой функция main() выводит на экранзаключительноесообщение.ИспользованиефункцийФункции возвращают либо некоторое реальное значение, либо значение типа void, т.е.ничего не возвращают.
Функцию, которая складывает два целых числа и возвращает значениесуммы, следует определить как возвращающую целочисленное значение. Функции, котораятольковыводитсообщение,возвращатьнечего,поэтомудлянеезадаетсятипвозвратаvoid.Функции состоят из заголовка и тела. Заголовок содержит установки типа возвращаемогозначения,имениипараметровфункции.Параметрыпозволяютпередаватьвфункциюзначения.Следовательно,еслифункцияпредназначенадлясложениядвухчисел,тоэтичисланеобходимопередатьвфункциюкакпараметры.Воткакбудетвыглядетьзаголовоктакойфункции:intSum(intа,intb)Параметр — это объявление типа данных значения, передаваемого в функцию.
Реальноезначение, передаваемое при вызове функции, называется аргументом. Многие программистыиспользуютэтидвапонятиякаксинонимы.Другиесчитаютсмешениеэтихтерминовпризнакомнепрофессионализма.Возможно,этоитак,новданнойкнигеэтитерминывзаимозаменяемы.Телофункцииначинаетсяоткрывающейфигурнойскобкойисодержитрядстрок(хотятелофункции может быть даже нулевым), за которыми следует закрывающая фигурная скобка.Назначениефункцииопределяетсясодержащимисявнейстрокамипрограммногокода.Функцияможетвозвращатьзначениевпрограммуспомощьюоператоравозврата(return).Этотоператортакже означает выход из функции. Если не поместить в функцию оператор возврата, то позавершении функции автоматически возвращается значение типа void.
Значение, возвращаемоефункцией,должноиметьтип,объявленныйвзаголовкефункции.Примечание: Более подробно функции рассматриваются на занятии 5; типы значений,возвращаемых функциями, — на занятии 3. Информация, представленная на этом занятии,является хотя и обзорной, но вполне достаточной для усвоения последующего материала,поскольку функции будут использоваться практически во всех программах, представленных вэтойкниге.Влистинге2.5демонстрируетсяфункция,котораяпринимаетдвацелочисленныхпараметраи возвращает целочисленное значение. Не беспокойтесь пока насчет синтаксиса илиособенностей работы с целыми значениями (например, int x): эта тема подробно раскрываетсяназанятии3.Листинг2.5.Примериспользованияпростойфункции(FUNC.CPP)1:#include<iostream.h>2:intAdd(intx,intу)3:{4:5:cout<<"InAdd(),received"<<x<<"and"<<у<<"\n";6:return(x+y);7:}8:9:intmain()10:{11:cout<<"I'minmain()!\n";12:intа,b,с;13:cout<<"Entertwonumbers:";14:cin>>а;15:cin>>b;16:cout<<"\nCallingAdd()\n";17:c=Add(a,b);18:cout<<"\nBackinmain().\n";19:cout<<"сwassetto"<<с;20:cout<<"\nExiting...\n\n";21:return0;22:}Результат:I'minmain()!Entertwonumbers:35CallingAdd()InAdd(),received3and5Backinmain().cwassetto8Exiting...АНАЛИЗ: Функция Add() определена в строке 2.
Она принимает два целочисленныхпараметра и возвращает целочисленное значение. Сама же программа начинается в строке 9,выводянаэкранпервоесообщение.Затемпользователюпредлагаетсяввестидвачисла(строки13—15).Пользовательвводитчисла,разделяяихпробелом,азатемнажимает,клавишу<Enter>.Встроке17функцияmain()передаетфункцииAdd()вкачествеаргументовдвачисла,введенныепользователем.Управление программой переходит к функции Add(), которая начинается в строке 2.Параметрыаиbвыводятсянаэкран,азатемскладываются.Результатфункциивозвращаетсявстроке6,инаэтомфункциязавершаетсвоюработу.РезюмеСложность изучения такого предмета, как программирование, состоит в следующем:большая часть изучаемого вами материала во многом зависит от того, что вам еще толькопредстоит изучить.