ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Филиал государственного образовательного учреждения высшего профессионального образ...
5 downloads
243 Views
555KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Филиал государственного образовательного учреждения высшего профессионального образования «Кузбасский государственный технический университет» в г. Прокопьевске
КАФЕДРА ИНФОРМАТИКИ
ЛАБОРАТОРНЫЙ ПРАКТИКУМ. ЯЗЫК ПРОГРАММИРОВАНИЯ С/C++. КОНСОЛЬНЫЕ ПРИЛОЖЕНИЯ.
Методическое пособие для студентов специальности 080801 «Прикладная информатика в экономике» Составитель: Н.В. Несоленов Утверждено на заседании кафедры Протокол № 5от 24.03.08
Прокопьевск 2008
Рецензент: д.т.н., профессор, заведующий кафедрой «Вычислительной техники и информационных технологий» ГУ КузГТУ А.Г. Пимонов
Содержание
ИСТОРИЯ И НАЗНАЧЕНИЕ ЯЗЫКА C/C++ ...........................4 ЯЗЫК ПРОГРАММИРОВАНИЯ C: ПРАКТИЧЕСКИЕ ЗАДАНИЯ .....................................................................................5 ЯЗЫК ПРОГРАММИРОВАНИЯ C: ЛАБОРАТОРНАЯ РАБОТА №1 ..................................................................................7 ЯЗЫК ПРОГРАММИРОВАНИЯ C++: ПРАКТИЧЕСКИЕ ЗАДАНИЯ ...................................................................................16 ЯЗЫК ПРОГРАММИРОВАНИЯ C++: ЛАБОРАТОРНАЯ РАБОТА №2 ................................................................................20 ЯЗЫК ПРОГРАММИРОВАНИЯ C++: ЛАБОРАТОРНАЯ РАБОТА №3 ................................................................................22 КОНТРОЛЬНЫЕ ВОПРОСЫ....................................................25
ИСТОРИЯ И НАЗНАЧЕНИЕ ЯЗЫКА C/C++ Разработчиком языка C++ является Бьерн Страуструп. В своей работе он опирался на опыт создателей языков Симула, Модула 2, абстрактных типов данных. Основные работы велись в исследовательском центре компании Bell Labs. Непосредственный предшественник C++ – язык C с классами – появился в 1979 году, а в 1997 году был принят международный стандарт C++, который фактически подвел итоги его 20-летнего развития. Принятие стандарта обеспечило единообразие всех реализаций языка C++. Язык C++ является универсальным языком программирования, в дополнение к которому разработан набор разнообразных библиотек. Поэтому, строго говоря, он позволяет решить практически любую задачу программирования. Тем не менее, в силу разных причин (не всегда технических) для каких-то типов задач он употребляется чаще, а для каких-то – реже. C++ как преемник языка C широко используется в системном программировании. На нем можно писать высокоэффективные программы, в том числе операционные системы, драйверы и т.п. Язык C – один из основных языков разработки трансляторов. Поскольку системное программное обеспечение часто бывает написано на языке C или C++, то и программные интерфейсы к подсистемам ОС тоже часто пишут на C++. Соответственно, те программы, даже и прикладные, которые взаимодействуют с операционными системами, написаны на языке C++. В целом надо сказать, что язык C++ в настоящее время является одним из наиболее распространенных языков программирования в мире.
4
ЯЗЫК ПРОГРАММИРОВАНИЯ C: ПРАКТИЧЕСКИЕ ЗАДАНИЯ Цель работы: Приобретение студентами практических навыков создания консольных программ используя среду Visual Studio .NET C++.
Требования в программам: Консольное приложение. Ввод исходных данных пользователем. Форматированный вывод результата работы программы.
Практикум: 1. В заданном интервале найти все натуральные числа, равные кубу суммы своих цифр. 2. Дан текст, в начале которого имеются пробелы и в котором имеются цифры. Найти порядковый номер максимальной цифры. Если максимальных цифр несколько, то следует определить номер первой из них. 3. Дана действительная матрица размера 6 x 7. Найти среднее арифметическое наибольшего и наименьшего значений ее элементов. 4. Дана действительная матрица размера n x m, в которой не все элементы равны нулю. Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент. 5. Дана матрица действительных чисел размером n x m. Найти среднее арифметическое элементов матрицы, расположенных на главной диагонали. Увеличить каждый элемент матрицы на соответствующую величину. 6. Дана матрица действительных чисел размером n x m. Найти суммы элементов матрицы, расположенных параллельно 5
главной диагонали. 7. Дано слово. Если длина его нечетная, то удалить среднюю букву, в противном случае - две средние буквы. 8. Дано слово. Удалить из него все повторяющиеся буквы, оставив их первые вхождения: в слове должны остаться только различные буквы. 9. Даны действительные числа а, b, с. Удвоить эти числа, если а > b > с, и заменить их абсолютными значениями, если это не так. 10. Известен год, номер месяца и число дней рождения человека, а также текущая дата: год, месяц и число. Определить возраст человека. 11. Известно, что разность любого натурального числа и суммы его цифр кратна 9. Проверить этот факт для чисел в заданном интервале. 12. Известны даты рождения двух человек (год, номер месяца и число) и текущая дата. Определить, кто из них моложе. 13. Найти два наименьших числа, которые начинаются на 5 и из которых, перенеся первую цифру в конец, можно получить новое число, в 5 раз меньшее, чем искомое. 14. Найти среднее арифметическое положительных элементов каждого столбца матрицы A(n, m), заданной целыми числами. 15. Натуральное число называется совершенным, если оно равно сумме всех своих простых делителей, например 6 = 1 + 2 + 3. Найти все совершенные числа в заданном интервале. 16. Определить количество положительных элементов каждого столбца матрицы A(n, m), заданной целыми числами. 17. Определить, сколько различных букв содержится в заданном слове. 18. Определить, являются ли значения целочисленных переменных М и N кратными трем. Если оба кратны трем, то вычислить их сумму, иначе вычислить их произведение. 6
19. Числа, которые можно одинаково прочитать слева направо и справа налево, называются палиндромами. Например, 21312,52325,4224. Проверить, является ли заданное число палиндромом. 20. Число делится на 11, если разность между суммой цифр, стоящих на нечетных местах, кратна 11. Проверить этот признак для всех натуральных чисел, значение которых не превосходит заданного m, и показать числа, кратные 11. ЯЗЫК ПРОГРАММИРОВАНИЯ C: ЛАБОРАТОРНАЯ РАБОТА №1 Тема: Табулирование функции одной переменной Цель работы: создать консольную программу табулирования функции одной переменой в среде Visual Studio .NET C++.
Основные сведения Требования к программе: Данные необходимые для табулирования вводятся с помощью параметров задаваемых из командой строки (параметры могут задаваться в любой последовательности) или интерактивно, если при запуске программы отсутствуют параметры. Пример первого варианта запуска: tabul.exe a=-1.2 b=3 n=30 В программе должны использоваться следующие обозначения параметров командой строки: a – начало диапазона, b – конец диапазона, n – количество точек табулирования, h – шаг табулирования. Вводимые данные должны проверяться. В случае неправильно введенных данных, в интерактивном режиме работы, программа на экран должна выводить 7
сообщение об ошибке и предоставлять пользователю возможность повторного ввода. В режиме командой строки в случае неправильно введенных параметров программа должна выдавать сообщение об ошибке с указанием причины ошибки и параметра вызвавшего ошибку и приостанавливать работу. Пользователь может задавать любой отрезок табулирования функции. По соответствующему ключу, к примеру «?», программа должна выводить на экран справку из текстового файла. В результате работы программы на экран должна выводиться следующая информация: функция, введенные параметры, таблица с результатами, состоящая из трех столбцов: номер точки, значение x, значение f(x). N X Y 1 4 4,6 2 5 6,7 3 6 7,8 Программа должна уметь обходить особые точки функции. В программе не должны использоваться глобальные переменные, все данные между функциями передаются исключительно через параметры функции. Программа должна быть структурированной и в ней должен присутствовать следующий минимальный набор функции: o главная функция; o математическая функция; o функция проверки строки на число; o функция вывода русского текста на экран; o функция считывания информации с клавиатуры с последующей проверкой на число; 8
o функция поиска нужного параметра в наборе параметров переданных через командную строку. Рекомендации к выполнению лабораторной работы: Математические функции библиотеки <math.h>: Функция Синтаксис функции на С float cosf(float x); cos x float sinf(float x); sin x float tanf(float x); tg x float asinf(float x); arcsin x float acosf(float x); arccos x float atanf(float x); arctg x float logf(float x); ln x float log10f(float x); lg x float powf(float x, float xy y); float expf(float x); ex float sqrtf(float x); x Проверку вводимых данных на число можно построить по следующему алгоритму: с помощью функции scanf вводиться строка символов; введенная строка преобразуется в число функцией atof; полученное число преобразуется назад в строку функцией sprintf; если поучившееся строка совпадает со строкой введенной пользователем, то пользователь ввел число.
9
Необходимые функции для работы со строками: Функция Описание библиотека <stdlib.h> double atof(const Преобразует в числовое char *str); значение аргумента str, если преобразование не удается, то возвращает 0. библиотека <stdio.h> int sprintf(char Преобразует значения *buffer, const char переменных описанных в *format [,argument] в строку [,argument]); *buffer, формат преобразования описан параметром *format (см. printf). библиотека <string.h> int strcmp(const Сравнивает строку *string1 char *string1, const со строкой *string2, char *string2); возвращает: 0, если *string1=*string2; *string2. char *strstr(const Ищет вхождение подстроки char *string, const *strCharSet в строке char *strCharSet); *string, если вхождение найдено, то возвращает указатель на первый символ вхождения в строке *string, если нет, то NULL. Если 10
*strCharSet имеет нулевую длину, то возвращается указатель на начало строки *string. int strlen(const Возвращает длину строки char *string); *string. char *strcpy(char Возвращает результат *strDestination, копирования строки const char *strSource в строку *strSource); *strDestination, результат также возвращается в переменную *strDestination. char *strcat(char Возвращает результат *strDestination, копирования строки const char *strSource в конец строки *strSource); *strDestination, результат также возвращается в переменную *strDestination. библиотека <windows.h> BOOL Выполняет перекодировку CharToOem(LPCTSTR текста lpszSrc из кодировки lpszSrc, LPSTR CP – 1251 в кодировку CP – lpszDst); 866, результат помещается в lpszDst. Пример некоторых функций для выполнения лабораторной работы:
Функция для вывода русского шрифта на экран в консольном режиме: 11
void Con(char *m){ char k[100]; CharToOem(m, k); printf(k); };
Функция для работы с файлом помощи:
void FiHe(){ вывод справки на экран из файла FILE *fhelp; fhelp = fopen("Help.txt", "r"); открытие файла для чтения if (fhelp == NULL){ Con("Файл справки \"help.txt\" найден!\a\n"); return; } while (!feof(fhelp)) вывод информации из файла printf("%c", getc(fhelp)); }
// // не
//
Фрагмент функции main():
... for (int i = 1; i < argc; i++){ // считывание параметров из коммандной строки switch (tolower(argv[i][0])){ // считывание параметра приведенного к нижнему регистру case 'a': // считывание параметра a argv[i] += 2; 12
if (atof(argv[i])!=0) {Nx = atof(argv[i]); break;} else {Con("Ошибка ввода! Введите число!\n\a"); return;} ... Варианты заданий: Функция: № Функция F(x) № Функция F(x) 1. 26 Ln( 1 x ) x Sin( x ) x e e x x 2. xx e - x 27 t g ( x ) x e x 3. 28 arcTg ( x ) x x x2 e x e x 5 - x/Sin(x) 3 - Sin(x) 4. x e 29 x e 5.
x6.5 e - Cos(x)
30
10 1-x
6.
31
1 x Lg( 1 x ) x
8.
( 1 x )( 1 x 2 ) 1 x 5 Ln( 1 x ) Sin2 ( x ) x x2 5 x Sin(x) (1-x) e
9.
Cos(3 arcCos(x))
34 Sin(2 arcSin(x))
7.
Ln( 1 x ) x
32 xx e - x Lg (1+x) 33 Cos(2 arcCos(x))
10. Sin(3 arcSin(x) )
35 tg(2 arctg(x))
11. tg (3 arctg(x) )
36 10 Ln (1+x) Sin(x)
13
12.
37 xR/(R-1) , R=(1+x)2
2 e1 x ln( 1 x 2 )
38 x3 / (1-Cos3x)
13. xR/(R-1) , R=(1+x)3 14.
Cos( x )
15.
Sin( x ) x e ( 1+x3) x
39
( 2x )
Sin( x ) x e ( 1+x2) x
Cos( x 2 ) 1 x 41 x Ln(x) e - x
40
1e x Sin( x ) 17. x2 Ln(x) e - x 16.
42 x Lg(x) 10 - x
18. x2 Lg(x) 10 - x
arcSin( x ) x e x 44 xx Ln(x) e - x
43
Sin( x ) x e ( 1+xx) x 20. arcSin( x ) x e Ln(2+x) x -x 21. arcSin ( x ) L n( 1 x ) 17 (1-e ) /2 Sin(x) -- x 42 x Ln(x) e 0 2 22. Ln2x - Cos(x-1) 2 2
19.
Cos( x ) L n( x ) x x 1 2 46 Cos(Ln(1+x)) ex 45
47 Cos(arcTg(x)) ex
23. Sin(Ln(1+x)/x) ex 2 -x 2.5 x/2 24. 18 (x -x+1)e -x 0 2 43 x Lg(x) 10 0 1 25. (x1.5-x+1)ex Sin (x/2) Ln(x) x e
( x3- x Cos 2 x + 1) ex 5 xxx 4 0.5 Sin(x) e 49 (x -x +1) 48
50
e x e x arcSin 1 x 2
Параметры к вариантам: arcSin(x) -x Вариант 19 -x 2 0 2 44Параметры 1---------Начало конец диапазона, количество e 0диапазона, 1 Lg(x) 10 x x
14
2
3
4
точек. Начало диапазона, конец диапазона, шаг (при выходе последней точки за конец диапазон точка не выводится в таблицу). Начало диапазона, конец диапазона, шаг (при выходе последней точки за конец диапазон точка выводится в таблицу). Начало диапазона, количество точек, шаг.
Работа выполняется студентом самостоятельно. По окончании выполнения для защиты работы студент готовит отчет о проделанной работе, содержащий описание работы и листинг программного кода. КОНТРОЛЬНЫЕ ВОПРОСЫ 1. Что такое область действия переменных? 2. Что такое область видимости переменных? 3. Объясните понятие: оператор расширения области видимости. 4. Что такое классы памяти? 5. Какие бывают виды операций? 6. Объясните понятие L-значения. 7. Что такое указатель. 8. Операция взятия адреса. 9. Операция разадресации. 10. Методика сложения и вычитания указателя с константой. 11. Методика разности двух указателей. 12. Что такое ссылка? 13. Что такое одномерный массив? 14. Что такое многомерный массив? 15. Объясните понятие С-строка. 16. Передача параметров по значению. 15
17. Передача параметров по адресу. 18. Передача параметров по ссылке. 19. Параметр со значением по умолчанию. 20. Передача массивов в качестве параметров. 21. Описание функции main(). 22. Описание функции с переменным числом параметров. 23. Методика перезагрузки функций. 24. Ввод/вывод информации. 25. Переименование типов. 26. Что такое перечисление? 27. Что такое структуры? 28. Что такое объединения? 29. Работа с динамической памятью. 30. Директивы предпроцессора. ЯЗЫК ПРОГРАММИРОВАНИЯ C++: ПРАКТИЧЕСКИЕ ЗАДАНИЯ Цель работы: Приобретение студентами практических навыков создания консольных программ в среде Visual Studio .NET C++, используя объектно-ориентированную парадигму языка C++.
Требования в программам: Консольное приложение. Ввод исходных данных пользователем. Форматированный вывод результата работы программы.
Практикум: 1. Описать класс двухмерного квадратного массива целых чисел (максимальный размер 100 на 100 16
элементов). В классе реализовать конструктор, создающий объект класса по размеру стороны квадрата и заполняющий элементы массива нулями, перезагрузить операцию вывода в поток, и описать метод подсчитывающий количество положительных элементов массива, лежащих ниже главной диагонали. Написать демонстрационную программу для этого класса. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. 2. Построить описание класса, содержащего информацию о почтовом адресе организации. Предусмотреть возможность раздельного изменения составных частей адреса, создания и уничтожения объектов этого класса. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. 3. Построить систему классов для описания плоских геометрических фигур: круг, квадрат, прямоугольник. Предусмотреть методы для создания объектов, перемещения на плоскости, изменения размеров и вращения на заданный угол. Написать программу, демонстрирующую работу с этими классами. Программа, должна содержать меню, позволяющее осуществить проверку всех методов классов. 4. Составить описание класса для определения одномерных массивов целых чисел (векторов). Предусмотреть возможность обращения к отдельному элементу массива с контролем выхода за пределы массива, возможность задания произвольных границ 17
индексов при создании объекта и выполнения операций поэлементного сложения и вычитания массивов с одинаковыми границами индексов, умножения и деления всех элементов массива на скаляр, вывода на экран элемента массива по заданному индексу и всего массива. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. 5. Составить описание класса для определения одномерных массивов строк фиксированной длины. Предусмотреть контроль выхода за пределы массива, возможность обращения к отдельным строкам массива по индексам, выполнения операций поэлементного сцепления двух массивов с образованием нового массива, слияния двух массивов с исключением повторяющихся элементов, а также вывод на экран элемента массива по заданному индексу и всего массива. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. 6. Написать класс для эффективной работы со строками, позволяющий форматировать и сравнивать строки, хранить в строках числовые значения и извлекать их. Для этого необходимо реализовать: перегруженные операторы присваивания и конкатенации; операции сравнения и приведения типов; преобразование в число любого типа; форматный вывод строки. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, 18
позволяющее осуществить проверку всех методов класса. 7. Описать класс «домашняя библиотека». Предусмотреть возможность работы с произвольным числом книг, поиска книги по какому-либо признаку (например, по автору или по году издания), добавления книг в библиотеку, удаления книг из нее, сортировки книг по разным полям. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. 8. Описать класс «записная книжка». Предусмотреть возможность работы с произвольным числом записей, поиска записи по какому-либо признаку (например,по фамилии, дате рождения или номеру телефона), добавления и удаления записей, сортировки по разным полям. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. 9. Описать класс «студенческая группа». Предусмотреть возможность работы с переменным числом студентов, поиска студента по какому-либо признаку (например, но фамилии, дате рождения или номеру телефона), добавления и удаления записей, сортировки по разным полям. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
19
10. Создать класс CPoint — точка. На его основе создать классы CcoloredPoint и CLine. На основе класса CLine создать класс CColoredLine и класс CPolyLine — многоугольник. Все классы должны иметь методы для установки и получения значений всех координат, а также изменения цвета и получения текущего цвета. Написать демонстрационную программу, в которой будет использоваться список объектов этих классов в динамической памяти. 11. Создать абстрактный класс CVehicle. На его основе реализовать классы CPlane, ССаr и CShip. Классы должны иметь возможность задавать и получать координаты, параметры средств передвижения (цена, скорость, год выпуска). Для самолета должна быть определена высота, для самолета и корабля — количество пассажиров. Для корабля — порт приписки. Написать программу, создающую список объектов этих классов в динамической памяти. Программа должна содержать меню, позволяющее осуществить проверку всех методов классов. ЯЗЫК ПРОГРАММИРОВАНИЯ C++: ЛАБОРАТОРНАЯ РАБОТА №2 Тема: Реализация методов ООП средствами Visual Studio .NET C++ на примере программы «Класс Матрица» Цель работы: описать класс «Матрица», инкапсулирующий в себе данные матрицы и операций для работы с ними. Создать демонстрационную программу в среде Visual Studio .NET C++, позволяющую на выбор пользователя выполнять арифметическое действие. Требования к программе: 20
Обязательное наличие в классе: конструктора по умолчанию; перегруженной операции «