ПРАКТИЧЕСКАЯ ЧАСТЬ
В примерах будем приводить только тексты программ и результаты их выполнения. Программы должны быть написаны в Visual Studio (см. тему 1). Пример 1. Написать программу ввода символа, строки, действительных и целых чисел. Действительные числа сложить, целые перемножить. Для действительных чисел необходимо использовать типы float и double. Программный код решения примера
В объявлении символьного массива str[79+1] в методических целях сделано напоминание, что для строки следует предусмотреть символ ее завершения, т. е. '\0'. В определении переменных типа float добавлены суффиксы F. Рис. 2.1. Результат программы с базовыми типами данных Добавим считывание данных с помощью функции scanf_s(). В результате получим следующую программу.
Результат выполнения видоизмененной программы представлен на рис. 2.2. В начале функции int main(void) сделано объявление переменных, которые будут использоваться в программе. Каждый тип переменных объявлен через запятую. В частности, char str[80] означает массив символов, в квадратных скобках указано их число. Функции printf() выводят либо только сообщения, либо еще заданные переменные соответствующих типов. Функция _flushall() используется для того, чтобы устранить пробельную строку, образовавшуюся после действия либо функции getchar(), либо функции scanf_s(). В некоторых компиляторах функция _flushall() используется без префиксного нижнего подчеркивания. Функция gets_s() позволяет считывать символы с наличием разделителей, в частности с пробелами. Следует обратить внимание на формат записи функций scanf_s(). Если сканируются числа или одиночные символы, то их присваивание переменным, которые были объвлены через соответствующие типы данных, осуществляется с помощью взятия адреса этих переменных, т. е. с помощью символа &, например scanf_s("%c",&ch, 1). При сканировании массива символов, т. е. при сканировании строки, символ & не используется. Обращение к адресу осуществляется с помощью указателей (будут рассмотрены позднее). Имя массива само по себе является указателем. Для сканирования чисел типа double в функции scanf_s() используется спецификатор l.
Задание 1 1. В качестве вводимых символов используйте начальные буквы своей фамилии (латинского алфавита). В отчет вставьте полученный результат. 2. В качестве вводимой строки используйте свои фамилию и имя (буквами латинского алфавита). В отчет вставьте полученный результат. 3. Подсчитайте количество символов, на которые производит отступ от левого края символ табуляции \t. Для вывода строки предусмотрите табулированный вывод с помощью спецификатора формата %xs, где х – требуемое число позиций отступа. 4. Объявите массив символов в размере одного символа и введите строку с помощью функции gets_s(), превышающую число 1. 5. Запустите программу без функций _ flushall(). В отчет вставьте полученный результат. 6. Ввод чисел произведите со знаком «+» и «–». Введите только целые числа. Введите только вещественные числа. 7. Сложите два вещественных числа типа float с десятью знаками после десятичной точки. Выведите и проанализируйте результат сложения. Объясните результат. 8. Изучите работу функции puts() и примените ее вместо функции printf(), которая использовалась в режиме сообщений. В отчет вставьте полученный результат. Объясните результат. Пример 2. Написать программу вычисления алгебраических выражений с приведением типов char, int, float, double. Возможный программный код решения примера:
В программу включена библиотека математических функций math.h, в которой sqrt() – функция извлечения квадратного корня, log10() – логарифмическая функция по основанию 10, log() – функция натурального логарифма. Все эти функции возвращают результат типа double и вычисляют от числа (выражения) также типа double. Рис. 2.3. Вычисления с приведением типов Задание 2 1. В качестве вводимого символа используйте первую букву своей фамилии (буквами латинского алфавита). В отчет вставьте полученный результат. 2. Переменную у задайте в виде у = 6. 3. Вычислите заданный квадратный корень без явного приведения типов. 4. Определите переменные с суффиксами U, F, L и произведите с ними арифметические действия. 5. Вычислите логарифм от числа 10Х по основанию 2Х, где Х – номер компьютера (1, 2, ¼), на котором выполняется лабораторная работа. Выполните тестовый пример для проверки вычислений, т. е. для заданного основания подберите число, от которого логарифм с заданным основанием даст целое число. Например, log10(100.0) = 2.0000. Пример 3. Написать программу вычисления площади круга и длины его окружности по заданному радиусу, вводимому пользователем с клавиатуры, а также вывода на консоль максимальных значений чисел типа int, float и double. Для решения примера следует воспользоваться математической библиотекой компилятора, т. е. включить в программу заголовочные файлы <math.h>, <limits.h>, <float.h>. Программный код решения примера
В программу включена константа _USE_MATH_DEFINES для работы с числом M_PI (p). Остальные константы можно найти в справочной документации компилятора системы MS Visual Studio 2010. Функция scanf_s() определена в компиляторе языка С системы MS Visual Studio 2010. С ней компилятор обеспечивает безопасную работу и не выдает предупреждений. Рис. 2.4. Пример использования предопределенных констант Задание 3 1. Напишите программу по вычислению площади эллипса. Данные для расчета должны вводиться с клавиатуры пользователем. 2. Рассчитайте величины lg(exp(100)) и ln(exp(100)), пользуясь стандартными функциями математической библиотеки (math.h). 3. Используя справочную документацию компилятора, в программе предусмотрите вывод минимальных значений указанных типов данных. 4. Используя справочную документацию компилятора, в программе предусмотрите вывод максимальных и минимальных значений для следующих типов даных: char, short int, long int.
Контрольные вопросы 1. Для каких типов данных используются суффиксы при инициализации переменных? 2. Чем отличаются функции printf() и puts() при консольном выводе информации? 3. Для чего в программах на С используется заголовочный файл math.h? 4. С какими разделителями может происходить считывание информации с консоли при использовании функции gets_s()? 5. Какой тип данных возвращает функция gets_s() при считывании информации? 6. Как осуществляется считывание последовательности различных типов данных с консоли с помощью одной функции scanf_s()? 7. Как выводится на консоль последовательность различных типов данных при использовании одной функции printf()? 8. Как осуществляются автоматическое и принудительное приведение типов в языке С? 9. Какие машинно зависимые типы данных имеются в языке С? 10. К каким типам данных относятся следующие литеры: 5, 5.0, 5.0F, "5", '5', 5u, 5L, 5.0L?
|