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