- •Методические указания
- •«Алгоритмизация и программирование»
- •Часть 1. Понятие алгоритма и принципы алгоритмизации
- •1 Основные принципы разработки алгоритмов и программ
- •Лабораторная работа 1
- •3 Циклический вычислительный процесс
- •Задания для самостоятельной работы
- •Лабораторная работа 2 селективная обработка массивов
- •Общие сведения
- •1 Селективная (выборочная) обработка информации
- •2 Нахождение экстремального значения
- •3 Формирование одномерного рабочего массива
- •3.7 Сортировка элементов массива
- •Задания для самостоятельной работы
- •Лабораторная работа 3 вложенные циклы. Обработка двумерных массивов
- •Общие указания
- •1 Вложенные циклы
- •3.9 Обработка заданной строки (столбца) матрицы
- •3.10 Обработка заданной диагонали матрицы
- •3.11 Селективная обработка строки (столбца) матрицы, удовлетворяющей заданному условию
- •Часть 2. Составление и отладка программы. Вычисление и обработка результатов
- •Ход работы
- •Вопросы для контроля и самостоятельной работы
- •Лабораторная работа 5
- •Символы типа
- •Задание к лабораторной работе
- •Лабораторная работа №6 Разветвляющийся вычислительный процесс с различными логическими условиями: оператор if... Else, условная операция (?:).
- •Теоретические сведения
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа 7 Программирование разветвляющегося циклического вычислительного процесса.
- •Теоретические сведения
- •Алгоритм работы оператора цикла for ():
- •Задание к лабораторной работе
- •Лабораторная работа №8
- •Ход работы
- •Задание к лабораторной работе
- •Операции с, их приоритеты и использование. Преобразование типов (4 часа)
- •Приоритет операций и порядок выполнения (ассоциативность)
- •(Новый_тип) операнд
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №10 Массивы. Селективная обработка массивов
- •Теоретические сведения
- •Требования к содержанию отчёта приведены в лабораторной работе №1
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №11
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №12 Сортировка одномерных массивов
- •Многомерные массивы. (2часа)
- •Теоретические сведения
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Изучение графических средств с
- •Графические функции
- •Графические примитивы
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
Приоритет операций и порядок выполнения (ассоциативность)
Приоритет и ассоциативность операций влияют на порядок группирования операндов и порядок вычислений в выражениях С. Например, приоритет выполнения операций необходимо учитывать при составлении сложных арифметических формул.
Операции, приведенные в одной группе таблицы, имеют одинаковый приоритет и ассоциативность. Порядок убывания приоритета сверху вниз.
Таблица 6.2 - Приоритет операций
Приоритет |
Знак операции |
Тип операции |
Ассоциативность (порядок выполнения) |
|
() [ ] .–> |
Первичные |
→ слева направо |
|
– ~ ! * & ++ -- sizeof,приведение типов( ) |
Унарные |
← справа налево |
|
* / % |
Мультипликативные |
→ |
|
+ - |
Аддитивные |
→ |
|
<< >> |
Сдвиги |
→ |
|
< > <= > = |
Отношение |
→ |
|
= = ! = |
Отношение |
→ |
|
& |
Поразрядное "и" |
→ |
|
^ |
Поразрядное исключающее "или" |
→ |
|
| |
Поразрядное включающее "или" |
→ |
|
&& |
Логическое "и" |
→ |
Продолжение таблицы 6.2
Приоритет |
Знак операции |
Тип операции |
Ассоциативность (порядок выполнения) | |||
|
| | |
Логическое "или" |
→ | |||
|
? : |
Условная (тернарная) |
← | |||
|
= |
* = |
/ = |
% = |
Простое и составное присваивание |
← |
+ = |
– = |
<< = |
>> = | |||
& = |
| = |
^ = |
| |||
|
, |
Последовательное вычисление |
→ |
Если несколько операций одного приоритета встречаются в выражении, то они применяются в соответствии с ассоциативностью.
Примеры. а = b&хFF + 5; // вычисляется как а = b&(х FF + 5);
b=а + с >> 1; // как b=(а +с) >> 1;
с = а + + + b/5; // как с=(а + +) + ( b/5);
Мультипликативные, аддитивные и поразрядные операции обладают свойством коммутативности. Компилятор вычисляет выражения с учётом приоритета в любом порядке, даже если есть скобки. Определённый порядок вычисления (,) операндов гарантируют операции: последовательного вычисления, логические «И» (&&) и «ИЛИ» (), условная операция (? :).
Запятые в вызовах функций не являются операциями последовательного вычисления и не обеспечивают гарантий вычисления слева направо. Логические операции вычисляют минимальное число операндов, необходимых для определения результатов выражения.
func (i + 1, i = j + 2); //. Не гарантирует порядок вычисления фактических
// аргументов
i= 0; // i имеет тип int по умолчанию
a [++ i] = i; // порядок вычисления левого и правого операндов не // гарантируются a [0] = 0 или a[1]=1
(x - 5) && ++ i // Если x =5, то ++ i не вычисляется
int x, y, z, f();
z = x > y f(x, y); // Если x > y, то значение z = 1 «Истина», а f( ) –не
// вызывается
// если x y, то f() вызывается, тогда z=0,
// eсли f( ) возвращает нулевое значение, или z = 1,
// если f( ) возвращает не нулевое значение
// printf (“%d %d \n“, ++n, p()2, n)
// в функцию может передаваться n или n+1.
Преобразование типов
В выражениях С переменные различных типов в ряде случаев могут использоваться совместно; например, переменные типа char могут присутствовать в выражениях одновременно с переменными типа int.
Пример совместного использования целых и символьных переменных.
char ch='a', ans; //объявление переменных ch и ans
printf("значение ch + 3 = %d", ch+3); // вывод значения ch+3
ans = ch % 3; // определение остатка от целочисленного деления
printf("\n\nзначениеans = % d\n", ans);
Поскольку char это целый тип, для него применимы все операции, операнды которых могут иметь тип int. Целые по умолчанию - это величины со знаком signed.
С переменными вещественного типа (float, double и др.) применимы все операции, допустимые для целого типа int, за исключением операции остатка от деления (%).
Преобразования типов бывают явные и неявные. Синтаксис операции явного преобразования типа