Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 300094.doc
Скачиваний:
2
Добавлен:
30.04.2022
Размер:
342.53 Кб
Скачать

1. Лабораторная работа № 1

Тема. Программирование ветвлений. Простые скалярные типы данных.

Цель. Закрепить практические навыки программирования простейших задач, в основе решения которых лежат фундаментальные структуры, такие как последовательность и ветвления и скалярные типы данных.

Содержание работы

1. Изучить управляющие структуры последовательность и ветвление (операторы присваивания и условные операторы языка Си).

2. Изучить основные характеристики скалярных типов данных.

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

Методические указания

  1. Понятие ветвления

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

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

2. Типы данных

В Си переменные должны быть описаны, а их тип специфицирован до того, как эти переменные будут использованы.

При описании переменных применяется префиксная запись, при которой вначале указывается тип, а затем - имя переменной.

Общая форма описания простой переменной:

<спецификация типа > <идентификатор>[,<идентификатор>...]

Например:

float weight;

int exam,а1,р;

char ch;

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

Переменные можно инициализировать в месте их описаний.

Пример:

int height = 71 ;

float income =26034.12 ;

Простейшими скалярными типами, предопределёнными в Си (их называют базовыми типами), являются:

  • целые типы: char, int, long int;

  • плавающие типы: float, double, long double.

Целые типы имеют две формы – знаковую (signed) и беззнаковую (unsigned). В сокращенной форме signed может быть опущено.

  1. Операции

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

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

К арифметическим операциям относятся: сложение (+), вычитание (-), деление (/) , умножение (*) и остаток (%). Все операции (за исключением остатка) определены для значений целого и плавающего типов. Остаток (остаток от деления) определен только для значений целых типов. Все арифметические операции с плавающей точкой производятся над операндами двойной точности.

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

В языке определены следующие операции отношения: проверка на равенство (= =), проверка на неравенство (!=), меньше (<), меньше или равно (< =), больше (>), больше или равно (> =).

Все перечисленные операции вырабатывают результат типа int. Если данное отношение между операндами истинно, то значение этого целого - единица, а если ложно, то нуль.

Логические операции

В языке имеются три логические операции: операция И (&&) - конъюнкция, операция ИЛИ (||) – дизъюнкция и отрицание (!).

Логические операции определены для целых и плавающих типов. Результат логической операции типа int. Операция состоит в вычислении значения операнда/операндов и сравнении его/их с нулем. Все значения, отличные от нуля, интерпретируются как истинные иначе - ложь.

Результатом логической операции является либо единица (истина), либо нуль (ложь).

Вычисление выражений, содержащих логические операции, производится слева направо и прекращается (усекается), как только удается определить результат. Если выражение составлено из логических утверждений (т.е. выражений, вырабатывающих значения типа int), соединенных между собой операцией И (&&), то вычисление выражения прекращается, как только хотя бы в одном логическом утверждении вырабатывается значение нуль. Если выражение составлено из логических утверждений, соединенных между собой операцией ИЛИ (||), то вычисление выражения прекращается, как только хотя бы в одном логическом утверждении вырабатывается ненулевое значение.

Таблица 1.1

Размер памяти и область значений типов

Тип

Назначение

Представление в памяти

Область значений

Char

int

long

unsigned char

unsigned int

unsigned long

float

double

long double

знаковый символьный

знаковый целый

знаковый длинный целый

беззнаковый символьный

беззнаковый

целый

беззнаковый

длинный целый

плаваюий одинарной точности

плавающий двойной точности

длинный плавающий двойной точности

1 байт

зависит от реализации

4 байта

1 байт

зависит от реализации

4 байта

4 байта

8 байтов

10 байтов

от -128 до 127

от –32768 до 32767, если 2 байта

от

2.147.483.648 до 2.147.483.647

от 0 до 255

от 0 до 65535, если 2 байта

от 0 до 4.294.967.295

стандартный формат IEEE

стандартный формат IEEE

стандартный формат IEEE

Примеры выражений, в которых используются логические операции:

i > 50 && j == 24 – значение будет истинно (равно единице) только тогда, когда оба утверждения i > 50 и j == 24 истинны ;

value1 < value2 && (value3 > 50 || value4 < 20) – подвыражение (value3 > 50 || value4 < 20) истинно, если истинно хотя бы одно из утверждений value3 > 50 или value4 < 20; все выражение истинно, когда истинны оба утверждения value1 < value2 и (value3 > 50 || value4 < 20).

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

К операциям присваивания относятся =, +=, -=, *= и /=, а также префиксные и постфиксные операции ++ и --. Все операции присваивания присваивают переменной результат вычисления выражения. Если тип левой части присваивания отличается от типа правой части, то тип правой части приводится к типу левой.

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

Например: a = ( b = c ) * d;

Вначале переменной b присваивается значение с, затем выполняется операция умножения на d, и результат присваивается переменной а.

Операции +=, -=, *= и /= являются укороченной формой записи операции присваивания. Их применение проиллюстрируем при помощи следующего описания:

a += b означает a = a + b. a -= b означает a = a - b. a *= b означает a = a * b. a /= b означает a = a / b.

Префиксные и постфиксные операции ++ и -- используют для увеличения (инкремент) и уменьшения (декремент) на единицу значения переменной.

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

++a увеличивает значение переменной а на единицу до использования этой переменной в выражении.

а++ увеличивает значение переменной а на единицу после использования этой переменной в выражении.

--a уменьшает значение переменной а на единицу до использования этой переменной в выражении.

a-- уменьшает значение переменной а на единицу после использования этой переменной в выражении.

Операция следования (или последовательного вычисления)

выражение1, выражение2

Запятая – это знак операции следования.

Вычисляется значение первого выражения, затем второго. Результат операции имеет значение и тип второго выражения.

Операцию sizeof (размер) можно применить к константе, типу или переменной. В результате будет получено число байтов, занимаемых операндом.

Например:

printf ( "\nРазмер памяти под целое %d", sizeof( int) );

printf ( "\nРазмер памяти под cимвол %d", sizeof( сhar) );

Таблица 1.2

Приоритет и порядок выполнения операций в языке Си

Знак операции

Наименование

Порядок

() [ ] . - >

- ~ ! * &

+ + - - sizeof

приведение типа

* / %

+ -

< > <= >=

= = !=

&&



?:

= *= /= %= +=

-= <<= >>=

,

Первичные

Унарные

Мультипликативные

Аддитивные

Отношение

Отношение

Логическое И

Логическое ИЛИ

Условная

Простое и составное присваивание

Последовательное вычисление

Слева направо

Справа налево

Слева направо

Слева направо

Слева направо

Слева направо

Слева направо

Слева направо

Справа налево

Справа налево

Слева направо

Операции в таблице приведены в порядке убывания приоритета.