Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Все КОНСТАНТЫ имеют тип double!




 

float step_x=0.01, step_y=0.5;

double koord_x, koord_y;

IBM PC байты диапазон
float   3.4e–38<|x|<3.4e38
double   1.7e–308<|x|<1.7e308
long double   1e–3000<|x|<1e3000(приблизительно)

 

· Символы (знаки)

 

Для переменных символьного типа используют служебное слово char (character). Длина переменной – 1 байт. Диапазон значений [–128, 127].

Обратите внимание: тип char может являться как знаковым, так и беззнаковым, в зависимости от конкретного компилятора. Т.е. переменные типа char так же могут быть модифицированы с использованием модификаторов unsigned / signed. Поэтому, чтобы быть уверенным в допустимых значениях, используйте типы signed char и unsigned char.

 

Пример: char array_name, step;

 

· Логические данные

 

В Си нет. Замена – целые. 0 à false, (НЕ)0 à true

 

 

2.3 Указатели

Указатели (ссылки) – это переменные, показывающие место или адрес памяти, где расположены другие объекты (переменные, функции и т.п.). Т.к. указатель содержит адрес некоторого объекта, то через него можно обращаться к этому объекту.

У такого выражения есть АДРЕС, ТИП и, разумеется, ЗНАЧЕНИЕ. Но у него нет ИМЕНИ И нет ОБЛАСТИ ВИДИМОСТИ.

 

 

Формат: описания переменной указателя

<тип> *<имя> [,*<имя>]...;

 

Объекты, состоящие из знака * и адреса необходимо объявлять!

Объявление вида: char *d; говорит о том, что значение, записанное по адресу d, имеет тип char.

Пример:

int *kol, *num; Признаком указателя служит *.

double *lenght;

Операции над указателями: над указателями определены две унарные операции: & *

Унарная операция & возвращает адрес объекта в явном виде, поэтому оператор:

y = &x;

присваивает адрес x переменной y. Операцию & нельзя применять к константам и выражениям. Операция применима только к объектам, имеющим имя и размещенным в памяти.

Унарная операция * воспринимает свой операнд как адрес некоторого объекта и использует этот адрес для выборки содержимого. Поэтому, оператор:

z = *y;

присваивает z значение переменной, записанной по адресу y.

int *a; Объявляет переменную a типа «указатель на int», то есть содержащую адрес некоторого целого значения.
&x Возвращает адрес переменной a
*p Возвращает "переменную" по адресу, находящемуся в переменной p.

 

Пример: int x, y, *px;

px=&x;

y=*px;

Это эквивалентно y = x;

Указатели могут встречаться в выражениях. Если y – указатель на целое (int *y;), то *y может появляться там же, где и любая другая переменная, не являющаяся указателем.

Пример:

*y = 7; //заносим 7 в ячейку памяти по адресу y

*x = *x*5; //увеличиваем значение по адресу x в 5 раз

(* z)++; //добавляем 1 к содержимому ячейки памяти с адресом z, круглые скобки обязательны


Глава 3 МАССИВЫ И СТРУКТУРЫ

К совокупностям данным относятся массивы, структуры и файлы

 

3.1 Массивы

МАССИВ – это множество переменных одного типа, характеризующихся одним именем. Как следует из их определения, массивы очень удобны, если приходится иметь дело с большими наборами однотипных данных.

· описание массива

Формат: Синтаксис описания массива

<тип> <имя_переменной> [количество_элементов_массива]

· Обращение (ссылка) к элементу массива

Отдельные элементы массива собственного имени не имеют. Доступ к ним можно получить, используя оператор [ ].

Формат:

<имя_массива> [<индекс_элемента>]

Данный оператор возвращает элемент массива, соответствующий индексу. Обратите внимание: индексация в Си начинается с 0, то есть правильными значениями индекса будут все значения в интервале

от 0 до <количество_элементов_массива>–1.

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

Пример: page[5] line[i] screen[j][k] matr[i–1][j+i–1]

Массивы можно, как и остальные переменные, инициализировать сразу при их объявлении. При этом элементы массива перечисляются через запятую, и все вместе заключаются в фигурные скобки. Пример: int a[ 6 ] = { 1, 2, 3, 4, 5, 6 };

Количество элементов в списке может быть меньше формального количества элементов массива – при этом инициализируются первые n элементов массива, где n – количество элементов в списке инициализации. С другой стороны, если указаны все элементы массива, то формальное количество элементов может отсутствовать: int a[ ] = { 1, 2, 3}).

Теперь вопрос: что напечатает такая программа?

#include <stdio.h> void main (void) { int i, a[10]; a[0] = 5; printf ("%d\n", *a); } На первый взгляд кажется, что она даже не будет компилироваться – ведь мы пытаемся взять значение по переменной, не являющейся адресом. Но, вопреки ожиданиям, она запустится и напечатает число 5. Как вы можете догадаться из этого, имя массива в Си является указателем на его первый элемент. Запомните это раз и навсегда – это очень важно.

3.2 Строки

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

В первом используется массив символов, а во втором – указатель на первый символ массива. Объявление char а[10] указывает компилятору на необходимость резервирования места для максимум на 10 символов. Константа а содержит адрес ячейки памяти, в которой помещено значение первого объекта типа char.

Второй способ определения строки – это использование указателя на символ. Объявление char *b; задает переменную b, которая может содержать адрес некоторого объекта. Однако в данном случае компилятор не резервирует место для хранения символов и не инициализирует переменную b конкретным значением. Когда компилятор встречает инструкцию вида b=”Москва ”;, он производит следующие действия. Во-первых, как и в предыдущем случае, он создает в каком-либо месте объектного модуля строку Москва, за которой следует нулевой символ. Во-вторых, он присваивает значение начального адреса этой строки (адрес символа М) переменной b.

Константа (литерал) типа строка (string): " <текст> "

 

3.3 Структуры

СТРУКТУРА (запись) – совокупность разнотипных элементов. Элементы структуры (вернее, поля структуры), в отличие от элементов массива, не имеют индекса, но имеют собственное имя. Элементом структуры может быть массив любого типа.

Пример: Представление текущей даты:

– день месяца;

– название месяца;

– год;

 

Формат структура

struct [<тип(имя)_структуры>] {

<список_описаний_элементов>

} [<список_объектов>];

<список_описаний_элементов>:=

<имя_типа> <имя_переменной> [, имя_переменной [,...]];

<имя_типа> <имя_переменной> [, имя_переменной [,...]];

<имя_типа> <имя_переменной> [, имя_переменной [,...]];

Пример:

1. struct data { /* Дата */

int day_nom; /* День месяца */

char month_name[4]; /* Название месяца */

int year; /* Год */

};

Таким образом, мы объявили новый тип данных – Data, представляющий из себя структуру. Если мы хотим объявить переменную day типа Data, то это следует делать так:

struct Data day;

Доступ к полям структуры осуществляется с помощью оператора точка:

day.day_nom = 5;

day. month_name = "март";

day.year = 2002;




Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 438; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.