Язык программирования С. История. Алфавит языка. Переменные и константы. Модификация базовых типов

Страницы работы

Фрагмент текста работы

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

.

История

  • 1972 – Dennis Ritchie и Brian Kernighan в Bell Laboratory компании AT&T разработали процедурный язык C для DEC PDP-11 в ОС UNIX.
  • 1979 – Bjarne Stroustrup в Bell Laboratory разработал объектно-ориентированный язык C++.
  • 1989 – American National Standards Institute утвердил стандарт С89, который поэтому называется ANSI.
  • 1995 – принята 1-я поправка к стандарту С89.
  • 1998 – International Standards Organization ратифицирован стандарт языка C++.
  • 1999 – принят новый стандарт С99.

Алфавит языка

  • Буквы: Большие и маленькие буквы латинского алфавита
  • A B … Y Z a b … y z и символ _
  • Цифры: 0 1 2 3 4 5 6 7 8 9
  • Спецсимволы: + - * / > = < ! & | . \ ’ “ ? : ~ { } % ^ ( ) [ ] ,
  • Четыре спецсимвола (специальные разделители), не имеющие графического изображения: пробел (space), новая строка (linefeed), новая страница (formfeed) и табуляция (tab).

Алфавит языка

Все остальные символы (включая буквы кириллицы) могут появляться в программе только внутри символьных и строчных констант и в комментариях. Комментарием считается любая последовательность символов заключенная между символами /* и */. Комментарием считается также любая строка, начинающаяся с символа //.

Ключевые слова стандарта С89

Ключевые слова, добавленные стандартом С99

Ключевые слова в С++

Зарезервированные слова в С++

Зарезервированные слова являются стандартными именами языка С++. В принципе, программист может употреблять эти слова не в том смысле, как они трактуются системой. Например, программист может ввести свой собственный алгоритм вычисления функции sin x и обозначить его тем же словом, и даже может обозначить sin любой объект в программе. Однако, делать это не следует без необходимости.

Идентификаторы (имена)

Идентификатор - последовательность буквенно-цифровых символов, начинающаяся с буквы или знака подчеркивания. В стандарте С89 значащими являются как минимум первые 6 символов внешнего имени и первые 31 символ внутреннего имени. В стандарте С99 значащими являются как минимум первые 31 символ внешнего имени и первые 63 символа внутреннего имени. В С++ значащими являются как минимум первые 1024 символа любого имени.

Идентификаторы (имена)

Допустимые: count Test23 Ptr_1 _KPACOTKA

Недопустимые: 1count sizeof Ptr…1 БАЛБЕС

Переменные и константы

Переменная – некоторая именованная область памяти, в которой хранится некоторый двоичный код. Этот двоичный код в процессе решения задачи может изменяться. Переменные бывают: Скалярные и векторные Статические и динамические Глобальные и локальные Атрибуты переменной: тип, имя, значение.

Базовые типы данных

char - целые длиной один байт ’0’ int - целые длиной несколько байт 48 060 0х30 float - c плавающей точкой 48.f .48e2F double - двойной точности 48. +480.0e-1 void - без значения

Целые переменные

Вещественные переменные (с плавающей точкой)

Специальные символьные константы

Модификация базовых типов

Со знаком – signed Короткое – short Без знака – unsigned Длинное – long 1 = sizeof(char)  sizeof(short)   sizeof(int)  sizeof(long) sizeof(float)  sizeof(double)   sizeof(long double)

Пример:

char c=‘\t’; short s=1; int i; long l; void main() { float f; double d; long double D; }

Глобальные переменные

Локальные автоматические переменные

Спецификаторы класса памяти

auto - Локальная переменная не существует за пределами области видимости. static - Значение переменной постоянно хранится внутри функции или файла. register - Обеспечить доступ к объекту так быстро, как только возможно. extern - Объявляемая переменная определена в другой части программы. extern int x; static int y=0;

Квалификаторы типа

  • const – неизменяемые данные
  • Переменная не может программно изменять своего значения
  • const float e=2.71;

  • volatile – подавление оптимизации
  • Переменная может изменяться независимо от программы.
  • NB: порядок вычисления выражений не определен!
  • X = X1 + X2;

Оператор присваивания

Lvalue = Rvalue Lvalue и Rvalue - идентификаторы Lvalue – именующее выражение (адрес переменной) Rvalue – вычисляемое выражение (значение переменной)

Множественное присваивание x = y = z = 0;

Стенографическое присваивание x ☼ = 10; // x=x ☼ 10;

Арифметические операции

- Вычитание + Сложение * Умножение / Деление % Остаток от деления -- Декремент ++ Инкремент

Пример float y,x = 5/3; //=1.0 y = 5./3; // =1.666… int k=1; ++k; // =2 int m=--k; // k=1, m=1 int n=k++; // k=2, n=1

Операции сравнения и логические операции

  • > Больше
  • >= Больше или равно
  • < Меньше
  • <= Меньше или равно
  • == Равно
  • != Не равно

&& И || ИЛИ ! НЕ Пример int a,b,c,x=1,y=0; a=x&&y; // = false b=x||y; // = true c=!x; // = false

Поразрядные операции

& И | ИЛИ ^ Сложение по модулю два ~ Дополнение к 1 >> Сдвиг вправо << Сдвиг влево

int x=6,y=3; //…0110,…0011 x & y; // =2 x | y; // =7 x ^ y; // =5 ~y; // = 1…100 = -4 x>>1; // =3 x<<1; // =12

Еще несколько операторов

? : - условное выражение sizeof - определение размера операнда в байтах , - последовательного вычисления (тип) - явное преобразование к заданному типу :: - расширения области видимости

y = x >= 0 ? 1 : -1; I = sizeof(int); J = sizeof I; int k=(y=J, 2*y); float z=(float)5/3; int i; void main() { int i; i=1; ::i=2; …

Массивы

Const int размер = …; Тип имя_переменной [размер]; int A[10];

B[3,4] – не верно

int B[5][10];

B[3][4] - верно

Указатели и ссылки

Указатель – переменная, значением которой является адрес. int x[2],*Ptr_x; Ptr_x = &x[0]; *Ptr++=1; *Ptr=2;

Ссылка – другое имя или еще одно имя объекта. NB: Может быть только инициализирована. int x[]={0,0},&b=x[0]; ++b+=1;

*P

&P

& - операция получения адреса объекта * - операция «разыменования» указателя

Массивы и указатели

Описание

int x[]={1,2,3,4,5};

int x[5]; const int *y=x;

Адрес элемента массива

&x[3]

y+3

Значение элемента массива

x[3]

*(y+3)

Имя массива – неизменяемый указатель, инициализированный начальным значением.

Строки

Строка - одномерный массив символов, заканчивающийся символом с кодом ноль (‘\0’)

const int k=…; char str[k]; // это ещё не строка str[0]=‘H’; str[1]=‘e’; str[2]=str[3]=‘l’; str[4]=‘o’; str[5]=‘\0’; char str0={‘H’,’e’,’l’,’l’,’o’,’\0’}; char* str1=“Hello”;

Двумерные массивы и двойные указатели

const int ik=5, jk=10; void main() { int a[ik][jk]; int* b[]={a[0],a[1],a[2],a[3],a[4]}; int **c=b; int i=4, j=4; *(*b + i*jk +j)=10; }

int* B[];

A

A[0]

A[1]

A[2]

A[3]

A[4]

A[0][0]

A[0][4]

A[0][3]

A[0][2]

A[0][1]

A[1][0]

A[1][4]

A[1][3]

A[1][2]

A[1][1]

A[2][0]

A[2][4]

A[2][3]

A[2][2]

A[2][1]

A[3][0]

A[3][4]

A[3][3]

A[3][2]

A[3][1]

A[4][0]

A[4][4]

A[4][3]

A[4][2]

A[4][1]

int **C;

Составные типы данных

  • Структуры – конгломерат переменных
  • Объединения – наложение переменных
  • Битовые поля – организация доступа к отдельным битам
  • Перечисления – списки именованных целых констант
  • Имена типов, введенные пользователем:
  • typedef тип новое_имя;

Структуры

  • Формат описания:
  • struct тег { тип имя_члена; … тип имя_члена; } список_переменных

Похожие материалы

Информация о работе