Методические указания по выполнению лабораторных работ

Дисциплина «Теория информационных процессов и систем»

Направление подготовки 230400 Информационные системы и технологии.

Квалификация (степень) бакалавр. Форма обучения: очная. Срок обучения - 4 года.

Аудиторные занятия 80 (час.)

Лекции 32 / - / - (час.)

Практические занятия 32 / - / - (час.)

Лабораторные занятия 16 / - / - (час.)

Самостоятельная работа 68 (час.)

Самостоятельная работа без преподавателя – 61,2 (час.)

Самостоятельная работа со студентом 2,7 (час.)

Самостоятельная работа с группой 4,1 (час.)

Курсовая работа не предусмотрена

Контрольная работа (заочное обучение) не предусмотрена

Зачёт не предусмотрен

Экзамен 5 / - / - (семестр)

Всего 148 (час.)

Зет 5

Тюмень 2012

ВВЕДЕНИЕ

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

В результате изучения дисциплины студент должен:

знать:

структуру состав и свойства информационных процессов методы анализа информационных проектных решений, конфигурации информационных процессов и систем;

уметь:

разрабатывать информационно-логическую, функциональную и объектно-ориентированную модели информационного процесса;

владеть:

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

Методические указания должны иметь следующую структуру:

1. введение, в содержании которого следует отразить следующие вопросы:

- назначение методических указаний;

- требования к знаниям и умениям студентов после проведения лабораторных работ по данной дисциплине.

2. содержание лабораторных работ, составляющими элементами которого являются:

- цель работы;

- основные теоретические положения;

- порядок (алгоритм) выполнения работы;

- задание на выполнение лабораторной работы;

- основные правила по технике безопасности;

- перечень оборудования, используемого при выполнении работы;

- содержание и форма отчета о проделанной работе;

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

3. критерии оценки работы обучающегося.

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

ПРАВИЛА ТЕХНИКИ БЕЗОПАСНОСТИ ПРИ РАБОТЕ В УЧЕБНЫХ ЛАБОРАТОРИЯХ

И КОМПЬЮТЕРНЫХ КЛАССАХ

Требования безопасности при работе на ПЭВМ в учебных лабораториях

и компьютерных классах №№ 418, 502, 509а, 512, 513

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

Вход в лабораторию разрешается только со сменной обувью или в бахилах.

Учебный мастер или заведующий лабораторией обязан:

осмотреть и привести в порядок рабочее место, убрать с рабочего места все посторонние предметы, которые могут отвлекать внимание и затруднять работу;

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

подключить лабораторию к электросети с помощью выключателей на автомате для отключения ЩО;

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

установить яркость, контрастность, цвет и размер символов, фон экрана, обеспечивающие наиболее комфортное и четкое восприятие изображения.

Порядок включения и отключения ПЭВМ:

источник бесперебойного питания;

монитор, принтер;

системный блок.

Требования безопасности во время работы. После запуска используемой программы студенты обязаны:

убедиться в отсутствии дрожания и мерцания изображения на экране монитора;

особо обратить внимание на то, что дисплей должен находиться на расстоянии не менее 50 см от глаз (оптимально 60-70 см), плоскость экрана монитора должна быть перпендикулярна направлению взгляда и центр экрана должен быть ниже уровня (или на уровне) глаз оператора;

убедиться в отсутствии засветок, отражений и бликов на экране монитора;

убедиться в отсутствии ярко освещенных предметов в поле зрения, при переносе взгляда с экрана монитора на документ;

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

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

прикасаться к задней панели системного блока при включенном питании;

переключать разъемы интерфейсных кабелей периферийных устройств;

закрывать оборудование бумагами и посторонними предметами;

производить отключение питания во время выполнения активной задачи;

допускать попадание влаги на поверхности устройств;

прикасаться к нагретым элементам принтеров и копировальной техники;

работать в том случае, если при прикосновении к корпусам ПЭВМ ощущается действие электрического тока;

работать на оборудовании со снятыми кожухами, являющимся источником лазерного и электромагнитного излучения;

работать без соответствующего освещения рабочего места;

работать с ПЭВМ и оргтехникой в верхней одежде;

располагаться при работе на расстоянии менее 50 см от экрана монитора;

закрывать вентиляционные отверстия ПЭВМ.

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

Режим работы и отдыха должен зависеть от характера выполняемой работы. При вводе данных, редактировании программ, считывании информации с экрана, непрерывная продолжительность работы на ПЭВМ не должна превышать 4-х часов при 8-ми часовом рабочем дне. Через каждый час работы необходимо делать перерывы на отдых по 5-10 минут или по 15-20 минут каждые два часа работы.

Во время работы через каждые 45 минут необходимо делать перерыв в течении 15 минут с выполнением комплекса упражнений для глаз (см. Приложение 1).

Требования безопасности в аварийных ситуациях.

Основным источником опасности при работе в компьютерном классе является поражение электрическим током.

Для исключения поражения электрическим током, необходимо немедленно прекратить работу и отключить питание оборудования в следующих случаях:

при обнаружении обрыва проводов питания, интерфейсных шнуров или нарушения целости их изоляции;

при неисправности заземления и наличии повреждений электрооборудования;

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

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

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

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

Обо всех неисправностях в работе оборудования и аварийных ситуациях немедленно сообщать преподавателю.

Требования безопасности по окончании работы.

С туденты обязаны:

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

Учебный мастер или заведующий лабораторией обязан:

выключить питание периферийных устройств ПЭВМ (монитор, принтер);

выключить источник бесперебойного питания;

отключить лабораторию от электросети с помощью выключателей на автомате для отключения ЩО.

Правила техники безопасности при работе на ПЭВМ в специализированной

учебной лаборатории САПР (ауд. № 512)

Лаборатория САПР № 512 предназначена для обучения студентов направления и специальности УТСб, УТСм, УИТС по курсам «Спецглавы АИУС», «Автоматизация проектирования систем и средств управления», «Вычислительные машины, системы и сети», «Системное программное обеспечение», «Информационные сети и телекоммуникации» и проведения лабораторных работ на ПЭВМ с применением специализированного программного обеспечения.

Оборудование лаборатории:

1)Компьютеры – 10шт.;

2)Лазерный принтер HP LaserJet 1200.

Правила техники безопасности при работе на ПЭВМ в именной учебно-научной лаборатории компьютерного моделирования (компания Dell) (ауд. № 513)

Лаборатория моделирования биотехнических систем № 513 предназначена для обучения студентов направления и специальности АТПб, БСТб, УТСб, УТСм, УИТС, ЭЭб, ЭЭм по курсам «Управление в биологических и медицинских системах», «Методы обработки биомедицинских сигналов и данных», «Системный анализ и принятие решений», «Компьютерная обработка изображений», «Основы теории биотехнических систем», «Автоматизация обработки экспериментальных данных», «Компьютерные технологии в медико-биологических исследованиях», «Проектирование программного обеспечения», «Методы и системы анализа медицинских изображений», «Измерительные преобразователи и электроды», «Теория биотехнических систем», «Автоматизация медико-биологических систем и комплексов», «Сетевые технологии в медицине», «Автоматизированные системы в здравоохранении» (лекции и проведение практических работ на ПЭВМ с применением специализированного программного обеспечения).

Оборудование лаборатории:

1)Рабочие станции Dell Precision T3500– 5 шт;

2)Компьютеры – 7 шт.

Требования безопасности при работе на ПЭВМ перечислены выше.

ЧАСТЬ 1. МАТЕРИАЛ ДЛЯ ПОВТОРЕНИЯ

МОДЕЛЬ РАБОЧЕГО СТОЛА

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

Приступая к работе на персональном компьютере, оснащенном операционной системой Windows, пользователь видит на экране дисплея конфигурацию значков. Значок (icon) состоит из картинки и имени в рамке под картинкой. Чтобы изменить положение значка на рабочем экране, пользователь должен установить на нем указатель мыши, нажать левую кнопку и, не отпуская её, двигать мышь по плоской поверхности, при этом значок будет перемещаться по экрану.

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

Состояние объекта характеризуется перечнем (обычно статистическим) всех свойств данного объекта и текущими (обычно динамическими) значениями каждого из этих свойств"

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

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

Если пользователь пытается выполнить некорректную или потенциально опасную операцию, например, выберет пункт "удалить" в контекстном меню значка, операционная система блокирует вычислительный процесс и выводить на экран окно модального диалога - прямоугольную область, содержащую предупреждение. Теперь активной стороной диалога становиться операционная система. Компьютер не будет реагировать на действия пользователя, пока он не ответит операционной системе - не щелкнет одной из кнопок модального окна.

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

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

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

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

ИНТЕРФЕЙС КОМАНДНОЙ СТРОКИ

Пользовательские интерфейсы современных операционных систем делятся на два класса. Большинство пользователей персональных ЭВМ знакомо лишь с оконным интерфейсом, включающим различные редактируемые элементы, меню, кнопки и т.п. Поддержка оконного интерфейса требует больших затрат ресурсов компьютера. Другой класс составляют интерфейсы командной строки, обеспечивающие ввод и вывод символьной информации только при помощи клавиатуры и дисплея. Такие интерфейсы применяются прежде всего на суперкомпьютерах, сетевых серверах, в системах, управляющих технологическими процессами. Они позволяют осуществлять выполнение программ в пакетном режиме, когда программы запускаются автоматически, при минимальном участии человека. Классический язык программирования С ориентирован на пользовательский интерфейс командной строки. Операционная система Windows включает эмулятор командной строки, который называется сеансом MS DOS. Здесь пользователь работает с полноценными Windows-приложениями, но их окна имитируют экран с командной строкой. Для операционных систем семейства UNIX, наоборот, интерфейс командной строки является основным, а окна, кнопки, меню и т.п. поддерживают специальные графические оболочки, например, XWindows.

Сеанс MS DOS представлен пунктом подменю программы меню кнопки Пуск Рабочего стола Windows. Его можно также запустить из окна выполнить: Рабочий стол / Пуск / Выполнить, в строке ввода окна наберите команду cmd для Windows NT, Windows 2000, Windows XP и command для Windows 95, Windows 98. Чтобы развернуть окно сеанса MS DOS на весь экран, используйте команду Alt+Enter (Alt-Ввод), эта же команда возвращает окну первоначальные размеры. Командная строка начинается с приглашения – специального изображения или текста, который показывает, что операционная система ожидает ввода команды пользователя.

Кроме идентификатора (имени) команда может содержать опции, аргументы и дополнительные параметры. Операционная система выполнит команду, после того, как пользователь нажмет клавишу Enter (Ввод).

Команда

mode con lines=25 cols=80 <Enter>

устанавливает стандартный размер шрифта на экране – 25 строк по 80 позиций в строке. Здесь mode (режим) – имя команды, con (консоль) – аргумент, 25 и 80 – параметры команды.

Обычно аргументами команды служат имена файлов и директорий (папок). Файлы и директории образуют иерархическую систему. Одна директория считается главной, она обозначается символом ‘\’. Каждый файл относится к определенной директории, точно так же любая директория, кроме главной, является поддиректорией другой директории. Полное имя файла или директории включает цепочку имен директорий, разделенных символом ‘\’, она начинается с символа главной директории, а каждая следующая директория цепочки является поддиректорией предыдущей:

\winnt\notepad.exe - файл notepad.exe относится к поддиректории winnt главной директории.

Вообще говоря, первоначально имена команд, файлов, директорий в операционной системе MS DOS состояли только из заглавных букв, если пользователь набирал их строчными буквами, операционная система сама изменяла их регистр. С другой стороны, в операционных системах семейства UNIX имена большинства стандартных команд и файлов состоят из строчных букв. Поэтому мы будем использовать в командной строке сеанса MS DOS в основном строчные буквы.

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

C:\winnt\notepad.exe

Задание. Создайте поддиректорию Test главной директории, а в ней – поддиректории с именами Bin, Include, Lib, Apps, Docs.

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

Сеанс MS DOS содержит дополнительную информацию, которая называется контекстом. Контекст включает перечень директорий PATH (путь), его можно вывести на экран при помощи команды PATH. Если пользователь запускает исполняемый файл без указания его полного имени, то операционная система ищет подходящий файл текущей директории и в директориях, входящих в перечень PATH. Команда

PATH имя_директории

оставляет в перечне PATH только директорию с заданным именем.

Задание. Выводите на экран перечень директорий PATH при помощи команды PATH. Затем выполните команду

PATH C:\Test\Bin

и убедитесь, что теперь перечень директорий PATH содержит только поддиректорию Bin директории Test.

Мы будем создавать программы в текстовом редакторе операционной системы Windows, который называется блокнотом. Текстовый процессор Word для этой цели не подходит так как созданный в нём документ содержит служебную информацию, которую не понимает компилятор языка С. Пользователь может запустить блокнот командой Рабочий стол/Пуск/программы/Стандартные/ Блокнот

или щелкнув правой кнопкой мыши по экрану и выбрав в появившемся меню пункт Создать/Текстовый документ.

В окне сеанса MS DOS блокнот вызывается командой

notepad.exe имя_файла.

В дальнейшем нам придется изменять перечень директории PATH, поэтому мы скопируем файл notepad.exe в директорию C:\Test\APPS.

Задание. Найдите на диске С:\ пакет программ инструментальной среды C Builder и скопируйте из него следующие файлы:

в директорию Bin

bcc32.exe;

ilink32.exe;

lnkdfm50.dll;

rlink32.dll;

в директорию Lib

c0x32.obj;

cw32.lib;

import32.lib;

uuid.lib.

КОМПИЛЯЦИЯ, КОМПОНОВКА И ВЫПОЛНЕНИЕ ПРОГРАММЫ

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

С помощью редактора программист преобразует исходный текст в файл. Компилятор проверяет, есть ли в программе синтаксические ошибки – нарушения правил языка программирования. Если ошибок нет, он переводит исходный текст на язык машинных кодов и создает объектный файл. Обычно объектный файл имеет расширение obj. Компоновщик превращает объективный файл в исполняемый, добавляя в него средства взаимодействия с операционной системой. Исполняемый файл имеет расширение exe. Операционная система запускает программу, завершает её выполнение, а также передаёт ей данные и выводит результаты её работы на экран или помещает их в файл.

Выполняя задания предыдущего раздела, Вы должны были создать на диске С: директорию Test, в ней – поддиректории Bin, Include, Lib, Apps, Docs, и скопировать в эти директории системные файлы:

в директорию Bin

bcc32.exe;

ilink32.exe;

lnkdfm50.dll;

rlink32.dll;

в директорию Lib

c0x32.obj;

cw32.lib;

import32.lib;

uuid.lib

и в директорию Apps

notepad.exe.

Цифра 32 в именах файлов означает, что они являются компонентами 32-разрядной системы программного обеспечения:

bcc32.exe - компилятор;

ilink32.exe - компоновщик;

файлы с расширениями lib и dll представляют собой системные библиотеки, содержащие различные стандартные функции, написанные на языке машинных кодов.

Создадим первую программу на языке С. Для этого перейдем в директорию C:\Test\Apps и вызовем редактор notepad с именем файла, который мы хотим создать:

notepad.exe prog1.c

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

Наберем в окне редактора следующий текст:

main()

{}

и сохраним его в директории C:\Test\Apps. Иногда редактор добавляет к имени файла еще свое расширение txt. Проверим с помощью команды dir содержимое директории Apps, если имя файла имеет вид prog1.c.txt, переименуем его:

rename prog1.c.txt prog1.c

Укажем операционной системе, что компилятор следует искать в директории Bin:

path C:\Test\Bin

и обработаем файл программы компилятором:

bcc32.exe -L“C:\Test\Lib” prog1.c

Внимательно наберите эту команду: между опцией -L и следующим за ним именем директории не должно быть пробелов.

Если мы не сделали никаких ошибок, компилятор выдаст сообщение:

Warning W8070 prog1.c 2: Function should return a value in function main,

а в директории Apps, из которой мы запускали компилятор, появятся три новых файла:

prog1.tds

prog1.obj

prog1.exe

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

[тип_возвращаемого_значения] имя_функции ([аргументы])

{

[команды]

}

В квадратных скобках заключены необязательные компоненты определения. Оно начинается с заголовка, в нём следует указать имя функции и поставить пару круглых скобок. За заголовком располагается тело функции. Первая команда тела функции main служит точкой входа программы – здесь начинается ее выполнение, последняя команда функции main завершает программу. В нашем случае тело функции main пусто, команд нет, поэтому программа не решает никакую задачу. Исполняемый файл содержит лишь служебные команды, обрабатывающие те ресурсы, которые операционная система выделяет любой программе.

Для перевода программы на язык машинных кодов мы вызываем компилятор bcc32.exe; аббревиатура bcc означает Borland C compiler – компилятор языка С, разработанный фирмой Borland International Corporation. Он запускается из командной строки, аргументом служит имя файла с исходным текстом программы. Кроме того, при вызове компилятора следует указать два параметра: директорию Include и директорию Lib. В директории Include находятся стандартные включаемые файлы, содержащие заголовки определений тех стандартных функций, которые используются в программе, а в директории Lib – библиотечные файлы, в них размещаются объектные коды стандартных функций. Опции -L, -I помогают компилятору различать параметры. Как мы знаем, опции (или ключи) команд сеанса MS-DOS записываются по-другому: /s, /p. Дело в том, что формат вызова компилятора bcc удовлетворяет требованиям пользовательского интерфейса операционной системы UNIX.

Компилятор создает объектный файл программы (он имеет расширение obj) и передает управление компоновщику – исполняемому файлу ilink32.exe. Компоновщик формирует исполняемый файл программы с расширением exe. Файл с расширением tds содержит служебную информацию.

Рассмотрим предупреждение (warning), которое выдал компилятор. После слова Warning идет номер предупреждения W8070, имя программы prog1.c, номер строки, в которой обнаружена ошибка, и сообщение. Сообщение указывает, что функция должна возвращать значение, в конце сообщения стоит имя функции, в теле которой обнаружена ошибка. Тип возвращаемого значения следует объявить в начале определения функции, если его нет, то предполагается, что функция возвращает в точку вызова целое число. Функцию main вызывает операционная система, поэтому то значение, которое возвращает эта функция передается операционной системе. Оно называется кодом возврата и содержит информацию о характере завершения программы. Код возврата 0 означает, что в ходе взаимодействия программы операционной системой не обнаружено никаких ошибок.

Тип возвращаемого значения void (пустой) указывает, что на самом деле функция не возвращает никакого значения. Мы могли бы определить функцию main так:

void main()

{}

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

Для того, чтобы вернуть значение в точку вызова функции применяют оператор return (вернуть), он имеет такой формат:

return возвращаемое_значение;

(следует помнить, что в языке С любая команда завершается точкой с запятой). Снова вернемся в директорию Apps, загрузим в блокнот файл prog1.c и исправим программу:

main()

{

return 0;

}

(между именем оператора return и возвращаемым значением обязательно должен быть пробел). В языке C команда всегда завершается точкой с запятой. Откомпилируем программу:

bcc32.exe –L“C:\Test\Lib” prog1.c

Теперь компилятор не выводит предупреждения, на экране появляется служебная информация о ходе компиляции. В директории Apps мы видим те же три файла: prog1.obj, prog1.tds, prog1.exe. Файл prog1.exe – исполняемый, запустим его, набрав имя файла в командной строке. После того, как мы нажмем клавишу Enter (ввод) «ничего не произойдет», только экрана на мгновение очистится - исчезнет приглашение командной строки и другая информация.

Добавим в программу комментарий – часть исходного текста, ограниченная символами /* и */. Компилятор пропускает комментарий, не обрабатывая. Обычно комментарий содержит сведения, необходимые для понимания программы. Мы всегда будем начинать программу с комментария, указывающего имя программы:

/* prog1.c */

main()

{

return 0;

}

КОМАНДНЫЕ ФАЙЛЫ

Нам придется много раз компилировать программы, написанные на языке С. Достаточно утомительно каждый раз переписывать все параметры командной строки. Поэтому мы составим командный файл, который будет запускать компилятор в пакетном режиме. Этот файл также создается при помощи редактора notepad.exe, он должен иметь расширение.bat. Так как его основная работа – запуск компилятора bcc32.exe, то назовем его bcc.bat.

Наберем команду

notepad.exe bcc.bat,

подтвердим создание нового файла и введем в редактор следующий тект:

rem bcc.bat

if “%1”==“” goto error

path C:\Test\Bcc

bcc32.exe -I“C:\Test\Include” -L“C:\Test\Lib” %1.c

goto end

:error

echo Вы забыли указать имя программы (без расширения.c)

:end

Этот файл написан не на языке С, а на командном языке сеанса MS DOS. Его не надо компилировать, операционная система читает одну команду за другой и выполняет их. Расширение bat происходит от слова batch – пакет, оно означает, что файл выполняет группу команд как единое целое. Первая строка командного файла начинается со слова rem, это – начало комментария, концом комментария служит перевод строки. Как мы договорились, комменатрий должен содержать имя файла. Вторая строка содержит конструкцию %1; так обозначается аргумент пакетного файла. Теперь составим программу

/* prog2.c */

main()

{

return 2;

}

Если мы наберем в командной строке

bcc.bat prog2

то %1 будет именем слова prog2. Когда в командной строке стоит только имя пакетного файла bcc.bat аргумент пустой, “%1” - это просто пара двойных кавычек, два знака == - отношение равенства. Слово if служит началом оператора ветвления в пакетном файле, его формат

if [ NOT ] строка1 == строка2 команда

Операция NOT обращает истинность условия: истинное условие становится ложным, а ложное – истинным. Условие

строка1 == строка2

является истинным, когда эти строки совпадают, в этом случае оператор выполняет команду, стоящую после условия.

Слово NOT заключено в квадратные скобки, это означает, что оно является необязательной частью конструкции. Команду

if %1”==“” goto error

следует понимать так: если командный файл запущен с пустым аргументом, то выполняются команды, стоящие после метки error. Эту метку мы увидим ниже, двоеточие, с которого начинается строка с меткой, указывает, что error – метка, а не команда. За этой строкой находится строка с командой echo, она выводит на экран сообщение, напоминающее пользователю, что пакетный файл запускается с аргументом.

Если пользователь ввел аргумент – имя программы, то вместо перехода на метку error выполняется команда

path C:\Test\Bin

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

Следующая строка – вызов компилятора bcc32.exe с параметрами, указывающими имена директорий включаемых файлов и библиотек. Аргументом компилятора служит имя программы, в нашем случае – это аргумент пакетного файла %1. У любого файла с исходным текстом на языке С должно быть расширение.с; чтобы не повторять его каждый раз, мы передаем пакетному файлу имя файла - программы без расширения, а имя с расширением появляется при помощи конструкции %1.с. Команда безусловного перехода goto end позволяет обойти сообщение об ошибке, следующее за меткой error. После метки end команд нет, выполнение пакетного файла завершается.

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

@echo off

(символ @ подавляет вывод на экран самой команды echo off):

rem bcc.bat

@echo off

if “%1”==“” goto error

path C:\Test\Bcc

bcc32.exe -I“C:\Test\Include” -L“C:\Test\Lib” %1.c

goto end

:error

echo Вы забыли указать имя программы (без расширения.c)

:end

Задание. Составьте пакетный файл bcc.bat и убедитесь, что он корректно работает.

Код, который программа возвращает операционной системе в момент завершения, позволяет эмулятору командной строки управлять последовательностью выполнения команд пакетного файла. Для этого используется конструкция errorlevel. Оператор ветвления с этой конструкцией имеет такой формат:

"if [ NOT ] ERRORLEVEL число команда.

Условие

ERRORLEVEL число

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

Составим пакетный файл

rem test.bat

@echo off

prog2.exe

if ERRORLEVEL %1 echo Код возврата не меньше, чем %1

Исполняемый файл prog2.exe, полученный в результате компиляции программы prog2.c, возвращает операционной системе число 2 и завершается. Напомним, что программа test.bat представляет собой пакетный файл, её не надо компилировать. Запустим файл test/bat с аргументом 0:

test. bat 0

Первая команда после @echo off запускает файл prog2.exe.

Следующая команда состоит из двух частей. Первая часть - if ERRORLEVEL %1 - проверяет код возврата завершившейся программы и сравнивает его с аргументом - в нашем случае аргумент равен 0. Так как код возврата 2 не меньше, чем 0, то выполняется вторая часть: команда echo выводит на экран стоящее после неё сообщение: "Код возврата не меньше, чем 2". Запустим пакетный файл, увеличив аргумент:

test.bat 1.

На экране появится сообщений "Код возврата не меньше, чем 1". Запустим пакетный файл test.bat с аргументом 2. Условие ERRORLEVEL %1 по-прежнему будет истинным: 2 не меньше, чем 2. Команда echo выводит на экран сообщение: "Код возврата не меньше, чем 2". А после запуска

test.bat 3

на экране не появится никаких сообщений: код возврата 2 меньше, чем 3.

Задание. Cоставьте пакетный файл

rem test.bat

@echo off

prog2.exe

if NOT ERRORLEVEL %1 echo %1

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

test.bat 0

test.bat 1

test.bat 2

test.bat 3

ВЫВОД СИМВОЛЬНОЙ ИНФОРМАЦИИ

В языке С для организации вывода используются стандартные функции. Тело стандартной функции написано на языке машинных кодов и входит в состав библиотеки – одного из файлов в директории Lib. Для того, чтобы компилятор мог её использовать, он должен знать её заголовок – имя функции, возвращаемое значение, количество и тип аргументов. Эта информация содержится в стандартных заголовочных файлах, которые находятся в директории Include. Скопируем в неё следующие файлы из директории Include пакета CBuilder:

C:\Test\Include

_defs.h

_nfile.h

_null.h

_stddef.h

stdio.h

Расширение h представляет собой сокращение слова header – заголовок. В тексте программы следует указать только один из файлов – stdio.h (standard input/output – стандартный ввод/вывод).

Создадим с помощью редактора notepad.exe в директории C:\Test\Apps файл с исходным текстом программы prog3.c:

/*prog3.c*/

#include <stdio.h>

main()

{

printf (“I am a student”);

return 0;

}

На первом этапе компиляции исходный текст программы обрабатывает специальный компонент компилятора, который называется препроцессором. Препроцессор изменяет программу так, чтобы её смог прочитать компилятор. В частности, он выполняет директивы, содержащиеся в исходном тексте. Каждая директива начинается с символа # - знака номера, или, как говорят программисты, «решётки». В отличие от команд, в конце директивы точка с запятой не ставится. Директива include имеет вид

#include <имя_файла>

Выполняя директиву include, препроцессор вставляет на её место содержимое указанного файла.

Стандартная функция printf (print – печатать, format – формат, способ представления данных) осуществляет вывод на экран содержимого строки – аргумента. Строка в языке С заключается в двойные кавычки.

Откомпилируем программу командой

bcc32.exe –I“C:\Test\Include” -L“C:\Test\Lib” prog3.c

Если программа составлена правильно, в директории Apps должен появиться файл prog2.exe. Запустив его, мы увидим на экране надпись “I am a student”.

Для того, чтобы функция printf не только выводила сообщения, но и осуществляла переход на новую строку, надо включить в строку управляющий символ \n:

printf (“I am a student\n”);

Если мы хотим отделить сообщение от последующих команд пустой строкой, то надо поставить два символа перевода строки:

printf (“I am a student\n\n”);

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

Объясните, для чего нужна директива #include <stdio.h> в исходном тексте программы;

Что такое комментарии в исходном тексте программы? Объясните их назначение.

ОПЕРАЦИИ С ЦЕЛЫМИ ЧИСЛАМИ

Базовыми понятиями любого языка программирования служат константы, переменные и выражения. Переменные – это имена запоминающих устройств, чаще всего – областей памяти, а выражения строятся из констант и знаков операций. Переменная, входящая в выражение, интерпретируется как синоним константы, которая хранится в соответствующей области памяти. Каждая константа и переменная относится к тому или иному типу, тип константы определяет ее представление в памяти и те операции, в которых она может участвовать. Связь между переменными и областями памяти устанавливают специальные команды - объявления переменных. Объявление состоит из имени типа, за которым следует список переменных. Рассмотрим простой пример:

/*prog4.c*/

#include <stdio.h>

main()

{

int x = 17, y = 18, z;

z = x * y;

printf(“17 * 18 = %d\n”, z);

return 0;

}

Первой командой тела функции main является объявление переменных целого типа x, y и z. Слово int (integer-целых) – это имя типа; объявление выделяет в памяти две ячейки для хранения целых чисел. При объявлении переменных x и y выполняется их инициализация – в ячейку х помещается значение 17, а в ячейку y – 18. В следующей строке – операция присваивания, значения переменных x и y перемножаются и результат помещается в ячейку z. Произведение x * y представляет собой выражение, перемножаются те значения, которые были присвоены переменным в ходе инициализации.

Результат работы программы – в нашем случае произведение чисел 17 и 18 – надо каким-то образом сообщить пользователю. Для этого используется функция printf. Теперь у нее два аргумента. Первый аргумент, как и прежде, строка, функция выводит ее на экран один ее символ за другим, пока не дойдет до знака %, он отмечает начало спецификации формата. Следующий за ним символ определяет представление второго аргумента функции - константы, переменной или выражения, d означает, что значение должно быть выведено в виде десятичного числа. Закончив вывод значения аргумента, функция printf продолжает выводить символы строки, пока не пройдет ее всю. Если в строке встретится новая спецификация формата, то она определит представление на экране следующего аргумента функции printf. После выполнения программы на экране должно появиться сообщение: 17 * 18 = 306.

Надо различать инициализацию переменной и присваивание значения. Инициализировать переменную можно лишь константным выражением, которое способен выполнить компилятор. Объявление

int x=17, y=17*18;

будет корректным, а выражение х * 18 можно использовать лишь в правой части команды присваивания, оно не является константным, так как требует обращения к содержимому переменной х:

int x = 17, y;

y = x * 18;

Для ввода данных с клавиатуры в программах, написанных на языке С, используют функцию scanf:

/*prog5.c*/

#include <stdio.h>

main()

{

int x, y, z;

scanf (“%d %d”, &x, &y);

z = x * y;

printf (“%d * %d = %d\n”, x, y, z);

return 0;

}

когда мы запустим исполняемый файл, полученный при компиляции этой программы, компьютер перейдет в состояние ожидания ввода данных. Наберем значения 17 18 и нажмем Enter (ввод). На экране снова появится сообщение 17 * 18 = 306. Но теперь мы можем перемножать и другие пары чисел, например, если мы введем 44 55, то получим 44 * 55 = 2420. Объявляя переменные x и y, мы их не инициализируем. Функция scanf должна содержать не менее двух аргументов – строку со спецификациями формата и ссылки на переменные. Спецификации формата у функций printf и scanf совпадают. Знак & (амперсанд) перед переменной означает операцию ссылки, т.е. определение адреса переменной. Когда переменная встречается в составе выражения (в частности, когда она служит аргументом функции), компилятор интерпретирует её как синоним значения, присвоенного ранее этой переменной. Рассмотрим снова фрагмент программы:

int x = 17, y = 18, z;

z = x * y;

printf (“%d\n”, x);

После инициализации переменная х получила значение 17, а y – 18. при вычислении выражения х * у перемножаются именно эти значения. Новое присваивание помещает в ячейку z значение 306, его и выводит функция printf. Функция scanf помещает значение, которое ввел пользователь, в ячейку, именем которой служит х, выражение &х передает функции scanf адрес этой ячейки.

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

/*prog6.c*/

#include <stdio.h>

main()

{

int x, y;

scanf (“х = %d у = %d”, &x, &y);

printf (“%d * %d = %d\n”, x, y, x * y);

return 0;

}

Теперь пользователь должен ввести данные в таком виде:

х=17 у=18

Символы х, =, у, = функция прочитает, но сохранит лишь значения 17 и 18. Если пользователь вместо х, у, = наберёт другие символы, программа будет выполнена некорректно, результат может быть совсем не тот, который ожидает пользователь.

Перечислим знаки основных арифметических операций над целыми числами:

+ сложить,

- вычесть,

* умножить,

/ выполнить целочисленное деление (деление с остатком)

% вычислить остаток от деления.

Как мы видим, символ % внутри первого аргумента функций printf, scanf интерпретируется как часть спецификации формата, а в арифметическом выражении – как знак операции вычисления остатка от деления одного числа на другое. Такие символы называются перегруженными. Значение перегруженного символа определяется его контекстом - той конструкцией, в состав которой он входит. Наличие перегруженных символов в языке программирования напоминает явление полисемии (многозначности) в естественном языке. Большая часть слов имеет не одно, а много значений: нос, коса, лист и т.п. Полисемия позволяет выражать самые разные мысли при помощи сравнительно небольшого запаса слов.

Напомним, что синтаксисом конструкции называется правило, в соответствии с которым её следует строить, семантикой – тот набор действий, который совершает компьютер, получив её перевод на язык машинных кодов, а функциональным назначением – её роль в программе: зачем она здесь нужна, для чего используется.

ОПЕРАЦИИ С ВЕЩЕСТВЕННЫМИ ЧИСЛАМИ

Вещественные числа относятся к типам float и double. Английское слово float обозначает плавать. Плавающими числами, точнее, числами с плавающей точкой называют вещественные числа, представленные в виде a * bp, число a называется мантиссой, во внутреннем представлении вещественных чисел мантисса удовлетворяет условию 0.5 < a ≤ 1. Число b равно 2 (во внутреннем представлении) или 10 (при выводе значения вещественного числа на экран), целое число p – порядок числа – может быть как положительным, так и отрицательным. Слово double означает двойной – вычисления выполняются с двойной точностью. Присваивая вещественному числу значение, выраженное десятичной дробью, ИСПОЛЬЗУЙТЕ ДЕСЯТИЧНУЮ ТОЧКУ. Ввод и вывод вещественных чисела осуществляется со спецификацией %f:

/*prog7.c*/

/*программа вычисляет среднее арифметическое двух чисел, которые пользователь вводит с клавиатуры*/

#include <stdio.h>

main()

{

float x, y, z;

scanf (“х = %f у = %f”, &x, &y);

z = (x + y) / 2;

printf (“среднее арифметическое чисел %f и %f равно %f”, x, y, z);

return 0;

}

Для работы с функциями вещественных аргументов надо добавить в программу директиву препроцессору

#unclude<math.h>

(вставить заголовочный файл math.h) или описать эти функции перед функцией main, указав типы аргумента и возвращаемого значения:

double sin (double x) - синус;

double cos (double x) - косинус;

double tan (double x) - тангенс;

double asin (double x) - арксинус;

double acos (double x) - арккосинус;

double atan (double x) - арктангенс;

double exp (double x) - экспоненциальная функция;

double log (double x) - натуральный логарифм;

double log10 (double x) - десятичный логарифм;

double sqrt (double x) - квадратный корень;

double fabs (double x) - абсолютная величина;

/*prog8.c*/

/*программа вычисляет квадратный корень числа, которое пользователь вводит с клавиатуры*/

#include <stdio.h>

#include <math.h>

main()

{

float x, y;

scanf (“х = %f”, &x);

/*проверка: число, которое вводит пользователь, должно быть неотрицательным:*/

if (x < 0)

/*вывод сообщения об ошибке:*/

printf (“ошибка: надо ввести неотрицательное число”)

else

{

z = sqrt (x);

printf (“корень квадратный из числа %f равен %f”, x, y);

}

return 0;

}

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

/*prog9.c*/

/*программа вычисляет квадратный корень числа, которое пользователь вводит с клавиатуры*/

#include <stdio.h>

double sqrt (double x);

main()

{

float x, y;

scanf (“х = %f”, &x);

/*проверка: число, которое вводит пользователь, должно быть неотрицательным:*/

if (x < 0)

/*вывод сообщения об ошибке:*/

printf (“ошибка: надо ввести неотрицательное число”)

else

{

z = sqrt (x);

printf (“корень квадратный из числа %f равен %f”, x, y);

}

return 0;

}

8. ОПЕРАТОРЫ

Управляющие конструкции задают порядок выполнения команд в программе. Синтаксис ветвления:

if (условие)

команда1

[ else

команда2 ]

Сначала программа проверяет истинность условия. Если условие истинно, то выполняется команда1, если нет, и присутствует ключевое слово else – то выполняется команда2. Затем управление передается команде, следующей за ветвлением.

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

/*prog10.c*/

/*программа вычисляет абсолютную величину вещественного числа */

#include <stdio.h>

main()

{

float x, y;

scanf (“х = %f”, &x);

if (x >= 0)

y = x;

else

y = - x;

printf (“ | %f | = %f\n”, x, y);

return 0;

}

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

if (условие)

{

команда1a

команда1b

...

}

[ else

{

команда2a

команда2b

...

}

]

Условие оператора ветвления обычно включает в себя операции сравнения:

> - больше;

< - меньше;

>= - больше или равно;

<= - меньше или равно;

== - равно (равняется)

!= - не равно.

Определённые трудности вызывает операция “==”. В языке математики символ равенства “=” обозначает две разных операции: присваивание (x = 1 – переменной x присваивается значение 1) и сравнения (2 = 2 – утверждение, что 2 равно 2).В языке C символ “=” обозначает операцию присваивания, слева от него должна стоять переменная, эта операция возвращает значение присвоенной переменной. Например, в результате выполнения команды x = (y = 2) переменным x и y будет присвоено одно и то же значение – число 2. Операция сравнения обозначается с помощью символа “==”, слева и справо от него стоят выражения, результат операции сравнения может быть ложью или истиной. В языке C лжи соответствует число 0, а истине – ненулевое число, как правило, это 1. Таким образом, результатом операции 2 == 2 является истина (1), а результатом операции 2 == 1 – ложь (0).

Логические операции:

&& - конъюнкция (и);

|| - дизъюнкция (или);

! - отрицание (не).

Операторы цикла используются в тех случаях, когда надо несколько раз повторить одна или несколько команд. Синтаксис цикла while:

while (условие)

тело цикла.

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

/*prog11.c*/

//программа вычисляет сумму квадратов чисел 1, 2,..., n

#include <stdio.h>

main()

{

int n, s = 0, i = 1; /* переменная s является сумматором, в ней будет накапливаться сумма чисел от 1 до n */.

scanf (“n = %d”, &n);

while (i <= n)

{

s = s + i * i;

i++;

}

printf (“ 1 * 1 + 2 * 2 +...+ %d * %d = %d\n”, n, n, s);

return 0;

}

Эту же задачу можно решить с использованием цикла for:

/*prog12.c*/

//программа вычисляет сумму квадратов чисел 1, 2,..., n

#include <stdio.h>

main()

{

int n, s, i; /* переменная s является сумматором, в ней будет накапливаться сумма чисел от 1 до n*/.

scanf (“n = %d”, &n);

for (i = 1, s = 0; i <= n; i++)

s = s + i * i;

printf (“ 1 * 1 + 2 * 2 +...+ %d * %d = %d\n”, n, n, s);

return 0;

}

Операции, которые отделяются друг от друга запятой, в языке С образуют единое целое; таким образом, в начале цикла for переменной i присваивается значение 1, а сумматору s - значение 0. После каждого прохода цикла значение переменной i увеличивается на 1, а к значению s программа прибавляет квадрат значения i. Повторение цикла прекратится, когда значение переменной i будет больше 1. НЕ НАДО СТАВИТЬ ТОЧКУ С ЗАПЯТОЙ ПОСЛЕ КОНСТРУКЦИИ for!!!

/*prog13.c

на вход программы поступают целые положительные числа, программа вычисляет их сумму. Ввод прекращается, когда пользователь введёт 0*/

#include <stdio.h>

main()

{

int i, s = 0; /* переменная s является сумматором, в ней будет накапливаться сумма чисел, которые вводит пользователь; в ячейке i хранится очередное число, прочитанное программой */

scanf (“%d”, &i);

while (i!= 0)

{

s = s + i;

scanf (“%u”, &i);

}

printf (“ сумма введённых чисел равна %d\n”, s);

return 0;

}

Язык С предназначен в первую очередь для разработки программ, которые выполняются на компьютерах, обладающих очень высокой производительностью. Здесь машинное время очень дорого, поэтому ввод данных осуществляется не с клавиатуры, а из файла. Изменим программу prog13.c:

/*prog14.c

на вход программы поступают вещественные числа, программа вычисляет их сумму*/

#include <stdio.h>

main()

{

float x, s = 0; /* переменная s является сумматором, в ней будет накапливаться сумма чисел, которые вводит пользователь; в ячейке x хранится очередное число, прочитанное программой */

int flag; /* в переменную flag помещается значение, которое возвращает функция scanf */

flag = scanf ("%f", &x);

/*программа читает данные из файла, содержимое которого направляется в её входной поток; когда прочитан весь файл, функция scanf возвращает значение EOF, оно определяется в файле stdio.h*/

while (flag!= EOF)

{

s = s + x;

flag = scanf ("%f", &x);

}

printf (“ сумма введённых чисел равна %f\n”, s);

return 0;

}

Составим текстовый файл mydata.txt, содержащий следующие вещественные числа:

121.45 12.78 151.11 777.76

Откомпилируем программу prog14.c и запустим её, набрав в командной строке:

prog14.exe < mydata.txt

Символ '<' указывает операционной системе, что стандартный канал ввода исполняемого файла prog14.exe следует соединить с файлом mydata.txt. Программа выводит на экран сумму чисел, содержащихся в файле mydata.txt.

СИМВОЛЫ И СТРОКИ

Символьные константы в языке С относятся к типу char (character - буква). Их можно представлять как в виде числовых значений ASCII-кода, так и в виде соответствующих символов, в исходном тексте программы эти символы следует заключать в апострофы (одинарные кавычки). Для вывода символьной константы в виде символа используют спецификацию формата %с.

/*prog15.c*/

#include<stdio.h>

main()

{

char x = ‘A’, y = 97;

printf (“Численное значение переменной х равно %d, в ней хранится символ %c \n Численное значение переменной у равно %d, в ней хранится символ %с \n”, x, x, y, y);

return 0;

}

Откомпилировав и выполнив программу мы увидим, что буква ‘А’ имеет ASCII-код 65, а ASCII-коду 97 соответствует строчная буква ‘а’.

Таким образом, мы можем присваивать целочисленные значения переменным типов int и char, выполнять с ними обычные арифметические действия, представлять в десятичной системе счисления. Однако переменные этих типов занимают разный объем памяти. Операция

sizeof (имя_переменной)

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

/*prog16.c*/

#include<stdio.h>

main()

{

int x = 97;

char y = 97;

printf (“Переменной х типа int присвоено значение %d, она занимает %d байт Переменной у типа char присвоено значение %d, она занимает %d байт ”, x, sizeof(x), y, sizeof(y));

return 0;

}

При вызове функции printf вычисляются значения всех её аргументов - x, sizeof (x), y, sizeof (y) – эти значения операционная система выводит на экран.

Строка в языке С представляет собой массив, образованный следующими друг за другом переменными типа char. Они нумеруются целыми числами (индексами массива), начиная с нуля. Спецификация формата ввода-вывода строки - %s. Строка не обязательно должна занимать весь массив – ее конец отмечает элемент с нулевым значением.

/*prog17.c*/

#include<stdio.h>

main()

{

char str[20] = “I am a student”;

str[6] = 0;

printf(“%s\n”, str);

return 0;

}

Прежде всего, обратим внимание на объявление массива str. Сначала идёт имя типа элемента массива – char, затем имя массива – str и модификатор типа – квадратные скобки. В языке С квадратные скобки интерпретируются как операция доступа к элементу массива: str[6] = 0 – элементу массива str с индексом 6 присвоить значение 0. Объявление массива следует понимать так: выполнив с переменной str операцию доступа к элементу массива, мы получим значение типа char. Число в квадратных скобках при объявлении массива равно количеству его элементов; так как индекс начального элемента 0, то индекс последнего элемента массива равен 19. В строке “I am a student” 11 букв и три пробела – всего 14 символов, да еще символ с нулевым значением, завершающий строку – получается, что длина строки составляет 15 символов, последний байт массива не используется. В теле функции элементу с индексом 6 присваивается значение 0, следовательно, строка сокращается. Откомпилировав и выполнив программу prog16.c, мы увидим, что она выводит на экран лишь 6 символов строки: “I am a”.

Есть еще один способов объявления массива. На самом деле в переменной str хранится адрес начального элемента массива, т.е. str – это ссылка на переменную str[0]. Значение адреса можно получить с помощью операции разадресации, она обозначается символом *.

/*prog18.c*/

#include<stdio.h>

main()

{

char *str = “I am a student”;

str [ 7 ] = ‘S’;

printf(“%s \n”, str);

return 0;

}

После выполнения программы на экране появляется сообщение “I am a Student”. Таким образом, объявления

char str[20];

char *str;

можно считать равноправными. На самом деле это не так – в первом случае мы точно знаем, что нам выделено место в памяти для размещения двадцати элементов, во втором дело обстоит гораздо сложнее.

В программах prog17.c и prog18.c мы присваивали строке значение при помощи инициализации, а затем изменяли ее отдельные символы. Использовать операцию = для измен


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: