
алгоритмы и програмування / Книги / Шилдт Г. C++ Руководство для начинающих
.pdf62 Глава 1. O~HOBЫ С++
24 футов равно 7.31707 метра.
25 футов равно 7.62195 метра.
26 футов равно 7.92683 метра.
27 футов равно 8.23171 метра.
28 футов равно 8.53659 метра.
29 футов равно 8.84146 метра.
30 футов равно 9.14634 метра.
31 футов равно 9.45122 метра.
32 футов равно 9.7561 метра.
33 футов равно 10.061 метра.
34 футов равно 10.3659 метра.
35 футов равно 10.6,707 метра.
36 футов равно 10.9756 метра.
37 футов'равно 11.2805 метра.
38 футов равно 11.5854 метра.
39 футов равно 11.8902 метра.
40 футов равно 12.1951 метра.
5. Самостоятельно измените программу так, чтобы она выводила пустую строку через каждые 25 строк результатов.
'ШОI
:1111[]ablSlIId" а ф~ЫКI~ldSl;l
Любая С++-программа составляется из "строительных блоков", именуемых
функциями. И хотя более детально мы будем рассматривать функции в MOДY:le 5,
сделаем здесь краткий обзор понятий и терминов, связанных с этой темой. Функ
ция - это подпрограмма, которая содержит одну или несколько С++-инструк
ций и выполняет одну или несколько задач.
Каждая функция имеет имя, которое используется для ее вызова. Чтобы вы звать функцию, достаточно в исходном коде l1porpaмMbl указать ее имя с парой круглых скобок. Своим функциям программист может давать любые имена, за
исключением имени mаiл (), зарезервированного для функции, с которой начи нается выполнение программы. Например, мы назвали функцию именем МуРи лс. Тогда для вызова функции MyFunc достаточно записать следующее.
МуFuлс();
При вызове функции ей передается управление программой, в результате чего начинает выполняться код, составляющий тело функции. По завершении функ
ции управление передается инициатору ее вы:юва.
С++: РУI<ОВОДСТВО ДЛЯ начинающих 63
Функции можно передать одно или несколько значений. Значение, переда
ваемое функции, называется аргументом. Таким образом, функции в С++ могут
принимать один или несколько аргументов. Аргументы указываются при вызове
функции между открывающей и закрывающей круглыми скобками. Например,
если функция MyFunc () принимает один целочисленный аргумент, то, исполь зуя следующую запись, можно вызвать функцию MyFunc () со значением 2.
MyFunc(2);
Если функция принимает несколько аргументов, они разделяются запятыми.
В этой книге под термином список аргументов понимаются аргументы, разделен ные запятыми. Помните, что не все функции ПРИIIИМают аргументы. Если аргу
менты не нужны, то круглые скобки после имеии функции остаются пустыми.
Функция может возвращать в вызывающий код значение. HelcoтopbIe фуик
ции не возвращают никакого значения. Значение, возвращаемое функцией. мож но присвоить переменной в вызывающем коде, поместив обращение к функции с праUОl1 стороны от оператора присваивaJШЯ. Например, если бы функция
MyFunc () возвращала значение, мы могли бы вызвать се таким образом.
х = MyFunc(2);
Эта инструкция работает так. Сначала вызывается ФУIIКЦИЯ MyFunc (). По
ее завершении возвращаемое ею значение ПРИСВa.IfВается персменной х. Вызов функции можно также использовать в выражении. Рас~мо/'рим пример.
х= MyFunc(2) + 10;
Вэтом случае значение, возвращаемое функцией, суммируется с числом 1О,
арезультат сложения присваивается переменной х. И вообще, если в какой-либо инструкции встречается имя функции, эта функция автоматически вызывается, чтобы можно было получить (а затем и использовать) возвращаемое ею значеЮiе.
Итак, вспомним: аргумент - это значение, передаваемое функции. Возвраща емое функцией значение - это данные, передаваемые назад в вызывающий код.
Рассмотрим короткую программу, котораядемонстрирует использование функ
ции. Здесь для отображения абсолютного значения числа используется стандарт ная библиотечная (т.е. встроенная) функция abs (). Эта функция принимает один аргумент, преобразует его D абсолютное значение и возвращает результат.
//Использование функции abs().
-:+ :+
:U
:а
CD
о
1:
'J
)
#include <iostream> #include <cstdlib> using namespace std;
int main ()
64 Глава 1. Основы С++
int result;
result |
= abs(-lO)j // |
Вызыаае~ск фунхциа аЬа(), а |
|
/ / |
воsвращаекое 8JD sначевие |
|
// ПРИС8аивае~ск перемевной result. |
|
cout « |
result; |
|
return |
О; |
|
Здесь функции abs () в качестве аргумента передается число -10. Фушщия abs () , приняв при вызове аргумент, возвращает ero абсолютное значение. По
лученное значение присваивается переменной resul t. Поэтому на экране ото
бражается число 10.
Обратите также ВtIИмание на то, что рассматриваемая программа включает за ГОЛОВОК <cstdlib>. ЭТОТ заголовок необходим для обеспечения ВОЗМОЖНОСТИ
вызова функции аЬз ( ) . Каждый раз, когда вы используете библиотечную функ
цию, в проrpамму необходимо включать соответствующий заголовок.
Вобщем случае в своих программах вы будеlе использовать функции двух типов.
Кпервому типу отнесем фушщии, нarшсанные программистом (т.е. вами), и в каче стве примера такой функции можно на.1вать функцию таi n ( ) . как вы узнаете ниже, реальные С++-программы содержат множество пользовательских функций.
Функции второго типа предоставляются компилятором. К этой категории Функ
ций принадлежит функция аЬs ( ) . ОбbIЧНо программы состоят как из функций, на
писанных программистами, так и из функций, предоставленных компилятором.
При обозначении функций в тексте этоii КНИЛi используется соглашение (обычно соблюдаемое в литературе, посвященной языку программирования
С++), согласно которому имя функции завершается парой круглых скобок. На пример, если функция имеет имя getval, то ее упоминание в тексте обозначит
ся как getval (). Соблюдение этого соглашения позволит легко отличать имена
переменных от имен функций.
Библиотеки С++
как упоминалось выше, функция аЬs () не является частью языка С++. но ее "знает" каждый С++-компилятор. Эта функция, как и множестводругих, входит
в состав стандартной 6u6лuотeICU. В примерах этой книги мы подробно рассмо трим использование многих библиотечных функций С++.
С++: руководство для начинающих 65
в С++ определен довольно большой набор функций, которые содержатся в
стандартной библиотеке. 3ти функции предназначены для выполнения часто
встречающихся задач, включая операции ввода-вывода, математические вы
числения и обработку строк. При использовании программистом библиотечной
функции компилятор автоматически связывает объектный код этой функции с объектным кодом программы.
Поскольку стандартная библиотека С++ довольно велика, в ней можно найти
много полезных ФУНКЦIIЙ, которыми действительно часто пользуются програм
мисты. Библиотечные функции можно применять подобно строительным бло
кам, из которых возводится здание. Чтобы не "изобретать велосипед", ознакомь
тесь с документацией на библиотеку используемого вами компилятора. Если вы
сами напишете функцию, которая будет "переходить" с вами из программы в про грамму, ее также можно поместить в библиотеку.
Помимо библиотеки функций, каждый С++-компилятор также содержит би блиотеку классов, которая является объеКТllо-ориеt}ТИРОВанной библиотекой.
Но, прежде чем мы сможем использовать библиотеку классов, нам нужно позна
комиться с классами и объектами.
~просыдлятеl<ущегоI<ОНТрОЛЯ--------
1. Что такое функция?
2.Функция вызывается с помощью ее имени. Верно ли это?
3.Что понимается под стандартной библиотекой функций С++?·
ВАЖНОI
"'1 КАючевь'е САОва С++
В стандарте С++ определено 63 ключевых слова. Они показаны в табл. 1.1.
Эти ключевые слова (в сочетании с синтаксисом операторов и разделителей) образуют определение языка С++. В ранних версиях С++ определено ключевое слово overload, но теперь оно устарело. Следует иметь в виду, что в С++ раз
личается строчное и прописное написание букв. Ключевые слова не являются ис ключением, Т.е. все они должны быть написаны строчными буквами.
1.Функция - это подпрограмма, которая содержит одну или несколько С++
инcrpукциЙ.
2.Верно. Чтобы вызвать функцию, дocrnточно В исходном коде программы указать ее имя. З. Стандартная библиотека фyнюntЙ С++ - это коллекция функций, поддерживаемая
+
u
~
:J:
U
О
всеми С+ +-компиляторами.
66 |
Глава 1. Основы С++ |
|
|
||
Таблица 1.1. Ключевые слова С++ |
|
|
|||
азm |
|
auto |
|
Ьооl |
break |
case |
|
catch |
|
char |
class |
const |
|
const |
class |
contint:e |
default |
delete |
do |
|
double |
dinamic cast. |
|
else |
|
enum |
|
explici t |
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 |
st'atic cast |
struct |
|
switch |
template |
|
this, |
|
throw |
|
true |
try |
typedef |
typeid |
|
typenanle |
union |
|
unsigned |
using |
|
virtuaJ. |
void |
|
volatile |
wchar |
t |
while |
|
•Идентификаторы
вС++ идентификатор представляет собой имя, которое присваивается функ
ции, переменной или иному элементу, 'определенному пользователем. 'Иденти
фикаторы могут состоять из одного или нескольких символов. Имена перемен
ных должны начинаться с буквы или символа подчеркивания. Последующим
символом может быть буква, цифра и символ подчеркивания. Символ подчер
кивания можно использовать для улучшения читабельноети имени перемеююй, IJ;lIlример line_count. В С++ прописные и строчные буквы воспринимаются t-.:ш, различные символы, Т.е. myvar И MyVar - это разные имена. В С++ нельзя использовать в качестве идентификаторов ключевые слова, а также имена стан дартных функций (например, abs). Запрещено также использовать в качестве пользовательских имен встроенные идентификаторы (например, cout).
Вот несколько примеров допустимых идентификаторов.
Test |
х |
у2 |
Maxlncr |
ир |
_top |
my_var |
simplelnterest23 |
Помните, что идентификатор не должен начинаться с цифры. Так, 980К недопустимый идентификатор. Конечно, вы вольны называть переменные и
другие программные элементы по своему усмотрению, но обычно идентифика
тор отражает назначение или смысловую характеристику элемента, которому
он принадлежит.
С++: PYI<OBOACTBO ДЛЯ начинающих 67
~ПРОСЫмятеl<ущегоконтром--------
1.Какой из следующих вариантов представляет собой ключевое слово: f оr,
For или FOR?
2.Символы какого типа может содержать С++-идентификатор?
3.Слова ..index21 и Index21 представляют собой один и тот же идентифи
катор?
•ТеСТ,ДАЯ СQМОКQНТрООЯ по МОАJlt'Ю 1
{.Выше отмечалось, что С++ занимает центральное место в области совре менного программирования. Объясните это утверждение.
2.C++-КОМПИJlЯтор генерирует объектный код, который непосредственно ис
пользуется компилятором. Верно ли это?
З. Каковы три основных принципа объектно-ориентированного программи-
рования?
4. С чего начинается выполнение С++-программы?
5. Что такое заголовок?
6. Что такое <iostream>? Для чего служит следующий код?
#include <iostream>
7. Что такое пространство имен?
8. Что такое переменная?
9. какое (какие) из следующих имен переменных недопустимо (недопустимы)?
А. count
В. count
С. count27
D_ 67count
Е. if
1.Ключевым словом эдесь является вариант (от. В С++ все ключевые слова ПШlIутся С ИСПОЛЪЗ0ванием СТРОЧНЫХ букв.
2.С++-идентификатор может содержать буквы, цифры И символ подчеркивания.
+
+
u
J!
~
:I:
8
З. Нет, в С++ прописные и строчные буквы воспринимаются как раэличные симвоJIы.
68 Глава 1. Основы С++
10.как создать однострочный комментарий? Как создать мноrocтpoчный ком ментарий?
11.Представьте общий формат инструкции if. Представьте общий формат
инструкции for.
12.Как создать блок кода?
13.Гравитация Луны составляет около 17% от гравитации Земли. Напишите
программу, которая бы генерировала таблицу земных фунтов и эквива лентных ЗI-Iачений, выраженных в лунном весе. Таблица должна содержать
значения от 1 до 100 фунтов и включать пустые строки после каждых 25
строк результатов.
14.Год Юпитера (т.е. время, за которое Юпитер делает один полный оборот
вокруг СОЛf!.ца) составляет приблизительно 12 земных лет. Напишит(' [IPO- грамму, которая бы выполняла преобразовани.я значений, выраженных в
годах Юпитера, в значения, выраженные в годах Земли. Конечно же, здесь
допустимо использование нецелых ЗliачениЙ.
15.Что происходит с управлением программой при вызове функции?
16.Напишите программу, которая усредняет абсолютные значения пяти значе
ний, введенных пользователем. Програм\tа должна отображать результат.
~Ответы на эти вопросы можно найти на Web-странице данной На заметку " "'книги по адресу: http://www.osborne.com.
Модуль2
Типы данных и операторы
2.1. Типы данных С++
2.2.
2.3.
Литермы
Создание инициализированных переменных
2.4. Арифметические операторы
2.5. Операторы отношений и логические операторы
2.6. Оператор присваивания 2.7. Составные операТОрЫ присваивания
2.8.ПреобразОБание типов в операторах присваивания
2.9.Преобразование типов в выражениях
2.10.Приведеllие ТИПОlJ
2.11.Использование пробелов и круглых скобок
70 Модуль 2. Типы данных и операторы
Центральное место в описании языка ПРОГРJ.ммирования занимают типы дан ных и операторы. Эти элементы определяют ограничсния языка и виды задач, к которым его можно примснить. Нетрудно предположить, что язык С++ поддер
живает богатый ассортимент как типов данных, так и опсраторов, что позволяет
его использовать ДЛЯ решения широкого круга задач программирования.
Типы данных и операторы - это большая тема, которую мы начнем pacc:vla-
тривать с основных типов данных и наиболее часто используемых операторов. В
этом модуле мы также обсудим подробнее такие элементы языка, как перемен
ные и выражения.
Почему ТИПbl данных столь ваЖНbI
Тип переменных определяет операции, которые разрешены для выполнения над ними, и диапазон значений, которые могут быть сохранены с их помощью.
ВС++ определеио несколько типов данных, 11 осе они обладают уникальными
характеристиками. Поэтому все переменные ДОЛЖНЫ быть определены до их ис
пользования, а объявление переменной должно включать спецификатор типа. Без этой информации компилятор не сможет сгеuерировать корректный код.
ВС++ не существует понятия "переменной ОС-\ типа".
Типы данных важНЫ для С++-программирования еще и потому, что несколько
базовых типов тесно связанЫ со "строительными блоками", которыми оперирует
компьютер: байтами и словами. Другими словами, С++ позволяет программисту
задействовать те же самые ТИПЫ данных, которые использует сам централl>НЫЙ процессор. Именно поэтому с помощью С++ можно писать очень эффективные
\
программы системного уровня.
Язык С++ поддерживает встроенные типы данных, которые позволяют ис
пользовать в программах целые числа, СИМВОJlЫ, значения с плавающей точкой
и булевы (логические) значения. Именно использование КОНКРетных типов дан
ных позволяет сохранять и обрабатывать в программах различные виды инфор
мации. как будет показано ниже D этой книге, С++ предоставляет программисту
возможность самому создавать типы данных, а не только использовать встроен
ные. Вы научитесь создавать такие типы данных, как классы, структуры и перс числения, 110 при этом помните, что все (даже очень сложные) новые типы дан
ных состоят из встроенных.
С++: РУI<ОВОДСТВО ДNI начинающих 71
В С++ определено семь основных типов данных. Их названия и ключевые слова, которые используются для объявления переменных этих типов, приведе ны в следующей таблице.
Тип |
Название |
char |
Символьный |
wchar t |
Символьный двубайтовый |
int |
целочисленный |
float |
С плавающей ТОЧКОЙ |
double |
С плавающей точкой двойной точности |
bool |
Лоrnческий (или булев) |
void |
Без значения |
В С++ перед такими типами данных, как char, int и double, разрешается
использовать.модифU1Шmоры. Модификатор служит для изменения значения ба
зовоro типа, чтобы он более точно соответствовал конкретной ситуации. Пере
чиелим возможные модификаторы типов.
signed unsigned long short
Модификаторы signed, unsigned, long и short можно примеitять к це лочисленным базовым типам. Кроме того, модификаторы signed и unsigned
можно использовать с типом char, а модификатор long - с типом double. Все
допустимые комбинации базовых типов и модификаторов приведены в табл. 2.1.
В этой таблице также указаны гарантированные минимальные диапазоны пред
ставления для каждоro типа, соответствующие С++-стандарту ANSI/ISO.
Минимальные диапазоны, представленные в табл. 2.1, важно понимать именно как .мUНUМШlЫtыe дuanаЭ()7fЫ и никак иначе. Дело в том, что С++-компилятор может
расширить один или несколько из этих минимумов (что и делается в большинстве
случаев). Это означает, что диапазоны представления С++-типов данных зависят от
конкретной реализации. Например, ДЛЯ компьютеров, которые используют арифме
тику дополнительных кодов (т.е. почти все COBpeMeННhle компьютеры), целочислен НЫЙ тип будет иметь диапазоli представлеlШЯ чисел от -32 768 до 32 767. Однако во
всех случаях диапазон представления типа short int является подмножеством
диапазона типа in t, диапазон представления KOТOPOro в свою очередь является под
множеством диапазона типа long int. Аналогичными отношениями связаны и
типы float, double и long double. В этом контексте термин noдмножеC11l8O озна
чает более УЗЮiЙ или такой же диапазон. Таким образом, типы int и long int
MOryт иметь одинаковые диапазоны, но диапазон типа int не может быть шире диа
пазона типа long int.