Приведение типов при вычислении значения выражения 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Приведение типов при вычислении значения выражения



При вычислении выражения, если операнды разного типа, происходит автоматическое преобразование типов к типу операнда высшего ранга. Приоритеты типов в порядке убывания: double, float, int, char. Например, в выражении 1.5 - 3 результат вычисленного  выражения будет вещественного типа.

При делении 3/2 результат 1, 2/3 – результат 0. Для получения вещественного  результата, надо использовать явное преобразование типов.

Кроме автоматического преобразования может быть выполнено явное преобразование вида: (<имя типа>) <выражение>.

Изменить тип операндов можно еще и явно изменить тип одного из них.

c= (double)a/b; или с =a/(double)b;

(double)3)/2 или 3/(double)2 или 3./2 или 3/2. Результат будет вещественный – 1.5

Если написать (double)(1/3), то результат будет все равно 0, только вещественный - 0.000000

double y=3.25;

int x,z;

x = (int) y; // значение y будет приведено к целому типу – 3.

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

Неявное приведение типов производится по следующему правилу:

Если в выражении участвуют типы char, short, то они приводятся к типу int. Тип float приводится к типу double.

Для любой пары операндов, если один из них long double, то другой приводится к long double.

В операторе присваивания результат в правой части присваивания приводится к типу переменной в левой части.

#include <stdio.h>

#include <stdlib.h>

int main()

{

int a=5,b=27;

double c=4.8,d;

d=++a-(b+=3)/c;

printf("d=%f\n",d);

return 0;

}

d=-0.250000

Лекция 5

Подключение библиотек

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

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

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

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

Чтобы подключить к программе библиотеку, надо подключить заголовочный файл (# inckude <имя заголовочного файла. h >). Существуют 15 заголовочных файлов. stdio. h (вв/выв), math. h ( матем. функции ), stdlib. h (генератор случ чисел, функции выделения и освобождения памяти), time (функции для работы с системным временем) и т.д.

Ввод/вывод

Для организации ввода/ вывода  в языке Си используются функции стандартной библиотеки. Для подключения к программе этих функций используется директива препроцессора, например, #include <stdio.h >. Каждая стандартная функция имеет прототип в заголовочном файле. Прототипы функций ввода/вывода находятся в файле stdio.h..

Функция форматированного вывода printf

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

Функция printf() переводит данные из внутреннего представления в символьное и выводит результат этого преобразования на экран дисплея. При этом имеется возможность вывести данные в определенном виде, т.е форматировать данные.

Общий вид:

Printf (<”форматная_строка”>,<список_аргументов>);

Форматная (управляющая) строка ограничена кавычками и содержит 2 типа объектов. Может включать произвольный текст (последовательность символов), которые копируются в поток вывода, управляющие символы и спецификации преобразования данных. Список (аргументов) вывода может отсутствовать, например: Printf (“Hello world!\n”). Функция вывода в этом примере содержит только форматную строку.

В форматной строке могут быть указаны управляющие символы ‘\n,  \ t

Например, ‘\n’ – перевод курсора на новую строку. Текст, заключенный в кавычки, выводится на экран, а управляющий символ \ n переводит  курсор на новую строку.

Управляющий символ табуляция   \ t. Табуляция находится на 1, 9, 17, 25 позиции

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

Каждая спецификация формата начинается с символа % и заканчивается символом типа преобразования.

Форматная строка имеет вид:

[поясн.текст][ % флажки ширина_поля.точность модификатор и спецификатор]

Спецификаций должно быть столько же, сколько объектов в списке вывода. Каждая спецификация формата начинается с символа %.

Кроме формата, можно указать дополнительные опции: флаги и модификаторы.

Между символом % и спецификатором типа (d,fl, f) могут быть помещены флаги.

Флаги: - (знак минус) задает выравнивание аргумента по левому краю его поля; + (знак плюс) требует обязательного знака у выводимого числа; пробел – при отсутствии знака перед числом должен стоять пробел; 0 задает дополнение нулями поля слева до заданной ширины при выводе числа. К спецификаторам формата могут быть добавлены модификаторы длины, которые изменят формат вывода. Например, lf – означает, что аргумент имеет тип long.

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

Среди элементов спецификации преобразования обязательными являются только два – символ ‘%’ и спецификатор преобразования. В таблице указаны основные форматы.

Спецификаторы формата

№ пп Команда формата Наименование
  %c Символ
  %d Целое десятичное число
  %I Целое десятичное число
  %e Десятичное число в виде х.хх е + хх
  %E Десятичное число в виде х.хх Е + хх
  %f Десятичное число с плавающей точкой хх.хххххх
  %F Десятичное число с плавающей точкой хх.хххххх
  %o Восьмеричное число
  %s Строка символов
  %u Беззнаковое десятичное число
  %x Шестнадцатеричное число 5а3f
  %X Шестнадцатеричное число 5A3F
  %% Преобразование аргументов не выполняется, выводится символ %
  %p Указатель

 

Для типа double на вводе используют спецификатор lf. В форматной строке список форматов может быть разделен поясняющим текстом. В список вывода (аргументов) функции printf() включают объекты, значения которых должны быть выведены на экран. Это могут быть выражения, переменные, константы, обращения к функциям. Список форматов должен соответствовать по количеству и типам списку аргументов.

Пример:

int y = 7;

float x = 3.1415;

printf(“x = %f\ty = %d\n”, x, y);

На экране:   

Для вывода числовых значений в спецификации преобразования часто используют «ширина_поля» и «точность». Ширина_поля – целое положительное число, определяющее количество знакомест на экране для представления выводимого значения. Для целочисленных данных используется только ширина поля вывода.

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

Пример:

int y = 7;

float x = 3.1415;

printf(“x = %.2f\ty = %4d\n”, x, y);

На экране:

Пример:

int a=37,m=5,n=2;

 double x=178.946, y=12e-9;

 printf("a=%d\n\n\n x=%f",a,x);

printf("a=%6d\ty=%g",a,y);

a выодится в поле 6 знакомест и прижимается к правому краю.

printf("x=%+-10.2f\ty=%e",x,y);

Вывелся знак у числа и число прижалось к левому краю поля вывода из 10 знако-мест.

printf("x=%+-10.2f\ty=%g",x,y);

Изменили формат с e на g. Число отобразилось в более короткой форме.

Функция форматированного ввода scanf

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

С помощью этой функции можно ввести данные любого скалярного типа и строки.

Scanf (”<форматная_строка>”,<список ввода>);

Для функции scanf форматная строка и список аргументов (ввода) обязательны. В форматной строке можно использовать знак % соответствующий вводимому данному спецификатор и знак \ n.

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

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

Исходные данные, введенные с клавиатуры, после нажатия клавиши Enter помещаются в специально выделенную операционной системой область памяти – в буфер клавиатуры и одновременно отображаются на экране в виде строки ввода.

В отличие от функции printf() аргументами для функции scanf() могут быть только адреса объектов программы, обычно это адреса переменных (указатели ). В форматной строке в списке ввода может быть записано несколько аргументов, они перечисляются через запятую: & аргумент 1, & аргумент 2 & аргумент n. Выражение для получения адреса переменной будет таким: &имя_переменной. Знак & это операция вычисления адреса.

Например,

int x;

float y;

/* или scanf (“%d%f”, &x, &y);*/

scanf(“\n%d”, &x);

scanf(“%f”, &y);

Если тип вводимого аргумента double, то спецификатор lf.

Пример



Поделиться:


Последнее изменение этой страницы: 2020-11-23; просмотров: 117; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.221.42.164 (0.021 с.)