Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







В.Л.Бусько, А.Г.Корбит, Т.М.Кривоносова





В.Л.Бусько, А.Г.Корбит, Т.М.Кривоносова

 

 

Конспект лекций по курсу

ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ

 

для студентов всех специальностей и всех форм обучения

 

Минск 2004


 

УДК 621.3.6 (075.8)

ББК 22.193 Я73

С 35

 

Рецензент: канд. техн. наук, доцент, зав. кафедры ПОИТ БГУИР В.В.Бахтизин

 

 

Бусько В.Л., Корбит А.Г., Кривоносова Т.М.

Конспект лекций по курсу «Основы алгоритмизации и программирования» для студентов всех специальностей и всех форм обучения. - Мн.: БГУИР, 2004. - 89 с.: ил. 4.

 

ISBN

 

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

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

Настоящее пособие по курсу «Основы алгоритмизации и программирования» представляет собой конспект лекций по темам, охватывающим основные конструкции языка Си. Неотъемлемой частью данного пособия является лабораторный практикум [1], при выполнении которого студенты осваивают основные конструкции среды программирования и получают навыки алгоритмизации и решения задач на персональном компьютере.

 

УДК 621.3.6 (075.8)

ББК 22.193 Я73

ISBN

 

 

ã Коллектив авторов, 2004


СОДЕРЖАНИЕ

  Стр.
1. Введение  
1.1. История создания ЭВМ  
1.2. Структура ПЭВМ  
1.3. Классификация языков программирования  
1.4. Размещение данных и программ в памяти ПЭВМ  
1.5. Программные модули  
1.6. Ошибки  
1.7. Функциональная и модульная декомпозиции  
1.8. Файловая система хранения информации  
1.9. Операционная система  
2. Основные понятия и определения  
2.1. Этапы решения задач на ЭВМ  
2.2. Понятие алгоритма и способы его записи  
2.3. Свойства алгоритмов  
2.4. Способы описания алгоритмов  
2.5. Графическое описание алгоритма  
2.6. Основные символы схемы алгоритма  
2.7. Пример простейшего линейного алгоритма  
2.8. Немного истории  
3. Синтаксис языка Cи  
3.1. Алфавит языка  
3.2. Лексемы  
3.3. Идентификаторы и ключевые слова  
3.4. Знаки операций  
3.5. Литералы (константы)  
3.6. Комментарии  
4. Базовые типы объектов  
4.1. Простейшая программа  
4.2. Основные типы данных  
4.3. Декларация (объявление) объектов  
4.4. Данные целого типа (int)  
4.5. Данные символьного типа (char)  
4.6. Данные вещественного типа (float, double)  
5. Константы в программах  
5.1. Целочисленные константы  
5.2. Константы вещественного типа  
5.3. Символьные константы  
5.4. Строковые константы  
   
   
   
   
  Стр.
6. Обзор операций  
6.1. Операции, выражения  
6.2. Арифметические операции  
6.3. Операции присваивания  
6.4. Сокращенная запись операции присваивания  
6.5. Преобразование типов операндов арифметических операций  
6.6. Операция приведения типа  
6.7. Операции сравнения  
6.8. Логические операции  
6.9. Побитовые логические операции. Операции над битами  
6.10. Операция, (запятая)  
7. Обзор базовых инструкций языка С  
7.1. Стандартная библиотека языка Си  
7.2. Стандартные математические функции  
7.3. Функции вывода данных на дисплей  
7.4. Функции ввода информации  
7.5. Ввод - вывод потоками  
7.6. Дополнительные функции  
8. Синтаксис операторов языка C  
8.1. Условные операторы  
8.2. Условная операция «?:»  
8.3. Оператор выбора альтернатив (переключатель)  
9. Составление циклических алгоритмов  
9.1. Понятие цикла  
9.2. Оператор с предусловием while  
9.3. Оператор цикла с постусловием do – while  
9.4. Оператор цикла с предусловием и коррекцией for  
10. Операторы передачи управления  
10.1. Оператор безусловного перехода goto  
10.2. Оператор continue  
10.3. Оператор break  
10.4. Оператор return  
11. Указатели  
11.1. Указатели  
11.2. Операции над указателями (косвенная адресация)  
12. Массивы  
12.1. Понятие массива  
12.2. Одномерные массивы  
12.3. Многомерные массивы  
12.4. Операция sizeof  
12.5. Применение указателей  
12.6. Указатели на указатели  
12.7. Адресная функция  
  Стр.
13. Работа с динамической памятью  
13.1. Пример создания одномерного динамического массива:  
13.2. Пример создание двуxмерного динамического массива:  
4. Строки в языке Си  
14.1. Русификация под Visual  
15. Функции пользователя  
15.1. Декларация функции  
15.2. Вызов функции  
15.3. Операция typedef  
15.4. Указатели на функции  
15.5. Параметры командной строки функции main  
15.6. Функции с переменным числом параметров  
16. Классы памяти и области действия объектов  
16.1. Классы памяти объектов в языке Cи  
16.2. Автоматические переменные  
16.3. Внешние переменные  
16.4. Область действия переменных  
17. Структуры, объединения, перечисления  
17.1. Структуры  
17.2. Декларация структурного типа данных  
17.3. Создание структурных переменных  
17.4. Вложенные структуры  
17.5. Массивы структур  
17.6. Размещение структурных переменных в памяти  
17.7. Объединения  
17.8. Перечисления  
18. Файлы в языке С  
18.1. Открытие файла  
18.2. Закрытие файла  
18.3. Запись - чтение информации  
18.4. Текстовые файлы  
18.5. Бинарные файлы  
Список рекомендуемой литературы  
Список используемой литературы  
Приложение 1. Таблицы символов ASCII  
Приложение 2. Операции языка Си  
Приложение 3. Возможности препроцессора  

 

1. Введение

 

1.1. История создания ЭВМ

Проблема вычислений сопровождает человечество на всем историческом отрезке его существования. Первый счетный инструмент абак был известен еще в V веке до нашей эры в Египте, Финикии, Греции и представлял дощечку, покрытую слоем песка, на которой острой палочкой проводили линии и в получавшихся колонках по позиционному принципу размещали камешки. В древнем Риме абак назывался Calculi. От этого слова произошло в дальнейшем латинское calculatore (вычислять).

Первую счетную машину для выполнения сложения и вычитания сконструировал в 1623г. профессор математики и астрономии Тюбингенского университета В.Шинкард. Она была изготовлена в одном экземпляре и, сгорев во время пожара в 1624г., не оказала влияния на развитие идей счетной техники.

Биография механических счетных машин ведется от арифметической ма­ши­ны французского математика, физика и философа Б.Паскаля, созданной в 1642г. Над счетной машиной Б.Паскаль работал 12 лет и сделал около 50 действующих моделей. Первый арифмометр, выполняющий все четыре арифме­тических действия, был предложен в 1670г. немецким ученым Г.В.Лей­бни­цем. В Беларуси первая суммирующая машина была изобретена и изготовлена в 1770г. в г. Несвиже Евной Якобсоном, часовым мастером и механиком.

Идею универсальной вычислительной машины с программным упра­­влением впервые предложил в своем неосуществленном проекте в 1834 г. английский ученый Ч.Бэббедж. Ее структура совпадала по существу со стру­кту­рой современных ЭВМ.

Отличительной особенностью электронных вычислительных машин (ЭВМ) от счетных машин является наличие устройства управления вычислениями и принцип хранения программы. Еще одной особенностью современных ЭВМ является применение двоичной системы счисления.

Двоичную арифметику разработал Г.В.Лейбниц. Он также предложил ари­ф­ме­­тизацию логики за 200 лет до создания алгебры Дж.Буля (1815). Как двоичная арифметика представляет все числа с помощью двух символов (0,1), так и булева алгебра оперирует с двумя понятиями (истина, ложь) и тремя операциями (и, или, не).

С помощью этих понятий можно смоделировать любые логические цепочки и построить 16 логических функций. На этой основе строятся все современные логические схемы различной сложности, реализуемые в ЭВМ.

Первая ЭВМ была создана в 1945г. (США), она представляла огромное сооружение, содержащее 18000 электронных ламп, 1500 реле и выполняла около 3000 умножений в секунду. Мировой парк ЭВМ к 1965г. насчитывал порядка 50 тысяч компьютеров, к началу 1975г. – более 200 тысяч.

Первые персональные ЭВМ (ПЭВМ) появились в начале 70-х годов. Скорость вычислений достигает 108 операций в секунду.

 

Структура ПЭВМ

ПЭВМ содержат клавиатуру, системный блок, и дисплей. Схема ПЭВМ представлена на рис. 1.

 

 

Рис.1.

 

В системном блоке ПЭВМ содержатся:

- центральный процессор (ЦП), который осуществляет управление рабо­той и выполнение расчетов по программе;

- оперативное запоминающее устройство (ОЗУ), в котором во время работы компьютера располагаются выполняемые программы (при выключении компьютера - очищается);

- постоянное запоминающее устройство (ПЗУ), содержащее программы, необходимые для запуска компьютера;

- жесткий магнитный диск (ЖД), получивший название винчестер;

- дисковод (ГД) для сменных, гибких магнитных дисков (дискет);

- CD-Rom (СД) – устройство чтения компакт-дисков.

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

Программные модули

Про­грам­мист пишет программу на языке высокого уровня, т.е. наиболее удобном для записи алгоритма решения определенного класса задач. Исходный текст программы, введенный с помощью клавиатуры в память компьютера - исходный модуль (sourse code, в языке Си имеет расширение *.cpp).

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

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

Большинство трансляторов языка Си, с которыми мы будем работать - компиляторы.

Результат обработки исходного модуля компилятором - объектный модуль (object code, в языке Си имеет расширение *.obj). Он не может быть выполнен, т.е. это незавершенный вариант машинной программы, т.к., например, к нему должны быть присоединены модули стандартных библиотек. Здесь компилятор (compiler) - вид транслятора, представляющего программу-переводчик исходного модуля в язык машинных команд.

Исполняемый (абсолютный, загрузочный) модуль создает вторая специальная программа - «компоновщик». Ее еще называют редактором связей (Linker). Она и создает модуль, пригодный для выполнения на основе одного или нескольких объектных модулей.

Загрузочный модуль (Load module, расширение *.exe) – это программный модуль, представленный в форме, пригодной для загрузки его в память и выполнения.

Ошибки

Ошибки, допускаемые при написании программ, разделяют на синтаксические и логические.

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

Логические ошибки делят на ошибки алгоритма и семантические ошибки - могут быть найдены и исправлены только разработчиком программы.

Причина ошибки алгоритма - несоответствие построенного алгоритма ходу получения конечного результата сформулированной задачи.

Причина семантической ошибки - неправильное понимание смысла (сема­нти­ки) операторов языка.

 

Операционная система

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

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

Удобства, предоставляемые пользователю, существенно зависят от качества ОС, которые по мере совершенствования компьютеров постоянно развиваются.

В настоящее время наибольшее распространение имеют OC WindowsХХ и LinuxХХ.

 

Основные понятия и определения

Этапы решения задач на ЭВМ

Решение задачи на ЭВМ можно разбить на следующие этапы:

- математическая или информационная формулировка задачи;

- выбор метода (например, численного) решения поставленной задачи;

- построение алгоритма решения поставленной задачи;

- запись построенного алгоритма, т.е. написание текста программы;

- отладка программы - процесс обнаружения, локализации и устранения возможных ошибок;

- выполнение программы - получение требуемого результата.

 

Свойства алгоритмов

Дискретность - значения новых величин (данных) вычисляются по опреде­лен­ным правилам из других величин с уже известными значениями.

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

Результативность (конечность) - алгоритм решает поставленную задачу за конечное число шагов.

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

 

Способы описания алгоритмов

Существует несколько способов описания алгоритмов. Наиболее распро­стра­ненными являются словесное и графическое описания алгоритма.

Словесное описание алгоритма рассмотрим на конкретном примере: пусть необходимо найти наибольший общий делитель для двух целых положительных чисел a и b.

1) Сравнить a и b. Если a<b, то положить d=a; m=b, иначе d=b и m=a.

2) Разделить m на d. Обозначить остаток от деления r.

3) Если d=0, то это искомое число. Закончить вычисления. Иначе перейти к пункту 4.

4) Заменить значение m значением d.

5) Заменить d значение значением r.

6) Перейти к пункту 2.

Здесь алгоритм описан с помощью естественного языка, а объекты обработки, являющиеся числами, обозначены буквами.

Например, рассмотрим алгоритм решения квадратного уравнения вида a*x2+b*x+c=0:

1) вычислить D = b*b - 4 * a * c;

2) если D<0, то перейти к 4;

3) вычислить ; ;

4) конец.

 

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

Соединитель - используется при обрыве линии и продолжении ее в другом месте (необходимо присвоить название).

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

Коментарий.

 

Немного истории

Алгоритмический язык С был разработан в 1972 г. сотрудником фирмы AT&T Bell Laboratory Денисом Ритчи на базе языка В (автор К.Томпсон), который в свою очередь основывался на языке системного программирования BCPL. Первая версия языка была опубликована в книге авторов Д.Ритчи и Б.Кернигана и получила название стандарт K&R. Минимальная стандартная реализация, поддерживаемая любым компилятором, содержала всего 27 ключевых слов. Началось успешное развитие языка и чтобы избежать путаницы Американский институт стандартизации (American National Standart Institute) ввел в 1983 г. общий стандарт языка – ANSI стандарт.

Язык продолжает развиваться и в 1985 г. появляется язык С++, который в основном сохраняет все черты обычного С, но дополнен новыми существен­ными возможностями, которые позволили реализовать объектно-ориентирован­ный стиль программирования.

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

Области применения языка C - системное программирование и прикладные задачи с жесткими требованиями по скорости и памяти.

 

 

3. Синтаксис языка Cи

 

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

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

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

Каждому из множества значений, определяемых одним байтом, - от 0 до 255, ‑ в таблице знакогенератора вычислительной машины ставится в соответствие символ. По системе кодировки фирмы IBM символы с кодами от 0 до 127, образующие первую половину таблицы знакогенератора, построены по стандарту ASCII и одинаковы на всех IBM-совместимых компьютерах. Вторая половина символов (коды 128 … 255) может отличаться на разных компьютерах. Обычно коды от 128 до 175 и от 224 до 239 используются для размещения символов национального алфавита, коды с 176 по 223 отводятся под символы псевдографики и коды с 240 по 255 – под специальные знаки (Приложение 1).

Алфавит языка Си включает:

- прописные и строчные буквы латинского алфавита, а также знак подчеркивания (код ASCII 95);

- арабские цифры от 0 до 9;

- специальные символы:

+(плюс) –(минус) *(звездочка) /(дробная черта) =(равно) >(больше) <(меньше);(точка с запятой) &(амперсант) [ ](квадратные скобки) { }(фигурные скобки) ()(круглые скобки) _(знак подчеркивания) (пробел). (точка), (запятая):(двоето­чие) #(номер) %(процент) ~(поразрядное отрицание)?(знак вопроса)!(восклица­­тельный знак) \(обратный слеш).

- пробельные (разделительные) символы: пробел, символы табуляции, перевода строки, возврата каретки, новая страница и новая строка.

Лексемы

Из символов алфавита формируются лексемы языка – минимальные значимые единицы текста в программе:

- идентификаторы;

- ключевые (зарезервированные) слова;

- знаки операций;

- константы;

- разделители (скобки, точка, запятая, пробельные символы).

Границы лексем определяются другими лексемами, такими, как разделители или знаки операций, а также комментариями.

Знаки операций

Знак операции – это один или более символов, определяющих действие над операндами. Внутри знака операции пробелы не допускаются. Операции делятся на унарные, бинарные и тернарные операции, по количеству участвующих в них операндов.

Литералы (константы)

Когда в программе встречается некоторое число, например 1, то это число называется литералом или литеральной константой. Константой, потому что мы не можем изменить его значение, и литералом, потому что буквально передает свое значение (от латинского literal – буквальный).

Литерал является неадресуемой величиной: хотя реально он, конечно, хранится в памяти машины, нет никакого способа узнать его адрес. Каждый литерал имеет определенный тип.

Комментарии

Еще один базовый элемент языка программирования – комментарий, – не является лексемой. Внутри комментария можно использовать любые допустимые на данном компьютере символы, а не только символы из алфавита языка программирования, поскольку компилятор комментарии игнорирует.

В Си комментарии ограничиваются парами символов /* и */, а в С++ был введен вариант комментария, который начинается символами // и заканчивается символом перехода на новую строку.

Базовые типы объектов

 

Простейшая программа

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

Общая структура программы на языке Си имеет вид:

<директивы препроцессора>

<определение типов пользователя – typedef>

<описание прототипов функций>

<определение глобальных переменных>

<функции>

В свою очередь, функции имеют такую структуру:

<класс памяти> <тип> < ID функции> (<объявление параметров>)

{ - начало функции

код функции

} - конец функции

 

Рассмотрим кратко основные части общей структуры программ.

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

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

Препроцессор решает ряд задач по предварительной обработке программы, основной из которых является «подключение» к программе так называемых заголовочных файлов (обычных текстов) с декларацией стандартных библиотечных функций, которые используются в программе. Наименование такой директивы: include (подключить), а общий формат ее использования:

#include < ID_файла.h>

где «h» – расширение заголовочных файлов.

Если идентификатор файла заключен в угловые скобки (< >), то поиск дан­но­го файла производится в стандартной директории с этими файлами, если же ID файла заключено в двойные кавычки (” ”), то поиск данного файла производится в текущей директории.

К наиболее часто используемым библиотекам относятся:

stdio.h - содержит стандартные функции файлового ввода-вывода;

conio.h - функции для работы с консолью (клавиатура, экран монитора);

math.h - математические функции.

Второе основное назначение препроцессора – это обработка макро­­опре­делений. Макроподстановка define (определить) имеет общий вид:

#define < ID > <строка>

Например: #define PI 3.1415927

В ходе препроцессорной обработки программы появление в тексте идентификатора PI везде заменяется значением 3.1415927.

Основные возможности препроцессора приведены в Приложении 3.

Рассмотрим небольшой пример, позволяющий понять самые простейшие приемы программирования на языке Си:

#include <stdio.h>

void main(void)

{ // Начало функции main

printf(“ Высшая оценка знаний - 10!”);

} // Окончание функции main

Отличительным признаком функции служат круглые скобки () после идентификатора функции, в которые заключается список аргументов. Если аргументы отсутствуют, указывают атрибут void - отсутствие значения. Перед ID функции обычно указывается тип возвращаемого ею результата, так как функция main() ничего не возвращает - в качестве результата указывается void.

Код функции представляет собой набор инструкций, каждая из которых оканчивается символом «;». В нашем примере одна инструкция - функция printf () выполняет форматный вывод данных на экран, в данном случае, указанную фразу.

 

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

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

Основные типы базовых данных: стандартный целый (int), веще­ствен­ный с одинарной точностью (float) и символьный (char).

В свою очередь, данные целого типа могут быть короткими (short), длинными (long), и без знаковыми (unsigned), а вещественные - с удвоенной точностью (double).

Сложные типы – массивы, структуры (struct), объединения или смеси (union), перечисление (enum).

Данные целого и вещественного типов находятся в определенных числовых диапазонах так как занимают разный объем оперативной памяти:

Таблица 1

Тип данных Объем памяти (байт) Диапазон значений
сhar   -128 …127
int   -32768…32767
short 2(1) -32768…32767(-128…127)
long   -2147483648…2147483647
unsigned int   0…65535
unsigned long   0…4294967295
float   3,14*10-38…3,14*1038
double   1,7 *10-308 1,7 *10308

 

4.3. Декларация (объявление) объектов

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

- описание, не приводящее к выделению памяти;

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

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

<атрибуты> <список ID объектов>;

элементы списка разделяются запятыми, а атрибуты - разделителями. Например: int i,j,k; float a,b;

Объекты программы в общем случае имеют следующие атрибуты:

<класс памяти> - характеристика способа размещения объектов в памяти (статическая, динамическая), определяет область види­мости и время жизни переменной (по умолчанию - auto), данные атрибуты будут рассмотрены позже;

<тип> - характеристика механизма интерпретации данных, т.е. это совокупность информации о том, сколько объекту нужно выделить памяти, какой вид имеет представление информации и какие действия над ней допустимы (по умолчанию - int).

Класс памяти и тип – атрибуты необязательные и могут отсутст­во­вать, тогда их значения установятся по умолчанию.

Примеры декларации простых объектов:

int i,j,k;

char r;

double gfd;

Рассмотрим основные базовые типы данных более подробно.

 

4.4. Данные целого типа (int)

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

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

long int x;

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

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

Атрибуты signed и unsigned показывают, как интерпретируется старший бит числа, как знак или как часть числа:

 

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

 

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

 

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

 

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

 

Если указан только атрибут int, это означает - short signed int.

4.5. Данные символьного типа (char)

Символьная переменная занимает в памяти 1 байт и представля­ется кодом от 0 до 255. Закрепление конкретных символов за кодами производится кодовыми таблицами.

Для персональных компьютеров наиболее распространена ASCII (American Standard Code for Information Interchenge) таблица кодов (Приложение 1). Данные типа char рассматри­ваются компиля­то­ром как "целые", поэтому возможно использование signed char (по умолчанию) - символы с кодами от -128 до +127 (т.е. только символы с кодами до 127) и unsigned char - символы с кодами от 0 до 255 (в том числе и русские).

Примеры:

char res, simv1, simv2;

char let = 's'; (декларация с одновременной инициализацией символом s).

 

4.6. Данные вещественного типа (float, double)

Данные вещественного типа в памяти занимают, соответственно, float - 4 байта; double - 8 байт; long double (повышенная точность) - 10 байт. Для размещения данных типа float обычно 8 бит выделено для представления порядка и знака и 24 бита под мантиссу.

Тип Точность (мантисса) Порядок
float 7 цифр после запятой ± 38
double   ± 308
Long double   ± 4932

 

Константы в программах

 

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

- самоопределенные арифметические, символьные и строковые данные;

- идентификаторы массивов и функций;

- элементы перечислений.

Арифметические константы могут быть целого или вещественного типов.

 

Целочисленные константы

Общий формат: ± n (+ обычно не ставится).

Десятичные константы - последовательность цифр 0...9, первая из которых не должна быть 0. Например, 22 и 273 - обычные целые константы, если нужно ввести длинную целую константу, то указывается признак L (l) - 273 L (273 l). Для такой константы будет отведено – 4 байта. Обычная целая константа, которая слишком длинна для типа int рассматривается как long.

Существует система обозначений для восьмеричных и шестнадца­те­­ри­чных констант.

Восьмеричные константы - последовательность цифр от 0 до 7, первая из которых должна быть 0, например: 020 = 16-десятичное.

Шестнадцатеричные константы - последовательность цифр от 0 до 9 и букв от A до F (a...f), начинающаяся символами 0Х (0х), например: 0X1F (0х1f) = 31-десятичное.

Восьмеричные и шестнадца­те­ричные константы могут также заканчиваться буквой L(l) - long, например, 020L или 0X20L.

Примеры целочисленных констант:

1992 13, 777 1000 L - десятичные;

0777 00033 01 l - восьмеричные;

0x123 0X00ff 0xb8000 l - шестнадцатеричные.

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

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

Так же используются специальные последовательности символов, это управляющие последовательности (escape-последовательности), основные их них:

\n - новая строка;
\t - горизонтальная табуляция;
\0 - нулевой символ (пусто).

При присваивании символьной переменной эти последователь­ности должны быть заключены в апострофы. Символьная константа '\0', изображающая символ 0 (нуль – пусто), часто записывается вместо целой константы 0, чтобы подчеркнуть символьную природу некоторого выражения.

Текстовые символы непосредственно вводятся с клавиатуры, а специальные и управляющие представляются в исходном тексте парами текстовых символов. Примеры представления специальных символов языка Си:

\\ - обратная косая черта; \' - апостроф; \" - кавычки.

Примеры символьных констант: 'А', '9', '$', '\n', '\72'.

 

Строковые константы

Строковая константа представляет собой последователь­ность символов кода ASCII, заключенная в кавычки (”). Во внутреннем представлении к строковым константам добавляется нулевой символ '\0', еще называемый нуль-терминатор, отмечающий конец строки. Кавычки не являются частью строки, а служат только для ее ограничения. Строка - это массив, состоящий из символов. Внутреннее представление константы "01234\0ABCDEF":

'0','1','2','3','4','\0','A','B','C','D','E','F','\0'

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

"Система", "\n\t Аргумент \n", "Состояние \"WAIT\""

В конец строковой константы компилятор автоматически помещает нуль-символ. Нуль-символ - это не цифра 0, он на печать не выводится и в таблице кода ASCII имеет код 0.

Например, строка " " - пустая строка (нуль-строка).

Обзор операций

 

Операции, выражения

Операции языка Си предназначены для управления данными (более 40). Для их использования необходимо знать:

- синтаксис;

- приоритеты (15 уровней);

- порядок выполнения.

Выражения состоят из операндов, операций,







Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом...

ЧТО И КАК ПИСАЛИ О МОДЕ В ЖУРНАЛАХ НАЧАЛА XX ВЕКА Первый номер журнала «Аполлон» за 1909 г. начинался, по сути, с программного заявления редакции журнала...

Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право...

Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.