Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык Си.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
868.05 Кб
Скачать

Язык Си

Структура программы

Типы данных

Константы и переменные

Операции

Ввод-вывод

Условные операторы

Операторы цикла в языке

Функции, математические функции

Область видимости объектов и модификация

Указатели

Массивы

Динамическое выделение памяти

Функции обработки строк

Сложные типы данных

Директивы препроцессора

Переопределение типов

Функции работы с датой и временем

Работа с файлами

Язык программирования Си — универсальный язык программирования, который завоевал особую популярность у программистов, благодаря сочетанию возможностей языков программирования высокого и низкого уровней. Большинство программистов предпочитают использовать язык Си для серьезных разработок потому, что их привлекают такие особенности языка, как свобода выражения мыслей, мобильность и чрезвычайная доступность. Язык Си даёт возможность программисту осуществлять непосредственный доступ к ячейкам памяти и регистрам компьютера, требуя при этом знания особенностей функционирования ЭВМ. В этом Си схож с языком низкого уровня — ассемблером, хотя на самом деле он представляет собой гораздо более мощное средство решения трудных задач и создания сложных программных систем. Язык Си был разработан американцем Деннисом Ритчи в исследовательском центре Computer Science Research Center of Bell Laboratories корпорации AT&T в 1972 г. Первоначальная реализация Си была выполнена на ЭВМ PDP-11 фирмы DEC для создания операционной системы UNIX. Позже он был перенесен в среду многих операционных систем и существует независимо от любой из них. Программы, написанные на языке Си, как правило, можно перенести в любую другую операционную систему или на другой компьютер либо с минимальными изменениями, либо вовсе без них. Язык Си также используется при составлении программ для микроконтроллеров. Язык Си оказал существенное влияние на развитие индустрии программного обеспечения, а его синтаксис стал основой для таких языков программирования как C++, C#, Java, PHP и др.

Структура программы на языке Си

Главная > Язык Си > Структура программы на языке Си

Программа на языке Си состоит из одной или более подпрограмм, называемых функциями. Язык Си является блочно-структурированным. Каждый блок заключается в фигурные скобки {}. Основным блоком в программе консольного приложения на языке Си является главная функция, имеющая имя main().

Каждое действие в языке Си заканчивается символом "точка с запятой" - ;. В качестве действия может выступать вызов функции или осуществление некоторых операций.

Имя функции — это коллективное имя группы описаний и операторов, заключенных в блок (фигурные скобки). За именем функции в круглых скобках указываются параметры функции.

Комментарии в языке Си

В языке Си  для комментариев используются символы

/* - начало комментария;

*/ - конец комментария.

Вся последовательность, заключенная между этими символами, является комментарием.

Это удобно для написания многострочных комментариев:

Int a; /* целая

переменная */

Многострочные комментарии также удобно использовать при отладке для сокрытия от выполнения части кода.

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

float b; // вещественная переменная

Главная функция

При выполнении консольного приложения, написанного на языке Си, операционная система компьютера передаёт управление функции с именем main(). Функцию main() нельзя вызывать из других функций программы, она является управляющей.

Следующие за именем функции круглые скобки предназначены для указания параметров (аргументов), которые передаются в функцию при обращении к ней. В данном случае операционная система не передаёт в функцию main() никаких аргументов, поэтому список аргументов в круглых скобках пустой.

Главную функцию можно записать по-разному:

  • int main()

  • void main().

Перед именем функции указывается тип возвращаемого значения. При обращении к главной функции значение возвращается операционной системе. Последняя запись не будет возвращать значения. Однако void main() - не совсем корректная запись, так как сообщает компилятору, что функция main() не возвращает никакого значения. При этом запись int main() сообщает компилятору о возвращении целочисленного значения, которое необходимо операционной системе и сообщает ей о том, что программа завершилась корректно. Если же это значение не возвращено, то операционная система понимает, что программа завершилась в аварийном режиме. Для возврата целочисленного значения перед завершением функции дописывается строка

return 0;

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

Пример: Вывод на экран сообщения "Hello, world!".

#include <stdio.h>       // Подключение библиотеки ввода-вывода int main()              // Главная функция {

  printf("Hello, world!"); // Вывод сообщения

  getchar();               // Задержка окна консоли

  return 0; }

Результат работы программы:

Теперь попробуем написать текст на русском языке.

#include <stdio.h> int main() {

  printf("Здравствуй, мир!");

  getchar();

  return 0; }

Результат работы программы:

Проблема русского языка в консольных приложениях заключается в том, что консоль и редактор кода Microsoft Visual Studio поддерживают разные кодовые страницы. Для того, чтобы увидеть русские символы в консоли необходимо поменять кодовую страницу в консоли, чтобы она соответствовала кодовой странице редактора (1251). С этой целью вызывается функция system("chcp 1251") с соответствующей командной строкой. Прототип функции system() содержится в библиотеке <stdlib.h>.

При этом текст программы будет выглядеть следующим образом:

#include <stdio.h> #include <stdlib.h> int main() {

  system("chcp 1251");        // Текущая кодовая страница 1251

  system("cls");              // Очистка консоли

  printf("Здравствуй, мир!"); // Вывод сообщения

  getchar();

  return 0; }

Результат работы программы:

Типы данных в языке Си

Главная > Язык Си > Типы данных в языке Си

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

Процесс проверки и накладывания ограничений на типы используемых данных называется контролем типов или типизацией программных данных. Различают следующие виды типизации:

  • Статическая типизация — контроль типов осуществляется при компиляции.

  • Динамическая типизация — контроль типов осуществляется во время выполнения.

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

Различают простые, составные и прочие типы данных.

Простые данные

Простые данные можно разделить на

  • целочисленные,

  • вещественные,

  • символьные

  • логические.

Составные (сложные) данные

  • Массив - индексированный набор элементов одного типа.

  • Строковый тип - массив, хранящий строку символов.

  • Структура - набор различных элементов (полей записи), хранимый как единое целое и предусматривающий доступ к отдельным полям структуры.

Другие типы данных

  • Указатель - хранит адрес в памяти компьютера, указывающий на какую-либо информацию, как правило — указатель на переменную.

Программа, написанная на языке Си, оперирует с данными различных типов. Все данные имеют имя и тип. Обращение к данному в программе осуществляется по его имени (идентификатору).

Идентификатор — это последовательность, содержащая не более 32 символов, среди которых могут быть любые буквы латинского алфавита a - z, A - Z, цифры 0 - 9 и знак подчеркивания (_). Первый символ идентификатора не должен быть цифрой.

Несмотря на то, что допускается имя, имеющее до 32 символов, определяющее значение имеют только первые 8 символов. Помимо имени, все данные имеют тип. Указание типа необходимо для того, чтобы было известно, сколько места в оперативной памяти будет занимать данный объект.

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

Верно

Неверно

int a = 2, b; b = a+3;

Int a=2;  // правильно int INT a=2;

int a = 2, b; b = A + 3; // идентификатор А не объявлен

int a = 2; b = a + 3; // идентификатор b не объявлен

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

Беззнаковые целые числа представляются в виде последовательности битов в диапазоне от 0 до 2n, где n-количество занимаемых битов.

Знаковые целые числа представляются в диапазоне -2n-1 +2n-1. При этом старший бит данного отводится под знак числа (0 соответствует положительному числу, 1 – отрицательному).

Основные типы и размеры целочисленных данных:

Количество бит

Беззнаковый тип

Знаковый тип

8

unsigned char 0...255

char -128...127

16

unsigned short 0...65535

short -32768...32767

32

unsigned int

int

64

unsigned long int

long int

Вещественный тип предназначен для представления действительных чисел. Вещественные числа представляются в разрядной сетке машины в нормированной форме. Нормированная форма числа предполагает наличие одной значащей цифры (не 0) до разделения целой и дробной части. Такое представление умножается на основание системы счисления в соответствующей степени. Например, число 12345,678 в нормированной форме можно представить как

12345,678 = 1,2345678·104

Число 0,009876 в нормированной форме можно представить как

0,009876 = 9,876·10-3

В двоичной системе счисления значащий разряд, стоящий перед разделителем целой и дробной части, может быть равен  только 1. В случае если число нельзя представить в нормированной форме (например, число 0), значащий разряд перед разделителем целой и дробной части равен 0.

Значащие разряды числа, стоящие в нормированной форме после разделителя целой и дробной части, называются мантиссой числа.

В общем случае вещественное число в разрядной сетке вычислительной машины можно представить в виде 4 полей.

знак - бит, определяющий знак вещественного числа (0 для положительных чисел, 1 - для отрицательных).

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

2n-1

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

целое - бит, который для нормированных чисел всегда равен 1, поэтому в некоторых представлениях типов этот бит опущен и принимается равным 1.

мантисса - значащие разряды представления числа, стоящие после разделителя целой и дробной части в нормированной форме.

Различают три основных типа представления вещественных чисел в языке Си:

Тип

Обозна- чение в Си

Кол-во бит

Биты степени

Мантисса

Сдвиг

простое

float

32

30...23

22...0

127

двойной точности

double

64

62...52

51...0

1023

двойной расширен- ной точности

long double

80

78...64

62...0

16383

Как видно из таблицы, бит целое у типов float и double отсутствует. При этом диапазон представления вещественного числа состоит из двух диапазонов, расположенных симметрично относительно нуля. Например, диапазон представления чисел типа float можно представить в виде: Пример: представить число -178,125 в 32-разрядной сетке (тип float). Для представления числа в двоичной системе счисления преобразуем отдельно целую и дробную части: 17810 = 101100102. 0,12510 = 0,0012.Тогда 178,12510 = 10110010,0012=1,0110010001·2111 (для преобразования в нормированную форму осуществляется сдвиг на 7 разрядов влево). Для определения степени числа применяем сдвиг:

0111111+00000111 = 10000110.

Таким образом, число -178,125 представится в разрядной сетке как

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

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

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

Пример объявления объектов

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]