Файл: Методичка для изучения основ С++ 2.doc

Добавлен: 09.02.2019

Просмотров: 976

Скачиваний: 34

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Переменные. Типы данных


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

При объявлении переменной для нее резервируется некоторая область памяти, размер которой зависит от конкретного типа переменной. Здесь следует обратить внимание на то, что размер одного и того же типа данных может отличаться на компьютерах разных платформ, а также может зависеть от используемой операционной системы. Поэтому при объявлении той или иной переменной нужно четко представлять, сколько байт она будет занимать в памяти ЭВМ, чтобы избежать проблем, связанных с переполнением и неправильной интерпретацией данных.

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



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

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

Имя переменной (идентификатор) не должно превышать 256 символов (разные компиляторы накладывают свои ограничения на количество распознаваемых символов в идентификаторе). При этом важно учитывать регистр букв (Abe и abc - не одно и то же)! Конечно, имя должно быть достаточно информативным, однако не следует использовать слишком длинные имена, так как это приводит к опискам.


int а = О, А = 1;

float aGe = 17.5;

double PointX;

bool bTheLightlsOn=false;

char LETTER = 'Z';


Константы


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

Символьные константы представляются отдельным символом, заключенным в одинарные кавычки (апострофы): 'е', '@', '<'.

Строковые константы - это последовательность символов, заключенная в двойные кавычки: "Это пример не самой длинной строковой константы!".

Целые константы бывают следующих форматов:

десятичные;

восьмеричные;

шестнадцатеричные.

Десятичные могут быть представлены как последовательность цифр, начинающаяся не с нуля, например: 123; 2384.

Восьмеричные константы - последовательность восьмеричных цифр (от 0 до 7), начинающаяся с нуля, например: 034; 047.

Шестнадцатеричный формат констант начинается с символов Ох или ОХ с последующими шестнадцатеричными цифрами (0...9, A...F), например: 0xF4; 0X5D. Буквенные символы при этом могут быть представлены в как в нижнем, так и в верхнем регистре.


Длинные целые константы, используемые в переменных типа long, определяются латинской буквой I или L сразу после константы без пробела: 36L, 012L, 0x52L.

Вещественные константы - числа с плавающей запятой могут быть записаны в десятичном формате (24.58; 13.0;.71) или в экспоненциальной форме (1е4; 5е+2; 2.2е-5, при этом в мантиссе может пропускаться целая или дробная часть:.2е4).


const double pi = 3.1415;

const int Radius = 3;


Преобразования типов


В С++ существует явное и неявное преобразование типов.

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

Для явного преобразования переменной одного типа в другой перед именем переменной в скобках указывается присваиваемый ей новый тип:


#include <iostream>

using namespace std;


int main()

{

int Integer = 54;

float Floating = 15.854;

Integer = (int) Floating; // явное преобразование типов

cout << "New integer: ";

cout << Integer << '\n';

return 0;

}


В приведенном листинге после объявления соответствующих переменных (целочисленной Integer и вещественной Floating) производится явное преобразование типа с плавающей запятой (Floating) к целочисленному (Integer).

Пример неявного преобразования:


#include <iostream>

using namespace std;


int main()

{

int Integer = 0;

float Floating = 15.854;

Integer = Floating; // неявное преобразование типов

cout << "New integer: ";

cout << Integer << '\n';

return 0;

}


В отличие от предыдущего варианта про1раммы, в данном случае после объявления и инициализации переменных осуществляется присваивание значения переменной с плавающей Floating целочисленной переменной Integer.

Результат работы обеих программ выглядит следующим образом:

New integer: 15

То есть произошло отсечение дробной части переменной Floating.



Структура выбора if (ЕСЛИ)


Структура выбора используется для выбора среди альтернативных путей обработки информации. Например, предположим, что проходной бал на эк­замене — 60. Предложение на псевдокоде


ЕСЛИ оценка студента больше или равна 60

Напечатать "Зачет"


определяет, истинно или ложно условие «оценка студента больше или равна 60». Если это условие истинно, то печатается «Зачет» и «выполняется» следующее по порядку предложение псевдокода (напомним, что псевдокод — это в действитель­ности не язык программирования). Если же данное условие ложно, то предложе­ние печати игнорируется и сразу выполняется следующее по порядку предложение псевдокода. Заметьте, что вторая строка структуры выбора напеча­тана с отступом. Подобные отступы не обязательны, но их настоятельно рекомен­дуется делать, так как они подчеркивают структуры структурированных программ. Компилятор С++ игнорирует такие символы-разделители, как пробе­лы, символы табуляции, перевода строки, используемые для структурированного расположения текста и его вертикальной разрядки.



Соответствующий приведенному псевдокоду оператор if может быть за­писан на языке С++ как


if (grade >= 60)

cout << "Зачет" << endl;


Блок-схема:



Структура выбора if/else (ЕСЛИ-ИНАЧЕ)


Структура выбора if выполняет указанное в ней действие только, если условие истинно, и пропускает его в ином случае. Структура выбора if/else позволяет программисту определить различные действия, которые должны

выполняться в случаях, если условие истинно или ложно. Например, пред­ложение псевдокода


ЕСЛИ оценка студента больше или равна 60

Напечатать "Зачет" ИНАЧЕ

Напечатать "Незачет"


печатает Зачет, если оценка студента больше или равна 60, и печатает Незачет, если оценка меньше 60. В обоих случаях после печати «выполняет­ся» следующее по порядку предложение псевдокода. Отметим, что тело ИНАЧЕ также записывается с отступом.

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

Рассмотренный псевдокод структуры if/else может быть записан на С++ следующим образом:


if (grade >= 60)

cout << "Зачет" << endl;

else cout << "Незачет" << endl;


Блок-схема:



Для множественного выбора можно использовать вложенные структуры if/else, помещая одну структуру if/else внутрь другой. Например, следующее предложение псевдокода будет печатать А при экзаменационной оценке боль­ше или равной 90, В — при оценке, лежащей в диапазоне от 80 до 89, С — при оценке в диапазоне 70-79, D — при оценке в пределах 60-69 и Fпри других оценках.


ЕСЛИ оценка студента больше или равна 90

Напечатать "А" ИНАЧЕ

ЕСЛИ оценка студента больше или равна 80 Напечатать "В"

ИНАЧЕ

ЕСЛИ оценка студента больше или, равна 70

Напечатать "С" ИНАЧЕ

ЕСЛИ оценка студента больше или равна 60

Напечатать "D" ИНАЧЕ

Напечатать "F"


Этот псевдокод может быть записан на языке С++ в виде:


if (grade >= 90)

cout << "А" << endl; else

if (grade >= 80}

cout << "В" << endl; else

if (grade >= 70)

cout << "С" << endl; else

if (grade >= 60)

cout << "D" << endl; else

cout << "F" << endl;


Структура выбора if обычно предполагает наличие в своем теле только одного оператора. Чтобы включить несколько операторов в тело структуры, заключите их в фигурные скобки: «{» и «}». Множество операторов, заклю­ченных в фигурные скобки, называется составным оператором.


if (grade >= 60)

count << "Зачет." << endl;

else {

count << "Незачет." << endl;

count << "Вы должны изучить этот курс снова." << endl;

}


Операции присваивания

В С++ имеется несколько операций присваивания, позволяющих сокра­щать запись присваиваемых выражений. Например, оператор

с = с + 3;

может быть сокращен применением составной операции сложения += :

с += 3;

Операция += прибавляет значение выражения, записанного справа от операции, к величине переменной, указанной слева, и сохраняет результат в этой переменной. Любой оператор вида

переменная = переменная операция выражение;


где операция — одна из бинарных операций +, -, *, / или % (или иные операции, которые будут рассмотрены позднее), может быть записан в виде

переменная операция = выражение;

Таким образом, присваивание с += 3 добавляет 3 к с. Рис. 2.12 пока­зывает арифметические операции присваивания, примеры выражений с этими операциями и их расширенное толкование.


Операция присваивания

Пример

Пояснение

Результат присваивания

Предположим: int с = 3, d = 5, е = 4, f = 6, g = 12;

+=

с += 7

с = с + 7

с = 10

-=

d -= 4

d = d - 4

d = 1

*=

е *= 5

е = е * 5

е = 20

/=

f /= 3

f = f / 3

f = 2

%=

g %= 9

g = g % 9

g = з



Операции инкремента и декремента


В С++ имеется унарная операция инкремента ++ (увеличение на 1) и унарная операция декремента - (уменьшение на 1). Если переменная с должна быть увеличена на 1, лучше применить оператор ++, чем выражения c=c+l или c+=l. Если операция инкремента или декремента помещена перед переменной, говорят о префикс­ной форме записи инкремента или декремента. Если операция инкремента или декремента записана после переменной, то говорят о постфиксной форме записи. При префиксной форме переменная сначала увеличивается или уменьшается на единицу, а затем это ее новое значение используется в том выражении, в котором она встретилась. При постфиксной форме в выражении используется текущее значение переменной, и только после этого ее значение увеличивается или уменьшается на единицу.

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

Программа выводит на экран значения с до и после применения опера­ции ++. Операция -- действует аналогично.


Операция

Название операции

Пример выражения

Пояснение

+

префиксная форма инкремента

++а

Величина а увеличивается на 1 и это новое значение а используется в выражении, в котором оно встретилось

+

постфиксная форма инкремента

а++

В выражении используется текущее значение а, а затем величина, а увеличивается на 1

-

префиксная форма декремента

--b

Величина b уменьшается на 1 и это новое значение Ь используется в выражении, в котором оно встретилось

-

постфиксная форма декремента

b--

В выражении используется текущее значение b, а затем величина b уменьшается на 1



Различие между префиксой и постфиксной формами операции инкремента:


int Main()

{

int с;

c=5;

cout << с << endl;

cout << с++ << endl;

cout << с << endl;

// Постфиксная форма инкремента

c=5;

cout << с << endl;

cout << ++с << endl; // Префиксная форма инкремента

cout << с << endl;

return 0; // успешное окончание


5

5

6

5

6

6


Три оператора присваивания:

passes = passes + 1;

failures = failures + 1;

student = student + 1;


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

passes += 1;

failures += + 1;

student += 1;


или с использованием операции инкремента в префиксной форме:

++passes;

++failures;

++student;


или в постфиксной форме:

passes++;

failures++;

student++;


Важно отметить, что когда инкремент или декремент переменной осу­ществляется в виде отдельного оператора, то префиксная и постфиксная формы приводят к одинаковому результату. И только если переменная по­является в контексте более сложного выражения, тогда префиксная и пост­фиксная формы приводят к разным результатам.




Математические функции:


Функция

Описание

sqrt(x)

корень квадратный из х

ехр(х)

экспоненциальная функция ех

log(x)

логарифм натуральный х (по основанию е)

Iog10(x)

логарифм десятичный х (по основанию 10)

fabs(x)

абсолютное значение х

ceil(x)

округление х до наименьшего целого, не меньшего чем х

floor(x)

округление х до наибольшего целого, не большего чем х

pow{x, у)

х в степени у

fmod(x, у)

остаток от х/у, как число с плавающей точкой

sin(x)

синус х (х в радианах)

cos(x)

косинус х (х в радианах)

tan(x)

тангенс х (х в радианах)


#include <iostream>

#include <math.h>

using namespace std;


int main()

{

float x=sin(10.7);

cout << x << endl;

}



Упражнения:


  1. Записать следующие формулы:

    1. ;

    2. ;

    3. ;

    4. ;

    5. ;

    6. ;

    7. ;

    8. ;

    9. ;

    10. .



  1. Записать следующие формулы:

    1. ;

    2. ;

    3. ;

    4. ;

    5. ;


  1. Найти сумму n членов арифметической прогрессии, первый член которой равен a, разность равна d.

  2. Вычислить значение первой производной функции xn в заданной точке a при заданном значении n.

  3. Ввести положительное число a. Вычислить

    1. площадь равностороннего треугольника со стороной a;

    2. площадь квадрата со стороной a;

    3. площадь круга, радиус которого равен a.

  4. Вычислить длину окружности, площадь круга, объем шара заданного радиуса.

  5. Даны числа a, b, . Найти площадь треугольника, две стороны которого равны и b, а угол между этими сторонами равен . Считать, что - это

    1. радианная мера угла;

    2. градусная мера угла.

  6. Дано натуральное число n, состоящее из 6 цифр. Определить число сотен и тысяч в нем.

  7. Ввести два вещественных числа. Напечатать коэффициенты приведенного квадратного уравнения, корнями которого являются эти числа.

  8. Дано число f – угол в градусах. Определить смежный к нему угол в радианах.

  9. В бригаде, работающей на уборке сена, имеется n косилок. Первая из них работала m часов, а каждая следующая на 10 мин больше, чем предыдущая. Сколько часов работала вся бригада.

  10. Даны целые числа m, n (часы, минуты), , , определяющие время суток. Определить наименьшее время (число полных минут), которое должно пройти до того момента, когда часовая и минутная стрелка на циферблате

    1. совпадут;

    2. расположатся перпендикулярно друг другу.

  11. Сколько времени в минутах затратит школьник на дорогу от школы до стадиона, если известна длина этого расстояния S км и средняя скорость движения школьника V км/ч.

  12. В квадрат вписана окружность (Рис. 3 .1). Определить площадь заштрихованной части фигуры, если известна длина стороны квадрата.

  13. В квадрат вписана окружность (Рис. 3 .1). Определить площадь заштрихованной части фигуры, если известен радиус окружности.

  14. В квадрат вписана окружность (Рис. 3 .2). Определить площадь заштрихованной части фигуры, если известна длина стороны квадрата.

  15. Рис. 3.1

    Рис. 3.2

    Рис. 3.3

    В


    квадрат вписана окружность (Рис. 3 .3). Определить площадь заштрихованной части фигуры, если известна длина стороны квадрата.