Бесплатно по России

С 10:00 до 21:00

С 10:00 до 21:00

Заполнить бриф

Онлайн заявка

С 10:00 до 21:00

Бесплатно по России

Заполнить бриф

Онлайн заявка

#

Язык программирования C

Редакция Appfox

Редакция Appfox

Время чтения: 10 минут

С - один из первых низкоуровневых языков программирования, появившийся еще в 70-х годах прошлого века и до сих пор не теряющий свою актуальность. В этой статье мы кратко разберем основные возможности языка, приведем примеры программ на С, а также проясним главные отличия С от других инструментов разработки.

Преимущества языка С

Есть несколько причин, из-за которых программирование на С стоит учить и применять на практике.

  1. На синтаксисе С основываются другие языки, в том числе Java, JavaScript и PHP. Зная базовые принципы, можно легко освоить новый инструмент, расширяющий возможности для создания программ и приложений.

  2. Его ответвления - С++ и С# - самые популярные инструменты кодеров. Они применяются во многих сферах от операционных систем для банкоматов и до бэкенда кроссплатформенных приложений. В основе одного из самых известных игровых движков Unity - лежит С++.

  3. Си обладает чертами высокоуровнего языка, то есть близок к машинному коду.

  4. Программы на С отличаются быстротой и гибкостью, не требуют больших вычислительных мощностей.

  5. Код на С является кроссплатформенным. Большинство процессоров сейчас имеют компиляторы для этого языка.

Отличия С, С++ и С#

#

Как ни странно, приведенные языки похожи и не похожи друг на друга одновременно.

Си - процедурный язык, изначально предназначенный для написания операционных систем и драйверов.

С++ - язык общего назначения, совмещающий процедурную и объектно-ориентированную парадигмы.

С# - чисто объектно-ориентированный язык, разработанный инженерами компании Microsoft и заточенный под платформу .NET Framework.

Схожи эти три языка по большей части лишь в синтаксисе. В остальном они достаточно различны - от подхода к работе с памятью до объявления переменных.

Если говорить кратко, С - в целом более понятный и быстродейственный язык. Но C++ и C# за счет своей объектно-ориентированности лучше решают практические задачи. Именно на них пишутся масштабные игры и крупные бизнес-приложения для различных устройств и операционных систем.

Основные области применения

Изначально С создавался как инструмент для разработки в ОС UNIX. Правда, за счет своих свойств: быстродействия и близости к машинному коду, Си стали применять при разработке других операционных систем. Сейчас большинство “умных” устройств, подключенных к интернету вещей, основываются на С или C++. Пишутся на этих языках и пользовательские программы специалистами 1C под самые популярные платформы - Windows, Mac, Android, iOS.

Переменные в С

В классическом С переменные различаются по типу и предельному весу. Приведем список команд для инициализации всех возможных вариантов.

int a - целое число в 4 байта.

short int b - укороченный вариант, целое число в 2 байта.

long int с - длинная переменная, целое число в 8 байт.

float d - переменная для дроби на 4 байта.

double f - переменная для дроби на 8 байт;

int g [5] - массив из 5 целых чисел.

char h - символьная переменная.

struct {int a; char b;} str_name - структура, сочетающая целое число и символы.

Несколько переменных одного типа можно объявить в одной строке, написав, например:

int x, y, z.

Далее можно присвоить переменной конкретное значение, просто написав x=3 или задав алгебраическое выражение, например x=y+z.

Основные команды в языке программирования С

Рассмотрим восемь основных операторов, с помощью которых пишутся алгоритмы на языке C.

Подключение внешних файлов

Для использования некоторых функций необходимо подключать внешние библиотеки. Подключение происходит до начала основной программы через команду #include.

К примеру, чтобы задействовать библиотеку ввода-вывода данных, нужно написать строку #include <stdio.h>.

Комментарии

Чтобы закомментировать строку в коде, в начале нее ставится знак /* , а в конце - */. Текст внутри этих знаков не будет обрабатываться компилятором, и будет виден только разработчику.

Ввод и вывод данных

За ввод пользовательских данных отвечает команда scanf. Вывод данных производится через оператор printf.

Простейшая программа Hello World на языке С выглядит так.


/*библиотека ввода-вывода данных*/
#include  
/* основная функция */
void main() 
{
    printf("Здравствуй, Мир!\n");
    return 0;
}

Строка void main означает начало программы, а return 0 - ее конец. Вместо пустого оператора “void” может быть указан конкретный тип используемых в коде данных - например, int или float.


Рассмотрим пример программы с вводом данных.


#include 

int main()
{
  int x;

  printf( "Введите число: " );
  scanf( "%d", &x );
  printf( "Вы ввели %d", x );
  return 0;
}
#

Здесь символ %d говорят компилятору, что в этом месте ожидается целое десятичное число. Символ &x присваивает введенное значение объявленной ранее переменной x.

Если нам необходимо ввести символьные, а не числовые данные, основная функция будет выглядеть так.


#include <stdio.h>

void main()
{
char name[21];
/* символьный массив с определенным количеством знаков */
  printf( "Введите ваше имя: " );
  scanf( "%s", name );
  printf( "Вы ввели %s", name );
  return 0;
}
#

Если, то

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


#include <stdio.h>

void main() {
    int x;
    printf("Введите ваш номер: ");
    scanf("%d", &x);
    if (x>10) {
        printf("Ваш номер подтвержден");
    /*если условие не соблюдается, выводим другое сообщение*/
    } else {
        printf("Номер должен быть двузначным");
    }
  return 0;
}
#

Множественный выбор

Если нужно выбрать одно из множества значений, оператор if - не самое удобное решение. Вместо него лучше использовать оператор switch. Напишем программу, выводящую на экран название определенного месяца в зависимости от введенного числового значения.


#include <stdio.h>
 
int main() {
    short int day;
 
    printf("Введите месяц");
 
   scanf("%d", &day); 
    
 /* выводим название месяца */
   
 switch (day) {
    case 1:
        printf("Январь");
        /* выходим из дальнейших проверок */
        break;
    case 2:
        printf("Февраль");
        break;
    case 3:
        printf("Март");
        break;
    case 4:
        printf("Апрель");
        break;
    case 5:
        printf("Май");
        break;
    case 6:
        printf("Июнь");
        break;
    /* И так далее. Для чисел меньше 12 выводим следующую надпись*/
    default:
        printf("Введено неверное значение");
    }
  return 0;
}

Цикл For

Рассматриваемый цикл состоит из трех частей:

  • переменная, над которой производится действие;
  • заданное условие;
  • порядок обновления переменной.

Пока условие верно, программа последовательно будет выполнять нужное действие над инициированной переменной.

В примере выведем на экран квадраты всех чисел от 1 до 10.


#include <stdio.h>

void main() {
int x;
for (x=1; x <=10; x++) {
/* перебираем последовательно числа от 1 до 10, увеличивая переменную на 1 на каждом шаге цикла */
    printf("%d ", x*x);
}
/* выводим значения квадратов */
 return 0;
}
#

Команда x++ здесь пошагово добавляет единицу к каждому новому значению переменной x, пока цикл не завершится.

While и do-while

Цикл While немного проще по синтаксису, чем цикл For, но выполняет схожие функции. Здесь нужно лишь указать условие и изменяемую переменную.


#include <stdio.h>

int main()
{
  int y;
  while (y <= 15){
    printf("%d\n",y+y);
    y++;
  }
   return 0;
}

В этом примере на экран выводится сумма двух переменных y, пока y меньше или равен 15.

#

Цикл do while сначала выполняет условие, а затем проверяет получившийся результат.


#include <stdio.h>

int main()
{
  int y;
y = 0;
/* сначала заходим в цикл */
do {
    printf("%d\n", y);
   y++;
/* а в конце проверяем, нужно ли идти на новый повтор*/
} while(y < 10);
 return 0;
}

Функции

Чтобы не прописывать несколько раз одно и то же действие, в программу добавляются функции, то есть автономные куски кода. Команда main () обозначает собой основную функцию. Но над ней можно прописать дополнительные операции.

Разберем на примере. Напишем код, который автоматически будет складывать два введенных числа. Для этого введем инициализируем функцию add и пропишем ее содержание.


#include <stdio.h>

int add ( int x, int y )
{
  return x + y;
}
int main()
{
  int x;
  int y;

  printf( "Введите два числа: " );
  scanf( "%d", &x );
  scanf( "%d", &y );
  printf( "Сумма введенных чисел составляет %d\n" , add( x, y ));
return 0;
}
#

При создании функции всегда указываются:

  • тип используемых переменных;
  • название функции;
  • аргументы;
  • тело функции.

Код становится более рациональным и читаемым при использовании функций, поэтому их освоение - одна из главных задач программиста на С.

Примеры программ

1. Напишем код, который по введенным данным - пройденному расстоянию и времени в пути - будет определять скорость передвижения.


#include <stdio.h>

float speed( float l, float t )
{
  return l/t;
}
float main()
{
  float l;
  float t;

  printf( "Введите расстояние: " );
  scanf( "%f", &l );
  printf( "Введите время: " );
  scanf( "%f", &t );
  printf( "Скорость равна %f" , speed( l, t ));;
return 0;
}

Здесь мы использовали дробный тип переменных, так как результатом деления может быть не целое число.

#

2. Перепишем выражение if с несколькими условиями.

В зависимости от возраста, введенного пользователем, выведем на экран соответствующую приветственную надпись.


#include <stdio.h>

int main()
{
  int age;

  printf( "Пожалуйста, введите свой текущий возраст: " );
  scanf( "%d", &age );
  if ( age <= 12 ) {
    printf( "Привет, малыш!\n" );
  }
  else if ( age < 20 ) {
    printf( "Здравствуй, юный друг!\n" );
  }
  else if ( age < 40 ) {
    printf( "Добро пожаловать!\n" );
  }
  else {
    printf( "Рады Вас видеть!\n" );
  }
  return 0;
}
#

Как видно из примера, связка else if внутри функции может повторяться несколько раз.

Заключение

Язык С - основа для создания операционных систем и вычислительных программ. В отличие от С++ и С#, в классическом С нет объектов, методов и классов. Это одновременно можно считать и плюсом, и минусом языка. Часть задач программирования сложно решить без инструментов ОПП, но с другой их частью С справляется быстрее и “изящнее”.

Синтаксис С лег в основу многих более поздних языков, что делает его знание особенно полезным для специалиста в разработке программного обеспечения.

Автор

Редакция Appfox

Редакция Appfox