Вы находитесь на странице: 1из 31

Лекция 1

Введение в программирование и
язык C
Машинный код
• Машинный код или машинный язык — система
команд (набор кодов операций) конкретной
вычислительной машины, которая интерпретируется
непосредственно процессором или
микропрограммами этой вычислительной машины.
• Компьютерная программа, записанная на
машинном языке, состоит из машинных
инструкций, каждая из которых представлена в
виде двоичного кода отдельной операции из
системы команд машины.
Язык низкого уровня
• Низкоуровневый язык программирования (язык
программирования низкого уровня) — язык
программирования, близкий к программированию в
машинных кодах используемого процессора. Для
обозначения машинных команд обычно
применяется мнемоническое обозначение. Это
позволяет запоминать команды не в виде
последовательности двоичных нулей и единиц, а в
виде осмысленных сокращений слов человеческого
языка (обычно английских).
• Пример: язык Assembler’а
Язык высокого уровня
• Высокоуровневый язык
программирования — язык программирования,
разработанный для быстроты и удобства
использования программистом. Главная
особенность — замена длинных и (порой) сложных
для понимания описаний на машинном коде
простыми смысловыми конструкциями —
абстракцией.
• Примеры: С++, Java, Python
Трансляция программы
• Трансляция программы — преобразование
программы, представленной на одном из
языков программирования, в программу на
другом языке и равносильную первой.
• Язык, на котором представлена входная
программа, называется исходным языком,
а сама программа — исходным кодом.
Выходной язык называется целевым
языком или объектным кодом.
Компилятор
• Компилятор — программа, выполняющая
компиляцию.
• Компиляция — трансляция программы,
составленной на исходном языке высокого уровня, в
эквивалентную программу на низкоуровневом языке
(машинном коде).
• Входной информацией для компилятора (исходный
код) является описание алгоритма или программы на
понятным человеку языке, а на выходе компилятора
— эквивалентное описание алгоритма на машинно-
ориентированном языке (объектный код).
Языки C и C++
• Язык C — это императивный,
типизированный, высокоуровневый,
машинно-ориентированный, не объектно-
ориентированный язык
программирования.
• Язык C++ является его объектно-
ориентированным расширением.
Высокоуровневый язык C
• Команды и типы данных, которые заложены в С
изначально, элементарны, но на основе них
можно создавать свои, сколь угодно сложные
функции и структуры данных.
• Стандартная библиотека C включает в себя много
сложных (высокоуровневых) функций.
• Он позволяет определять свои типы данных,
создавать свои библиотеки. Создано множество
инструментов для разработки больших проектов
на языке С.
Машинно-ориентированный язык C
• Основная информационная единица, с которой
работает программист на C — это байт.
• Программист на C представляет, как его программа
будет расположена в памяти.
• Программист на C может перейти на самый низкий
уровень программирования — делать в свой программе
"ассемблерные вставки" и писать на уровне команд
процессора.
• Язык C приспособлен для того, чтобы работать
напрямую с любыми устройствами компьютера.
• На языке C можно писать операционные системы
Императивный язык C
• Прилагательное императивный означает,
что в языке C логику работы программы
представляют в виде глаголов (действий):
«пока выполнено условие ... делать
действия ...», «выполнить
последовательность действий ... N раз»,
«если выполнено условие ... перейти к
действию ...».
Методология повторного использования
кода
• Важным моментом в культуре
программирование является методология
reuse (повторное использование кода) —
методология обеспечения модульности, то
есть умение использовать разработанные
инструменты, программы и библиотеки и
умение экспортировать разработанную
функциональность в виде удобных,
подключаемых к другим проектам, модулей.
Этапы компиляции программы
• Обработка исходного кода программы
препроцессором, выполняющим директивы
используемые в исходном коде.
• Получившийся полный текст программы
обрабатывается компилятором, который
определяет синтаксические лексемы и наличие
ошибок в коде. В случае успешной компиляции
создается объектный файл.
• Далее компоновщик, или редактор связей,
формирует исполняемый файл программы.
Типы ошибок при разработке программ

• Синтаксические ошибки (syntax errors)


– Забыли ; в конце выражения
– Неправильно написали имя оператора
• Ошибки выполнения (runtime errors)
– Деление на 0
– Нет места при записи данных на диск
• Семантические (semantic errors)
– Работает, но делает не то, что нужно.
Директивы препроцессора
• Директива препроцессора – команда,
выполняемая до начала компиляции
исходного текста программы.
• Директива #include <...> вставляет в файл
программы содержимое другого файла.
• Обычно заголовочные файлы содержат
только прототипы функций, то есть просто
список функций с указанием аргументов и
типа возвращаемого значения.
Типы данных
Целые типы Размер в байтах (битах) Интервал изменения
char 1 (8) от -128 до 127
unsigned char 1 (8) от 0 до 255
signed char 1 (8) от -128 до 127
int 2 (16) от -32768 до 32767
unsigned int 2 (16) от 0 до 65535
signed int 2 (16) от -32768 до 32767
short int 2 (16) от -32768 до 32767
unsigned short int 2 (16) от 0 до 65535
signed short int 2 (16) от -32768 до 32767
long int 4 (32) от -2147483648 до 2147483647
unsigned long int 4 (32) от 0 до 4294967295
signed long int 4 (32) от -2147483648 до 2147483647

Типы с плавающей запятой Размер в байтах (битах) Интервал изменения


float 4 (32) от 3.4Е-38 до 3.4Е+38
double 8 (64) от 1.7Е-308 до 1.7Е+308
long double 10 (80) от 3.4Е-4932 до 3.4Е+4932
Представление данных в памяти
Здравствуй, мир!
#include <stdio.h>
int main ()
{
printf ("Hello, world!\n");
return 0;
}
Команда
• Команда – это инструкция (приказ) машине
выполнить одну элементарную операцию
над данными, например: сложить два
числа, прочитать данное с диска.
Каждая команда программы занимает
ячейку памяти и имеет свой адрес (адрес
ячейки). Для всякого процессора команда
имеет строго фиксированную длину и
стандартный формат.
Операторы
• Знак операции – это символ или группа
символов, которые сообщают компилятору
о необходимости выполнения
определенных арифметических, логических
или других действий.
Операторы
Математические операторы:
Знак операции Назначение
* Умножение
/ Деление
% Определение остатка от деления
+ Сложение
- Вычитание
++ Увеличение на единицу(инкремент)
-- Уменьшение на единицу(декремент )

Операторы присваивания:
Знак операции Назначение
= Присваивание
Составные операции присваивания
+=, - =, *=, /=, %= (например, а *= b
(т.е. a = a * b) и т.д.)
Приоритет операций
Операторы Выполняются
() [] -> . слева направо
! ~ ++ -- + - * & (тип) sizeof справа налево
* / % слева направо
+ - слева направо
<< >> слева направо
< <= > >= слева направо
== != слева направо
& слева направо
^ слева направо
| слева направо
&& слева направо
|| слева направо
?: справа налево
= += -= *= /= %= &= ^= |= <<= >>= справа налево
, слева направо
Циклы

// Инструкция for
for (выр1; выр2; выр3)
инструкция

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

do
инструкция
while (выражение);
Программа вывода температур
#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;
}
Программа вывода температур с
числами с плавающей запятой
#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;
}
Цикл 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 состоит из трёх выражений: инициализация, проверка условия


продолжения цикла, приращение счетчика цикла.
Именованные константы
Директива #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;
}
Конструкция if-else
if (выражение)
инструкция1
else
инструкция2
Конструкция if-else
if (а > b)
z = a;
else
z = b;
// Переменной z присваивается
большее значение из a или b.
// Тернарная форма записи:
z = (a > b) ? а : b;
Вложенный if-else
if (n > 0)
{
if (a > b)
z = а;
}
else
z = b;
Конструкция else-if
if (выражение)
инструкция
else if (выражение)
инструкция
else if (выражение)
инструкция
else if (выражение)
инструкция
else
инструкция

Вам также может понравиться