Методические указания для выполнения лабораторных работ и курсовой работы содержание
Вид материала | Методические указания |
- Методические указания по выполнению курсовых работ для студентов заочной формы обучения, 300.18kb.
- Рабочая программа, методические указания по выполнению курсовой работы, темы курсовых, 1694.43kb.
- Методические указания по выполнению курсовой работы Составитель Виничук, 2013.82kb.
- Методические указания для выполнения курсовой работы по дисциплине «Макроэкономика», 976.03kb.
- Методические указания к выполнению лабораторных работ по дисциплине «Интеллектуальные, 653.36kb.
- Методические указания для выполнения курсовой работы по дисциплине: «Метрология, стандартизация, 170.43kb.
- Методические указания для выполнения курсовой работы по дисциплине «Теория принятия, 547.84kb.
- Методические указания для ее выполнения по дисциплине «финансы» 2008-2009 уч. Год (для, 247.31kb.
- Методические указания по содержанию и организации выполнения курсовой работы по дисциплине, 1445.93kb.
- Петроченко Любовь Викторовна Учебно методические указания, 199.16kb.
МЕТОДИЧЕСКИЕ УКАЗАНИЯ ДЛЯ ВЫПОЛНЕНИЯ ЛАБОРАТОРНЫХ РАБОТ И КУРСОВОЙ РАБОТЫ
СОДЕРЖАНИЕ
1 Введение 3
2 Лабораторная работа № 1. Ввод и вывод данных 4
3 Лабораторная работа № 2. Условные операторы 13
4 Лабораторная работа № 3. Циклические процессы 23
5 Лабораторная работа № 4. Подпрограммы 27
6 Лабораторная работа № 5. Работа с указателями 31
7 Лабораторная работа № 6. Алгоритмы обработки в вычислительных процессах 35
8 Лабораторная работа № 7. Файловые структуры 38
9 Лабораторная работа № 8. Стек 51
10 Лабораторная работа № 9. Односвязные списки 59
11 Лабораторная работа № 10. Древовидные структуры 69
12 Лабораторная работа № 11. Динамическое распределение памяти 79
13 Методические указания для выполнения курсовой работы 98
13.1 Сроки выполнения курсовой работы 99
13.2 Список тем и вариантов 99
1Введение
Каждый даже универсальный язык программирования имеет преимущественную область применения. Язык «С» в силу своих особенностей одинаково хорошо поддерживает системное программирование и программирование прикладных (пользовательских) задач. Поэтому его удобно использовать для создания автоматизированных систем различного назначения и, следовательно, изучение языка «С» целесообразно для всех технических специальностей. В настоящее время существует множество платформ этого языка от усеченных платформ для микропроцессоров до больших универсальных языков для мощных ЭВМ. Последние (как правило) имеют три составные части:
- Turbo C;
- Объетно-ориентированное программирование;
- Обобщенное программирование.
Первая часть (базовая) имеется во всех платформах «С» и его стандарты поддерживаются практически всеми операционными системами, включая и UNIX. Это делает необходимым начать изучение «С» с Turbo C.
В данных методических указаниях обучение Turbo C разбито на три этапа, описание лабораторных работ в каждом из которых построены по плану, наиболее подходящему для соответствующего этапа.
На первом этапе, включающем в себя четыре первых лабораторных работы, изучаются основные операторы и начальные элементы языка. Поэтому по сравнению с другими работами в них приводится больше справочного материала относительно операторов языка и примеров, иллюстрирующих их применение.
Пятая и шестая работы посвящены программам средней сложности. Поэтому в них делается основной упор на описание соответствующих подходов и алгоритмов. Приводятся примеры их реализации.
Последние пять работ ориентированы на профессиональное программирование, для которого характерно применение специальных структур данных, используемых при решении задач в качестве неделимых логических единиц. Фактически – это шаг к объектно-ориентированному программированию, при котором объекты (указанные логические единицы) реализованы средствами Turbo C). В приложениях к этим работам приводятся примеры решения задач на основе соответствующих структур данных. Варианты заданий в этих работах существенно различаются по сложности, что дает возможность повысить полезность этого лабораторного практикума для студентов с различной степенью подготовки в области программирования. Еще одной особенностью этой группы работ является то, что решение задач приводится в приложения как на языке «С», так на языке программирования Паскаль. Это позволяет:
- использовать данные методическик указания и при изучении языка Паскаль;
- провести сравнительный анализ между двумя языками.
2Лабораторная работа № 1. Ввод и вывод данных
1.Цель работы
Целью работы является
- Знакомство с интегральной средой программирования и создание первых программ на языке «С»;
- Изучение и отработка приемов и навыков ввода и вывода данных на языке «С».
2. Общие сведения о программах
Создание первой программы в Турбо-Си
По традиции, первой для программиста программой на Си должна быть программа Hello, World, описанная в классическом труде Кернигана и Ричи "Язык программирования Си" (или аналогичная программа). Текст этой программы и некоторые к ней пояснения приведены ниже.
#include
#include
#include
#include
void main()
{
printf("Желаем Вам успеха в изучении языка С\n");
}
В начале программы директивой #include подключаются библиотеки, поддерживающие работу тех или иных операторов "С". Откладывая подробное обсуждение этого вопроса на лекционные занятия, отметим только, что для данной программы достаточно было подключение одной библиотеки
Пусть мы хотим занести эту программу в файл с именем hello.c. Тогда можно начать с ввода следующей командной строки /из DOS/:
tc hello.c
В результате выполнения этой команды вызывается версия Турбо-Си с интегрированным окружением, создается файл с именем HELLO.C /если он уже не существует/, и вы попадаете в редактор Турбо-Си, в котором вам необходимо указанную программу:
Закончив ввод программы, ее необходимо записать на диск перед тем, как двигаться дальше, если после зависания компьютера весь ваш труд пропал даром. Для записи программы нажмите F2 или выберите пункт Save из меню работы с файлами File, нажав F10 F S.
Компиляция
Теперь, когда программа записана на диск, до ее запуска необходимо сделать две вещи: оттранслировать и скомпоновать ее.
Для трансляции исходного файла нажмите Alt-F9 /нажмите одновременно клавиши Alt и F9/.
После завершения трансляции, которая займет не более одной или двух секунд, на экране появится мигающее сообщение об успешном завершении работы: "Succerss: Press any key" /успех, нажмите любую клавишу/. После нажатия любой клавиши окно исчезнет и вы окажетесь в главном меню.
Если в процессе работы были какие-либо ошибки, сообщения о них и предупреждения будут находиться в окне сообщений в нижней части экрана. В данном случае никаких сообщений быть не должно, если же они есть, проверьте правильно ли вы списали программу и оттранслируйте ее еще раз.
Запуск
После успешной трансляции программа готова к запуску. Т.к. меню в данный момент активно, можно нажать R /Run/. Если вы вернулись в редактор, нажмите Alt-R или выйдите в главное меню нажатием F10 и нажмите R для выполнения команды Run. На экране появится окно компоновщика, показывающее, что Турбо-Си ищет необходимые библиотечные процедуры.
Если в это время появились ошибки, скорее всего это произошло потому, что вы не указали, где находятся библиотечные файлы. Если окно компоновщика до сих пор находится на экране, уберите его нажатием любой клавиши, затем нажмите последовательно F10 и О для выхода в меню установки параметров Options /или используйте сокращение Alt-O/.
Нажав Е, выберите пункт Environment /окружение/, а затем нажмите L для выбора пункта определения библиотечной директории Library directory. После появления на экране окна библиотечной директории напечатайте полное имя пути поддиректории, в которой находятся библиотечные файлы /это, возможно, будет имя A:\TURBOC\LIB или C:\TURBO\LIB/ и нажмите Enter.
Для выхода из меню Environment нажмите Esc, затем нажмите S для сохранения установленных параметров /Store Options/. На экране появится прямоугольник, в который надо впечатать имя файла конфигурации, в нем уже будет указано имя TCCONFIG.TC. Просто нажмите Enter, когда Турбо-Си спросит вас, стирать ли старый файл конфигурации, нажмите Y.
Наконец, нажмите Esc для выхода из меню Options и нажмите R для запуска программы. Теперь компоновка программы должна завершиться успешно. Это значит, что для запуска вашей программы Турбо-Си копирует в нее необходимые для ее работы процедуры из библиотеки исполняющей системы. По умолчанию используется малая /Small/ модель памяти /более подробно о моделях памяти говорится в главе 9/, поэтому Турбо-Си берет процедуры из библиотеки с именем CS.LIB.
После компоновки программы Турбо-Си запускает ее на выполнение. Экран очищается, в верхней его части появляется сообщение «Желаем Вам успеха в изучении языка», а в нижней части - сообщение Press any key to Turbo C ... Нажмите любую клавишу - на экране появится знакомый экран Турбо-Си. Примите наши поздравления - вы только что запустили свою первую программу!
3. Семь основных элементов программирования
Целью большинства программ является решить какую-либо задачу. Задачи решаются программами путем различных манипуляций с информацией и данными. Необходимо:
- ввести информацию в программу;
- иметь место для хранения информации;
- давать инструкции по обработке информации;
- выводить информацию из программы пользователю.
Вы можете организовать инструкции таким образом, что:
- некоторые из них выполняются только тогда, когда какое-либо условие или набор условий истинны;
- другие повторяются некоторое число раз;
- третьи разделяются на группы, которые могут выполняться в различных местах программы.
Итак, мы только что описали семь основных элементов программирования: ввод, типы данных, операторы, вывод, условное выполнение, циклы и подпрограммы. Этот список не очень полон, но он действительно охватывает все то общее, что есть в различных программах.
Во многих языках программирования все это есть, многие, включая Си, имеют дополнительные возможности. При изучении любого нового языка, если вам нужно изучить его быстро, определите, как в нем реализованы семь основных элементов, дальше все будет просто. Ниже приведено их краткое описание.
Вывод - означает запись информации на экран, диск или в порт ввода-вывода.
Типы данных - это константы, переменные и структуры, которые содержат числа /целые и с плавающей точкой/, текст /символы и строки/, или адреса /переменных и структур/.
Операторы - присваивают одно значение другому, комбинируют значения /сложение, деление и т.д./, и сравнивают значения /равно, не равно и т.д./.
Ввод - означает чтение данных с клавиатуры, диска или их порта ввода-вывода.
Условное выполнение - выполнение определенного набора инструкций, если указанное условие истинно, или пропуск данного набора, если условие ложно.
Циклы - выполнение набора инструкций определенное число раз или пока некоторое условие истинно.
Процедуры - отдельно именуемые наборы инструкций, которые могут выполняться в любом месте программы, вызываются по имени.
4. Операторы ввода
Функция printf
Вам уже приходилось использовать наиболее часто встречающуюся в Си функцию вывода print. Она предназначена для вывода информации на экран. Формат ее прост и гибок:
printf(<форматная строка>,<аргумент>,<аргумент>,...);
Форматная строка
Форматная строка - это строка, которая начинается и заканчивается двойными кавычками /"вот так"/. Целью функции printf является вывод этой строки на экран. До вывода аргументы, указанные в строке, преобразуются в соответствии со спецификаторами формата, указанными в самой строке. Рассмотрим следующий оператор:
printf("The sum is %d/n",sum);
Последовательность %d в форматной строке является спецификатором формата. Все спецификаторы формата начинаются со знака процента /%/, за которым обычно следует одна буква, указывающая тип данных и способ форматирования этих данных.
Для каждого спецификатора формата должен быть указан один и только один аргумент. Если аргумент принадлежит типу данных, который не соответствует указанному в спецификаторе формата, то Турбо-Си попытается проделать соответствующее преобразование. Аргументами могут быть переменные, константы, выражения, вызовы функций,
т.к. они могут быть чем угодно, возвращающим значение, подходящее соответствующей спецификации формата.
Спецификатор %d означает, что аргумент является целым. Ниже приведены наиболее часто используемые спецификаторы форматов:
%u беззнаковое целое %i целое
%p значение указателя %f с плавающей точкой
%e с плавающей точкой в экспоненциальном формате
%c символ
%s строка
%x или %X целое в шестнадцатеричном формате
Ширина поля может быть указана цифрой, помещенной между знаком % и буквой. Например, десятичное поле шириной 4 символа будет указано так: %4d. Значение будет напечатано выравненным вправо /с ведущими нулями/, так что общая длина поля будет равна 4 символам.
Если вам нужно напечатать знак процента, вставьте %%. Последовательность \n не является спецификатором формата. По
традиции это называется escape-последовательностью и представляет собой символ перехода на новую строку, поэтому после печати строки маркер переходит в начало следующей строки.
Другие функции вывода: puts и putchar
Для вывода на экран есть еще две функции: puts и putchar. Функция puts выводит на экран строку, оканчивающуюся символом перехода на новую строку.
Обратите внимание, что символ \n в конце строки отсутствует, т.к. он добавляется самой функцией puts.
Вторая функция, putchar, выводит на экран один символ и не добавляет \n. Оператор putchar(ch) эквивалентен printf("%c",ch).
В чем смысл использования puts и/или putchar взамен функции printf? Одной из причин является достаточно большой размер процедуры printf. Если только она вам действительно не нужна для цифрового вывода или специального форматирования, лучше воспользоваться функциями puts и putchar, что сделает вашу программу меньше и быстрее. Например, файл .ЕХЕ, созданный на основе файла HELLO.C, использующего функцию puts намного меньше того же файла, но использующего функцию printf.
5. Операторы ввода
Функция scanf
Основное назначение этой функции - интерактивный ввод информации. Вид функции scanf эквивалентен виду функции printf:
scanf (<форматная строка>,<адрес>,<адрес>,...)
Функция scanf использует многие из тех спецификаторов формата со знаком %, что и функция printf: %d для целых чисел, %f для чисел с плавающей точкой, %s для строк и т.д.
Однако у этой функции есть важная отличительная черта: за форматной строкой следуют не значения, а адреса. В программе SUM.C имеется следующая строка:
scanf("%d%d",&a,&b);
Эта строка означает, что программа ожидает ввода двух десятичных целых значений, разделенных пробелом; первое значение будет присвоено переменной а, второе - переменной b. Обратите внимание на то, что для передачи значений применяется адресный оператор &, при помощи которого функции scanf передаются адреса переменных а и b.
Распространенный пробел
Пробел между двумя спецификаторами формата %d представляет на самом деле больше, чем просто пробел. На его месте может быть любое количество свободного пространства, а именно: любое количество пробелов, табуляций и символов новой строки в любых комбинациях. Обычно, в большинстве случаев такой распространенный пробел игнорируется программами и компиляторами языка Си.
Но что делать, например, если вместо пробела вы хотите разделять свои переменные запятой? Для этого отредактируйте эту строку так:
scanf("%d,%d",&a,&b);
Такая строка позволит передавать в программу значения, разделяя их запятой.
Передача адреса в функцию scanf
Что делать, если вы хотите ввести в программу строку? Напечатайте и запустите следующую программу:
#include
#include
#include
#include
void main()
{char name[30];
scanf("%s",name);//ввод строки
printf("%s Введенная строка: ",name); вывод введенной строки
}
Т.к. name - это массив символов, значение переменной name есть адрес самого массива. По этой причине перед именем name не используется адресный оператор &, и строка ввода выглядит следующим образом: scanf("%s",name).
Обратите внимание, что мы использовали массив символов /char name [30];/, а не указатель на символ /char *name;/. Объяснением этому служит тот факт, что объявление массива на самом деле резервирует память для хранения его элементов, а при объявлении ссылки этого не происходит. Если бы мы использовали объявление char *name, тогда нам бы пришлось явным образом резервировать память для хранения переменной *name.
Использование для ввода функций gets и getch
Использование для ввода информации функции scanf приводит к появлению следующей проблемы. Запустите еще раз эту же программу, но введите в нее имя и фамилию. В своем ответе программа покажет вам снова одно только имя. Почему? Потому что функция scanf восприняла пробел, введенный вами после имени, как конец вводимой строки. Для решения этой проблемы можно воспользоваться двумя способами. Функция gets воспринимает любую информацию до тех пор, пока вы не нажмете клавишу Enter. Код, соответствующий этой клавише, в строку не вводится, но в конце строки добавляется нулевой символ \0.
И последняя функция - это getch. Эта функция считывает с клавиатуры один символ, не отображая его на экране /в отличие от функции scanf и gets/. Эта функция не передает символ в качестве параметра; она сама имеет тип char, и ее значение может быть непосредственно присвоено переменной типа char. В заключении перепишем предыдущую программу, используя операторы puts и gets.
#include
#include
#include
#include
void main()
{char name[30];
gets(name);//ввод строки
puts(name);// вывод введенной строки
}
6. Варианты заданий
1.Ввести две беззнаковые переменные. Сначала сложить их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива.
- Присвоить по указателю значение строки и вывести ее.
2.Ввести две знаковые переменные. Сначала сложить их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива.
- Присвоить по указателю значение строки и вывести ее.
3.Ввести две беззнаковые переменные. Сначала произвести вычитание их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива форматным оператором.
- Присвоить по указателю значение строки и вывести бесформатным оператором.
4.Ввести беззнаковые переменные. Сначала
сложить их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой. Прокомментировать полученный результат
- Ввести строковую переменную в виде массива.
- Присвоить по указателю значение строки и вывести ее.
5.Ввести две беззнаковые переменные. Сначала поделить их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива.
- Присвоить по указателю значение строки и вывести ее.
6.Ввести две беззнаковые переменные. Сначала сложить их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива.
- Присвоить по указателю значение строки и вывести ее.
7.Ввести две знаковые переменные. Сначала сложить их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива.
- Присвоить по указателю значение строки и вывести ее.
8.Ввести две беззнаковые переменные. Сначала произвести вычитание их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива форматным оператором .
- Присвоить по указателю значение строки и вывести бесформатным оператором.
9.Ввести переменные в форме с плавающей запятой. Сначала
сложить их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива.
- Присвоить по указателю значение строки и вывести ее.
10.Ввести две беззнаковые переменные. Сначала поделить их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива.
`11.Ввести две знаковые переменные. Сначала сложить их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива.
- Присвоить по указателю значение строки и вывести ее.
12.Ввести две знаковые переменные. Сначала выполнить операцию деления их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива.
- Присвоить по указателю значение строки и вывести ее.
13.Ввести две беззнаковые переменные. Сначала произвести вычитание их, а затем деления их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива форматным оператором.
- Присвоить по указателю значение строки и вывести бесформатным оператором.
14.Ввести переменные в форме с плавающей запятой. Сначала
сложить их, а затем поделить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой. Прокомментировать полученный результат
- Ввести строковую переменную в виде массива.
- Присвоить по указателю значение строки и вывести ее.
15.Ввести две беззнаковые переменные. Сначала поделить их, а затем сложить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива.
- Присвоить по указателю значение строки и вывести ее.
16.Ввести две знаковые переменные. Сначала сложить их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива.
- Присвоить по указателю значение строки и вывести ее.
17.Ввести две знаковые переменные. Сначала сложить их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива.
- Присвоить по указателю значение строки и вывести ее.
18.Ввести две беззнаковые переменные. Сначала произвести вычитание их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива форматным оператором.
- Присвоить по указателю значение строки и вывести бесформатным оператором.
19.Ввести беззнаковые переменные в форме с плавающей запятой. Сначала
сложить их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива.
- Присвоить по указателю значение строки и вывести ее.
20.Ввести две беззнаковые переменные. Сначала поделить их, а затем перемножить их и вывести результаты в формате
а) беззнаковых;
б) знаковых;
в) с плавающей запятой.
Прокомментировать полученный результат
- Ввести строковую переменную в виде массива.
`