Базовые типы данных Языка Си
Идентификаторы Имена, которые присваиваются константам, типам данных, переменным и функциям называются идентификаторами. В Си следующие правила создания идентификаторов: должны начинаться с буквы (a...z,A...Z) или с подчеркивания (_), остальная часть идентификатора должна состоять из букв, подчеркиваний и/или цифр(0...9).
Типизированные константы В Си используются константы, которые представляют собой имя, присваиваемое какой-либо величине. Идентификатор имени может быть любой длинны, но распознаются первые 32 символа. Идентификатор начинается с латинской буквы или символа подчеркивания, последующие символы могут быть цифры, латинские буквы и символы подчеркивания. Компилятор Си рассматривает буквы верхнего и нижнего регистра как различные символы. Типизированные константы бывают: целые, с плавающей запятой, символьные константы и символьные строки. Константы представляются в виде целого десятичного, восьмиричного или шестнадцатиричного числа. Описание констант начинается с ключевого слова const, далее тип и значение, например const int Nalog=2.
Переменные Переменная - это поименованная величина, значение которой может изменяться во время выполнения программы. Переменная принадлежит к определенному типу. Целые типы Целые числа представляются целыми типами. Целый тип - это обобщенный тип, представление которого зависит от операционной системы и типа процессора. Рассмотрим основные типы целых чисел:
Рассмотрим простой пример. #include <stdio.h> #include <conio.h>
main() { const int Nalog= 2; int Stavka; int Symma; int C; Stavka = 300; Symma = Stavka * Nalog; printf("Symma naloga = %d\n",Symma); C=getch(); } В примере объявлены одна константа и две переменные целого типа.
Вещественные типы Для хранения чисел с дробной частью используется вещественный тип. В C++ существуют следующие основные типы вещественных чисел:
Рассмотрим следующий пример. #include <stdio.h> main() { const float Nalog= 0.7; int Stavka; float Symma; Stavka = 325; Symma = Stavka * Nalog; printf("Symma naloga = %8.4f\n",Symma); } В данном примере вещественный тип представлен переменной Symma.
Символьные типы Символьный тип -Char предназначен для хранения одного символа, поэтому его размер - один байт.
Рассмотрим пример: #include <stdio.h> main() { char A; char B; char C; A = 'D'; B = '!'; printf("A= %c B= %c\n",A,B); C = '*'; printf("C= %c\n",C); } В данном примере переменной A присвоено значение ‘D’, переменной B значение ‘!’, а переменной С присвоено значение символа ‘*’.
Тип данных строка Для представления строки символов в Си используют массивы типа char. Рассмотрим пример. #include <stdio.h> #include <string.h> main() { char A[256]; /* длина может быть до 256 символов */ char B[11]; char C[24]; strcpy(A,"IBM PC Pentium"); strcpy(B,"Windows 95"); strcpy(C,""); /* очистка переменной */ printf("A= %s\n",A); printf("B= %s\n",B); strcpy(C,B); printf("C= %s\n",C); } В данном примере представлены три строки символов A, B, C. По команде, например, strcpy (A,"IBM PC Pentium"); в строку A помещается текст IBM PC Pentium. Кроме рассмотренного примера, для определения строк можно использовать указатель на символы. Пример: #include <stdio.h> #include <string.h> main() { char *msg; msg = "Привет, студент"; puts(msg); } Звездочка перед msg означает, что msg является указателем на символ - т.е. msg может хранить адрес символа. Однако, при этом память для размещения символов не выделяется.
Команда msg = "Привет, студент " присваивает начальный адрес этой строки - (адрес символа П) переменной msg. Команда puts(msg) печатает символы до тех пор, пока она не встретит нулевой символ, обозначающий конец строки..
Структуры Размещенная в памяти совокупность связанных между собой данных представляет структуру. В Си рассматриваются следующие структуры: массивы, записи и их комбинации.
Массивы Именованная совокупность однородных данных называется массивом. Каждый элемент массива хранится в отдельной области памяти и имеет собственный номер (начиная с нуля). Рассмотрим пример. #include <stdio.h> main() { int B[3]; B[0] = 0; B[1] = 10; B[2] = 20; B[3] = 30; printf("B[0]= %d\n",B[0]); printf("B[1]= %d\n",B[1]); printf("B[2]= %d\n",B[2]); printf("B[3]= %d\n",B[3]); } В рассмотренном примере определен массив B, состоящий из четырех целочисленных элементов. С элементами массива можно манипулировать как с обыкновенными переменными. Существуют многомерные массивы, например: int A[3][2]; Массив A -двумерный массив (состоит из четырех строк и трех столбцов): char A[3][3][3][3]; Массив A - четырехмерный массив. Рассмотрим пример работы с двумерным массивом. #include <stdio.h> main() { float B[4][3]; B[0][0] = 0; B[1][1] = 1.1; B[2][1] = 1.2; B[3][1] = 1.3; B[1][2] = 2.1; B[2][2] = 2.2; B[3][2] = 2.3; printf("B[1,1]= %4.2f B[2,1]= %4.2f B[3,1]= %4.2f\n", B[1][1],B[2][1],B[3][1]); printf("B[1,2]= %4.2f B[2,2]= %4.2f B[3,2]= %4.2f\n", B[1][2],B[2][2],B[3][2]); }
Записи В отличие от массивов запись позволяет хранить данные различных типов. Запись начинается после ключевого слова struct. Рассмотрим пример - в записи хранится информация о студентах: фамилия, год рождения, номер группы. #include <stdio.h> #include <string.h> typedef struct A { char Fio[31]; int God; int Gruppa; }; main() { struct A B; strcpy(B.Fio,"Ivanow G.I."); B.God = 1977; B.Gruppa = 384; printf("Fio = %s\n",B.Fio); printf("God = %d\n",B.God); printf("Gruppa = %d\n",B.Gruppa); } В рассмотренном примере запись имеет следующую структуру: struct A { /* A имя записи} */ char Fio[31]; /* 1 поле записи */ int God; /* 2 поле записи */ int Gruppa; /* 3 поле записи */ } Далее можем ввести структуру B аналогичную A по команде struct A B; Далее можем в поля помещать конкретные данные, но мы должны уточнить, что поля принадлежат переменной B нотацией с точкой (B.Fio:=”Ivanow G.I.”; и т.д.).
С помощью ключа typedef структурам дается имя. Пример можно переписать следующим образом. #include <stdio.h> #include <string.h> typedef struct { char Fio[31]; int God; int Gruppa; } A; main() { A B; strcpy(B.Fio,"Ivanow G.I."); B.God = 1977; B.Gruppa = 384; printf("Fio = %s\n",B.Fio); printf("God = %d\n",B.God); printf("Gruppa = %d\n",B.Gruppa); } В примере мы рассмотрели одну запись, но в реальной жизни в группе не может быть одного студента, поэтому мы можем совместить массив и запись и создать массив записей. Рассмотрим пример. #include <stdio.h> #include <string.h> typedef struct A { char Fio[31]; int God; int Gruppa; }; main() { A WGruppa[12]; strcpy(WGruppa[1].Fio,"Ivanow G.I."); WGruppa[1].God = 1977; WGruppa[1].Gruppa = 384; strcpy(WGruppa[2].Fio,"Petrow R.G."); WGruppa[2].God = 1978; WGruppa[2].Gruppa = 384; printf("Fio1 = %s\n",WGruppa[1].Fio); printf("God1 = %d\n",WGruppa[1].God); printf("Gruppa1 = %d\n",WGruppa[1].Gruppa); printf("Fio2 = %s\n",WGruppa[2].Fio); printf("God2 = %d\n",WGruppa[2].God); printf("Gruppa2 = %d\n",WGruppa[2].Gruppa); } Первоначально мы определили структуру A, а затем использовали ее при объявлении структуры WGruppa, как массива состоящего из 12 записей структуры B. Теперь для адресации мы должны указать номер элемента массива и имя поля. Существуют варианты, когда одна запись содержит другую запись, например, добавляется адрес, к рассмотренной выше записи студент. Пример. #include <stdio.h> #include <string.h> typedef struct Adress { char City[31]; char Street_Nd_Kw[61]; }; typedef struct A { char Fio[31]; int God; int Gruppa; Adress D_addr; }; main() { A WGruppa[12]; strcpy(WGruppa[1].Fio,"Ivanow G.I."); WGruppa[1].God = 1977; WGruppa[1].Gruppa = 384; strcpy(WGruppa[1].D_addr.City,"Shadrinsk"); strcpy(WGruppa[1].D_addr.Street_Nd_Kw,"Lenina 10 kw.1"); strcpy(WGruppa[2].Fio,"Petrow R.G."); WGruppa[2].God = 1978; WGruppa[2].Gruppa = 384; strcpy(WGruppa[2].D_addr.City,"Kataisk"); strcpy(WGruppa[2].D_addr.Street_Nd_Kw,"Akulowa 1 kw.2"); printf("Fio1 = %s\n",WGruppa[1].Fio); printf("God1 = %d\n",WGruppa[1].God); printf("Gruppa1 = %d\n",WGruppa[1].Gruppa); printf("City= %s\n",WGruppa[1].D_addr.City); printf("Street= %s\n",WGruppa[1].D_addr.Street_Nd_Kw); printf("Fio2 = %s\n",WGruppa[2].Fio);
printf("God2 = %d\n",WGruppa[2].God); printf("Gruppa2 = %d\n",WGruppa[2].Gruppa); printf("City= %s\n",WGruppa[2].D_addr.City); printf("Street= %s\n",WGruppa[2].D_addr.Street_Nd_Kw); }
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|