Введение в основы программирования на С
Введение в основы программирования на C: Краткий обзор
Данное методическое пособие, предназначенное для студентов, представляет собой введение в язык программирования C, охватывая основные концепции и инструменты, необходимые для начала работы с этим мощным и широко используемым языком.
Типы данных и основы синтаксиса
Книга начинается с представления базовых типов данных в C, включая char
, int
, float
, double
и их модификаторы (например, unsigned
). Объясняется понятие переменной как именованной области памяти, связанной с определенным типом данных. Рассматривается процесс объявления и инициализации переменных, а также приводится простейшая программа на C, демонстрирующая основные элементы синтаксиса, такие как функция main()
, операторы присваивания и возврата значения. Подчеркивается важность комментариев для улучшения читаемости кода.
Область видимости переменных
Второй раздел посвящен концепции области видимости переменных. Объясняется различие между локальными и глобальными переменными, а также влияние блока кода (определяемого фигурными скобками) на доступность переменных. Рассматривается, как область видимости влияет на организацию и структуру программы.
Ввод-вывод и работа с библиотекой stdio.h
Книга знакомит с библиотекой stdio.h
, которая предоставляет функции для ввода и вывода данных. Особое внимание уделяется функциям printf()
и scanf()
, их формату вызова и использованию спецификаторов формата для вывода различных типов данных. Рассматриваются управляющие символы (escape-последовательности) для форматирования вывода. Приводятся примеры использования printf()
и scanf()
для взаимодействия с пользователем.
Массивы, операторы выбора и циклы
В последующих главах рассматриваются более сложные концепции. Объясняется понятие массива как совокупности однотипных элементов, доступ к которым осуществляется по индексу. Рассматриваются одномерные и многомерные массивы, а также инициализация массивов. Далее, представлены операторы выбора if
и switch
, позволяющие создавать условные конструкции в программе. Подробно рассматриваются операторы циклов while
, do-while
и for
, а также операторы break
и continue
для управления потоком выполнения цикла.
Указатели и функции
Ключевым разделом является изучение указателей. Объясняется понятие указателя как переменной, хранящей адрес другой переменной. Рассматриваются операции получения адреса (&
) и разыменования (*
). Подробно описывается арифметика указателей, включая инкремент, декремент, сложение, вычитание и сравнение указателей. Рассматривается связь между указателями и массивами. Далее, рассматриваются функции, их определение, прототипы и вызов. Объясняется передача параметров по значению и использование указателей в качестве параметров функций.
Стандартные алгоритмы
В заключительной части книги представлены стандартные алгоритмы, такие как схема Горнера для перевода чисел из одной системы счисления в другую, обратная схема Горнера, а также метод границы для обработки строк и разбиения их на лексемы. Приводятся примеры реализации этих алгоритмов на языке C.
Текст подготовлен языковой моделью и может содержать неточности.
ВВЕДЕНИЕ В ОСНОВЫ ПРОГРАММИРОВАНИЯ НА С Методическое пособие для студентов Костиков Ю. А., Мокряков А. В., Павлов В. Ю., Романенков А. М. МОСКВА 2014
Содержание. Типы данных простейшая программа 2 Локальные и глобальные переменные. Область видимости 3 Знакомство с <stdio.h>. Функция printf и scanf. 4 Средства программирования на языке Си. Массивы. 7 Указатели. Функции. 18 Стандартные алгоритмы. 28
Типы данных. Простейшая программа. Язык Си был создан в 1972 г. Он является строго типизированным языком. Одним из основных понятий языка Си является объект - именованная область памяти. Более узкое понятие объекта – переменная. Отличительная особенность переменной состоит в возможности связывать с ее именем различные значения, совокупность которых определяется типом переменной. Давайте познакомимся с базовыми (простейшими) типами данных Тип данных Размер (бит) Тип данных Размер (бит) unsigned char 8 long 32 char 8 unsigned int 32 unsigned short 16 int 32 short 16 float 32 enum 32 double 64 unsigned long 32 long double 64 Каждая переменная перед её использованием в программе должна быть объявлена и определена, т. е. для переменной должна быть выделена память. Размер участка памяти и интерпретация содержимого зависит от типа переменной. Простейшая форма определения переменных: тип список_имен_переменных; Примеры: char a,b,c; unsigned int old_age; Давайте рассмотрим простенькую программу: int main() //Вход в программу всегда начинается с функции main { // Начала блока int val_1; //Объявление переменной int val_2 = 10; //Объявление и определение(инициализация) значением 10 //переменной val_2
val_1 = 15; //Присваивание значением 15 переменной val_2 = val_1 * 10; // Присваивание переменной val_2 значение, после //операции умножения переменной val_1 и 10 return 0; // возврат из функции main со значением 0 } //Конец блока В языке С существует понятие комментария, который никак не влияет на программу. Его смысл заключается в пометках, чтобы код был читаемым. Существуют два вида комментариев: однострочный и многострочный. // Это однострочный комментарий /* Это многострочный комментарий */ Стоит отметить, что вложенные многострочные комментарии запрещены. Каждое определение, описание и каждый оператор завершается символом ‘;’ (точка с запятой). Локальные и глобальные переменные. Область видимости. Как мы видим в нашей программе, левая фигурная скобка ({) должна предварять тело каждой функции. Соответственно правая фигурная скобка (}) должна стоять в конце каждой функции. Эта пара скобок и часть программы между ними называется блоком. Блок – важная программная единица в С. Переменная, объявленная в текущем блоке, может быть использована только в нем или в блоках, вложенных в данный блок. Все переменные, определенные в блоке, являются локальными переменными – они известны только тому блоку, в котором определены.
Область видимости (Область действия) переменной является та часть программы, в которой возможно обращение к ней. int main() { // Начало блока int val = 10; // Объявление и инициализация переменной return 0; } // Конец блока val = 100; // Нельзя обратиться к переменной вне блока Переменная, объявленная вне функции, имеет область видимости файл. Такая переменная известна всем функция, начиная с того места, где она объявлена, и до конца файла. int global_variable = 100; // Определение глобальной переменной int main() { int a = global_variable * 100; // Определение локальной переменной return 0; } Знакомство с <stdio.h>. Функция printf и scanf. Чтобы привести простейший пример осмысленной программы на языке Си, необходимо ввести оператор, обеспечивающий вывод данных из ЭВМ, например на экран дисплея. К сожалению такого оператора в языке Си нет. Все возможности обмена данных с внешним миром программа на языке Си реализует с помощью библиотечных функций ввода – вывода.
Для подключения к программе описаний средств ввода – вывода из стандартной библиотеки используется директива #include<stdio.h>. Название заголовочного файла stdio.h является аббревиатурой: std – standart(стандартный), i – input(ввод), o – output(вывод), h – head(заголовок) Достаточно часто для вывода информации из ЭВМ в программах используется функция printf(). Она переводит данные из внутреннего кода в символьное представление и выводит полученные изображения символов результатов на экран дисплея. При этом у программиста имеется возможность форматировать данные, т.е. влиять на их представление на экране дисплея(print formatted). Оператор вызова функции printf() можно представить так: printf(форматная_строка, список_аргументов); или же реальный прототип этой функции: int __cdecl printf(const char* _Format, …); Строка форматирования содержит элементы трех типов: обычные символы, которые просто копируются в стандартный выходной поток (выводятся на экран дисплея); команды форматирования, которые определяют тип отображаемого аргумента; управляющие символьные последовательности, которые осуществляют форматирование. Команда форматирования начинается с символа %, за которым следует код формата: %c Символ
%s Строка символов %d, %i Десятичное целое со знаком %u Десятичное целое без знака %f Вещественное число (значение с плавающей точкой) %e Экспоненциальное представление вещественного числа %o Восьмеричное число без знака %x Шестнадцатеричное число без знака При форматировании необходимо не только выводить символы, но и управлять выводом, например, переводить строки, делать отступы и т.д. Для этой цели служат управляющие символы (escape – последовательности): ‘\n’ – перевод строки; ‘\t’ – горизонтальная табуляция ‘\r’ – возврат каретки (курсора) к началу строки ‘\\’ – обратная косая черта \; ‘\’’ – апостроф (одиночная кавычка); ‘\”’ – кавычка (символ двойной кавычки); ‘\0’ – нулевой символ ‘\a’ – сигнал звонок ‘\b’ – возврат на одну позицию (на один символ); ‘\f’ – перевод (прогон) страницы; ‘\v’ – вертикальная табуляция ‘\?’ – знак вопроса Функция scanf считывает данные с клавиатуры и сохраняет информацию в переменных, заданных аргументами, перечисленными в списке аргументов. Аналогично printf используются команды форматирования. Формат вызова: scanf(форматная_строка, список_аргументов);
или же реальный прототип этой функции: int __cdecl scanf(const char* _Format, …); Пример: scanf("%d",&x); Про оператор & (получение адреса переменной) будет говориться позже в разделе Указатели. Упражнения: 1. Объявите переменную radix и присвойте ей значение 4. Посчитайте площадь круга, взяв за радиус значение переменной radix, и выведите на экран результат(число pi возьмите за 3.14). 2. Объявите и инициализируйте три переменных значением 2.2, 8.01, и соответственно 12.0 и вывести их среднее арифметическое значение на экран до тысячного знака. 3. Объявите и инициализируйте 5 переменных типа char и выведите их на экран. 4. Посчитайте сумму бесконечно убывающей геометрической прогрессии с первым членом равным 5 и со знаменателем равным ¼ и выведите это число на экран. 5. Найти периметр и площадь квадрата со стороной квадрта 3.2 и вывести эти числа на экран. Средства программирования на языке Си. Массивы. Операторы выбора В жизни часто есть факторы (условия), воздействие которых меняет ход событий (Пример: если сегодня будет хорошая погода, то студент пойдёт гулять, если же нет - придётся идти в ВУЗ). Подобные ситуации должны
учитываться в программах. Для разрешения таких ситуаций в программировании введены операторы выбора. Оператор выбора – это условный оператор (if) и переключатель (switch) Условный оператор имеет сокращенную форму: if (выражение_условие) оператор; В качестве выражения_условия могут использоваться арифметическое выражение, отношение и логическое выражение. Оператор выполняется только в случае истинности (т.е. при ненулевом значении) выражения_условия. Пример: if ( x > 0) x = 0; Существует полная форма условного оператора: if ( выражение_условие) оператор_1; else оператор_2; Если выражение_условие истинно, то выполняется оператор_1, если ложно, то выполняется оператор 2. if(x > 0) x = 0; else x = 1; Оператор switch является переключателем. Он состоит из ряда различных вариантов и вариантом по умолчанию. Выглядит он так:
switch (выражение_условие){ case значение_1: оператор_1; break; case значение_2: оператор_2; break; default: оператор_n; } Каждый вариант оператора switch начинается меткой (case значение или default) и заканчивается оператором break. Пример: switch(val) { case 0: val = val + 1; case 1: val = val - 1; default: val = -1; } Операторы циклов. Мы часто встречаемся с ситуациями, которые должны повторяться до определенного результата (Пример: Мы будем мыть пол до тех пор, пока он не будет чистым). В программирование такие ситуации решаются с помощью циклов.