142.91K
Category: programmingprogramming

Введение в программирование и язык C

1.

Лекция 1
Введение в программирование и
язык C

2.

Машинный код
• Машинный код или машинный язык —
система команд (набор кодов операций)
конкретной вычислительной машины, которая
интерпретируется непосредственно
процессором или микропрограммами этой
вычислительной машины.
• Компьютерная программа, записанная на
машинном языке, состоит из машинных
инструкций, каждая из которых представлена
в виде двоичного кода отдельной операции из
системы команд машины.

3.

Язык низкого уровня
• Низкоуровневый язык программирования (язык
программирования низкого уровня) — язык
программирования, близкий к программированию
в машинных кодах используемого процессора. Для
обозначения машинных команд обычно
применяется мнемоническое обозначение. Это
позволяет запоминать команды не в виде
последовательности двоичных нулей и единиц, а в
виде осмысленных сокращений слов человеческого
языка (обычно английских).
• Пример: язык Assembler’а

4.

Язык высокого уровня
• Высокоуровневый язык программирования —
язык программирования, разработанный для
быстроты и удобства использования
программистом. Главная особенность — замена
длинных и (порой) сложных для понимания
описаний на машинном коде простыми
смысловыми конструкциями — абстракцией.
• Примеры: С++, Java, Python

5.

Трансляция программы
• Трансляция программы — преобразование
программы, представленной на одном из
языков программирования, в программу на
другом языке и равносильную первой.
• Язык, на котором представлена входная
программа, называется исходным языком,
а сама программа — исходным кодом.
Выходной язык называется целевым
языком или объектным кодом.

6.

Компилятор
• Компилятор — программа, выполняющая
компиляцию.
• Компиляция — трансляция программы,
составленной на исходном языке высокого уровня,
в эквивалентную программу на низкоуровневом
языке (машинном коде).
• Входной информацией для компилятора (исходный
код) является описание алгоритма или программы
на понятным человеку языке, а на выходе
компилятора — эквивалентное описание алгоритма
на машинно-ориентированном языке (объектный
код).

7.

Языки C и C++
• Язык C — это императивный,
типизированный, высокоуровневый,
машинно-ориентированный, не объектноориентированный язык
программирования.
• Язык C++ является его объектноориентированным расширением.

8.

Высокоуровневый язык C
• Команды и типы данных, которые заложены в
С изначально, элементарны, но на основе них
можно создавать свои, сколь угодно сложные
функции и структуры данных.
• Стандартная библиотека C включает в себя
много сложных (высокоуровневых) функций.
• Он позволяет определять свои типы данных,
создавать свои библиотеки. Создано
множество инструментов для разработки
больших проектов на языке С.

9.

Машинно-ориентированный язык C
• Основная информационная единица, с которой
работает программист на C — это байт.
• Программист на C представляет, как его программа
будет расположена в памяти.
• Программист на C может перейти на самый низкий
уровень программирования — делать в свой
программе "ассемблерные вставки" и писать на
уровне команд процессора.
• Язык C приспособлен для того, чтобы работать
напрямую с любыми устройствами компьютера.
• На языке C можно писать операционные системы

10.

Императивный язык C
• Прилагательное императивный означает,
что в языке C логику работы программы
представляют в виде глаголов (действий):
«пока выполнено условие ... делать
действия ...», «выполнить
последовательность действий ... N раз»,
«если выполнено условие ... перейти к
действию ...».

11.

Методология повторного
использования кода
• Важным моментом в культуре
программирование является методология
reuse (повторное использование кода) —
методология обеспечения модульности, то
есть умение использовать разработанные
инструменты, программы и библиотеки и
умение экспортировать разработанную
функциональность в виде удобных,
подключаемых к другим проектам,
модулей.

12.

Этапы компиляции программы
• Обработка исходного кода программы
препроцессором, выполняющим директивы
используемые в исходном коде.
• Получившийся полный текст программы
обрабатывается компилятором, который
определяет синтаксические лексемы и наличие
ошибок в коде. В случае успешной компиляции
создается объектный файл.
• Далее компоновщик, или редактор связей,
формирует исполняемый файл программы.

13.

Типы ошибок при разработке
программ
• Синтаксические ошибки (syntax errors)
– Забыли ; в конце выражения
– Неправильно написали имя оператора
• Ошибки выполнения (runtime errors)
– Деление на 0
– Нет места при записи данных на диск
• Семантические (semantic errors)
– Работает, но делает не то, что нужно.

14.

Директивы препроцессора
• Директива препроцессора – команда,
выполняемая до начала компиляции
исходного текста программы.
• Директива #include <...> вставляет в файл
программы содержимое другого файла.
• Обычно заголовочные файлы содержат
только прототипы функций, то есть просто
список функций с указанием аргументов и
типа возвращаемого значения.

15.

Типы данных
Целые типы
Размер в байтах (битах)
1 (8)
1 (8)
1 (8)
2 (16)
2 (16)
2 (16)
2 (16)
2 (16)
2 (16)
Интервал изменения
от -128 до 127
от 0 до 255
от -128 до 127
от -32768 до 32767
от 0 до 65535
от -32768 до 32767
от -32768 до 32767
от 0 до 65535
от -32768 до 32767
long int
4 (32)
от -2147483648 до 2147483647
unsigned long int
4 (32)
от 0 до 4294967295
signed long int
4 (32)
от -2147483648 до 2147483647
Размер в байтах (битах)
4 (32)
8 (64)
10 (80)
Интервал изменения
от 3.4Е-38 до 3.4Е+38
от 1.7Е-308 до 1.7Е+308
от 3.4Е-4932 до 3.4Е+4932
char
unsigned char
signed char
int
unsigned int
signed int
short int
unsigned short int
signed short int
Типы с плавающей запятой
float
double
long double

16.

Представление данных в памяти

17.

Здравствуй, мир!
#include <stdio.h>
int main ()
{
printf ("Hello, world!\n");
return 0;
}

18.

Команда
• Команда – это инструкция (приказ) машине
выполнить одну элементарную операцию
над данными, например: сложить два
числа, прочитать данное с диска.
Каждая команда программы занимает
ячейку памяти и имеет свой адрес (адрес
ячейки). Для всякого процессора команда
имеет строго фиксированную длину и
стандартный формат.

19.

Операторы
• Знак операции – это символ или группа
символов, которые сообщают компилятору
о необходимости выполнения
определенных арифметических, логических
или других действий.

20.

Операторы
Математические операторы:
Знак операции
*
/
%
+
++
--
Назначение
Умножение
Деление
Определение остатка от деления
Сложение
Вычитание
Увеличение на единицу(инкремент)
Уменьшение на единицу(декремент )
Операторы присваивания:
Знак операции
=
+=, - =, *=, /=, %=
Назначение
Присваивание
Составные операции присваивания
(например, а *= b
(т.е. a = a * b) и т.д.)

21.

Приоритет операций
Операторы
Выполняются
() [] -> .
слева направо
! ~ ++ -- + - * & (тип) sizeof
справа налево
* / %
слева направо
+ -
слева направо
<< >>
слева направо
< <= > >=
слева направо
== !=
слева направо
&
слева направо
^
слева направо
|
слева направо
&&
слева направо
||
слева направо
?:
справа налево
= += -= *= /= %= &= ^= |= <<= >>=
справа налево
,
слева направо

22.

Циклы
// Инструкция for
for (выр1; выр2; выр3)
инструкция
// эквивалентна конструкции
выр1;
while (выр2)
{
инструкция
выр3;
}

23.

Циклы
Цикл While (с пост условием)
do
инструкция
while (выражение);

24.

Программа вывода температур
#include <stdio.h>
/* печать таблицы температур по Фаренгейту
и Цельсию для fahr = 0, 20, ..., 300 */
int main()
{
int fahr, celsius;
int lower, upper, step;
lower = 0; /* нижняя граница таблицы температур */
upper = 300; /* верхняя граница */
step = 20; /* шаг */
fahr = lower;
while (fahr <= upper)
{
celsius = 5 * (fahr-32) / 9;
printf ("%d\t%d\n", fahr, celsius);
fahr = fahr + step;
}
return 0;
}

25.

Программа вывода температур с
числами с плавающей запятой
#include <stdio.h>
/* печать таблицы температур по Фаренгейту и Цельсию для
fahr = 0, 20 ... 300; вариант с плавающей точкой */
int main()
{
float fahr, celsius;
int lower, upper; step;
lower = 0; /* нижняя граница таблицы температур */
upper = 300; /* верхняя граница */
step = 20; /* шаг */
fahr = lower;
while (fahr <= upper)
{
celsius = (5.0/9.0) * (fahr-32.0);
printf ("%3.0f %6.1f\n", fahr, celsius);
fahr = fahr + step;
}
return 0;
}

26.

Цикл for
#include <stdio.h>
/* печать таблицы температур по Фаренгейту и Цельсию */
int main()
{
int fahr;
for (fahr = 0; fahr <= 300; fahr = fahr + 20)
printf ("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
return 0;
}
Цикл for состоит из трёх выражений: инициализация, проверка условия
продолжения цикла, приращение счетчика цикла.

27.

Именованные константы
Директива #define
• Строка #define определяет символьное имя, или именованную
константу, для заданной строки символов:
• #define имя подставляемый-текст
#include <stdio.h>
#define LOWER 0 /* нижняя граница таблицы */
#define UPPER 300 /* верхняя граница */
#define STEP 20 /* размер шага */
/* печать таблицы температур по Фаренгейту и Цельсию */
int main ()
{
int fahr;
for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)
printf ("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
return 0;
}

28.

Конструкция if-else
if (выражение)
инструкция1
else
инструкция2

29.

Конструкция if-else
if (а > b)
z = a;
else
z = b;
// Переменной z присваивается
большее значение из a или b.
// Тернарная форма записи:
z = (a > b) ? а : b;

30.

Вложенный if-else
if (n > 0)
{
if (a > b)
z = а;
}
else
z = b;

31.

Конструкция else-if
if (выражение)
инструкция
else if (выражение)
инструкция
else if (выражение)
инструкция
else if (выражение)
инструкция
else
инструкция
English     Русский Rules