
- •Основы программирования на языке Си.
- •Достоинства языка Си.
- •Будущее языка Си.
- •Использование языка Си.
- •Использование текстового редактора для подготовки программ.
- •Исходные и выполняемые файлы
- •Пример простой программы на языке Си
- •Структура простой программы
- •2. Лекция: Данные, символьные строки, директива #define.
- •Основные типы данных
- •Описание различных типов, переменные и константы
- •Символьные строки
- •Препроцессор языка Си
- •3. Лекция: Операции.
- •Основные операции
- •Дополнительные операции
- •Перечень операций языка Си
- •Операции, уровень приоритета которых равен 1
- •Операции, уровень приоритета которых равен 2
- •Операции, уровень приоритета которых равен 3
- •Операции, уровень приоритета которых равен 4
- •Операции, уровень приоритета которых равен 5
- •Операции, уровень приоритета которых равно 6
- •Операции, уровень приоритета которых равен 7
- •Операция, уровень приоритета которой равен 8
- •Операция, уровень приоритета которой равен 9
- •Операция, уровень приоритета которой равен 10
- •Операция, уровень приоритета которой равен 11
- •Операция, уровень приоритета которой равен 12
- •Операция, уровень приоритета которой равен 13
- •Операция, уровень приоритета которой равен 14
- •Операция, уровень приоритета которой равен 15
- •Примеры простых задач
- •4. Лекция: Операторы.
- •Выражения
- •Простейшие выражения
- •Операторы
- •Составные операторы
- •Оператор цикла while
- •10 Км. В последующие дни он проезжал со скоростью,
- •Изучение и использование функций printf( ) и scanf( )
- •Применение функции scanf( )
- •Подведем итог.
- •5. Лекция: преобразование типов.
- •Эквивалентность типов
- •Преобразование типов
- •Разбор программы
- •Операция приведения
- •Неявное преобразование типа
- •Арифметические преобразования
- •Явные преобразования типов
- •Синтаксис типов
- •6. Лекция: функции и переключение ввода-вывода
- •Ввод и вывод одного символа
- •Чтение одной строки
- •Чтение файла
- •Переключение и работа с файлами
- •7. Лекция: Выбор вариантов.
- •Выбор вариантов
- •Оператор if
- •Расширение оператора if
- •Операции отношения
- •Логические операции
- •Операция условия: ?:
- •Множественный выбор
- •8. Лекция: Циклы и другие управляющие средства. Структурное программирование.
- •Структурное программирование
- •Цикл с предусловием
- •Цикл со счетчиком
- •Цикл с постусловием
- •Другие управляющие операторы
- •9. Лекция: Функции.
- •Создание и использование функций
- •Аргументы функции
- •Возвращение значений
- •Локальные переменные
- •Нахождение адресов
- •Указатели, первое знакомство
- •Функции с переменным количеством аргументов
- •10. Лекция: Классы памяти и разработка программ.
- •Классы памяти и область действия
- •Автоматические переменные
- •Внешние переменные
- •Статические переменные
- •Внешние статические переменные
- •Регистровые переменные
- •11. Лекция: Препроцессор языка Си.
- •Общие сведения
- •Символические константы: #define
- •Использование аргументов с #define
- •Макроопределение или функция?
- •Включение файла: #include
- •Условная компиляция
- •12. Лекция: Массивы и указатели.
- •Указатели и массивы
- •Массивы
- •Указатели
- •Динамические объекты
- •Создание динамических объектов
- •Доступ к динамическим объектам
- •Связь между указателями и массивами
- •Инициализация массивов и классы памяти
- •Функции, массивы и указатели
- •Операции с указателями
- •13. Лекция: Символьные строки и функции над ними.
- •Строковые константы
- •Массивы символьных строк и их инициализация
- •Массив и указатель: различия
- •Указатели и строки
- •Ввод-вывод строк
- •Обработка строк
- •14. Лекция: Структуры.
- •Определение структурных переменных
- •Доступ к компонентам структуры
- •Поля битов в структурах
- •Объединения
- •Перечисления
- •Переменные структуры
- •Указатели и структуры
- •Массив структур
- •Переименование типов
- •15. Лекция: Библиотека языка Си и файлы ввода-вывода.
- •Стандартные библиотечные функции
- •Связь с файлами
- •Текстовые файлы с буферизацией
- •Распределение памяти
- •16. Лекция: Функции в примерах.
- •Функция получения случайных чисел
- •Поиск узлов из простых чисел
- •Матрица инцидентности
- •Структуры данных
- •Все операции со стеком
Операция, уровень приоритета которой равен 14
Уровень приоритета операции равен 14, выполняются такие операции справа налево.
Операция простое присваивание: =
Тип операндов: арифметические, указатели, объединения или структуры. Тип результата: если оба операнда имеют арифметический тип, то значение правого операнда преобразуется к типу левого операнда.
Использование:
v=e
Присваивание значения e переменной v.
Пример:
x=y;
Операция сложное присваивание: =
Обозначим <знак> один из знаков : +, -, *, /, %, >>, <<, &, ^, |.
В результате выполнения операции присваивания
v=e
где v - переменная, а e - выражение, значение выражения становится новым значением переменной v.
Операция присваивания
v <знак>= e
приблизительно эквивалентна оператору присваивания
v = v<знак> e
Пример 1:
y+=2; /* Увеличение переменной y на 2 */
p+=n;
x-=3;
ptr-=2;
timesx*=x;
x/=2;
x%=10;
x>>=4;
x<<=1;
remitems&=mask;
control^=seton;
additems |=mask;
Типы операндов и результата сложного оператора присваивания можно определить на основании этой эквивалентности. Однако приведенный эквивалент для сложного оператора присваивания не совсем точен. В выражении
v <знак>= e
операнд v вычисляется только один раз, в то время как в выражении
v = v <знак> e
этот операнд вычисляется дважды. Это различие проявляется в побочных эффектах, связанных с вычислением операнда v, например, при изменении значения какой-либо переменной. Рассмотрим это на примерах:
a[i++]* = n;
При выполнении вычисление левого операнда дает побочный эффект - увеличение значения переменной i. Следовательно, это присваивание не эквивалентно присваиванию
a[i++] = a[i++]*n;.
Эквивалентом первой операции присваивания может служить последовательность операций
a[i]=a[i]*n;
i=i+1;
а эквивалентом второй - последовательность операций
a[i]=a[i+1]*n;
i=i+2;
или последовательность операций
a[i+1]=a[i]*n;
i=i+2;
в зависимости от того, какая часть операции присваивания вычисляется раньше - левая или правая. Порядок таких вычислений не определен.
Операция, уровень приоритета которой равен 15
Уровень приоритета операции равен 15, выполняются такие операции слева направо.
Операция запятая: ,
Тип результата совпадает с типом правого операнда. Операция объединяет два выражения в одно выражение, значением которого является значение правого операнда; значение левого операнда вычисляется только для получения побочных эффектов.
Использование:
el,e2
Сначала выполняется выражение e1, потом выражениее2. Значением всего выражения является значение выражения е2.
Пример:
for(i=A,j=B;i<j;i++,j--)
/* организация циклического повторения.
Оператор со счетчиком */
p[i]=p[j];
Примеры простых задач
/* Задача № 1 (пример на использование операции *)
Определить площадь боковой поверхности конуса радиуса
r и имеющего длину образующей l.*/
#include <stdio.h>
#include <math.h>
/* подключение библиотеки математических функций */
const float pi=3.14159;
float r=10; float l=50; float s;
main()
{
s=pi*r*l;
printf("\n Площадь боковой поверхности s=%f",s);
}
/* Задача № 2 (пример на использование операций +,
* и /). Тело движется прямолинейно с ускорением.
Даны а(м/сек2) - ускорение, V(M/C) - начальная
скорость. Требуется определить, какой путь пройдет
тело за t секунд.*/
#include <stdio.h>
float а, v, t, s ;
main()
{
a=20.2;
v=50.3;
t=65;
s=(v*t)+(a*t*t/2);
printf("\n Путь s=%f M",S);
}
/* Задача № 3 (пример на использование операций =,
/ и вычисления степени). Вычислите среднее арифметическое
и среднее геометрическое трех чисел а,b,с.*/
#include <stdio.h>
#include <math.h>
float a=b=c=2005.1; float x,у;
main ()
{
x=(a+b+c)/3;
y=pow( (a*b*c),(1/3));
/*функция pow берется из библиотеки math.h*/
ntf("\n среднее арифметическое x=%f",x);
ntf("\n среднее геометрическое y=%f",y);
}
/* Задача № 4 (пример на использование операций
=,*, / и функции hypot). Даны катеты прямоугольного
треугольника. Найти его гипотенузу и площадь.*/
#include <stdio.h>
#include <math.h>
float x=y=50.7; float z,s;
main()
{
z=hypot(х, у) ;/* вычисление гипотенузы*/
s=x*y/2;
ntf("\n гипотенуза=%f см",z);
printf("\n Плoщaдь=%f кв см",s);
}