Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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

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

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

 

Типизированные константы

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

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

Типизированные константы бывают: целые, с плавающей запятой, символьные константы и символьные строки.

Константы представляются в виде целого десятичного, восьмиричного или шестнадцатиричного числа.

Описание констант начинается с ключевого слова const, далее тип и значение, например const int Nalog=2.

 

Переменные

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


Целые типы

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

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

 

Целый тип Размер
Short int 16 битовое целое
Int 16 битовое целое
Unsigned long 32 битовое целое без знака
Long 32 битовое целое

 

Рассмотрим простой пример.

#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++ существуют следующие основные типы вещественных чисел:

Вещественный тип Размер
Float 32 битовое плавающее число
Double 64 битовое плавающее число
Long double 80 битовое плавающее число

 

Рассмотрим следующий пример.

#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 предназначен для хранения одного символа, поэтому его размер - один байт.

 

Символьный тип Размер
Unsigner char 8 бит без знака
Char 8 бит

 

Рассмотрим пример:

#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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...