Операции, применяемые к вещественному типу
1) Арифметические операции: +, -, *, /
2) Преобразование вещественных значений в целые:
a) Отбросить дробную часть числа. Для этого можно использовать операцию приведения типа: (имя типа) выражение.
Пример использования операции приведения типа в выражении.
Задание. Вывести первую цифру дробной части десятичного действительного числа.
main()
{
double y=123.75;
unsigned int z=(y-(int) y)*10;
printf(“z=%d”,z); //результат 7
}
b) Присвоить вещественное значение переменной целого типа. Преобразование выполниться автоматически, но компилятор предупредит о возможной ошибке.
Пример использования операции присваивания для записи в переменную целого типа целой части числа.
main()
{
double y=123.75;
unsigned int z=y;
printf(“z=%d”,z); //результат 123
}
Упражнения
- Запишите константу вещественного типа 34Е-2 в математической форме.
- В каком формате будет представлена константа 15L? Объясните, что сделает компилятор, когда встретит такое описание константы.
- Что выведет программа
main()
{
double y=123.75;
unsigned int z=((int) y)%10;
printf(“z=%d”,z); //результат ????????
}
3. Оператор определения переменных
Переменная – это объект программы, значение переменной может изменяться в процессе работы программы.
Константа – это переменная, значение которой изменить нельзя.
Формат определения простой переменной
[const] [класс памяти]<тип переменной> <имя переменной>[= значение];
Примечание. В квадратных скобках указываются элементы определения, которые можно опускать. Например, если определяется переменная, то слово const не включается в определение, а если константа, то обязательно включается. Скобки вида < > используются только для выделения элемента в строке формата и при записи оператора в программе не используются.
Инициализация переменной – это присваивание ей начального значения при определении.
Формат определения списка простых переменных одного типа
[const] [класс памяти] <тип переменной> <имя переменной> [= значение], <имя переменной> [= значение], <имя переменной> [= значение], ……, <имя переменной> [= значение];
Класс памяти определяет время жизни переменной и область ее действия
static : время жизни – пока работает программа (постоянно); область действия – блок в котором она определена.
auto : это локальные переменные, время жизни блок, в котором они определены;
extern : внешние, определены в другом модуле, подключенном к текущему и используются в текущем;
register : переменная использует регистр МП для хранения значения, если он не занят.
Пример использования статической и внешней переменной
Функция одного модуля может обратиться к переменной другого модуля, такие переменные называю внешними (extern). Они не создаются функциями и не разрушаются.
Статические переменные определяются с классом памяти static. Комилятор выделяет для такой переменной постоянную (глобальную память), даже если переменная объявлена внутри функции. Если переменная объявлена в функции и она инициализирована, то инициализации выполняется только при ервом вызове функции.
Модуль, использующий внешюю переменную
#include "stdafx.h"
#include "stdio.h"
void ff()
{
extern int z;
printf("z=");
scanf("%d",&z);
}
Программа, которая использует значение переменной, заполненной в функции
#include "stdafx.h"
#include "stdio.h"
#include "iomanip"
#include "iostream"
#include "locale.h"
#include "ExternA.h" подключение модуля, который использует внешнюю переменную z
using namespace std;
int f()
{
static int x=10; статическая переменная не локальна. Ее значение
x=x*2; return x; сохраняется по завершении функции
}
int z;
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "rus");
int a; ff();
cout<<"Зачение переменной="<<z<<"\n";
a=f();
cout<<"Зачение переменной="<<a<<"\n";
//cout<<x<<' '<<setw(10)<<setprecision(4)<<x<<endl;
//cout<<15<<' '<<hex<<15<<' '<<oct<<15<<endl;
getchar(); getchar();
return 0;
}
Определения переменных различного типа осуществляется отдельными операторами.
Пример определения переменных целого типа
int main()
{
int x, y, z; //без инициализации
long a,b;
unsigned int m=10; //с инициализацией
unsigned char ch=’A’;
}
Пример разработки программы с вводом и выводом.
Задача. Найти расстояние между двумя точками на плоскости. Точки заданы координатами.
#include “stdio.h”
#include “math.h”
int main()
{
double x1, y1, x2, y2,R;
printf(“Введите 4 числа”);
scanf(“%lf %lf %lf %lf”, &x1, &y1, &x2, &y2);
R=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
printf(“R=%7.3f”, R);
return 0;
}
Упражнения.
- Найти сумму пяти введенных вещественных чисел.
- Найти среднее арифметическое пяти вещественных типов.
- Найти сумму членов арифметической прогрессии из n элементов, в которой первый член равен а, а разность прогрессии равна d.
Выражения
Вычисляемое выражение состоит из операндов , соединенных знаками операций.
Знак операции – это символ или группа символов, сообщающих компилятору о необходимости выполнения арифметических, логических или других действий.
Операнд – это константа, идентификатор, вызов функции, индексное выражение, выражение выбора элемента.
Комбинацию операндов можно также рассматривать как операнд.
В простейшем случае операнд - это переменная или константа.
При вычислении выражения операции выполняются в строгой последовательности, определяемой их приоритетом.
Порядок выполнения операций может регулироваться с помощью круглых скобок.
Операции с более высоким приоритетом выполняются до операций с более низким рангом, если часть выражения заключена в скобки, то вначале вычисляется выражение внутри скобок.
Виды выражений
· Первичные(вызовы функций, индексные выражения и выбор элементов);
sin(x); x[10];
· Унарные (с одним операндом);
-x; &b; !t; *ptr
· Бинарные (с двумя операндами);
A+b;
· Тернарные (с тремя операндами);
x>y:x?y
· Выражения присваивания;
X=10; A=b=c=5
· Выражения приведения типа.
int(7.0/2)
Упражнения
- Определить порядок выполнения операций в выражении
a) x-y*5/3-y+(2+a*b/c)
b) x<<2+y>>3*4
c) –x*5/(3+x*y)
d) x+y=sin(x)+cos(y)
Тип выражения
Так как выражение предназначено для вычисления значения, то по правилам языка программирования это значение должно иметь тип, чтобы сообщить компилятору о формате хранения. Поэтому существуют правила определения типа выражения.
При вычислении значения выражения все промежуточные значения последовательно сохраняются в памяти, специально выделенной для выражения. Эта память должна иметь формат, соответствующий типу выражения.
Правила определения типа выражения.
- Если все операнды в выражении целого типа, то выражению присваивается тип – целый. Формат хранения в памяти определяется типом старшего операнда. Старший тип тот, множество значений которого больше.
Примеры определения типа выражения
Пусть определены переменные
int x;
short y;
long z;
char a;
Выражение x+y+z целого типа и формат хранения int.
Выражение x/y целого типа и формат хранения int.
Выражение y/a целого типа и формат хранения short.
- Если в выражении все операнды вещественного типа, то тип выражения вещественный и формат хранения double.
Пример определения типа выражения
Пусть переменна имеет тип float
float y=123.75;
Выражение у/2.0 вещественного типа и формат хранения double.
- Если в выражении хотя бы один операнд вещественного типа, то выражение имеет тип вещественный и формат хранения double.
Пусть переменная имеет целый тип, а делитель вещественного типа
int x=13,y=5;
Выражение y+x/2.0 имеет вещественный тип double.
Упражнения
1) Определите тип выражения
Выражение | Тип |
2+1e3 | |
2.0*5/3 | |
5%10*2 | |
2.0+5/2 |
2) Вычислите значение выражения
123%100/10
3)5<<2%4*3