Операции, применяемые к вещественному типу

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

}

Упражнения

  1. Запишите константу вещественного типа 34Е-2 в математической форме.
  2. В каком формате будет представлена константа 15L? Объясните, что сделает компилятор, когда встретит такое описание константы.
  3. Что выведет программа

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;

}

Упражнения.

  1. Найти сумму пяти введенных вещественных чисел.
  2. Найти среднее арифметическое пяти вещественных типов.
  3. Найти сумму членов арифметической прогрессии из 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)

Упражнения

  1. Определить порядок выполнения операций в выражении

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)

Тип выражения

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

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

Правила определения типа выражения.

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

Примеры определения типа выражения

Пусть определены переменные

int x;

short y;

long z;

char a;

Выражение x+y+z целого типа и формат хранения int.

Выражение x/y целого типа и формат хранения int.

Выражение y/a целого типа и формат хранения short.

  1. Если в выражении все операнды вещественного типа, то тип выражения вещественный и формат хранения double.

Пример определения типа выражения

Пусть переменна имеет тип float

float y=123.75;

Выражение у/2.0 вещественного типа и формат хранения double.

  1. Если в выражении хотя бы один операнд вещественного типа, то выражение имеет тип вещественный и формат хранения 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

Наши рекомендации