Как писать на с
Перейти к содержимому

Как писать на с

  • автор:

Первая программа на C++ — урок 1

В качестве среды разработки под Windows автор советует использовать Visual Studio 2008 (800 Мб), если у вас Windows XP, Visual Studio 2013 (6.5 Гб) для Windows 7 и выше, или Dev C++ 5 (41 Мб) для тех, у кого слишком медленный интернет для загрузки Visual Studio. Пользователям Unix-подобных систем, потребуется компилятор GCC и любой текстовый редактор, например Vim.

После того, как вы установили все необходимое, приступим к написанию первой программы.

  • Создание проекта
    • Для Visual Studio
    • Для GCC
    • Описание синтаксиса

    Создание проекта

    Для Visual Studio

    Откройте меню «Файл → Создать → Проект». Перейдите на вкладку «Общие» и выберите «Пустой проект». Придумайте проекту любое название, например «lesson1» и нажмите «OK».

    В окне обозревателя решений (обычно он находится в левом верхнем углу) щелкните правой кнопкой на папке «файлы исходного кода». В диалоговом окне выберите пункт меню «Добавить → Создать элемент». Введите название для нового файла — main.cpp и нажмите кнопку «Добавить».

    Для GCC

    Создайте пустой файл и откройте его любым текстовым редактором, в котором есть подсветка синтаксиса.

    Код первой программы

    Наберите следующий код:

    #include #include // для system using namespace std; int main() < cout 

    Описание синтаксиса

    Директива #include используется для подключения других файлов в код. Строка #include , будет заменена содержимым файла «iostream.h», который находится в стандартной библиотеке языка и отвечает за ввод и вывод данных на экран.

    #include подключает стандартную библиотеку языка С. Это подключение необходимо для работы функции system .

    Содержимое третьей строки — using namespace std; указывает на то, что мы используем по умолчанию пространство имен с названием «std». Все то, что находится внутри фигурных скобок функции int main() <> будет автоматически выполняться после запуска программы.

    Оператор cout предназначен для вывода текста на экран командной строки. После него ставятся две угловые кавычки (

    Если в процессе выполнения произойдет какой-либо сбой, то будет сгенерирован код ошибки, отличный от нуля. Если же работа программы завершилась без сбоев, то код ошибки будет равен нулю. Команда return 0 необходима для того, чтобы передать операционной системе сообщение об удачном завершении программы.

    — В конце каждой команды ставится точка с запятой.

    Компиляция и запуск

    Теперь скомпилируйте и запустите программу. Тем, кто пользуется MS Visual Studio, нужно нажать сочетание клавиш «Ctrl+F5». Пользователям GCC нужно выполнить следующие команды:

    c++ имя_файла.cpp -o имя_выходного_бинарника # компиляция кода ./имя_выходного_бинарника # запуск программы 

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

    Прочитайте текст ошибки и попробуйте ее исправить своими силами. Если не получится, напишите о вашей проблеме в комментариях.

    В качестве домашнего задания, переделайте эту программу так, чтобы вместо, сообщения «Hello, World» выводилось сообщение «Hello, User».

    Уроки Cи

    Представляем курс по изучению языка программирования Си. Си является одним из самых популярных языков в программировании и за его изучение обычно берутся ещё в школе или университете.

    Видеоурок

    Полезные ссылки:

    • Программа Code Blocks ;
    • Программа Visual Studio .

    Информация по языку Си

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

    Си язык программирования используется многими компаниями уже более 30 лет подряд. Си язык быстрее по скорости выполнения нежели все его конкуренты. На сегодняшний день ему конкуренцию составляет язык Golang, но язык программирования Си все равно быстрее даже его современного аналога. Такое происходит из-за процесса выполнения кода. Он выполняется практически на уровне процессора.

    Сегодня язык Си используют не многие компании в качестве главного языка для создания какого-либо проекта. Это обусловлено тем, что существуют такие языки программирования, как: С++ , Java , C# и тому подобные, которые выполнять роль нужного языка куда лучше чем Си.

    Язык Си реально стар, ведь появился еще в 1972 году. Как понимаете, разрабатывался он с учётом компьютеров того времени, а они были как современный калькулятор по функционалу. Если бы не постоянная поддержка языка, то язык давным давно бы умер и все бы о нём забыли. За счёт того что он постоянно развивается, то даже сейчас он не утратил сил и на нём вполне можно разрабатывать. Язык низкоуровневый, а значит имеет хороший отклик и быстрое выполнение.

    Что интересно, то на основе языка Си создано огромное множество других языков. Существует термин: «Си-подобные языки программирования ». Этим определением обозначают языки программирования, что построены на базе Си языка. Это такие, как: C++, C#, D, Java, Objective C, PHP, Perl, Scala и еще сотни других.

    Кстати, книг на темы: « с для чайников », « основы с », «С и с нуля » выпущено больше, нежели аналогичных книг по другим языкам вместе взято.

    Так почему же язык всё равно популярен?

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

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

    В общем, язык стоит изучить хотя бы по той причине, что он даёт базовое фундаментальное понимание принципов работы компьютера и языков программирования. В дальнейшем если вы захотите перейти на С++ , C# , Java или даже Python , вы всё равно найдёте очень много схожего и изучение следующего языка вам явно будет даваться проще. Поэтому если вы еще не решились изучать или нет Си, но при этом ещё с программированием не сталкивались, то наш вам совет - учите Си и данный курс вам как раз предоставит всё необходимое чтобы его изучить.

    Эти знания вам ни раз пригодятся, а главное как гордо можно будет заявить: «Я начинал изучение еще с языка Си», - красота.

    Установка необходимого

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

    • Visual Studio ;
    • Code::Blocks ;
    • Xcode (только ПК Мак);
    • Онлайн компилятор (представлен ниже на этой странице).
    План курса

    За курс мы познакомимся с языком программирования Си. Мы изучим язык Си с нуля для новичков. Вами будет изучен базовый синтаксис языка, а также некоторые сложные конструкции, по типу: структур данных, работы с файлами, работы с функциями и многое другое.

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

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

    Основной файл

    #include // #include int main() < printf("Hello, World!\n"); // system("pause"); return 0; >

    С++ для новичков — что это за язык программирования, как писать программы: 1-я часть гайда

    Разбираемся, как устроен язык программирования C++, что такое программы и как научиться их писать.

    Евгений Кучерявый

    Евгений Кучерявый

    Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.

    Чтобы научиться программировать с нуля, нужно только уметь пользоваться компьютером, устанавливать программы, создавать папки и файлы. Это первая статья из серии «Глубокое погружение в C++», с помощью которой вы сделаете первые шаги в профессии разработчика серверных приложений и игр.

    Не пугайтесь большого объёма информации: чем больше вы будете знать, тем лучше сможете программировать. Это особенно важно, если вы выбрали C++, потому что на этом языке невозможно без хорошей теоретической базы написать высокопроизводительный код.

    Внимание! В следующих разделах информация сильно упрощена.

    Что такое язык программирования

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

    Компьютер понимает только машинный код — специальный язык, который очень сложно изучить. Вот как выглядит вывод на экран надписи «Hello, World!» на машинном коде (в шестнадцатеричном представлении):

    Всё равно достаточно сложно, да? В результате человечество создало более понятные языки программирования, на которых гораздо быстрее писать программы. А чтобы они потом запускались, код переводится в машинный или какой-нибудь промежуточный язык — этот процесс называется компиляцией.

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

    Как работают программы

    Любая программа работает с данными: она их получает, обрабатывает, а потом возвращает результат обработки. Данные могут быть переданы пользователем, считаны из файла или записаны в самом коде.

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

    Также программа может состоять из других подпрограмм — наборов инструкций. Обработка запроса пользователя, отправка данных на сервер, получение ответа, вывод страницы — всё это подпрограммы.

    Вот пример логики такой подпрограммы:

    Можно вернуть данные пользователю, записать их в файл или передать другой подпрограмме. Вот ещё один пример использования программы:

    В C++ такой код будет выглядеть так:

    Слева — менеджер файлов, в центре — текстовый редактор, где уже введён нужный нам код, а справа — консоль, в которой выводится результат. Чтобы запустить программу, нажмите Run.

    Запускаем код на компьютере

    Если же вы хотите компилировать код на своём компьютере, то установите компилятор. Я пользуюсь G++, его и вам рекомендую.

    • Установщик для Windows.
    • Название пакета для Linux: gcc.

    После установки компилятора создайте отдельную папку для кода, а в ней — файл hello.cpp (это расширение для файлов с командами на C++). Желательно, чтобы путь к папке состоял из латинских символов и был написан без пробелов.

    Откройте hello.cpp с помощью любого блокнота или редактора кода (например, Sublime text или VS Code) и вставьте в него код, указанный выше. Теперь откройте терминал с помощью инструкции ниже.

    Windows Linux
    1. Нажмите Win + R, введите cmd и нажмите Enter. 1. Нажмите Ctrl + Alt + t. Если не помогло, то подходящий способ можно найти в этой статье.
    2. Введите команду cd [путь]. Например, cd projects\cpp1, если ваша папка находится по адресу c:\projects\cpp1. 2. Введите команду cd [путь]. Например: cd ~/projects/cpp1
    3. Если папка находится не на системном диске, то команду нужно изменить: cd /D [диск:][путь]. Например: cd /D d:\projects\cpp1

    Затем введите следующую команду:

    Теперь, когда мы смогли запустить программу, разберёмся в ней.

    Из чего состоит программа на C++

    Начнём с самой первой строчки:

    Гайд по оформлению кода на С++ от Стэнфордского университета

    Обложка поста Гайд по оформлению кода на С++ от Стэнфордского университета

    Стэнфордский университет представил гайд по основным стандартам оформления кода на С++. Умение корректно оформить ваш код является ценным навыком, так как это в разы облегчает работу других. Также у нас есть подобная статья, посвящённая написанию самодокументируемого кода.

    Пробелы и отступы

    Отделяйте пробелами фигурные скобки:

    // Плохая практика int x = 3, y = 7; double z = 4.25; x++; if (a == b) < foo(); >// Хорошая практика int x = 3; int y = 7; double z = 4.25; x++; if (a == b)

    Ставьте пробелы между операторами и операндами:

    int x = (a + b) * c / d + foo(); 

    Когда строка становится длиннее 100 символов, разделите её на две, сделав перевод на новую строку после оператора, и продолжайте писать:

    int result = reallyLongFunctionOne() + reallyLongFunctionTwo() + reallyLongFunctionThree() + reallyLongFunctionFour(); int result2 = reallyLongFunction(parameterOne, parameterTwo, parameterThree, parameterFour, parameterFive, parameterSix); 

    Оставляйте пустые линии между функциями и между группами выражений:

    void foo() < . >// пустая линия void bar()

    Названия и переменные

    Давайте переменным описательные имена, такие как firstName или homeworkScore . Избегайте однобуквенных названий вроде x или c , за исключением итераторов вроде i .

    Называйте переменные и функции, используя верблюжийРегистр . Называйте классы ПаскальнымРегистром , а константы — в ВЕРХНЕМ_РЕГИСТРЕ . Узнать подробнее про верблюжий регистр вы можете в этой статье.

    Если переменная используется лишь внутри определенного if , то делайте её локальной, объявляя в том же блоке кода, а не глобальной.

    Выбирайте подходящий тип данных для ваших переменных. Если переменная содержит лишь целые числа, то определяйте её как int , а не double .

    Используйте текстовую строку, стандартную для C++, а не С. С++ путает тем, что имеет два вида текстовых строк: класс string из С++ и старый char* (массив символов) из С:

    // Плохая практика: текстовая строка в стиле Cи char* str = "Hello there"; // Хорошая практика: текстовая строка в стиле C++ string str = "Hello there"; 

    Если определенная константа часто используется в вашем коде, то обозначьте её как const и всегда ссылайтесь на данную константу, а не на её значение:

    const int VOTING_AGE = 18; 

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

    // Плохая практика int count; // Глобальная переменная void func1() < count = 42; >void func2() < count++; >int main() < func1(); func2(); >// Хорошая практика! int func1() < return 42; >void func2(int& count) < count++; >int main()

    Базовые выражения С++

    С++ основан на С, поэтому всегда есть вариант решить задачу «путем С++» и «путем С». Например, когда вы желаете вывести что-либо на системную консоль, вы можете сделать это «путем С++» , использовав оператор вывода cout , в то время как «путем С» вы бы использовали глобальную функцию вроде printf :

    // Плохая практика printf("Hello, world!\n"); // Хорошая практика cout 

    Частенько затрудняетесь с выбором между for и while ? Используйте цикл for , когда вы знаете количество повторений, а цикл while , когда количество повторений неизвестно:

    // Повторяет 'size' раз for (int i = 0; i < size; i++) < . >// Повторяет, пока больше не будет строк string str; while (input >> str)

    Когда используете операторы управления вроде if / else , for , while , всегда используйте < >и соответствующие отступы, даже если тело всего оператора управления состоит лишь из одной строки:

    // Плохая практика if (size == 0) return; else for (int i = 0; i < 10; i++) cout else < for (int i = 0; i < 10; i++) < cout > 

    Старайтесь избегать использования выражений break или continue . Используйте их только в том случае, если это абсолютно необходимо.

    В C++ есть функция exit , которая немедленно завершает программу. Настоятельно не рекомендуется использовать данную функцию. Программа всегда должна заканчиваться естественно, достигая оператора return функции main .

    Используя выражения if / else , подобающе выбирайте между разнообразными if и else шаблонами в зависимости от условий, относящихся к друг другу. Избегайте излишних тестов if :

    // Плохая практика if (grade >= 90) < cout if (grade >= 80 && grade < 90) < cout if (grade >= 70 && grade < 80) < cout // Хорошая практика if (grade >= 90) < cout else if (grade >= 80) < cout else if (grade >= 70) < cout . 

    Если у вас есть выражение if / else , которое возвращает логическое значение, возвращайте результаты теста напрямую:

    // Плохая практика if (score1 == score2) < return true; >else < return false; >// Хорошая практика return score1 == score2; 

    Никогда не проверяйте значения логического типа, используя == или != с true или false :

    // Плохая практика if (x == true) < . >else if (x != true) < . >// Хорошая практика if (x) < . >else

    Чрезмерность

    Если вы используете один и тот же код дважды или более, то найдите способ удалить излишний код, чтобы он не повторялся. К примеру, его можно поместить во вспомогательную функцию. Если повторяемый код похож, но не совсем, то постарайтесь сделать вспомогательную функцию, которая принимает параметры и представляет разнящуюся часть:

    // Плохая практика foo(); x = 10; y++; . foo(); x = 15; y++; // Хорошая практика helper(10); helper(15); . void helper(int newX)

    Переместите общий код из выражения if / else , чтобы он не повторялся:

    // Плохая практика if (x < y) < foo(); x++; cout else < foo(); y++; cout // Хорошая практика foo(); if (x < y) < x++; >else < y++; >cout 

    Комментарии

    Заглавный комментарий. Размещайте заглавный комментарий, который описывает назначение файла, вверху каждого файла. Предположите, что читатель вашего комментария является продвинутым программистом, но не кем-то, кто уже видел ваш код ранее.

    Заголовок функции / конструктора. Разместите заголовочный комментарий на каждом конструкторе и функции вашего файла. Заголовок должен описывать поведение и / или цель функции.

    Параметры / возврат. Если ваша функцию принимает параметры, то кратко опишите их цель и смысл. Если ваша функция возвращает значение — кратко опишите, что она возвращает.

    Исключения. Если ваша функция намеренно выдает какие-то исключения для определенных ошибочных случаев, то это требует упоминания.

    Комментарии на одной строке. Если внутри функции имеется секция кода, которая длинна, сложна или непонятна, то кратко опишите её назначение.

    TODO. Следует удалить все // TODO комментарии перед тем, как заканчивать и сдавать программу.

    Эффективность

    Вызывая большую функцию и используя результат несколько раз, сохраните результат в переменной вместо того, чтобы постоянно вызывать данную функцию:

    // Плохая практика if (reallySlowSearchForIndex("abc") >= 0) < remove(reallySlowSearchForIndex("abc")); >// Хорошая практика int index = reallySlowSearchForIndex("abc"); if (index >= 0)

    Функции и процедурное проектирование

    Хорошо спроектированная функция имеет следующие характеристики:

    • Полностью выполняет четко поставленную задачу;
    • Не берет на себя слишком много работы;
    • Не связана с другими функциями бесцельно;
    • Хранит данные максимально сжато;
    • Помогает распознать и разделить структуру программы;
    • Помогает избавиться от излишков, которые иначе присутствовали бы в программе.

    Используйте параметры, чтобы отправлять информацию из функции или когда функции нужно возвратить несколько значений. Не используйте параметры без необходимости. Заметьте, что a , b , и с не являются параметрами в нижеприведенной функции, так как это не нужно:

    /* * Решает квадратное уравнение ax^2 + bx + c = 0, * внося результаты в root1 и root2. * Предполагается, что данные уравнения имеют два корня. */ void quadratic(double a, double b, double c, double& root1, double& root2) < double d = sqrt(b * b - 4 * a * c); root1 = (-b + d) / (2 * a); root2 = (-b - d) / (2 * a); > 

    Когда требуется вернуть значение из функции, используйте значение return :

    // Плохая практика void max(int a, int b, int& result) < if (a >b) < result = a; >else < result = b; >> // Хорошая практика int max(int a, int b) < if (a >b) < return a; >else < return b; >> 

    Отправляя объект в функцию как параметр, вы должны передавать его по ссылке, так как если он будет передан как значение, то будет скопирован весь объект. Копирование объектов требует больших затрат памяти.

    Используйте ссылочные переменные, а не указатели. Одна из причин — это то, что ссылочные переменные, в отличие от указателей, не могут принимать значение NULL :

    // Плохая практика // Принимает указатель void process(BankAccount* account) < . >// Хорошая практика // Принимает адресную ссылку void process(BankAccount& account)

    Если вы передаете объект в функцию и код не изменит вида объекта — передайте его как const -ссылку:

    // Плохая практика // Принимает указатель void display(BankAccount account) < . >// Хорошая практика // Принимает константную ссылку void display(const BankAccount& account)

    Избегайте “цепных” вызовов, когда множество функций вызывают друг друга по цепочке, не возвращая значение в main . Убедитесь, что main является кратким описанием всей программы:

    // Плохая практика main | +-- function1 | +-- function2 | +-- function3 | +-- function4 | +-- function5 | +-- function6 // Хорошая практика main | +-- function1 | +-- function2 | | | +-- function3 | | | +-- function4 | +-- function5 | | | +-- function6 

    Проектирование классов

    Инкапсуляция. Отделяйте ваши объекты, делая все поля данных в вашем классе private :

    class Student < private: int homeworkScore; . 

    .h vs .cpp. Всегда размещайте объявления классов и их частей в собственные файлы, ClassName.h . Всегда сворачивайте файлы объявления классов .h в блок препроцессоров #ifndef / define / endif , чтобы избежать множественных объявлений одного класса:

    // Point.h #ifndef _point_h #define _point_h class Point < public: Point(int x, int y); int getX() const; int getY() const; void translate(int dx, int dy); private: int m_x; int m_y; >; #endif // Point.cpp #include "Point.h" Point::Point(int x, int y) < m_x = x; m_y = y; >void Point::translate(int dx, int dy) < m_x += dx; m_y += dy; >. 

    class vs struct. Всегда используйте class , только если вы не создаете очень маленький и простой вид данных, для которого нужны лишь несколько публичных переменных и, возможно, конструктор для их инициализации.

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

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

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