Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
учебно-методический комплекс
ПРОГРАММИРОВАНИЯ
Красноярск
ИПК СФУ
2008
УДК 004.438
ББК 32.973
Н73
Электронный учебно-методический комплекс по дисциплине «Языки программи-
рования» подготовлен в рамках инновационной образовательной программы «Ин-
форматизация и автоматизированные системы управления», реализованной в ФГОУ
ВПО СФУ в 2007 г.
Рецензенты:
Красноярский краевой фонд науки;
Экспертная комиссия СФУ по подготовке учебно-методических комплексов дис-
циплин
Новиков, Е. А.
Н73 Языки программирования. Язык С. Версия 1.0 [Электронный ресурс] : кон-
спект лекций / Е. А. Новиков, Ю. А. Шитов. – Электрон. дан. (3 Мб). – Красно-
ярск : ИПК СФУ, 2008. – (Языки программирования : УМКД № 147-2007 / рук.
творч. коллектива Ю. А. Шитов). – 1 электрон. опт. диск (DVD). – Систем. тре-
бования : Intel Pentium (или аналогичный процессор других производителей)
1 ГГц ; 512 Мб оперативной памяти ; 3 Мб свободного дискового пространст-
ва ; привод DVD ; операционная система Microsoft Windows 2000 SP 4 /
XP SP 2 / Vista (32 бит) ; Adobe Reader 7.0 (или аналогичный продукт для чте-
ния файлов формата pdf).
ISBN 978-5-7638-1250-3 (комплекса)
ISBN 978-5-7638-1459-0 (конспекта лекций)
Номер гос. регистрации в ФГУП НТЦ «Информрегистр» 0320802545
от 02.12.2008 г. (комплекса)
Настоящее издание является частью электронного учебно-методического ком-
плекса по дисциплине «Языки программирования», включающего учебную програм-
му, конспект лекций «Языки программирования. Ассемблер», методические указания
по лабораторным работам, методические указания по самостоятельной работе, кон-
трольно-измерительные материалы «Языки программирования. Банк тестовых зада-
ний», наглядное пособие «Языки программирования. Презентационные материалы».
Приведены теоретические сведения по языку С, его типам и структурам данных,
рассмотрены типовые задачи программирования.
Предназначен для студентов направления подготовки специалистов 090102.65
«Компьютерная безопасность» укрупненной группы 090000 «Информационная безо-
пасность».
Рекомендовано к изданию
Инновационно-методическим управлением СФУ
Редактор Т. И. Тайгина
Разработка и оформление электронного образовательного ресурса: Центр технологий элек-
тронного обучения информационно-аналитического департамента СФУ; лаборатория по разработке
мультимедийных электронных образовательных ресурсов при КрЦНИТ
Содержимое ресурса охраняется законом об авторском праве. Несанкционированное копирование и использование данного про-
дукта запрещается. Встречающиеся названия программного обеспечения, изделий, устройств или систем могут являться зарегистрирован-
ными товарными знаками тех или иных фирм.
ВВЕДЕНИЕ ................................................................. 8
ЛЕКЦИЯ 1. ОСНОВНЫЕ УСТРОЙСТВА ЭВМ И ИХ
НАЗНАЧЕНИЕ. ИСТОРИЯ РАЗВИТИЯ ЯЗЫКОВ ........ 9
1. Введение .......................................................................................................................... 9
2. Основные устройства ЭВМ и их назначение .......................................................... 10
3. История развития языков ........................................................................................... 11
ЛЕКЦИЯ 2. ОБЩИЕ ПРИНЦИПЫ ПОСТРОЕНИЯ
ЯЗЫКОВ ПРОГРАММИРОВАНИЯ. ПРЕПРОЦЕССОР
И МАКРООБРАБОТКА. ЭТАПЫ РЕШЕНИЯ ЗАДАЧ
НА КОМПЬЮТЕРЕ .................................................... 15
1. Общие принципы построения языков программирования ................................. 15
2. Препроцессор и макрообработка. ............................................................................. 18
3. Этапы решения задач на компьютере ...................................................................... 19
ЛЕКЦИЯ 3. СОВРЕМЕННЫЕ ИНТЕГРИРОВАННЫЕ
СРЕДЫ. ВСТРОЕННЫЙ ОТЛАДЧИК.
БИБЛИОТЕКА ПРОГРАММ И КЛАССОВ .................. 21
1. Современные интегрированные среды .................................................................. 21
2. Встроенный отладчик ................................................................................................. 22
3. Библиотеки программ и классов ............................................................................... 23
ЛЕКЦИЯ 4. ПРОСТЕЙШАЯ ПРОГРАММА. ВЫВОД
ТЕКСТА НА ЭКРАН. ДИРЕКТИВЫ CLRSCR()
И GETCH() ................................................................ 26
1. Простейшая программа ............................................................................................... 26
2. Вывод текста на экран ................................................................................................ 28
3. Препроцессор ................................................................................................................ 29
4. Директивы clrscr() и getch() ........................................................................................ 31
ЛЕКЦИЯ 5. ПАМЯТЬ. ПЕРЕМЕННЫЕ. ВЫВОД НА
ЭКРАН. ЗАПИСЬ В ПЕРЕМЕННЫЕ ТИПА INT
И FLOAT. ВВОД С КЛАВИАТУРЫ ............................ 35
1. Память ............................................................................................................................ 35
2. Переменные ................................................................................................................... 35
3. Вывод переменных на экран ..................................................................................... 36
4. Запись в переменные типа int и float........................................................................ 37
5. Ввод с клавиатуры....................................................................................................... 40
План
1. Введение.
2. Основные устройства ЭВМ и их назначение.
3. История развития языков.
1. Введение
План
2. Препроцессор и макрообработка.
2. Встроенный отладчик
План
1. Простейшая программа.
2. Вывод текста на экран.
3. Препроцессор.
4. Директивы clrscr() и getch().
1. Простейшая программа
void main()
{
}
void main()
{ }
или
void main () { }
void main();
{
}
void main
{
}
void main()
{
}.
Поясним, почему коды представленных программ неправильны.
В программе 1 в слове Void используется заглавная буква V, в программе 2
после директивы void main() поставлена точка с запятой, в программе 3 после
слова main нет скобок, в программе 4 после директивы закрывающая
фигурная скобка поставлена точка.
Замечание 2. Все написанные директивы программы выполняются
компьютером по порядку начиная с первой.
Замечание 3. Директивы открывающая фигурная скобка и
закрывающая фигурная скобка могут использоваться в программе
произвольное количество раз. Программу-пустышку, например, можно
записать так:
void main()
{ { { } } }
или
void main()
{ {} {} {} }
3. Препроцессор
Как только эта программа начнет работать, код clrscr() удалит с экрана
выдачи результатов расчетов всю информацию, которая находилась там до
последнего запуска программы. Поэтому, сколько бы раз программа «Доброе
утро» ни запускалась, на экране выдачи результата будет сохраняться только
одно сообщение:
Доброе утро, студент!!!
То есть будет сохраняться результат последней работы программы.
Любую директиву в программе можно использовать многократно.
Применение той или иной директивы диктуется только условием задачи.
Программа 5
#include <conio.h>
#include <stdio.h>
void main()
{
clrscr();
clrscr();
clrscr();
getch();
getch();
clrscr();
clrscr();
getch();
getch();
}
План
1. Память.
2. Переменные.
3. Вывод переменных на экран.
4. Запись в переменные типа int и float.
5. Ввод с клавиатуры.
1. Память
Рис. 5.1
2. Переменные
int a, b, c;
Целое число в n1 =
Целое число в n1 =
Для записи информации (чисел) в переменные типа int или float можно
использовать оператор присваивания, который определяется символом =
(равно). Например, если код int k1; резервирует два байта памяти под именем
k1 для записи целых чисел, то код k1 =2; записывает (засылает) в эту область
памяти число 2.
Переменная может быть определена при ее объявлении. Например,
возможен в программе код float r1 = 0.8, we = –3.5; При выполнении
данного кода компьютер выделяет две области памяти с именами r1, we и
одновременно занесет в эту память соответственно числа 0.8 и –3.5.
Программа 1
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main()
{ int a, b, c, z; // Резервируется память для четырех целых чисел.
clrscr(); // Удаляется с экрана выдачи информация.
cout << “Эта программа резервирует память для четырех целых чисел\n”;
cout << “и засылает в переменные a, b и c”
<< “ соответственно числа 2, 5, 7\n”;
a = 2; b = 5; c = 7;
cout << “В память введена следующая информация:\n”;
cout << “a = “ << a << “\nb = “ << b << “\nc = “ << c << “\n”;
getch(); } // Ожидается нажатие клавиши.
Значение чисел Xa, Xb, Xc, Xz, которые вывел компьютер, заранее
невозможно определить. Поэтому программист должен сам заботиться об
инициализации заказанной памяти.
Замечание. Переменную можно не инициализировать, если она
используется после того, как ей присвоили какой-либо результат расчета.
Здесь N1, N2, N3, N4 – номера адресов ячеек памяти, которые компьютер
выделил программе для записи целых чисел.
Если надо выдать адреса в десятичной системе исчисления, следует
перед &n1, &n2, &n3 и &n4 поставить директиву преобразования типа
(unsigned int). Скобки в данном случае являются элементами директивы.
Cоставим программу для простой, но очень важной задачи, – поменять
местами значения переменных x и y.
Следующая программа переставляет числа, которые записаны в
переменных x и y.
Программа 4
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main()
{ float x = -2.5, y = 5.1, z;
cout << “Значение в x= ” << x << “\nЗначение y= “ << y << “\n”;
z = x; // Пересылается информация из x в z.
x = y; // Пересылается информация из y в x.
y = z; // Пересылается информация из z в y.
cout << “\n Результат работы программы: \n\n”;
5. Ввод с клавиатуры
scanf(“%d”,&c);
cout << “Вы ввели числа: \n”;
cout << “a = “ << a << “\nb = “ << b << “\nc = “ << c << “\n”;
getch(); } // Ожидается нажатие клавиши.
Управляющая строка каждой директивы scanf программы имеет вид
“%d”, что означает ввод целого числа. При работе данной программы будут
происходить запросы на ввод целых чисел. После вывода на экран
очередного сообщения компьютер не будет выполнять программу до тех пор,
пока на клавиатуре не будет набрано число и не нажата клавиша Enter.
Целое число должно соответствовать диапазону представления переменных
типа int.
Приведем код программы, которая демонстрирует ввод трех целых
чисел с клавиатуры с применением директивы scanf(“%d%d%d”, &a,
&b, &c).
Договоримся в коде программ не писать директивы препроцессора,
присутствие которых, вообще говоря, обязательно. Но формат этих директив
во всех программах одинаковый и добавить в случае необходимости эти
директивы к тексту программы не представляет труда.
Следующая программа вводит три целых числа в память компьютера
через клавиатуру.
Программа 8
void main()
{int a, b, c, z; // Резервируется память для четырех целых чисел.
clrscr(); // Очищается экран.
cout << “Введи с клавиатуры три целых числа a, b и c,\n”
<< “Ннабери три числа, разделенных пробелом, и нажми Enter ”;
scanf(“%d%d%d”, &a, &b, &c);
cout << “Вы ввели числа: \n”;
cout << “a = “ << a << “\nb = “ << b << “\nc = “ << c << “\n”;
getch(); } // Ожидается нажатие клавиши.
План
1. Арифметические операции.
2. Математические выражения и функции.
1. Арифметические операции
Прокомментируем директиву
cout << “a = “ << a << “\nb = “ << b << “\nc = “ << c << “\n”;
Программа 5
void main()
{ int a = 2, b = 5, c = 7, z; // Резервируется память для 4 целых чисел.
// При определении переменных в память
// засылаются начальные данные.
clrscr(); // Удаляется с экрана выдачи информация.
cout << “Эта программа вычисляет значение z = a + b * c “
z = a + b * c;
⎛ ⎞
⎜ sin 2 x + cos 2 y ⎟
Z =⎜ −e|cos x|+ sin y
⎟ ⋅ ln(| x | +1) − x 2 + 1 .
⎜ sin ⎛ x + y ⎞ + 1,5 ⎟
⎜ ⎜ 2 ⎟ ⎟
⎝ ⎝ ⎠ ⎠
z = fabs(cos(x)) + sin(y);
z = exp(z);
z1= sin(x) * sin(x) +cos(y) * cos(y);
z1 = z1/(sin((x + y)/2.) + 1.5);
z = z1 - z; // Вычисляем для задачи 2 значение
// выражения в скобках.
z = z * log(fabs(x) + 1) - sqrt(x*x + 1); // Результат решения задачи.
cout << “\nРезультат вычисления z = “ << z << “\n”;
getch();
}
План
Логические операции:
операция && – логическое И;
операция || – логическое ИЛИ;
операция ! – логическое НЕ.
При помощи этих операций можно составить выражение, которое
одновременно проверяет несколько условий. Например, если x1, x2, x3, x4 и
x5 – отметки студента по пяти предметам, то студент будет отличником тогда
и только тогда, когда значение выражения
(x1 == 5) && (x2 == 5) && (x3 == 5) && (x4==5) && (x5 ==5)
2. Условные операторы
if (A) { …… }; S1,
else
{ if (b>c)
cout << “max= “ << b << “\n”;
else
cout << “max= “ << c << “\n”; } getch(); }
switch (<выражение>)
{
case C1:
S1
break;
case C2:
S2
break;
…
case CK:
SK
break;
default:
SD
break;
}
SS;
break;
default : cout << "Команда меню с номером" << k
<< "отсутствует\n";
}}
goto L ;
План
1. Цикл for.
2. Цикл while.
3. Цикл do – while.
1. Цикл for
-10 + 0 = -10
-9 + 1 = -8
-8 + 2 = -6
-7 + 3 = -4
-6 + 4 = -2
-5 +5 = 0
Работа цикла завершена
2. Цикл while
while ( <условие>) { W; }
3. Цикл do – while.
do
{ W; }
while ( <условие>)
Здесь <условие> – любое выражение, допустимое в языке С; W –
последовательность операторов.
<условие> принимает значение ИСТИНА, если значение выражения
не равно нулю, ЛОЖЬ – в противном случае. Тело цикла выполняется, если
<условие> принимает значение ИСТИНА.
y = x;
do
{y1 = y; // В y1 засылается значение y с предыдущего шага.
…
y = f(y); // На текущем шаге y определяется по формуле.
} while (fabs(y - y1) > ep); // Выполнять цикл до заданной точности.
План
1. Массивы.
2. Некоторые простейшие задачи.
3. Матрицы.
4. Перебор элементов матрицы.
1. Массивы
a(0) = X0
a(1) = X1
a(2) = X2
a(3) = X3
Здесь X0, X1, X2, X3 – какие-то случайные числа. Данная программа демон-
стрирует, что задание начальных значений (инициализация) элементов
массива должна быть предусмотрена в программе. Инициализировать
элементы массива можно при его объявлении, например, используя код int
x[6] = {n1, n2, n3, n4, n5, n6}, здесь n1, n2, …, n6 некоторые числа. Если при
объявлении массива определить его первый элемент (int x[6] = {n1}), то
остальные элементы массива автоматически заполняются нулями.