Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Вещественные типы данных языка С



Ключевые слова

 Следующие идентификаторы зарезервированы для использования в качестве ключевых слов и не могут использоваться иным образом:      int        extern     else      char      register   for      float     typedef    do      double    static     while      struct     goto       switch      union     return     case      long      sizeof     default      short     break      entry      unsigned   continue      auto       if

Типы данных

Все переменные должны объявляться перед использованием. Ниже показана стандартная форма объявления:

 тип список переменных;

Здесь тип должен быть корректным типом данных С, а список переменных может содержать одно или более имен идентификаторов, разделенных запятыми. Ниже показаны некоторые виды объявлений:

int i, j, l;

short int si;

unsigned int ui;

double balance, profit, loss;

Типы данных

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

Стандарт С89 определяет пять базовых типов данных.

int – целочисленный тип, целое число;

float – вещественное число одинарной точности с плавающей точкой;

double – вещественное число двойной точности с плавающей точкой;

char – символьный тип для определения одного символа;

void – тип без значения.

Кроме того, существуют модификаторы, которые могут применяться к этим базовым типам.

Ряд компиляторов может поддерживать еще и логический тип _Bool.

Тип void служит для объявления функции, не возвращающей значения, или для создания универсального указателя (pointer).

Объект типа char всегда занимает 1 байт памяти Размеры объектов других типов, как правило, зависят от среды программирования и операционной системы.

Приведем модификаторы базовых типов данных. К ним относятся следующие спецификаторы, предшествующие им в тексте программы signed, unsigned, long, short

Базовый тип int может быть модифицирован к аждым из перечисленных спецификаторов. Тип char модифицируется с помощью unsigned и signed, тип double – с помощью long.

 

 

Типы данных языка С

Тип данных Типичный размер в битах Минимально допустимый диапазон значений
char 8 (или 1 байт) от –128 до 127
unsigned char 8 от 0 до 255
signed char 8 от –128 до 127
int 16 или 32 от –32768 до 32767
unsigned int 16 или 32 от 0 до 65535
signed int 16 или 32 от –32767 до 32767
short int 16 от –32767 до 32767
unsigned short int 16 от 0 до 65535
signed short int 16 от –32767 до 32767
long int 32 от –2147483648 до 2147483647
long long int 64 от –(263–1 ) до (263–1) для С99
signed long int 32 от –2147483647 до 2147483647
unsigned long int 32 от 0 до 4294967295

Для базового типа int возможны следующие записи с модификатором:

signed или signed intunsigned или unsigned intlong или long intshort или short int

Для данных вещественного типа максимальные значения абсолютных величин

Основные операции в языке Си

Над объектами в языке Си могут выполняться различные операции:

· операции присваивания;

· арифметические;

· логические;

· операции отношения;

· операции сдвига.

 

Результатом выполнения операции является число. Операции могут быть бинарными или унарными. Бинарные операции выполняются над двумя объектами, унарные — над одним.

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

Операция присваивания обозначается символом = и выполняется в 2 этапа:

1) вычисляется выражение в правой части;

2) результат присваивается операнду, стоящему в левой части:

 

объект = < выражение>;

 

Пример:

int a = 4; // переменной a присваивается значение 4

int b;

b = a+2; // переменной b присваивается значение 6, вычисленное в правой части

 

Арифметические операции

Основные бинарные операции, расположенные в порядке уменьшения приоритета:

· умножение — *;

· деление — /;

· сложение — +;

· вычитание — -;

· остаток от целочисленного деления — %.

 

Основные унарные операции:

· инкрементирование (увеличение на 1) — ++;

· декрементирование (уменьшение на 1) — --;

· изменение знака — -.

 

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

 

Пример:

int a=2; int b=3; int c, d;

c = a*++b; // c=8, поскольку в операции умножения уже b=4

d = a*b++; // d=6, поскольку в операции умножения b=3

Операции отношения

 

 

Основные побитовые логические операции в языке Си:

· конъюнкция (логическое И) — & - бинарная операция, результат которой равен 1 только когда оба операнда единичны (в общем случае - когда все операнды единичны);

· дизъюнкция (логическое ИЛИ) — | - бинарная операция, результат которой равен 1 когда хотя бы один из операндов равен 1;

· инверсия (логическое НЕ) — ~ - унарная операция, результат которой равен 0 если операнд единичный, и равен 1, если операнд нулевой;

· исключающее ИЛИ — ^ - бинарная операция, результат которой равен 1, если только один из двух операндов равен 1 (в общем случае если во входном наборе операндов нечетное число единиц).

 

a b a & b a | b ~a a ^ b
0 0 0 0 1 0
0 1 0 1 1 1
1 0 0 1 0 1
1 1 1 1 0 0

 

Пример:

unsigned char a = 14; // a = 0000 1110

unsigned char b = 9;   // b = 0000 1001

unsigned char c, d, e, f;

c = a & b;                    // c = 8 = 0000 1000

d = a | b;                     // d = 15 = 0000 1111

e = ~a;                       // e = 241 = 1111 0001

f = a ^ b;                  // f = 7 = 0000 0111

 

Операции отношения

Основные операции отношения:

· эквивалентно — == (проверка на равенство);

· не равно —! = (проверка на неравенство);

· меньше — <;

· больше — >;

· меньше или равно — < =;

· больше или равно — > =.

 

Операции отношения используются при организации условий и ветвлений. Результатом этих операций является 1 бит, значение которого равно 1, если результат выполнения операции - истина, и равно 0, если результат выполнения операции - ложь.

 

 

Ввод-вывод информации

Операции ввода/вывода в языке Си организованы посредством библиотечных функций.

Самый простой механизм ввода - чтение по одному символу из стандартного входного потока (с клавиатуры) с помощью функции getchar( ).

Другая функция - putchar(х) выдает значение переменной x в стандартный выходной поток (на экран дисплея).

Объявления getchar( ) и putchar( ) сделаны в заголовочном файле stdio.h, содержащем описания заголовков библиотечных функций стандартного ввода/вывода. Чтобы библиотечные функции стали доступны программе, к ней необходимо подключить данный файл. Подключение осуществляется с помощью директивы препроцессора, помещаемой в начало программы:

#include < stdio.h>

Операторы

Оператор – единица выполнения программы. Оператор должен заканчиваться символом «точка с запятой» – «; ». Любой оператор может быть помечен меткой. Метка состоит из имени и символа двоеточия – «: ».

Метки описывать не надо.

Условный оператор if

Существуют две разновидности этого оператора:

1) if (условие) оператор1;

2) if (условие) оператор1;

else оператор2;

Если условие истинно, то выполняется оператор1. Если условие ложно, то в первом случае управление передается на следующий оператор после условия, а во втором – выполняется оператор2.

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

 Оператор if может быть вложенным, причем else будет относиться к ближайшему по иерархии if.

Пример:

if (условие 1)

{if (условие 2) оператор1; }

else оператор2;

Условная операция

Условная операция является краткой записью оператора if. Формат операции:

Выражение 1 – проверяемое условие; может быть целого, плавающего типа или указатель.

Если выражение 1 истинно, то выполняется выражение 2, если выражение 1 ложно, то выполняется выражение 3.

Пример: найти максимальное из двух значений и записать его в переменную max.

max=(a> b)? a: b;

Оператор цикла for

Формат оператора:

for (выражение1; выражение2; выражение3) оператор;

выражение1 – задает начальное значение для переменных; выполняется один раз вначале всего цикла,

выражение2 условие выхода из цикла. Проверяется перед каждым возможным выполнением ц икла. Если условие ложно, то цикл заканчивается,

выражение3 – обычно это модификация переменных, выполняется в конце каждой итерации.

Пример: for(i=1; i< =10; i++) оператор;

Возможности оператора for:

1. Можно считать как в порядке убывания, так и возрастания переменной.

2. Шаг параметра может быть любым. for(i=0; i< =2; i+=0.23) оператор;

3. Можно вести подсчет с помощью символов.

for(char ch=’a’; ch< =’z’; ch++)

printf(“Величина кода ASCII для символа %с равна %d \n”, ch, ch);

4. В качестве выражения 3 можно использовать любое правильное выражение. Оно будет выполняться в конце каждой операции.

for(x=1; y< =75; y=x++*2) printf(“x=%f y=%f \n”, x, y);

5. Можно пропускать одно или более выражений, но при этом сохранять символ «; ».

Пример:

for(a=3; a< =25; ) a=a*3;

for(; ; ) {тело цикла} – это бесконечный цикл, пустое условие считается истинным.

6. Выражение 1 не обязательно должно инициализировать параметры цикла. Главное, что оно выполняется один раз при начале цикла.

7. Выражений 1 и выражений 3 в цикле может быть несколько. Они соединяются с помощью операции «, ». Операция «, » объединяет несколько выражений в одно и гарантирует, что самое левое будет выполняться первым.

Пример: for(i=0, j=0; i< j; i++, j− − ) оператор;

Оператор цикла while

Оператор цикла while называется циклом с предусловием и имеет следующий формат:

Формат оператора:

while (выражение) оператор;

Тело цикла выполняется пока выражение истинно. Если тело цикла состоит из нескольких операторов, то используется блок – {…}.

Пример бесконечного цикла:

while(1) { printf(“Это никогда не кончится\n”); }

Пример вывода квадратов чисел от 1 до 10:

i=1;

while(i< =10) { printf(“%2d%4d\n”, i, i*i); i++; }

 

Оператор цикла вида

for (выражение-1; выражение-2; выражение-3) тело;

может быть заменен оператором while следующим образом:

      выражение-1;       while (выражение-2)      { тело         выражение-3;       }

 

 

Оператор цикла do

Оператор цикла do while называется оператором цикла с постусловием и используется в тех случаях, когда необходимо выполнить тело цикла хотя бы один раз. Формат оператора имеет следующий вид:

Do тело while (выражение);

 

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

 Если выражение истинно, то тело цикла опять выполняется, а если ложно, то осуществляется выход из цикла.

Пример вывода квадратов чисел от 1 до 10:

i=1;

do {

printf(“%2d%4d\n”, i, i*i);

i++;

}while(i< =10);

Операторы переходов

1. Переход по метке – goto метка.

Пример:

goto m1;

m1:; {… или m1: оператор;

Переход по метке возможен только внутри блока, функции.

2. О ператор продолжения – continue. Оператор вызывает остановку текущей итерации цикла и вызывает новую итерацию.

Пример (вывод четных чисел от 0 до 100):

for (i=0; i< 100; i++)

{if (i%2) continue;

printf (“%d\n”, i); }

4. Оператор разрыва – break. Используется в операторах цикла и в операторе переключателе. Приводит к выходу из конструкции. Если используются вложенные циклы, то происходит выход из самой внутренней.

Оператор «переключатель»

Этот оператор предназначен для организации выбора одного из множества вариантов. Формат оператора:

Switch (выражение)

{ case метка 1: оператор;

...

case метка N: оператор;

default: оператор;

}

Выражение может быть одним из основных типов (лучше целые или символьные константы). Каждая ветвь помечается словом «case», и рядом с ним стоит метка. Значение выражения сравнивается с меткой, и если они совпали, выполняется оператор. Если совпадений с ветками не произошло, то выполняется ветвь default.

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

case м1:

case м2:

case м3: оператор;

Операторов в ветви может быть несколько, и их не нужно брать в блок за исключением default.

Пример: case м10: оператор1;

оператор2;

оператор3;

case м11:

Если произошло совпадение по метке, то далее будут выполнены все операторы, начиная с указанного оператора и до default. Поэтому в конце каждой ветви ставится оператор «break».

 

 

switch (выражение)

{ case M1: оператор; break;

...

case MN: оператор; break;

default: оператор;

}

Пример: Фрагмент программы выполнения операции над числами по заданному знаку. Считаем, что знак операции хранится в переменной  «sign», а числа в x и y.

switch (sign)

{case ‘-‘: z=x-y; break;

case ‘+’: z=x+y; break;

case ‘*’: z=x*y; break;

case ‘/’: z=x/y; break;

default: printf(“Неизвестная операция! \n”);

}

 

 

int i=2; switch (i)    {     case 1: i += 2;     case 2: i *= 3;     case 0: i /= 2;     case 4: i -= 5;     default: ; }

Выполнение оператора switch начинается с оператора, помеченного case 2. Таким образом, переменная i получает значение, равное 6, далее выполняется оператор, помеченный ключевым словом case 0, а затем case 4, переменная i примет значение 3, а затем значение -2. Оператор, помеченный ключевым словом default, не изменяет значения переменной.

Оператор return

Оператор return завершает выполнение функции, в которой он задан, и возвращает управление в вызывающую функцию, в точку, непосредственно следующую за вызовом. Функция main передает управление операционной системе. Формат оператора:

return [выражение];

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

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

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

Пример:

   int sum (int a, int b)    { renurn (a+b); }

Функция sum имеет два формальных параметра a и b типа int, и возвращает значение типа int, о чем говорит описатель, стоящий перед именем функции. Возвращаемое оператором return значение равно сумме фактических параметров.

Пример:

void prov (int a, double b) { double c;    if (a< 3) return;    else if (b> 10) return;         else { c=a+b;                if ((2*c-b)==11) return;               }      }

В этом примере оператор return используется для выхода из функции в случае выполнения одного из проверяемых условий.

 

Символы типа для ввода

int x, y; float k;

scanf(“%d%d”, & x, & y); Ввод двух целых чисел.

scanf(“%f”, & k); Ввод вещественного числа.

Ключевые слова

 Следующие идентификаторы зарезервированы для использования в качестве ключевых слов и не могут использоваться иным образом:      int        extern     else      char      register   for      float     typedef    do      double    static     while      struct     goto       switch      union     return     case      long      sizeof     default      short     break      entry      unsigned   continue      auto       if

Типы данных

Все переменные должны объявляться перед использованием. Ниже показана стандартная форма объявления:

 тип список переменных;

Здесь тип должен быть корректным типом данных С, а список переменных может содержать одно или более имен идентификаторов, разделенных запятыми. Ниже показаны некоторые виды объявлений:

int i, j, l;

short int si;

unsigned int ui;

double balance, profit, loss;

Типы данных

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

Стандарт С89 определяет пять базовых типов данных.

int – целочисленный тип, целое число;

float – вещественное число одинарной точности с плавающей точкой;

double – вещественное число двойной точности с плавающей точкой;

char – символьный тип для определения одного символа;

void – тип без значения.

Кроме того, существуют модификаторы, которые могут применяться к этим базовым типам.

Ряд компиляторов может поддерживать еще и логический тип _Bool.

Тип void служит для объявления функции, не возвращающей значения, или для создания универсального указателя (pointer).

Объект типа char всегда занимает 1 байт памяти Размеры объектов других типов, как правило, зависят от среды программирования и операционной системы.

Приведем модификаторы базовых типов данных. К ним относятся следующие спецификаторы, предшествующие им в тексте программы signed, unsigned, long, short

Базовый тип int может быть модифицирован к аждым из перечисленных спецификаторов. Тип char модифицируется с помощью unsigned и signed, тип double – с помощью long.

 

 

Типы данных языка С

Тип данных Типичный размер в битах Минимально допустимый диапазон значений
char 8 (или 1 байт) от –128 до 127
unsigned char 8 от 0 до 255
signed char 8 от –128 до 127
int 16 или 32 от –32768 до 32767
unsigned int 16 или 32 от 0 до 65535
signed int 16 или 32 от –32767 до 32767
short int 16 от –32767 до 32767
unsigned short int 16 от 0 до 65535
signed short int 16 от –32767 до 32767
long int 32 от –2147483648 до 2147483647
long long int 64 от –(263–1 ) до (263–1) для С99
signed long int 32 от –2147483647 до 2147483647
unsigned long int 32 от 0 до 4294967295

Для базового типа int возможны следующие записи с модификатором:

signed или signed intunsigned или unsigned intlong или long intshort или short int

Для данных вещественного типа максимальные значения абсолютных величин

Вещественные типы данных языка С

Тип данных Типичный размер в битах Диапазон абсолютных величин
float 32 от 3.4Е–38 до 3.4Е+37
double 64 от 1.7Е–308 до 1.7Е+308
long double 80 от 3.4Е–4932 до 1.1Е+4932

В языке С предусматривается преобразование типов в выражениях и приведение типов.

 Если в выражении смешаны различные типы литералов и переменных, то компилятор преобразует их в один тип. Во-первых, все char и short int значения автоматически преобразуются (с расширением " типоразмера" ) в тип int. Этот процесс называется целочисленным расширением (integral promotion).

Во-вторых, все операнды преобразуются (также с расширением " типоразмера" ) в тип самого большого операнда. Этот процесс называется расширением типа (type promotion), причем он выполняется пооперационно. Например, если один операнд имеет тип int, а другой– long int, то тип int расширяется в тип long int.

Или если хотя бы один из операндов имеет тип double, то любой другой операнд приводится к типу double. Это означает, что такие преобразования, как тип char в тип double, вполне допустимы.

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

В языке С предусматривается явное преобразование (приведение) типов. Общая форма оператора явного приведения типа: (тип) выражение.

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

Общий вид оператора присваивания следующий:

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

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

тип имя_переменной =константа;

Ниже приведено несколько примеров

char ch = 'а';

int first = 0;

float balance = 123.23;

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

Таблица: Примеры констант

Тип данных Пример константы
char 'а' '\n' '9'
int 1 123  21000 - 234
long int 35000L  -34L
short int 10 -12  90
unsigned int 10000U 987U 40000U
float 123.23F   4.34e -3F
double 123.23 12312.333 -0.9876324

В языке СИ присутствует три вида констант:

1. целочисленные;

2. вещественные;

3. символьные.
  Целочисленные константы:

1. десятичная константа указывается десятичным числом в обычной форме;

2. восьмеричная константа указывается числом, начинающимся с цифры ноль и содержащим цифры 0...7;

3. шестнадцатеричная константа указывается целым числом с префиксом 0x или 0X, содержащим цифры 0...9 и буквы латинского алфавита a...f, A...F.

    Вещественные константы записываются в десятичной или шестнадцатеричной системе исчисления. Позиция запятой указывается точкой, экспонента указывается после латинской буквы e (или E). Символьным константам предшествует символ \, это так называемое " экранирование".

В языке СИ присутствуют специальные символы:

‘\’’ – одинарная кавычка,
‘\”’ – двойная кавычка,
‘\\’ – обратный слеш,
‘\? ’ – знак вопроса,
‘\a’ – звуковой сигнал,
‘\b’ – удаление символа,
‘\f’ – прокрутка страницы,
‘\n’ – перевод строки,
‘\r’ – возврат каретки в начало строки,
‘\t’ – горизонтальная табуляция,
‘\v’ – вертикальная табуляция.


Поделиться:



Последнее изменение этой страницы: 2019-06-08; Просмотров: 188; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.119 с.)
Главная | Случайная страница | Обратная связь