Рекомендации по выполнению лабораторных работ
Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Рекомендации по выполнению лабораторных работ





1. Форматированный ввод-вывод. В программе описываются переменные трёх типов: char, int, double и строка символов, как массив типа char. С клавиатуры вводятся их значения. Используя, допустимые спецификаторы формата, вывести их представления. Объяснить полученный результат.

Пример: программа считывает символ и отображает его в различных форматах.

char ch; // int ch;

printf("Input a symbol: \n");

scanf("%c",& ch ); //ch=getchar();

printf("\n%c\n%5c\n%-5c\n%d\n%o\n%x\n",ch,ch,ch,ch,ch,ch);

Объяснить полученный результат.

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

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

Замечание: наиболее часто применяемые типы вещественных чисел представлены короткими (4 байта) и длинными (8 байт) данными. Си использует для этой цели спецификаторы float и double.

Короткий вещественный формат по модулю обеспечивает представление чисел в диапазоне от 10-38 до 10+38 примерно с 7-8 значащими цифрами. Для 8-байтового формата диапазон существенно расширяется –от 10-308 до 10+308, а количество значащих цифр увеличивается до 15-16.



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

3. Использование функций. Известно, что любое четное число N (N > 0) может быть представлено в виде суммы двух простых чисел (N = N1 + N2).Написать программу, которая отыскивает все такие разложения (о не единственности решения свидетельствует простейший пример: 4 = 1 + 3 = 2 + 2).

Алгоритм работы программы: она перебирает все возможные слагаемые, первое из которых не превосходит 0.5*N, и если оба они оказываются простыми, выводит полученный результат. Анализ слагаемых выполняется с помощью функции prime, которая возвращает значение «1», если число простое, «0», если составное.

int prime(long N)

{

long j;

if(N < 4) return 1;

if(N%2 == 0) return 0;

for(j=3; j*j <= N; j+=2)

if(N%j==0) return 0;

return 1;

}

Обратить внимание, где будет располагаться функция.

4. Преобразование типов, условные операторы. «Вечный календарь». Даны натуральные числа d, m, g, которые обозначают число, месяц и год. Определить день недели, на который попадает введенная дата.

Замечание. Дата должна находиться в диапазоне от 1582 до 4902 гг. Номер дня недели (воскресенье - 0, понедельник - 1, ..., суббота - 6) равен остатку от деления на 7 значения выражения

[ 2.6 * m - 0.2] + d + y + [y / 4] + [x / 4] - 2 * x.

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

d - номер дня в месяце (1, 2, ...);

m - номер месяца, нумерация начинается с марта (март - 1, апрель - 2,..., декабрь - 10, январь и февраль считаются месяцами с номерами 11 и 12 предыдущего года;

y - две младшие цифры года;

x - две старшие цифры года;

[a] - целая часть а.

Осуществить контроль ввода дат. Использовать операторы целочисленного деления и остатка от деления. При выводе наименования дня недели использовать оператор switch.

5. Вложенные циклы. «Отгадай число». Генерируется случайное число в диапазоне от 0 до 99. Задано количество попыток. Если пользователь угадывает число, программа выводит сообщение "правильно"; в случае несовпадения выдается подсказка (больше/ меньше введённое число по сравнению со сгенерированным числом). В случае совпадения выдаётся сообщении о количестве попыток. При несовпадении печатается сгенерированное число. По окончании игры выдаётся запрос: «Продолжить игру Y/N?». Первый цикл – «начать новую игру», выход из второго цикла – количество попыток исчерпано или число угадано.

6. Обработка текстовой информации.В программе вводится текст (признак конца вводав - CTRL/Z - в программе EOF). Считаем, что слова в тексте могут быть разделены символами пробел, табуляция, клавишей enter (количество пробельных символов произвольно). Все остальные знаки препинания (если они написаны слитно со словом) считать, что они относятся к слову (по желанию можно учитывать различные знаки препинания для выделения слов)

Написать программу:

· печатающую количество слов в тексте и гистограмму длин вводимых слов. Изобразить гистограмму в виде горизонтальных полос, напечатанных знаками "*" (можно другими).

Пример входных данных:

Язык Си был разработан сотрудником Bell Laboratories

(отделение известной телефонной компании AT&T)

Деннисом Ритчи

В тексте 14 слов.

****

**

***

**********

***********

****

************

**********

*********

**********

********

*****

********

*****

· печатающую количество предложений и количество слов в предложении (конец предложения - ". ? !"). Изобразить диаграмму в виде вертикальных полос, напечатанных знаками "*" (можно другими).

Пример.

Пусть в тексте 4 предложения. В 1-м предложении ¾ 4 слова, во 2-м ¾ 3, в 3-м ¾ 6, в 4-м ¾ 5.

*

* *

* * *

* * * *

* * * *

* * * *

7. Битовые операции.Осуществить циклический сдвиг влево или вправо на заданное число позиций. Пользователь вводит число (целое или символ в зависимости от того, что сдвигают: integer или char), а также число позиций сдвига. В результате выполнения программы должно быть выведено на экран:

А) исходное число в десятичном и двоичном виде

Б) число, полученное в результате сдвига, в двоичном и десятичном формате.

Пример. Пусть исходное число 11710.

Двоичное представление: 011101012.

Сдвиг вправо на 3 позиции: 101011102 = 17410.

Сдвиг влево на 4 позиции: 010101112 = 8710.

8. Решить задачу о ранце, используя битовые операции.Задаётся число предметов, их вес и полезность, а также грузоподъёмность ранца. Определить, какие предметы надо уложить в ранец, чтобы их суммарная стоимость была максимальной.

Замечание. Задача переборного типа. Перебор осуществляется по всевозможным представлениям двоичного числа. Количество комбинаций 2n, где n – количество предметов. Поиск комбинации, на которой суммарный вес предметов <= объёма ранца и суммарная стоимость предметов в ранце максимальная.

9. Задача Джонсона. Обработки n деталей на 2 станках.

Исходные данные:

n – количество деталей

T = ||tij|| - матрица времён обработки i –ой детали на j – м станке

Требуемый результат

1. Определить порядок обработки деталей, при котором суммарное время обработки будет минимальным.

2. Построить график Ганта – графическое изображение последовательности выполнения работ.

Алгоритм решения задачи (точный алгоритм):

· Ищем минимальный элемент в матрице (если таких несколько, то выбираем 1-ый).

· Если минимум в 1-ом столбце, то соответствующая деталь запускается в обработку первой (от уже имеющейся в последовательности обработки – от начала), если минимум во 2-м столбце, то соответствующая деталь запускается в обработку последней (от уже имеющейся в последовательности обработки – от конца).

· Эту деталь из рассмотрения исключаем.

· Алгоритм продолжается до тех пор, пока все детали не будут рассмотрены.

Пример: n = 6.

Матрица времён обработки:

Решение

1 деталь Удалён на 1 шаге (конец)
2 деталь Удалён на 4 шаге (начало)
3 деталь Удалён на 2 шаге (начало)
4 деталь Удалён на 6 шаге (начало)
5 деталь Удалён на 5 шаге (начало)
6 деталь Удалён на 3 шаге (конец)

Р = (3, 2, 5, 4, 6, 1)

График Ганта

1 станок: 32225554444446661111111

2 станок: 33 22222555 444466 1

Время обработки = 24

10. Модификация задачи Джонсона.

· Информация вводится из файла: в 1-ой строке – количество станков, в последующих строках – времена обработки соответственно на 1-м т 2- м станках (количество строк зависит от того, как осуществляется чтение из файла).

· Предусмотреть динамическое выделение память для двумерного массива.

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

Необходимо реализовать 2 функции:

1. sort (любой метод сортировки) вызывается из функции main;

2. strcmp_my (собственная функция реализует сравнение строк) вызывается из функции sort.

В функции main вводятся строки, и динамически выделяется память для каждой строки.

Предусмотреть проверку, выделена память или нет.

Результат выполнения программы:

· Печать исходного текста

· Печать отсортированного текста

12. Рекурсивные функции. Составить программу сортировки массива целых чисел в порядке возрастания. В программе должен быть реализован алгоритм сортировки слиянием, рекурсивную функцию которого надо модифицировать таким образом, чтобы для последовательностей длиной меньше 5 выполнялась сортировка вставками. Размер массива вводится в программе. Заполнение массива – случайными числами.

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

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

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

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

Сортировка вставками:

· сортируемый массив можно разделить на две части — отсортированная часть и неотсортированная. В начале сортировки первый элемент массива считается отсортированным, все остальные — не отсортированные.

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

13. Определяемые пользователями типы данных. Используя структуры, создать простейшую базу данных, состоящую из одного файла. Структуру придумать самостоятельно.

В программе предусмотреть следующие функции:

· Создание новой БД.

· Чтение из файла уже существующей БД.

· Сохранение в файле.

· Ввод новых записей

· Поиск по ключу.

· Модификация.

· Просмотр.

· Удаление записи.

14. Структуры данных – очередь.Структура имеет поле fam, являющееся указателем на строку с фамилией и поле next, которое содержит указатель на следующий элемент. У последнего элемента этот указатель имеет значение NULL. По этому признаку определяется последний элемент очереди.

· Программа должна состоять из 3 файлов:

· заголовочный файл, содержащий объявление структуры и прототипы функций;

#define QUE struct queue

QUE { char *fio;

QUE *next;

};

extern void insert(QUE ** , char *); //вставка в конец очереди

extern char *take(QUE **); / извлечение 1-го элемента из начала очереди;

· файл, содержащий описание функции работы с очередью (постановка в очередь нового элемента, извлечение 1-го элемента из начала очереди);

· файл, содержащий функцию main.

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

15. Структуры данных – бинарное дерево.Программа подсчета частоты встречаемых слов в тексте, читаемом из файла.

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

§ поле для хранения информации

§ поле с указателем на левое поддерево

§ поле с указателем на правое поддерево

#define TREE struct tree

TREE { char * wrd;

int count;

TREE *left;

TREE *right;

};

Для очередного слова динамически выделять память.

4. Учебно-методическое обеспечение самостоятельной работы студентов.

Вопросы для контроля

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

2. Типы данных и их об явление. Использование sizeof. Константы и переменные. Правила области видимости.

3. Явное и неявное преобразование типов.

4. Выражения и операции присваивания. Простое присваивание. Составное присваивание.

5. Операции увеличения и уменьшения

6. Инициализация данных: переменных, массивов, структур.

7. Операции языка СИ. Мультипликативные операции. Аддитивные операции Приоритеты операций и порядок вычислений

8. Операции языка СИ: арифметические, логические, присваивания, сравнения, тернарная, sizeof.

9. Операторы управления программой: IF, SWITCH.

10. Операнды и операции. Преобразования при вычислении выражений. Простые и составные операнды.

11. Циклы с предусловием и постусловием.

12. Вложенные циклы. Операторы прерывания цикла - continue, break.

13. Одномерные и многомерные массивы. Методы доступа к элементам массивов. Использование sizeof.

14. Строки. Функции работы со строками.

15. Указатели и массивы. Массивы указателей. Указатели на многомерные массивы

16. Указатели и адресная арифметика. Операции с указателями. Модели памяти.

17. Динамическое распределение памяти. Динамическое размещение массивов.

18. Определяемые пользователем типы данных. Структуры.

19. Массивы структур Указатели на структуры.

20. Определяемые пользователем типы данных. Битовые поля.

21. Общий формат функций. Прототипы функций. Вызов функций.

22. Оператор return. Значения, возвращаемые функцией.

23. Функции. Передача массивов и структур в функции.

24. Форматированный ввод и вывод.

25. Консольный ввод и вывод.

26. Потоки и файлы. Связь потоков и файлов.

27. Ввод/вывод с произвольным доступом.

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

Критерии оценок

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

 

4.3. Учебно-методическое и информационное обеспечение дисциплины «Программирование (С)»

а) основная литература

1. Березин Б.И., Березин С.Б. Начальный курс С и С++. М: Диалог-Мифи, 2000. – 288 c.

2. Громов Ю.Ю., Татаренко С.И. Программирование на языке Си http://citforum.ru/programming/c.shtml.

3. Керниган Б., Ритчи Д., Фьюзер А. Язык программирования Си. Задачи по языку Си: Пер. с англ. М.: Финансы и статистика, 1992. – 272 с.

4. Павловская. Т. А. C/C++. Программирование на языке высокого уровня / СПб.: Питер, 2003. —461 с.: ил.

5. Подбельский В.В., Фомин С.С. Программирование на языке Си. М.: Финансы и статистика, 2000. – 600 с.

6. Страуструп Б. Язык программирования Си++: Пер. с англ. М.: Радио и связь, 1991.- 352 с.

7. Тарасов В.Л. Упражнения по языку программирования Си. Учебное пособие. Н.Н.: Нижегородский университет, 1996.

8. Трой. Д. Программирование на языке Си для персонального компьютера IBM PC: Пер. с англ. М.: Радио и связь, 1991.

9. Хенкок Л., Кригер М. Введение в программирование на языке Си: Пер. с англ. М.: Радио и связь, 1986.

10. Чернышова Н.Н., Фомина И.А. Методические указания для выполнения лабораторных работ по курсам “Основы алгоритмизации” и "Язык СИ" для студентов специальности «Информационные системы". ННГУ, факультет вычислительной математики и кибернетики, кафедра “Информатики и автоматизации научных исследований”, Н.Новгород, 2000г.

11. Франка П. С++: учебный курс. - СПб.: Питер, 2001. - 528 с.: ил.

12. Фомина И.А. Методические указания по курсу «Язык программирования СИ» (темы: «Указатели», «Массивы», «Функции»). Фонд образовательных электронных ресурсов Нижегородского государственного университета. Регистрационный номер 101.05.08. met_ci.doc. http://www.unn.ru/books/resources.html, 2005

13. Шилдт, Герберт. Полный справочник по С, 4-е издание. : Пер. с англ. - М,: Издательский дом "Вильямс", 2002. - 704 с. : ил. - Парал.т ит. англ.

 

б) дополнительная литература

1. Бондарев В.М., Рублинецкий В.И., Качко Е.Г. Основы программирования. — Харьков: Фолио, Ростов н/Д: Феникс, 1997. — 368 с.

2. Вирт Н. Алгоритмы и структуры данных. — М.: Мир, 1989.

3. Вирт Н. Алгоритмы + структура данных = программы. — М.: Мир, 1985.

4. Керниган Б., Пайк Р. Практика программирования/ Пер. с англ. – СПб.: Невский диалект, 2001. – 381 с.

5. Окулов С.М. Основы программирования. — М.: ЮНИМЕДИАСТАЙЛ, 2002. — 424 с.

Материально-техническое обеспечение дисциплины (модуля) «Программирование (С)». Использование терминал - класса для выполнения лабораторных и самостоятельных работ (в стандартной комплектации). Программное обеспечение: интегрированная среда программирования Microsoft Visual Studio.


Оглавление

1. Содержательное описание курса. 3

1.1. Цели освоения дисциплины.. 3

1.2. Место дисциплины в структуре основных образовательных программ. 3

1.3 Формирование компетенций. 3

1.4 Требования к результатам освоения дисциплины «Программирование (С)» 4

2. Структура курса «Программирование (С)». 5

2.1 Плановая нагрузка. 5

2.2. Содержание разделов дисциплины.. 6

3. Лабораторный практикум. 7

3.1. Общие положения о выполнении лабораторных работ. 7

3.2. Тематические задания по курсу «Программирование (язык СИ). 8

3.3. Рекомендации по выполнению лабораторных работ. 22

4. Учебно-методическое обеспечение самостоятельной работы студентов. 28

4.1. Вопросы для контроля. 28

4.2. Критерии оценок. 29

4.3. Учебно-методическое и информационное обеспечение дисциплины «Программирование (С)». 29

 


 

Ирина АлександровнаФомина

 

УЧЕБНО-МЕТОДИЧЕСКОЕ ПОСОБИЕ









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


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