- 10 главных конструкций языка C
- Комментарии
- Переменные и типы данных
- Внешние файлы и директивы
- Формат программы
- Ввод и вывод
- Присваивание и сравнение
- Условный оператор if
- Оператор множественного выбора switch
- Цикл с предусловием for
- Циклы while и do-while
- Функции
- Классы, объекты и методы
- Основные конструкции языка программирования
- Циклы
- Условия
- Заключение
10 главных конструкций языка C
Быстрый обзор основных конструкций языка C для тех, кто хочет разобраться в основах. Здесь вы встретите много очевидных и понятных конструкций, которые есть во многих языках, — это потому, что многие языки взяли эти конструкции как раз из языка C.
На самом деле в статье их 11, но 10 звучит лучше.
👉 Точка с запятой ставится после каждой команды.
Комментарии
Классические комментарии в C выглядят так:
/* Привет, это комментарий */
/* Его можно начинать на одной строчке
и продолжать на другой */
Есть ещё однострочные комментарии двумя слешами //, но бывают компиляторы, которые их не понимают.
Переменные и типы данных
Чтобы объявить переменную в C, нужно сначала указать её тип, а потом написать имя. Отдельного служебного слова для создания переменной в C нет.
В C есть разделение на короткие (short), обычные и длинные (long) переменные — на 2, 4 и 8 байт соответственно. Это нужно для экономии памяти, чтобы выделять ровно то количество байт, которое нужно для работы программы.
int i; /* целое число на 4 байта */ int x,y; /* две целочисленные переменные */ short int si; / *короткое целое число на 2 байта */ long int l; /* целое число на 8 байт */ char c; /* символьная переменная */ float f; /* дробная переменная на 4 байта */ double d; /* дробная переменная на 8 байт */ int a [10]; /* массив из 10 целых чисел */ struct str_name; /* структура из целого числа и символа */
Внешние файлы и директивы
Чтобы программа получила некоторые дополнительные возможности, которых нет в коде по умолчанию, используют директивы. Они обычно пишутся в начале программы и начинаются с символа решётки:
/* компилятор ищет файл prog.h в каталоге /usr/include и позволяет нам использовать команды из этого файла */ #include #ifdef i8088 /* если программа будет запущена на процессоре 8088, то выполнятся инструкции, написанные внутри этого блока */ #endif
Формат программы
В каждой программе на C должна быть функция main(), внутри которой размещается основной код. Большинство компиляторов требуют, чтобы мы указали тип этой функции — обычно можно использовать int (целочисленный) или void (пустой). Все остальные функции добавляются по желанию, но main() должна быть всегда.
#include /* основная функция */ void main() < /* содержимое функции */ >
Ввод и вывод
Для вывода используется команда printf():
/* подключаем библиотеку расширенного ввода-вывода */ #include /* основная функция */ void main() < /* объявляем целочисленную переменную */ int x; /* выводим только строку /* printf("Введите число: "); /* вводим число */ cin >> x; /* выводим строку и переменную */ /* u означает, что переменную нужно вывести как целое десятичное число без знака */ printf("Вы ввели %u", x); >
Если нужен ввод данных, то используют команду scanf():
/* подключаем библиотеку расширенного ввода-вывода */ #include /* основная функция */ void main() < /* объявляем переменные */ int h,m; /* выводим только строку /* printf("Введите время в формате чч:мм "); /* вводим время */ /* d означает, что мы ждём целое десятичное число */ scanf("%d:%d", &h, &m); >
Присваивание и сравнение
C использует классический подход:
один символ «равно» — присваивание
два символа «равно» — сравнение
Остальные операторы сравнения и логические операторы такие же, как и в других языках. Каждое сравнение берётся в скобки.
Условный оператор if
Тоже всё стандартно (потому что C во многом этот стандарт и создал):
if (условие) /* если условие верно, делаем что-то */
> else /* если условие неверно, делаем что-то другое */
>
Если блок с else не нужен, его можно не писать — короткий if тоже работает.
Оператор множественного выбора switch
Чтобы не плодить множество операторов if, когда нужно выбрать одно из нескольких значений, используют оператор switch:
#include int main() < short int day; printf("Введите номер дня недели"); scanf("%d", &day); /* если номер больше семи — берём целочисленный остаток от деления номера на 7 */ if (day >7) < day = day % 7; >/* выбираем день из вариантов ниже */ switch (day) < /* если день равен 0 */ case 1: printf("Понедельник"); /* выходим из дальнейших проверок */ break; case 2: printf("Вторник"); break; case 3: printf("Среда"); break; case 4: printf("Четверг"); break; case 5: printf("Пятница"); break; case 6: printf("Суббота"); break; /* если ни один вариант не подошёл */, default: printf("Воскресенье"); >>
Если не ставить команду break, то оператор будет продолжать выполнять остальные проверки, даже если найдёт совпадение по условию.
Цикл с предусловием for
Классический цикл, который в таком же виде используется во многих языках:
int i; /* перебираем все числа от 1 до 100, увеличивая переменную на 1 на каждом шаге цикла */ for (i = 1; i < 101; i++) < /* выводим значения их квадратов */ printf("%d ", i*i); >
Особенность этого цикла в C в том, что он может работать и с дробными числами, например, увеличивать счётчик каждый раз на 0,1:
/* дробное число */ float num; /* идём от 5 до 0 и каждый раз уменьшаем число на 0,1 */ for (num = 5.0f; num > 0f; num -= 0.1) < /* выводим результат */ printf("%.2f ", num); >
Циклы while и do-while
Если вы заранее не знаете, сколько раз будет выполняться цикл, используйте while или do-while. Первый проверяет условия до начала цикла (и если там истина — выполняет его), а второй делает проверку в самом конце.
/* объявляем переменную и сразу присваиваем ей значение */ int i = 0; /* пока i меньше 10 – цикл работает */ while (i < 10) < printf("%d\n", i); /* обрабатываем переменную цикла */ i++; >/* сделаем то же самое, но с постусловием */ i = 0; /* сначала заходим в цикл */ do < printf("%d\n", i); i++; /* а в конце проверяем, идём на новый повтор или нет */ >while(i < 10);
В отличие от цикла for здесь программист сам должен следить за тем, чтобы цикл когда-нибудь прекратился. Если забыть изменить в теле цикла переменную, от которой зависит условие, то программа может зациклиться и зависнуть.
Функции
В языке C программист может объявить сколько угодно функций. Каждая функция объявляется так:
тип_результата название (аргументы) тело_функции
>
Если у функции нет аргументов, то ставят просто две скобки, а если есть, то нужно обязательно указать их тип:
#include /* объявляем функцию sqr */ float sqr(float x) < /* возвращаем квадрат переданного числа */ return x * x; >/* основная функция */ void main() < /* выводим строку и сразу вызываем функцию, которая вернёт нам квадрат числа*/ printf("Квадрат числа 4,2 равен %.3f", sqr(4.2f)); >
Классы, объекты и методы
В языке C такого нет. Если нужно ООП — используйте С++, про него будет в следующий раз.
Основные конструкции языка программирования
Мы уже затрагивали некоторые конструкции, когда изучали логические типы.
Наиболее распространенными конструкциями являются условия и циклы.
Циклы
Задача: необходимо вывести последовательность нечетных чисел: 1, 3, 5, 7, заканчивая на 99 (последнее число)
Давайте подумаем, как это можно сделать на Kotlin’е.
Сначала определимся с алгоритмом:
- Берем первое число 1
- Выводим число
- Берем следующее
- Проверяем, если число меньше 100, то возвращаемся на 2 шаг, в противном случае завершаем выполнение программы
// шаг первый: берем первое число var number = 1 while (number < 100) < // шаг четвертый: проверка // шаг второй: выводим число println(number + " ") // шаг третий: берем следующее number += 2 // >
Ничего страшного в этом нет, код на конкретном языке программирования может отличаться от алгоритма.
В данном случае мы используем конструкцию с while для которой нужно указывать условие в самом начале.
Та дам! Мы рассмотрели циклы!
Чтобы вам стало понятнее, давайте выведем ваше имя 1000 раз для простоты:
var number = 1 while (number
Можно еще проще написать с помощью конструкции for :
Условия
Задача следующая: У нас есть определенное количество денег, если денег больше 120 рублей мы купим шоколадку Milka иначе ничего покупать не будем
val money = 130 if (money > 120) < println("купить шоколадку Milka") >else
Запустите в Kotlin Playground или в IntelliJ IDEA:
Попробуйте поменять значение переменной money
Заключение
Как уже было отмечено, циклы и условия самые распространенные конструкции, которые вы будете часто использовать в программировании.
Если вы запутались и считаете, что все это слишком сложно, не огорчайтесь.
Попробуйте понять на следующем примере:
У нас есть мобильное приложение “список дел”.
Начнем с того, что пользователь может создать 5, 10 и больше элементов в списке и поэтому нам нужно использовать цикл, чтобы пройтись по всем элементам и вывести их на экран.
Далее, у нас могут быть два списка: в первом: текущие дела, во втором: уже выполненные, поэтому нам нужно добавить условия, которое будет проверять выполнено дело или нет.
Надеюсь, у вас появилась общая картина в голове.
- Цикл - повторение кода определенное количество раз, также бывают бесконечные циклы, которые никогда не завершаются
- Условие - выполнение кода в зависимости от определенного условия