
- •Информатика и программирование
- •Методические указания к лабораторным работам Содержание
- •Лабораторная работа 1 Цель работы
- •Задание
- •Теоретическая часть
- •Компоненты ide
- •Строка меню и меню
- •Наборы команд
- •Рекомендации по выполнению лабораторной работы
- •Теоретическая часть Преобразование типов операндов
- •Оператор форматного вывода printf
- •Рекомендации по выполнению лабораторной работы
- •Теоретическая часть Выражения и операции в языке си
- •Приоритеты операций в выражениях
- •Теоретическая часть Оператор цикла for
- •Оператор цикла while
- •Оператор do while
- •Теоретическая часть Массивы в языке Си
- •Указатели и массивы
- •Условный оператор
- •Оператор переключатель switch
- •Оператор перехода goto
- •Рекомендации по выполнению лабораторной работы Определение цифр числа
- •Поиск простых чисел
- •Треугольник Паскаля
- •Теоретическая часть Функции в языке Си
- •Объявление и определение функций
- •Прототип функции
- •Параметры функции
- •Локальные и глобальные переменные
- •Функции и массивы Передача одномерных массивов как параметров функции
- •Передача строк в качестве параметров функций
- •Рекомендации по выполнению лабораторной работы Комментарии к заданию 1
- •Комментарии к заданию 2
- •Теоретическая часть Ввод-вывод в языке Си
- •Потоковый ввод-вывод
- •Открытие и закрытие потока
- •Стандартные файлы и функции для работы с ними
- •Символьный ввод-вывод
- •Строковый ввод-вывод
- •Форматированный ввод-вывод
- •Рекомендации по выполнению лабораторной работы
- •Теоретическая часть Ввод-вывод для двоичных файлов
- •Прямой доступ к файлам
- •Рекомендации по выполнению лабораторной работы
- •Теоретическая часть Строки в языке Си
- •Операции со строками
- •Теоретическая часть Проверка символов
- •Теоретическая часть
- •Теоретическая часть
- •Рекомендации по выполнению лабораторной работы Определение корней функции
- •Метод деления отрезка пополам
- •Метод хорд
- •Вычисление интеграла
- •Рекомендации по выполнению лабораторной работы
- •Содержание отчета
Теоретическая часть Преобразование типов операндов
При выполнении вычислений в программах на языках высокого уровня в выражениях желательно использовать константы и переменные одного типа, однако это не всегда является возможным. Многие языки программирования высокого уровня не позволяют смешивать в выражениях переменные разных типов, но язык Си позволяет это делать.
Если в выражении в программе на языке Си используются операнды различных типов, то это выражение не считается ошибочным, а в нем производится автоматическое преобразование типов операндов:
-
если в выражении используются операнды разных типов, то операнд с меньшей длиной приводится к операнду с большей длиной. Под длиной операнда в данном случае понимается количество байт, используемых для представления данных соответствующего типа.
Последовательность типов, упорядоченных по длине от большей к меньшей, выглядит следующим образом:
long double double float long int int short int char
-
при выполнении операции присваивания значение выражения приводится с типу того операнда, который стоит слева от знака равенства (=), при этом значение выражения может "усекаться". Это происходит в случае, если тип переменной, которой должно быть присвоено значение, имеет меньшую длину, чем полученное значение выражения.
Рассмотрим для примера следующую простую программу:
void main(void)
{
char a;
int x = 100, y = 383;
a = x+y;
printf("x = %d, y=%d, x+y = %d\n",x,y,a);
}
В результате выполнения этой программы на экран будет выведена следующая строка:
x = 100, y=383, x+y = -29
Полученный результат объясняется тем, что значение выражения имеет тип int, а присваивается это значение переменной а, которая имеет тип char, ‑ в результате происходит усечение результата (см. )
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
|
x+y=483 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
|
a=-29 |
Рис. 2. Пример "усечения" данных
Схема усечения результата, показанная на рисунке, построена исходя из предположения, что данные типа int имеют длину 2 байта (sizeof(int)=2). Таким образом, в переменную а записываются младшие 8 бит результата – 11100011, а учитывая, что старший разряд – знаковый, значение а получается равным -29.