Технологии программирования

8185

Технологии программирования

Объявление переменных и типы данных в C++.

В Си++ переменные можно описывать в любой части программы, но перед непосредственным их использованием.

Основные типы данных языка C++

Тип данных Размер, байт Диапазон значений
bool 1 true, false
unsigned short int 2 0 — 65 535
short int 2 -32 768 — 32 767
int 4 -2 147 483 648 — 2 147 483 647
unsigned int 4 0 — 4 294 967 295
float 4 1.2e-38 — 3.4e38
double 8 2.2e-308 — 1.8e308
сhar 1 256 значений символов

 

Объявление переменных в C++

 

int a;          // объявление переменной a целого типа. 
float b,c;   // объявление переменных b,c типа данных с плавающей запятой.

При объявлении переменной можно сразу ее инициализировать.

float b=3.2;   // инициализация переменной b типа float. 
char ch = 'a';   // инициализация переменной ch типа char. 
bool f = true;   // инициализация логической переменной f.

Имя переменной (идентификатор) может состоять только из латинских символов строчных и прописных, цифр от 0 до 9 и знака подчёркивания. При этом имя переменной не может начинаться с цифры.

Переполнение данных

#include ;
#include ;
using namespace std;
void main() {
	unsigned short int a=65535;
	cout<<"a="<<a<<endl;
	a=a+2;
	cout<<"a+2="<<a<<endl;
	getchar();
}

Результат выполнения данной программы:
a=65535
a+2=1

Константные переменные, преобразование типов данных в C++.

Квалификатор const.

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

const float pi = 3.14;     // Целая константа
pi = 3.1; 		        // Нельзя, значение не должно меняться
const float pi;                // Нельзя, отсутствует начальное значение

Константные переменные, преобразование типов данных в C++.

Директива #define

#define  MY_PI  3.14   // строка не заканчивается точкой с запятой.

Отличия const и директивы #define: директива #define создает макроконстанту, и ее действие распространяется на весь файл, а с помощью const создается константная переменная, которая может иметь ограниченную область видимости.

Квалификатор volatile

volatile int my_time;

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

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

Операторы в C++.

Побитовые операторы

Побитовое ИЛИ (|).

Оператор | записывает в бит результата единицу только в том случае, если хотя бы один из сравниваемых бит равен 1. Этот оператор часто используют для установки отдельных битов числа.

Бит 0 Бит 1 Результат
0 0 0
0 1 1
1 0 1
1 1 1

 

01001010 | 10001101 // результат 11001111

Технологии программирования

Исключающее ИЛИ (^).

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

Бит 0 Бит 1 Результат
0 0 0
0 1 1
1 0 1
1 1 0

Операторы сдвига.

сдвиг влево (<<) и сдвиг вправо (>>).

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

Пример

unsigned int value = 52 ;   // младший байт: 0011 0100
value <<= 1 ;                     // младший байт: 0110 1000
cout << value;                   // будет выведено 104
unsigned int value = 15 ;   // младший байт: 0000 1111
value >>= 1 ;                     // младший байт: 0000 0111
cout << value;                   // будет выведено 7

Инкрементирование и декрементирование.

Инкрементирование (++) и декрементирование (—) являются соответственно операциями увеличения или уменьшения значения переменной на 1.

Пример.

a=a+1;
b=b-1;
Соответствуют 
a++;     	 // или ++a
b--;	 // или --b

В постфиксной записи a++ сначала возвращается значение переменной, после чего она увеличивается на 1, в префиксной записи наоборот.

Пример.

int i=3; j, k=0;
k=++i; 		//i=4, k=4
k=i++;		// i=4, k=3
k=--i;		//i=2, k=2
k=i--;		//i=2, k=3
i=j=k--;		//i=0, j=0, k=-1

 

Основные математические операторы в С++

+  —  сложение;
—  —  вычитание;
*  —  умножение;
/  —  деление или целочисленное деление (для целочисленных   переменных);
%  —  деление по модулю (для целочисленных переменных).

// Вычисление суммы и разности двух чисел
#include ;
#include ;
using namespace std;
void main() {
	int a, b=6;
	cout<<"a="; cin>>a;
getchar();
	cout<<a<<"+"<<b<<"="<<a+b<<endl;
cout<<a<<"-"<<b<<"="<<a-b;
getchar();
}

Комбинированные операторы присваивания.

Пример.

a=a+b;

c=c/b;

b=b*4;

a=a%c;

a+=b;

c/=b;

b*=4;

a%=c;

Основные математические функции в C++.

Функция Описание работы функции
double sqrt (double x) Вычисляет и возвращает корень из положительного числа, принимая его в качестве аргумента х
double pow (double x, double y) Возводит число, принимаемое в качестве аргумента х, в степень, принимаемую в качестве аргумента y
double fabs (double x) Вычисляет абсолютное значение числа х (иными словами, его модуль)
double fmod (double x, double y) Вычисляет остаток от деления х на y.
double ceil (double x) Вычисляет наименьшее целое, значение которого не будет меньшим, чем х. Например, функция ceil (4.68) вернет значение 5.00.
double floor (double x) В отличии от предыдущей функции эта функция вычисляет наибольшее целое, по значению не превосходящее х. Например, функция floor (4.68) вернет значение 4.00.
double modf (double value, double *ptr) Разбивает значение аргумента value на целую и дробные части. Целую часть функция сохраняет в объекте на который указывает указатель *ptr, а дробную возвращает.

 

Функция Описание работы функции
double cos (double x) Вычисляет косинус аргумента х, который задается в радианах
double sin (double x) Вычисляет синус аргумента х, который задается в радианах
double tan (double x) Вычисляет тангенс аргумента х, который задается в радианах
double acos (double x) Вычисляет главное значение арккосинуса х. Аргумент х должен быть из интервала [-1;+1]. Функция возвращает значение в радианах из интервала [0; p]
double asin (double x) Вычисляет главное значение арксинуса х. Аргумент х должен быть из интервала [-1;+1]. Функция возвращает значение в радианах из интервала [- p/2; + p/2]
double atan (double x) Вычисляет главное значение арктангенса х.
double exp (double x) Вычисляет значение показательной функции аргумента х.
double log (double x) Вычисляет натуральный логарифм аргумента х.
double log10 (double x) Вычисляет десятичный логарифм аргумента х.

 

Преобразование типов данных в C++.

При использовании в операции переменных различных типов данных Си может автоматически преобразовывать данные из одного типа в другой.
Автоматическое преобразование типов данных приводится к типу данных имеющего более высокий приоритет. Типы данных в порядке уменьшения приоритета:

double
float
long
int
short

Пример

int ival;
float fval1=3.0, fval2=10.0;
ival=fval1+fval1/fval2;

Результат выполнения операции fval1/fval2 равен 0,3;

fval1+fval1/fval2 (=3+0,3=3,3).

Результат выполнения операций в левой части присваивается целочисленной переменной ival, значение этой переменной будет равно 3 (дробная часть отбрасывается).

Задание. Определите значение переменной fval, полученное в результате выполнения фрагмента программы

int ival1=3, ival2=10;
float fval=3.5;
fval=fval+ival1/ival2;

Явное преобразование типов

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

Например

int ival1=3, ival2=10;
float fval=3.5;
fval=fval+(float)ival1/ival2; // fval=fval+ival1/(float)ival2;

Задания для самостоятельной работы

Определите, что будет выведено на экран в результате работы следующей программы.

#include ;
#include ;
using namespace std;
void main() {
	cout<<’A’<<endl;
cout<<(int)‘A’<<endl;
	getchar();
}

Наберите текст программы и проверьте правильность ответа.

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

#include ;
#include ;
using namespace std;
void main() {
	int a=25;  
	cout<<"a="<<a<<endl;
	a=a/2;
	cout<<"a/2="<<a<<endl;
	getchar();
}

Определите, что будет выведено на экран в результате работы следующей программы.

#include ;
#include ;
using namespace std;
void main() {
	int a=2534;  
	с=a/100;
	a=a%100;
	c=a-c;
	cout<<"a="<<a<<endl;
       cout<<"c="<<c<<endl;
	getchar();
}

Наберите текст программы и проверьте правильность ответа.

  • Дан прямоугольный треугольник с катетами a и b. Составьте программу для вычисления гипотенузы c.
  • Треугольник задан координатами своих вершин A(x1,y1), B(x2,y2), C(x3,y3). Составьте программу для вычисления длин его сторон, периметра и площади.
  • Даны два вещественных числа. Составьте программу для нахождения коэффициентов приведенного квадратного уравнения, корнями которого являются эти числа.
  • Составьте программу для нахождения числа сотен и тысяч в заданном шестизначном натуральном числе.
  • Составьте программу для нахождения второй справа цифры в записи заданного четырехзначного целого числа.
  • Даны четыре целых числа (hour, min, sec, time). Первые три из них (hour, min, sec) — это время (в часах, минутах и секундах) начала просмотра фильма, четвёртое (time) определяет продолжительность фильма в секундах. Составьте программу для нахождения времени окончания просмотра фильма. Считать, что фильм шёл непрерывно.
  • На первую клетку шахматной доски положили 1 зерно, а на каждую следующую клетку на n зёрен больше, чем на предыдущую. Составьте программу, которая вычисляет, сколько всего зёрен оказалось на шахматной доске.