Слайд 1Основы алгоритмизации и программирования
Слайд 2Литература
В.А.Цикоза, Т.Г.Чурина. Методическое пособие к курсу “Методы программирования” (часть первая).
Новосибирск: ВКИ НГУ, 1999.
Т.В. Нестеренко. Методическое пособие к курсу «Методы
программирования» (часть 1) Лабораторные работы. Новосибриск, 2008
Вирт Н. Алгоритмы и структуры данных. М.: Мир, 1989.–360с.
А.Ахо, Д.Хопкрофт, Д. Ульман. Структуры данных и алгоритмы. М.: Издательский дом “Вильямс”, 2000 – 384 с..
Хэзфилд Р., Кирби Л. Искусство программирования на C: Фундаментальные алгоритмы, структуры данных и примеры приложений (пер. с англ.) {Энциклопедия программиста} К: ДиаСофт`01- 736 с.
Подбельский В.В., Фомин С.С. Программирование на языке Си: учеб.пособие. –М.: Финансы и статистика, 2007.-600с.
Павловская Т.А. С/С++. Программирование на языке высокого уровня – СПб.: Питер, 2005.- 461 с.
Слайд 3 Лекция 1
Введение в язык Си
Слайд 4ANSI C
— стандарт языка Си, опубликованный Американским национальным институтом стандартов
(ANSI).
Следование этому стандарту помогает создавать легко портируемые программы.
Слайд 5Тип данных
Тип данных определяет
множество значений,
набор операций, которые можно
применять к таким значениям,
возможно, способ реализации хранения значений и
выполнения операций.
Слайд 6Типы данных: простые и структурированные.
Простые - это целые и
вещественные числа, символы (относятся к целым), перечислимые и
указатели (адреса
объектов в памяти).
Целые, символы и перечислимые – порядковые типы.
Структурированные данные это массивы и структуры.
Слайд 7В языке Cи различают понятия "тип данных" и "модификатор типа"
(со знаком или без знака).
Целое со знаком будет
иметь как положительные, так и отрицательные значения, а целое без знака только положительные значения.
Слайд 8Переменные
Все переменные до их использования должны быть определены (объявлены). При
этом задается тип, а затем идет список из одной или
более переменных этого типа, разделенных запятыми.
Например:
int a, b, c;
char x, y;
Слайд 9Базовые типы в Си
В языке Си можно выделить пять базовых
типов, которые задаются следующими ключевыми словами:
int - целый;
char
- символьный;
float - вещественный;
double – вещ. двойной точности;
void не имеющий значения.
целые
вещественные
Слайд 10Характеристика базовых типов
Переменная типа char обычно имеет размер 1 байт,
ее значениями являются различные символы из кодовой таблицы, например: 'ф',
':', 'j' (при записи в программе они заключаются в одинарные кавычки).
Размер переменной типа int в стандарте языка Си не определен. В большинстве систем программирования размер переменной типа int соответствует размеру целого машинного слова. Например, в компиляторах для 16-разрядных процессоров переменная типа int имеет размер 2 байта. В этом случае знаковые значения этой переменной могут лежать в диапазоне от -32768 до 32767. В современных компьютерах – 4 и 8 байт.
Слайд 11Ключевое слово float позволяет определить переменные вещественного типа. Их значения
имеют дробную часть, отделяемую точкой, например: -5.6, 31.28 и т.п.
Вещественные числа могут быть записаны также в форме с плавающей точкой, например: 1.09e+4.
Число перед символом "е" называется мантиссой, а после "е" порядком или экспонентой. Переменная типа float занимает в памяти 4 байта. Она может принимать значения в диапазоне
от 3.4е-38 до 3.4e+38.
Слайд 12Ключевое слово double позволяет определить вещественную переменную двойной точности. Она
занимает в памяти в два раза больше места, чем переменная
типа float. Переменная типа double может принимать значения в диапазоне от 1.7e-308 до 1.7e+308.
Ключевое слово enum позволяет определить переменную перечислимого типа.
Ключевое слово void используется для нейтрализации значения объекта, например, для объявления функции, не возвращающей никаких значений.
Слайд 13Перечислимый тип
Перечислимый тип определяется как набор идентификаторов, с
точки зрения языка
играющих ту же роль, что и обычные
именованные константы, но связанные
с этим типом. Переменная,
которая может принимать значение из некоторого списка значений,
называется переменной перечислимого типа или перечислением.
enum week {
Monday, /* 0 (= 6)*/
Tuesday, /* 1 */
Wednesday, /* 2 */
Thursday,
Friday,
Saturday,
Sunday
} rab_ned ;
rab_ned = Sunday;
Слайд 14Модификаторы
Объект некоторого базового типа может быть модифицирован. С этой целью
используются специальные ключевые слова, называемые модификаторами. В стандарте ANSI языка
Си имеются следующие модификаторы типа:
unsigned
signed
short (обычно 2 байта ≤ размер int)
long (≥ размер int)
Слайд 15Модификаторы записываются перед спецификаторами типа, например:
unsigned char. Если после
модификатора опущен спецификатор, то компилятор предполагает, что этим спецификатором является
int.
Таким образом, следующие строки:
long а;
long int а;
являются идентичными и определяют объект а как длинный целый.
Слайд 16Инициализация переменных
Переменные в языке Си могут быть инициализированы при их
определении:
int a = 25, h = 6;
char g = 'Q', k = 'm';
float r = 1.89;
long double n = r*123;
Слайд 17Константы
вещественные, например 123.456, 5.61е-4. Они могут снабжаться суффиксом F или
f, например 123.456F, 5.61e-4f;
целые, например 125;
короткие целые, в
конце записи которых добавляется суффикс H или h, например 275h, 344H;
длинные целые, в конце записи которых добавляется суффикс L или l, например 361327L;
беззнаковые, в конце записи которых добавляется суффикс U или u, например 62125U;
восьмеричные, в которых перед первой значащей цифрой записывается 0, например 071;
шестнадцатеричные, в которых перед первой значащей цифрой записывается два символа 0x, например 0x5F;
Слайд 18символьные - единственный символ, заключенный в одинарные кавычки, например 'О',
'2', '.' и т.п. Символы, не имеющие графического представления, можно
записывать, используя специальные комбинации, например \n (код 10), \0 (код 0). Допускается и шестнадцатеричное задание кодов символов, которое представляется в виде: '\х2В', '\хЗ6' и т.п.;
строковые - последовательность из нуля символов и более, заключенная в двойные кавычки, например: "Это строковая константа". Кавычки не входят в строку, а лишь ограничивают ее. Строка представляет собой массив из перечисленных элементов, в конце которого помещается байт с символом '\0'. Таким образом, число байтов, необходимых для хранения строки, на единицу превышает число символов между двойными кавычками;
константное выражение, состоящее из одних констант, которое вычисляется во время трансляции (например: а = 60 + 301);
типа long double, в конце записи которых добавляется буква L или l, например: 1234567.89L.
Слайд 19Примеры
const long int k = 25;
const m = -50;
/* подразумевается const int m = -50 */
const n
= 100000; /*подразумевается const long int n = 100000 */
Слайд 20Преобразование типов
Если в выражении появляются операнды различных типов, то они
преобразуются к некоторому общему типу, при этом к каждому арифметическому
операнду применяется такая последовательность правил:
Если один из операндов в выражении имеет тип long double, то остальные тоже преобразуются к типу long double.
В противном случае, если один из операндов в выражении имеет тип double, то остальные тоже преобразуются к типу double.
В противном случае, если один из операндов в выражении имеет тип float, то остальные тоже преобразуются к типу float.
Слайд 21В противном случае, если один из операндов в выражении имеет
тип unsigned long, то остальные тоже преобразуются к типу unsigned
long.
В противном случае, если один из операндов в выражении имеет тип long, то остальные тоже преобразуются к типу long.
В противном случае все операнды преобразуются к типу int.
При этом тип char преобразуется в int со знаком;
тип unsigned char в int, у которого старший байт всегда нулевой;
тип signed char в int, у которого в знаковый разряд передается знак из сhar;
тип short в int (знаковый или беззнаковый).
Слайд 22Приведение типа
В языке Си можно явно указать тип любого выражения.
Для этого используется операция преобразования ("приведения") типа. Она применяется следующим
образом:
(тип) выражение
здесь можно указать любой допустимый в языке Си тип.
Пример:
int a = 30000;
float b;
........
b = (float) a/17;
Слайд 23Приоритеты операций и
порядок вычислений
В языке Си операции с высшими
приоритетами вычисляются первыми.
Операции с одинаковым приоритетом выполняются слева направо
в порядке следования.
Слайд 26Примеры
b += a; // эквивалентно b = b + a
a
/= b+1; // эквивалентно a = a/(b+1)
f++; // эквивалентно f
= f + 1
max = (d <= b) ? b : d;
а=1;
v = ++a;
// v=2
а=1;
v = a++;
// v=1
Слайд 27Условный оператор
if (Условие)
Действие
if (Условие)
Действие 1
else
Действие 2
Условие
Действие 1
Действие 2
+
Условие
Действие
+
Слайд 28Условный оператор, примеры
if (i != n 1)
i++;
if (x >
y)
x = y--;
else
{
y += x;
x = 1;
}
if (!a)
{
x = 1;
y
= 2;
}
else
a = x + y;
Слайд 29Операторы цикла
Три вида циклов:
Цикл while (с предусловием)
Цикл do while (с
постусловием)
Цикл for (параметрический)
Слайд 30Цикл while (с предусловием)
Пример: вычисление 5!
int i, n=5, s=1;
i =
1;
while (i
цикла
+
while (Условие)
Тело цикла
Слайд 31Цикл do while (с постусловием)
Пример: вычисление 5!
int i, n=5, s=1;
i
= 1;
do
{
s *= i;
i++;
}
while (i
результат
Условие
Тело цикла
+
do
Тело цикла
while (Условие)
Слайд 32Цикл for (параметрический)
Пример: вычисление 5!
int i, n=5, s=1;
for (i =
1;i
цикла
+
for (Выражение_1;Условие; Выражение_2)
Тело цикла
Выражение_1
Выражение_2
Слайд 33Операторы прерывания исполнения цикла
Оператор break прекращает выполнение оператора цикла и
передает управление следующему за этим циклом оператору.
Наиболее естественна следующая форма
тела цикла:
{
операторы
break;
операторы
}
Оператор continue позволяет в любой точке тела цикла прервать текущую итерацию и перейти к проверке условия выполнения следующей итерации.
Слайд 34Схемы работы операторов break и continue
Условие
Тело цикла
…
break;
…
continue;
…
+
Условие
Тело цикла
…
break;
…
continue;
…
+
Слайд 35Схемы работы операторов break и continue
Условие
Тело цикла
…
break;
…
continue;
…
+
Выражение_1
Выражение_2
Слайд 36Общий вид программы на си
директивы препроцессора
описание глобальных переменных и функций
int
main ()
{
описание объектов
исполняемые операторы
return 0;
}
Слайд 37Пример
#include
int main()
{
int a, b;
float c = 0.0;
scanf(“%d%d”,&a, &b);
if (b!=0)
c
= a / b;
printf(“c = %f”, c);
return 0;
}