Пробуем программировать в Linux

Наконец-то мы напишем свою первую программу на «С» в Linux. Для этого нам понадобится:

  • дистрибутив Linux;
  • компилятор, то есть «gcc»;
  • умение работать с клавиатурой;

Если у вас еще нету Linux’a, можете воспользоваться этой статьей. Особенное внимание прошу обратить на то, что кроме «hello world» мы напишем пару программок из лабораторных работ 532а группы(ОГАХ, ФИТ, 2011 год).

Заинтересованных прошу под кат.

Проверим наличие установленных программ. Заодно и поставим консольный файловый менеджер. Для этого запустим терминал:

Или можно перейти в консольный режим нажатием «ctrl + alt + 1». Советую поискать в гугле и почитать про консольный режим и графический в linux.

Теперь мы будем работать только с консолью. Если вы зашли не под root’ом, то делаем так:

su root

Вводим пароль root’a. Теперь попробуем установить gcc и mc:

apt-get install gcc mc

У меня не оказалось mc:

Просто ввожу английскую «Y» и жму «enter». Программа apt-get установит все сама. Теперь у нас есть все что нужно. Запустим mc, для этого просто введите в терминал «mc». Создадим новый файл командой:

touch hello.c

Выбираем файл в mc и жмем «F4», тем самым открывая его для редактирования. Напишем hello world:

#include <stdio.h> //заголовочный файл

//main главная функция программы
int main(int argc, char* argv[]) //что такое argc и argv расскажу ниже
{
    printf("Hello world!n"); //функция вывода в стандартный поток
    return 0; //возвращаемое значение функции main
}

Про аргументы функции main: argc — от «argument counter» — количество передаваемых программе аргументов, argv — массив аргументов в виде строк. Например вы пишите:

rm dir_name -r

Программе с именем rm передаются три аргумента: rm, dir_name и -r. То есть argc будет равен 3, argv[1]«dir_name», argv[2]«-r», а argv[0]rm. Прошу заметить, argv[0] всегда равен названию программы, точнее той команде, с помощью которой она запустилась.

Теперь нужно откомпилировать файл. Про объектные файлы, модульную компиляцию и прочее премудрости gcc можете поискать в гугле, или попросить меня написать статью. А мы пойдем самым простым путем:

gcc -o hello hello.c

Если все прошло удачно, gcc не сообщит об ошибках, а в папке появиться откомпилированный файл с именем «hello». Что бы его запустить, необходимо выполнить:

./hello

Результат:

Теперь напишем немного посложнее. Нарисуем символами квадрат, причем пользователь программы сам задает величину стороны.

И так по этапам:

  1. Необходимо получить в переменную величину стороны;
  2. Необходимо в каждой строке нарисовать количестве символов равное величине стороны;
  3. После второго пункта необходимо перейти на следующую строку и сделать тоже самое;

Как видно, нам понадобятся два цикла. Для простоты я буду использовать цикл for. Его конструкция:

for (инициализация_переменной; условие_выполнения_цикла; действие_при_каждой_итерации)

Приведу пример:

for (i = 0; i < 10; ++i)
    printf("Vasya Pupkinn");

Что делает данный цикл?

  1. Устанавливает значение переменной i равным 0;
  2. Проверяет условие i < 10, если оно верно — продолжает выполнение, если нет — выходит из цикла;
  3. Далее цикл выполнит итерационное действие, то есть операцию ++i;
  4. Выполниться функция printf, управление перейдет к пункту 2.

На экран выведется 10 раз надпись «Vasya Pupkinn». На 11 итерации i будет равно 10, но условие гласит что i < 10, а 10 == 10, но никак не меньше, поэтому цикл прекратит свое выполнение.

Теперь вернемся к нашему квадрату. Что бы считать значение из стандартного потока ввода(консоль) нам понадобиться функция scanf; Ее прототип:

int  scanf ( const char * format, ... );

Первый аргумент функции — формат. Задает тип данных для чтения. Например «%i» — integer, «%s» — string.

Примечание: В чистом С нету класса для строк. Точнее в нем вообще нет классов. Поэтому аналогом строки является массив символов(char str[5] — строка длинной 5 символов);

Вторым аргументом scanf является адрес переменной, в которую необходимо записать значение. Для получение адреса используется символ «&». Например:

int a;
scanf("%i", &a);

Программа предложит ввести значение, после нажатия клавиши «enter» значение будет записано в переменную a.

Теперь приступим к написанию программы с квадратом. Аналогичным образом создайте для нее файл. Откройте на редактирование. Пишем код:

#include <stdio.h> //подключаем заголовочный файл

int main(int argc, char* argv[]) //главная функция программы
{
    int length; //переменная для хранения величины стороны квадрата
    scanf("%i", length); //считываем значение в переменную
    int i, j; //переменные для цикла
    for (i = 1; i <= length; ++i) //первый цикл
    {
        //второй цикл рисует необходимое количество символов
        for (j = 1; j <= length; ++j)
            printf("$"); //печать одного символа
        printf("n"); //переход на новую строку
    }
    return 0;
}

Как видим ничего сложного. Компилируем так же:

gcc -o quad quad.c

И запуск аналогично:

./quad

Жмем «enter» вводим например 7, получаем вот такую штуку:

Квадрат не вышел, потому что высота символа больше чем ширина. Ну а по количеству — все верно.

Теперь попробуем написать программу для рисования треугольника. Для этого стоит лишь немного поменять второй цикл:

#include <stdio.h>

int main(int argc, char* argv[])
{
    int length;
    scanf("%i", &length);
    int i, j;
    for (i = 1; i <= length; ++i)
    {
        j = length + 1 - i; //каждый цикл j будет уменьшатся
        //некоторые параметры для цикла for можно пропустить
        for (; j <= length; ++j)
            printf("$");
        printf("n");
    }
    return 0;
}

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

Компилируем, запускаем. Если все верно, то при вводе 10 получим:

В следующий раз я расскажу вам про make файл, и как с ним работать. Не забываем писать отзывы, замечания, предложения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *