И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина





НазваниеИ. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина
страница3/18
Дата публикации05.09.2013
Размер1.94 Mb.
ТипЛекция
100-bal.ru > Информатика > Лекция
1   2   3   4   5   6   7   8   9   ...   18

Библиотечные идентификаторы. Назначение этих слов зависит от среды
программирования. В случае серьезной необходимости программист может
изменить их смысл. Примеры таких слов: cin, cout и sqrt (имя функции
извлечения квадратного корня).

  • Идентификаторы, введенные программистом. Эти слова "создаются"
    программистом - например, имена переменных (такие, как year_now и an-
    other_age в программе 1.5.1).

    Идентификатором не может быть произвольная последовательность символов. По правилам Си++, идентификатор начинается с буквы или символа подчеркивания ("_") и состоит только из английских букв, цифр и символов подчеркивания.

    2. Типы данных

    2.1 Целые числа

    Правила Си++ требуют, чтобы в программе у всех переменных был задан тип данных. Тип данных int встречался нам уже неоднократно. Переменные этого типа применяются для хранения целых чисел (integer). Описание переменной, как имею­щей тип int, сообщает компилятору, что он должен связать с идентификатором (именем) переменной количество памяти, достаточное для хранения целого числа во время выполнения программы.

    Границы диапазона целых чисел, которые можно хранить в переменных типа int, зависят от конкретного компьютера. В Си++ есть еще два целочисленных типа -short int и long int. Они представляют, соответственно, более узкий и более широкий диапазон целых чисел, чем тип int. Добавление к любому из этих типов префикса unsigned означает, что в переменной будут хранится только неотрица­тельные числа. Например, описание:

    unsigned short int year now, age now, another year, another age;

    18

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

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

    1. Нельзя пользоваться десятичной точкой. Значения 26 и 26.0 одинаковы, но
      "2 6. 0" не является значением типа "int".

    2. Нельзя пользоваться запятыми в качестве разделителей тысяч. Например,
      число 23,897 следует записывать как "23897".

    3. Целые значения не должны начинаться с незначащего нуля. Он применяется
      для обозначения устаревших восьмеричных чисел, так что компилятор бу­
      дет рассматривать значение "011" как число 9 в восьмеричной форме.

    2.2 Вещественные числа

    Для хранения вещественных чисел применяются типы данных float и double. Смысл знаков "+" и "-" для вещественных типов совпадает с целыми. По­следние незначащие нули справа от десятичной точки игнорируются. Поэтому вари­анты записи "+523.5", "523.5" и "523.500" представляют одно и то же значение. В Си++ также допускается запись в формате с плавающей запятой (в экспоненциальном формате) в виде мантиссы и порядка. Например, 523.5 можно записать в виде "5.235e+02" (т.е. 5.235*10*10), а -0.0034 в виде "-3. 4e-03".

    В большинстве случаев используется тип double, он обеспечивает более высо­кую точность, чем float. Максимальную точность и наибольший диапазон чисел достигается с помощью типа long double, но он требует больше памяти (в Visual C++ 10 байт на число), чем double (8 байт).

    2.3 Преобразование типов в выражениях

    При выполнении вычислений иногда бывает нужно гарантировать, что опреде­ленное значение будет рассматриваться как вещественное число, даже если на самом деле это целое. Чаще всего это нужно при делении в арифметических выражениях. Применительно к двум значениям типа int операция деления "/" означает деление нацело, например, 7/2 равно 3. В данном случае, если необходимо получить результат 3.5, то можно просто добавить десятичную точку в записи одного или обоих чисел: "7.0/2", "7/2. 0" или "7.0/2. 0". Но если и в числителе, и в знаменателе стоят перемен­ные, а не константы, то указанный способ не подходит. Вместо него можно приме­нить явное преобразование типа. Например, значение "7" преобразуется в значение типа double с помощью выражения "double (7)". Поэтому в выражении

    answer = double(numerator) / denominator

    операция "/" всегда будет рассматриваться компилятором как вещественное деление, даже если "numerator" и "denumerator" являются целыми числами. Для явного преоб­разования типов можно пользоваться и другими именами типов данных. Например, "int (14.35)" приведет к получению целого числа 14.

    19

    2.4 Символьный тип

    Для хранения символьных данных в Си++ предназначен тип "char". Перемен­ная типа "char" рассчитана на хранение только одного символа (например, буквы или пробела). В памяти компьютера символы хранятся в виде целых чисел. Соответ­ствие между символами и их кодами определяется таблицей кодировки, которая зави­сит от компьютера и операционной системы. Почти во всех таблицах кодировки есть прописные и строчные буквы английского алфавита, цифры 0, . . ., 9, и некоторые специальные символы, например, #, £, !, +, - и др. Самой распространенной таблицей кодировки, скорее всего, является таблица символов ASCII.

    В тексте программ символьные константы типа "char" надо заключать в оди­ночные кавычки, иначе компилятор поймет их неправильно и это может привести к ошибке компиляции, или, что еще хуже, к ошибкам времени выполнения. Например, "'A'" является символьной константой, но "A" будет рассматриваться компилятором в качестве имени переменной. Аналогично, "'9'" является символом, а "9" - целочис­ленной константой.

    Т.к. в памяти компьютера символы хранятся в виде целых чисел, то тип "char" на самом деле является подмножеством типа "int". На Си++ разрешается использо­вать символы в арифметических выражениях. Например, на любом компьютере с таблицей ASCII следующее выражение даст истинное значение (true, или 1):

    '9'-'0' == 57-48 == 9

    В таблице ASCII кодом символа '9' является десятичное число 57 (в шестнадца-теричной записи 0x39), а ASCII-код символа '0' равен десятичному числу 48 (шестна-дцатеричное значение 0x30). Приведенное выражение можно переписать в виде:

    57-48 == 0x39-0x30 == 9

    Кодами ASCII удобнее пользоваться в шестнадцатеричной форме. При записи шестнадцатеричных чисел в Си++ применяется двухсимвольный префикс "0x".

    Переменные типа "char" существенно отличаются от "int" при выполнении ввода данных с клавиатуры и вывода на экран. Рассмотрим следующую программу.

    #include

    int main()

    {

    int number; char character;

    cout « "Напечатайте символ и нажмите Enter:\n"; cin » character;

    number = character;

    cout « "Вы ввели символ '" << character;

    cout « "' .\n";

    cout << "В памяти компьютера он хранится в виде числа ";

    cout « number « ".\n";

    return 0; }

    Программа 2.1.

    Программа 2.1 выдает на экран следующие сообщения:

    20

    Напечатайте символ и нажмите Enter:

    9

    Вы ввели символ '9'.

    В памяти компьютера он хранится в виде числа 57.

    Программу 2.1 можно изменить так, чтобы она печатала всю таблицу символов ASCII. Для этого придется применить "оператор цикла for". "Цикл for" является примером оператора цикла - эти операторы будут рассмотрены подробно в одной из следующих лекций. Оператор for имеет следующий синтаксис:

    for (инициализация; условие_повторения; изменение_значений) Оператор1;

    ОператорN;

    Цикл for выполняется в следующем порядке: (1) Сначала выполняется опера­тор инициализации. (2) Выполняется проверка, является ли условие_повторения истин­ным. Если условие ложно, то оператор for завершается. Если условие истинно, то последовательно выполняются операторы тела цикла Оператор1. . . ОператорN, и затем выполняется оператор изменение_значений. После этого происходит переход на нача­ло шага (2).

    Чтобы код символа вывести на экран в шестнадцатеричной форме, надо снача­ла послать на экран служебный символ-манипулятор. Программа для печати фраг­мента таблицы ASCII (от 32-го символа (пробел) до 126-го (символ '~')), будет выгля­деть так:

    #include int main ()

    int number; char character;

    for (number = 32; number <= 12 6; number = number + 1 )

    character = number;

    cout « "Символ '" « character;

    cout « "' имеет код ";

    cout « dec « number « " (дес.) или ";

    cout << hex « number « " (шестнд.).\n";

    return 0; }

    Программа 2.2. Программа 2.2 напечатает на экране:

    Символ ' ' имеет код 32 (дес.) или 2 0 (шестнд.). Символ '!' имеет код 33 (дес.) или 21 (шестнд.).

    Символ '}' имеет код 125 (дес.) или 7D (шестнд.). Символ '~' имеет код 12 6 (дес.) или 7E (шестнд.).

    21

    2.5 Символьные строки

    В большинстве рассмотренных примеров программ для вывода на экран часто используются символьные строки. В Си++ символьные строки заключаются в двой­ные кавычки. Поэтому в программах часто встречаются операторы вывода вроде:

    cout « "' имеет код ";

    На самом деле в Си++ строковый тип ("string") не является стандартным ти­пом данных, таким, как, например, "int", "float" или "char". Строки хранятся в памя­ти в виде символьных массивов, поэтому строки будут рассматриваться позднее, при изучении массивов.

    2.6 Типы данных, определяемые пользователем

    Вопрос о типах данных, определяемых пользователем, будет обсуждаться на­много более подробно в последующих лекциях. Будет показано, как программист может определить собственный тип данных, необходимый для решения конкретной задачи. Средства определения новых типов данных - одна из наиболее мощных воз­можностей Си++, которые позволяют хранить и обрабатывать в программах на Си++ сложные структуры данных.

    3. Вывод вещественных чисел на экран

    При выводе на экран численных значений типа "float", "double" или "long double" возможно указание точности представления данных на экране и задание не­которых дополнительных параметров отображения, например, отображение значений в формате с фиксированной или плавающей точкой.

    В программе 3.1 вещественное число отображается в формате с фиксированной точкой и двумя десятичными знаками после запятой. Идентификатор "sqrt" является именем библиотечной функции извлечения квадратного корня. Описание библиотеки математических функций содержится в заголовочном файле "math.h".

    #include #include int main () {

    float number;

    cout << "Введите вещественное число.\n";

    cin » number;

    cout « "Корень из ";

    cout.setf(ios::fixed); // СТРОКА 12 cout.precision(2); cout « number;

    cout « " примерно равен " « sqrt( number ) « ".\n"; return 0; }

    Программа 3.1. Программа 3.1 напечатает на экране:

    22

    Введите вещественное число.

    200

    Корень из 200.00 примерно равен 14.14.

    Если СТРОКУ 12 заменить на "cout.setf (ios::scientific);", то вид результа-та изменится:

    Введите вещественное число.

    200

    Корень из 2.00e+02 примерно равен 1.41e+01.

    В выходные данные можно включить параметры табуляции. Для этого предна­значена функция ширины поля, например, "cout.width(20)". Она задает ширину сле­дующего выводимого на экран значения равной, как минимум, 20 символам (при меньшей ширине автоматически будут добавлены пробелы). Эта возможность осо­бенно полезна для печати таблиц.

    В компиляторе Visual C++ при указании ширины поля по умолчанию предпо­лагается, что значения выравниваются по правой границе. Чтобы задать выравнива­ние по левой границе поля, потребуется использовать еще несколько манипуляторов ввода-вывода. Это специальные функции и операторы, содержащиеся в библиотеке ввода/вывода Си++. Они описаны в заголовочном файле iomanip.h. Для задания вы­равнивания по левой границе надо установить специальный флажок (переключатель)

    С помощью функции setiosflags :

    #include #include #include

    int main () {

    int number;

    cout « setiosflags( ios::left );

    cout.width(2 0);

    cout << "Число" « "Квадратный корень\n\n";

    cout.setf( ios::fixed );

    cout.precision(2);

    for ( number = 1 ; number <= 10 ; number = number + 1 )

    {

    cout.width(2 0);

    cout « number « sqrt(number) « "\n";

    return 0; }

    Программа 3.2.

    Программа 3.2 выдаст на экран следующие сообщения:

    Число Квадратный корень

    1. 1.00

    2. 1.41

    3. 1.73

    4. 2.00

    5. 2.24

    6. 2.45

    23

    1. 2.65

    2. 2.83

    3. 3.00

    4. 3.16

    (ПРИМЕЧАНИЕ: во всех примерах идентификатор "cout" является именем перемен­ной-объекта класса "stream" (поток). Функции "setf (...)", "precision (. . .)" и

    "width(...)" являются функциями-членами класса "stream". Понятия "объект", "класс", "функция-член" и др. будут подробно рассматриваться в курсе объектно-ориентированного программирования.)

    4. Описания, константы и перечисления

    Как вы уже знаете, в программах на Си++ переменные обязательно должны быть описаны до первого использования, например, так:

    float number;

    После оператора описания до момента выполнения первого оператора при­сваивания значение переменной "number" будет неопределенным, т.е. эта переменная может иметь случайное значение. В Си++ можно (и желательно) инициализировать переменные конкретными значениями непосредственно при описании переменных. Например, возможен следующий оператор описания с инициализацией:

    float PI = 3.1416;

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

    4.1 Тип "Перечисление"

    Для описания набора связанных по смыслу констант типа "int" в Си++ есть оператор перечисления. Например, описание вида

    enum { MON, TUES, WED, THURS, FRI, SAT, SUN };

    эквивалентно описанию 7 констант-кодов дней недели:

    const int MON = 0; const int TUES = 1; const int WED = 2; const int THURS = 3; const int FRI = 4; const int SAT = 5; const int SUN = 6;

    По умолчанию членам перечисления "enum" присваиваются значения 0, 1, 2, и т.д.. При необходимости члены перечисления можно инициализировать другими зна­чениями. Неинициализированным явно членам будут присвоены значения по поряд­ку, начиная от предыдущего проинициализированного члена:

    enum { MON = 1, TUES, WED, THURS, FRI, SAT = -1, SUN };

    В приведенном примере "fri" имеет значение 5, а "sun" - значение 0.

    24

    4.2 Расположение описаний констант и переменных в исходном тексте

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

    #include

    const float PI = 3.1416;

    const float SCREEN_WIDTH = 317.24;

    int drawCircle(float diameter); /* Это "прототип функции" */

    int main() {

    float radius = 0;

    cout « "Введите радиус окружности.\n"; cin >> radius;

    drawCircle(radius*2);

    cout.setf(ios::fixed); cout.precision (2);

    cout « "Длина окружности радиуса " « radius; cout « " примерно равна " « 2*PI*radius « ".\n"; return 0; }

    int drawCircle(float diameter) {

    float radius = 0;

    if (diameter > SCREEN_WIDTH)

    radius = SCREEN_WIDTH/2.0; else

    radius = diameter/2.0;

    После определения функции "main ()" в этой программе содержится определе­ние функции рисования окружности "drawCircle (...)". Детали реализации этой функции сейчас не существенны (будем считать, что функция drawCircle (...)" реа­лизована корректно и ею можно пользоваться так же, как, например, функцией "sqrt (...)"). Обратите внимание, что, хотя переменная "radius" используется в обеих функциях "main ()" и "drawCircle (...)", это не одна и та же переменная, а две разных.

    Если бы переменная "radius" была описана до функции "main", то в таком слу­чае она была бы глобальной переменной (общедоступной). Тогда, предполагая, что внутри функции "drawCircle (...)" описания переменной уже нет, если "drawCir-cle(...)" присвоит глобальной переменной значение "screen_width/2.0", то это значение чуть позже функция "main ()" использует для вычисления длины окружности и получится неверный результат.

    В приведенной программе глобальной переменной нет, а есть две локальных переменных "radius". Например, первая переменная "radius" является локальной пе-

    25

    ременной функции "main ()", или, говорят, что функция "main ()" является областью видимости этой переменной.

    Константы общего назначения, такие, как "pi" и "screen_width", принято опи­сывать глобально, чтобы они были доступны внутри любой функции.

    Для контроля действий программы в приведенном фрагменте предусмотрено повторное отображение данных, введенных пользователем. Другими словами, задан­ное пользователем значение "radius" еще раз печатается на экране перед отображени­ем длины окружности.
  • 1   2   3   4   5   6   7   8   9   ...   18

    Похожие:

    И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина iconИ. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной...
    Цели: 1 продолжить знакомство с героями поэмы «Полтава»; познакомиться с изображением Полтавской битвы в поэме
    И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина iconИ. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной...
    ...
    И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина iconМетодические рекомендации по подготовке, оформлению, предзащите и...
    В. А. Усков, заместитель декана естественно-географического факультета по развитию, доцент кафедры физической географии и методики...
    И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина iconПроблемы коммуникации
    М. Е. Евсевьева (зав кафедрой, доцент А. А. Ветошкин); С. А. Борисова, директор Института международных отношений Ульяновского государственного...
    И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина iconПрограмма по формированию навыков безопасного поведения на дорогах...
    Елена Святославовна Симакова, кандидат педагогических наук, доцент кафедры гуманитарных и естественнонаучных дисциплин Рязанского...
    И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина iconПрограмма курса по выбору «Орнитология» предназначена для студентов...
    Автор программы: к б н., доцент, зав кафедрой биологии и химии Марина Николаевна Харламова
    И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина iconРоссийской Федерации Федеральное государственное образовательное...
    Петренко И. М., зав кафедрой экономической теории, д-р экон наук профессор Дулин М. П., зав кафедрой педагогики и психологии, д-р...
    И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина iconРахманкулова Людмила Кузьминична, кандидат филологических наук, доцент...
    Автор программы: С. А. Виноградова, кандидат филологических наук, доцент, зав кафедрой английского языка и английской филологии
    И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина iconПротокол №5 От 12 января 2012 г Заседания кафедры электроники и вычислительной...
    Зав кафедрой Хакимова Г. Г. сообщила, что кафедра проводит 2-й Чемпионат по цифровой схемотехнике
    И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина iconЛингвистические проблемы
    Московского государственного педагогического института иностранных языков им. М. Тореза (зав кафедрой доцент Ю. А. Денисенко); д-р...
    И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина iconМгпу учебно-методический комплекс дисциплины
    А. В. Прялухина, кандидат психологических наук, доцент, зав кафедрой психологии Российского государственного социального университета...
    И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина iconРабочая программа по дисциплине «теория экономического анализа»
    Рецензент: к с н., доцент, зав кафедрой «Экономики и управления на предприятии и маркетинга» Пятигорского государственного гуманитарно-технологического...
    И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина iconРабочая программа по дисциплине «международный менеджмент»
    Рецензент: к с н., доцент, зав кафедрой «Экономики и управления на предприятии и маркетинга» Пятигорского государственного гуманитарно-технологического...
    И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина iconМетодические рекомендации по написанию курсовых работ дисциплине
    Рецензент: к с н., доцент, зав кафедрой «Экономики и управления на предприятии и маркетинга» Пятигорского государственного гуманитарно-технологического...
    И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина iconУчебное пособие Краснодар 2008
    В. А. Оробец); кафедра паразитологии и ветсанэкспертизы Донского государственного аграрного университета (зав кафедрой, проф., к...
    И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной тех­ники Рязанского государственного педагогического университета им. С. А. Есенина iconРабочая программа по дисциплине «Экономика организаций (предприятий)...
    Рецензент: к с н., доцент, зав кафедрой «Экономики и управления на предприятии и маркетинга» Пятигорского государственного гуманитарно-технологического...


    Школьные материалы


    При копировании материала укажите ссылку © 2013
    контакты
    100-bal.ru
    Поиск