рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Общие понятия.

Общие понятия. - раздел Информатика, Структура программы на языке Си. Этапы выполнения программы Данные И Программы Во Время Работы Пэвм Размещаются В Оперативной Памяти (Озу...

Данные и программы во время работы ПЭВМ размещаются в оперативной памяти (ОЗУ), которая представляет собой последовательность пронумерованных ячеек. По указанному номеру процессор находит нужную ячейку, поэтому номер ячейки называется ее адресом.

Минимальная адресуемая ячейка (согласно стандарту IBM), с точки зрения программиста, состоит из 8 двоичных позиций (т.е. в каждую двоичную позицию могут быть записаны либо 0, либо 1). Объем информации, который помещается в одну двоичную позицию, называется битом. Объем информации, равный 8 битам, называется байтом.

Таким образом, в одной ячейке из 8 двоичных разрядов помещается объем информации в один байт. Поэтому объем памяти принято оценивать количеством байт (210 байт = 1024 байт = 1 Кб, 210 Кб = 1048576 байт = 1 Мб).

Для помещения данных в такие ячейки производится их запись с помощью нулей и единиц (кодирование). При этом любые байты ОЗУ могут быть использованы для хранения информации любого рода; реальный смысл хранимых в них нулей и единиц определяется только при их использовании согласно замыслу программиста.

 

11.2. Кодирование целых чисел.

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

2 = 1×21 + 0×20 = 102; 5 = 1×22 + 0×21 + 1×20 = 1012; 256 = 1×28 = 1000000002.

С увеличением числа количество разрядов для его представления в двоичной системе резко возрастает, поэтому для размещения большого числа выделяется несколько подряд расположенных однобайтных ячеек. В этом случае адресом такой расширенной ячейки является адрес первого байта. Один бит такой ячейки может выделяться под знак числа. Числа, размещенные таким образом - целые.

Тип int - целое число, обычно соответствующее естественному размеру целых в используемой ЭВМ. Квалификаторы short и long, которые можно использовать с типом int, указывают на различные размеры целых, т.е. определяют размер памяти, выделяемой под переменную.

Примеры: short int x;

long int x;

unsigned int x = 8; (декларация с одновременной инициализацией числом 8).

Слово int в таких ситуациях может быть опущено.

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

С типами int и char могут использоваться атрибуты signed или unsigned. Они показывают, как интерпретируется старший бит числа - как знак, или как часть числа:

 

char Знак Значение числа  
6 5 4 3 2 1 0 - номера битов

 

unsigned char Значение числа
7 0

 

short Знак Значение числа  
14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - номера битов

 

unsigned short Значение числа
15 0

 

long Знак Значение числа
30 0

 

unsigned long Значение числа
31 0

 

По умолчанию все виды int и char считаются знаковыми (signed).

 

Отрицательные целые числа хранятся в т.н. дополнительном коде, в котором отрицательное двоичное число -X (здесь X - модуль этого числа) заменяется на 2N-X, где N - число бит в ячейке. Легко заметить, что если само X не превосходит 2N-1 , то полученное "дополнительное к нему" число окажется положительным, а старший бит ячейки - единицей. В то же время, "настоящие" положительные числа допустимого диапазона занимают не более N -1 бит, поэтому старший бит ячейки оказывается нулевым. Таким образом, старший бит signed - ячейки показывает знак исходного числа.

Такой способ хранения удобен для осуществления операции сложения. Действительно, хранимые числа либо совпадают с исходными (если исходные положительны), либо отличаются от них на 2N (если исходные отрицательны). Поэтому и результат сложения может отличаться от правильного только на некоторое количество 2N. Но 2N соответствует N+1 - му двоичному разряду, который не помещается в ячейке и обычно просто отбрасывается.

Пример:

short int a=1000; char b=-20;

 

В памяти они представляются следующим образом:

100010 = 11111010002 , (28-20)10 = 111011002 ,

 

a 0 0 0 0 0 0 1 1 1 1 1 0 1 0 0 0  
b 1 1 1 0 1 1 0 0  
  15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - номера битов

 

Заметим еще, что байты числа хранятся в порядке "от младших разрядов - к старшим" (видимо, опять-таки для удобства операции сложения столбиком). Например, у вышеприведенного числа a=1000 первый байт будет равен 111010002 , а второй - 000000112.

11.3. Кодирование вещественных чисел.

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

±x.xxx∙2±P

где x.xxx называется мантиссой числа, а P - его порядком. Нормализованность означает, что величина P подбирается так, чтобы в мантиссе перед точкой осталась лишь одна значащая (ненулевая, если только само число не равно 0) цифра.

Однако для двоичного числа ненулевая цифра может быть только 1, поэтому для ненулевых чисел нормализованная форма имеет вид:

±1.xxx∙2±P

а для нулевого числа величина P не играет роли.

Нормализованное число хранится в ячейке, занимающей несколько байт. Часть бит отводится на мантиссу, а часть на порядок, которые хранятся аналогично целым числам (знак порядка учитывается при этом несколько по-другому, чем знак целых чисел - к значению порядка (со знаком + или -) прибавляется (2N-1 - 1), где N - число бит для хранения порядка. Например, в типе double порядок +2 хранится как 100000000012, а -2 -как 011111111012).


 

Типы вещественных чисел, поддерживаемые С++ Builder'ом:

Тип Точность мантиссы (десятичныхцифр после запятой) Порядок (деся-тичный) Байт, всего Из них бит на:
знак числа порядок (с его знаком) мантиссу
float 7 - 8 ± 38 23*
double 15 - 16 ± 308 52*
long double 19 - 20 ± 4932

 

* В типах float и double для экономии места первый (всегда единичный) бит мантиссы не хранится.

 

Как можно видеть из приведенных выше таблиц, при одинаковом количестве байт, отводимом, например, под величины типа float и long int, диапазоны их допустимых значений сильно различаются из-за внутренней формы представления значений таких данных.

Программисту почти никогда не приходится непосредственно иметь дело с внутренним представлением вещественных чисел (в отличие от других типов). Однако он должен понимать ограничения, связанные с конечным числом бит, выделяемых под мантиссу и порядок, и вызванной этим конечной точностью хранения таких чисел. Из-за этого возможно появление погрешности, вызванной отбрасыванием "не вмещающихся" младших двоичных разрядов.

Рекомендуется поэтому, как упоминалось выше, вместо проверки двух вещественных величин на равенство (==) или неравенство (!=) вычислять разницу между ними и сравнивать ее с заданным малым числом - допустимой погрешностью, например:

 

if (fabs(y-z)<0.0000001)

 

Отметим, что при вычислениях с веществеными числами, в отличие от целых, машина следит, чтобы операнды и результат лежали в допустимых пределах. В противном случае, либо выдается сообщение об ошибке ("Floating point overflow"), либо результату присваивается "недопустимое" значение, соответствующее недопустимому сочетанию значений мантиссы и порядка ("NAN", "INF").

11.4. Кодирование символов.

Символьная переменная занимает в памяти 1 байт и представля­ется кодом из 8 бит. При этом каждому символу соответствует определенный код:

Примеры кодов символов:

Символ Код (двоичный) Код (десятичный беззнаковый) Код (десятичный знаковый)
Пробел
!
А (большое латинское)
B (большое латинское)
a (малое латинское)
А (большое русское) В кодировке ANSI -64
А (большое русское) В кодировке ASCII -128

 

Подобный код, как показано выше, соответствует также целому числу от 0 до 255 в беззнаковом (unsigned) формате. Таким образом, каждому символу соответствует целое число, также называемое кодом символа. Совокупность кодов символов называется кодовой таблицей или кодировкой.

Для персональных компьютеров наиболее распространены кодовые таблицы ANSI (American National Standard Institute) и ASCII (American Standard Code for Information Interchange). Таблица ANSI применяется в Windows, а ASCII применялась в DOS. Однако в этих двух таблицах первые 128 кодов (от 0 до 127) совпадают; они различаются лишь последующими 128 кодами, используемыми для хранения национальных (русских) букв и символов "псевдографики".

 

– Конец работы –

Эта тема принадлежит разделу:

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

Лексемы... Из символов алфавита формируются лексемы языка минимальные значимые единицы... идентификаторы...

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

Что будем делать с полученным материалом:

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

Все темы данного раздела:

Алфавит языка Си
Алфавит языка Си включает: - прописные и строчные буквы латинского алфавита, а также знак подчеркивания (код ASCII 95); - арабские цифры от 0 до 9; - специальные символы:

Идентификаторы и ключевые слова
Идентификатор (в дальнейшем, для краткости - ID) – это имя программного объекта (константы, переменной, метки, типа, функции, модуля, поля в структуре). В иден

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

Функциональная и модульная декомпозиции
Для большинства задач алгоритмы их решения являются довольно большими и громоздкими. При программировании нужно стараться получить программу удобочитаемую, высокоэффективную и легко модифицируемую.

Этапы обработки программы.
Язык Си относится к языкам высокого уровня, т.е. предназначенным для записи программы в форме, удобной для человека и не "привязанной" к конкретному типу машин. Ис

Роль препроцессора.
Перед компиляцией программа на языке Си обрабатывается специ­альной программой – препроцессором, который работает под управле­нием директив. Препроцессорные директи

Основные типы данных
Данные в языке Си разделяются на две категории: простые (скалярные), будем их называть базовыми, и сложные (составные) типы данных. Тип данных определяет: •внутреннее представлени

Константы в программах
Константы - объекты, не подлежащие использованию в левой части оператора присваивания, т.к. константа - является неадресуемой величиной и, хотя она хранится в памяти ЭВМ, обычно нет никакого способ

Целочисленные константы
Общий формат: ±n (+ обычно не ставится). Десятичные константы - последовательность цифр 0...9, первая из которых не должна быть 0. Например, 22 и 273 - обычные целые констант

Константы вещественного типа
Данные константы размещаются в памяти по формату double, а во внешнем представлении могут иметь две формы: 1) с фиксированной десятичной точкой, формат записи: ±n.m, где n

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

Строковые константы
Строковая константа представляет собой последователь­ность символов кода ASCII, заключенная в кавычки (”) . Во внутреннем представлении к строковым константам добавляется нулевой символ '', еще на

Операция присваивания
Формат операции присваивания: Операнд_1 = Операнд_2 Операндом_1 может быть только переменная. Этот (левый) операнд операции присваивания получил

Бинарных операций
При выполнении операций могут встречаться операнды различных типов. Но для выполнения операции оба операнда должны быть преобразованы к общему типу в соответствии с небольшим набором правил.

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

Операция явного приведения типа
В любом выражении преобразование типов может быть осуществлено явно. Для этого достаточно перед любым выражением поставить в скобках идентификатор соответствующего типа. Вид записи операци

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

Стандартные математические функции
Математические функции языка Си декларированы в файлах math.h и stdlib.h. В приведенных здесь функциях аргументы и возвращаемый результат имеют

Потоковый ввод-вывод
Поток – это абстрактное понятие, которое относится к любому переносу данных от источника к приемнику. Потоки С++ обеспечивают надежную работу как со стандартными (stdin, stdout), так

Консольные функции вывода данных на экран
Наряду с потоковым вводом-выводом, в консольных приложениях применяются и функции ввода-вывода языка Си. Их декларации приведены в заголовочных файлах stdio.h и c

Консольные функции ввода информации
Функция scanf предназначена для форматированного ввода исходной информации с клавиатуры: scanf (управляющая строка , список адресов объектов ввода

Советы по программированию
1. Выбирайте тип для переменных с учетом диапазона их возможных значений и требуемой точности представления данных. 2. Старайтесь давать переменным ID (имена), отражающие их назначе

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

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

Советы по программированию
1. Выражение, стоящее в круглых скобках операторов if, while и do – while вычисляется по правилам стандартных приоритетов операций. 2. Если в какой-либо ветви вычислен

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

Одномерные массивы
В программе одномерный массив объявляется следующим образом: типID_массива [размер] = {список начальных значений}; тип – тип эл

Б) Нахождение суммы, произведения, количества
Задача 2. Найти сумму элементов массива.   #include<iostream.h> #include<conio.h> #include<stdio.h> void main() {

Д) Удаление и вставка в массивах
Задача 11. Удалить из массива второй по счету элемент.   Поскольку полное количество элементов в массиве задано в его объявлении, физически "удалить" элемент

Е) Обмен местами
Задача 14. Поменять местами первый и последний элемент массива.   При обмене, чтобы не потерять одно из значений, потребуется дополнительная переменная:  

З) Сортировка массива
Задача 16. Отсортировать массив по возрастанию (т.е. расположить его элементы в порядке возрастания).   Для этой задачи придумано множество различных алгоритмов. Один

И) Поиск совпадений
Задача 17. Найти в массиве элемент, повторяющийся наибольшее количество раз. (Если таких элементов несколько, вывести любой из них).   for(max=i=0; i<n; i++){

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

Б) Диагонали квадратной матрицы
  Квадратной называется матрица, у которой число строк равно числу столбцов. Ее главной диагональю называется диагональный ряд элементов, идущий из верхнего левого угла

В) Работа со строками и столбцами
Строка или столбец матрицы аналогичны одномерному массиву. Поэтому к ним применимы все алгоритмы, рассмотренные для одномерных массивов. В применении же ко всей матрице это обычно требует

Компонента StringGrid
В оконном режиме ввод и вывод массивов обычно организуется с использованием компоненты StringGrid, предназначенной для отображения информации в виде двумерной таблицы, каждая ячейка которой

Операция sizeof
Данная операция позволяет определить размер объекта по ID или типу, результатом является размер памяти в байтах (тип результата int). Формат записи: sizeof(параметр

Кодирование программы.
Программа в машинных кодах (исполняемый код) – это последовательность команд (инструкций), которые помещаются в памяти и выполняются процессором в указа

Регистры
Заметим, что кроме собственно ОЗУ, в компьютере имеются ячейки памяти, размещенные непосредственно в процессоре. Такие ячейки памяти называются регистрами. В процессоре обыч

Б) Ввод-вывод строк - массивов char.
Для ввода с консоли строк - массивов char обычно используются две стандартные функции: scanf() (см. тему "Функции ввода-вывода"; специфик

В) Поэлементная работа со строками.
В языке С не допускается ни присваивание, ни сравнение массивов. Операции над строками могут быть выполнены либо непосредственно действиями над отдельными символами (как над элементами масси

Д) Перевод строк - массивов char в числа и наоборот.
Функции преобразования строки S в число: - целое: int atoi(char *S); - длинное целое: long atol(char *S); - действительное: doub

Русификация консольных приложений.
При работе в консольном приложении ввод-вывод выполняется в кодировке ASCII (см. тему "Кодирование символов", кодовые таблицы). В тексте же программы символы отображаются в принятой в Win

Б) Действия над типом String.
Основными операциями с типом String являются:   1) Присваивание: S1=S2;   2) Сравнение: S1==S2, S1<=S2, S1!=S2 и т.д. Здесь знак <

А) Преобразование из массива char в String и наоборот.
Как упоминалось выше, для преобразования массива char к типу String достаточно просто присвоить его переменной типа String:   char c[]="Привет!"; String s=

Б) Преобразование из String в простую переменную типа char.
При таком присваивании нужно указать номер символа в строке, который будет присвоен:   String s='*'; char c=s[1];   Обратное же присваивание н

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

Тип_результата имя_функции ( список параметров )
{ код функции return выражение; }   Параметры - это переменные, доступные внутри функции, значения которы

Прототип функции.
Функции могут располагаться в исходном файле в любом порядке. А сама исходная программа, как отмечалось вначале, может размещаться в нескольких файлах. При этом, однако, может возникнуть о

Область видимости.
Область видимости (действия) объекта (переменной и др.) – это та часть кода (текста) программы, в которой его можно использовать. В сложных программах ограничение этой области помогает изб

Разбиение программы на модули.
Разбиение программы на модули (отдельные файлы с текстом программы) позволяет использовать готовые модули в разных программах, а также является важнейшим способом разделения труда при работе в колл

Понятие структуры
Структура – это составной объект языка Си, представляющий собой совокупность логически связанных данных различных типов, объединенных в группу под одним идентификатором. Данные, входящие

Декларация структурного типа данных
Структурный тип данных задается в виде шаблона, общий формат описания которого следующий: struct ID структурного типа { описание полей

Объявление структурных переменных
Как уже отмечалось само описание структуры не приводит к выделению под нее места в ОП. Теперь необходимо создать нужное количество переменных с приведенной структурой и сделать это можно двумя спос

Обращение к полям структуры
Обращение к полю структуры производится при помощи составных имен, которые образуются с использованием операции принадлежности (.) в виде: ID_струк

Вложенные структуры
Структуры могут быть вложенными, т.е. поле структуры может cамо быть структурой, описание которой должно предшествовать описанию внешней структуры. Например, в структуре person, содержащей

Массивы структур
Структурный тип "struct ID_структуры", как правило, используют для декларации массивов, элементами которых являются структурные переменные. Это позволяет создавать программы, оперирующие

Размещение структурных переменных в памяти
Элементы структур в общем случае размещаются в памяти последо­ва­тельно с учетом выравнивания начальных адресов полей. Выравнивание (align) означает, что ком

Битовые поля
Наряду с "обычными" типами, допустимыми и для "отдельных" переменных, поля структуры могут иметь особый целочисленный тип, допустимый только для них - битовые поля

Объединения
Объединение - поименованная совокупность данных разных типов, размещаемых в одной и той же области памяти, размер которой достаточен для хранения наибольшего элемента. Объ

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

Типы файлов.
В файле может храниться любая информация. Если там хранится текст в виде последовательности символов (включая символы перевода строк, хранимые по определенным правилам - см. ниже) и не содержится и

Открытие файла
Каждому файлу, с которым работает программа, присваивается внутреннее логическое имя, используемое в дальнейшем при обращении к нему. Логическое имя (идентификатор файла) - это указатель на файл, т

Закрытие файла
После окончания работы с файлом доступ к нему необходимо закрыть. Это выполняет функция fclose(указатель файла). Например, файл из предыдущего примера закрывается так: fclose (f);

Запись - чтение информации
Все действия по чтению-записи данных в файл можно разделить на три группы: - операции посимвольного ввода-вывода; - операции построчного и форматированного ввода-вывода;

А) Посимвольный ввод-вывод
В функциях посимвольного ввода-вывода происходит прием одного символа (байта) из файла или передача одного символа в файл: int fgetc(FILE *f) - считывает и возв

Б) Построчный и форматированный ввод-вывод
Эти функции служат для чтения/записи текста и обычно применяются для текстовых файлов. В функциях построчного ввода-вывода происходит пере­нос из файла, или в файл

В) Блоковый ввод-вывод
Функции блокового ввода-вывода читают из файла или записывают в файл заданное число байт без их преобразования. Другими словами, они способны записать в файл любую переменную или массив в том же дв

Д) Сброс буфера файла
Заметим, что если после записи данных файл не был закрыт, часть «записанных» данных может не сохраниться. Это связано с тем, что данные вначале записываются в буфер файла, и

Текстовые файлы
Для работы с текстовыми файлами удобнее всего пользоваться функциями fprintf(), fscanf(), fgets() и fputs(). Создание текстовых результирующих файлов обычно необходимо для оформления отчет

Перенаправление стандартного ввода-вывода
В консольном режимесуществует понятие стандартных файловых потоков: stdin - ввод (по умолчанию - клавиатура), stdout - выв

Бинарные файлы
При чтении-записи бинарных (двоичных) файлов удобнее всего пользоваться функциями, выполняющи­ми блоковый ввод-вывод: fread() и fwrite().

Дополнительные полезные функции
Рассмотрим некоторые функции, которые могут пригодиться для работы с файлами (они работают с любыми файлами, но чаще применяются к бинарным): int fileno(FILE *f)

Определение указателей
Как говорилось выше, машинная память состоит из байт. Все байты в памяти пронумерованы. Адресом байта называется его номер. (Нумерация при этом идет либо в пределах всей

Связь указателей и массивов.
Идентификатор массива указывает адрес памяти, начиная с которого он расположен, т.е. адрес его первого элемента. Работа с массивами тесно связана с применением указателей. Пусть объявлен м

Указатели на указатели.
В языке Си можно описать и переменную типа «указатель на указатель». Это ячейка оперативной памяти, в которой будет храниться адрес указателя на какую либо переменную. Признак такого типа да

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

Указатели на структуры
Указатели могут указывать и на структурный тип данных:   struct Point{ int x,y; } r, *p; p=&r;   Для обращения к полю ст

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

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

Создание одномерного динамического массива.
В языке С размерность массива при объявлении должна задаваться константным выражением. При необходимости работы с массивами перемен­ной размерности нужно объявить вместо массива указат

Создание двуxмерного динамического массива.
Операция new способна выделить память лишь под одномерный массив. А как быть, если массив двумерный? Наиболее удобный способ - это представить двумерный массив как массив из массивов

Операция typedef
Любому типу данных, как стандартному, так и определенному пользователем, можно задать новое имя с помощью операции typedef: typedef тип новое_имя ; Вве

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

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги