Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Определение переменных программы
Определение переменных является первой и самой главной задачей нашей программы. Для каждой переменной нужно подобрать такой тип, который бы обеспечивал представление в памяти ее значения с достаточным диапазоном и достаточной точностью. Название. Во всех фактических значениях этот столбец является символьной строкой из 8 символов. Т.е. для представления его в памяти переменные, в которых хранятся значения этого столбца, должны быть объявлены как: char name1[9], name2[9], name3[9]; дополнительный символ резервируется для обозначения конца символьной строки. Школа. Эти данные являются одним символом. Их объявление: char sch1, sch2, sch3; Количество монахов. Эти данные являются целыми числами в диапазоне 10 - 220. Этот диапазон перекрывается диапазоном возможных значений типа unsignedshort (диапазон этого типа: 0 - 255). Т.е. объявление соответственных переменных: unsignedshort cnt1, cnt2, cnt3; Площадь земель. Это число с дробной частью, следовательно, соответствующие переменные должны быть переменными с плавающей точкой. Точность данных - всего один знак после точки, поэтому для их представления будет достаточно типаfloat: float sq1, sq2, sq3; Разработка текста программы Начинаем разработку текста программы с заголовка главной функции main(): intmain(void) Далее открывается тело функции и в нее включается описание переменных (см. п.5.2). Кодовая часть программы начинается с приглашения - вывода строки-константы: printf("1.Введите: название, школу, количество, площадь >"); за которым считываются данные, вводимые оператором: scanf("%s %c %d %f",name1, &sc1, &cnt1, &sq1); Поскольку описания этих функций хранятся в файле stdio.h, включаем этот файл в начало программы: #include<stdio.h> При вводе строка вводится по спецификации типа %s, один символ - по спецификации типа %c, целое число - по спецификации типа %d, число с плавающей точкой - по спецификации типа %f. Спецификации разделяются пробелами, т.е. и данные при вводе должны разделятся пробелами или переходом на новую строку. В списке ввода перед всеми элементами кроме того, который вводится по %s, ставится знак &. Приглашение-ввод повторяется трижды, с разными переменными в списке ввода. Для формирования вывода следует подсчитать ширину каждого столбца. Ширина первого столбца определяется размером фактических данных в строке - 9 символьных мест, с учетом пробелов в начале и в конце - 11. Ширина остальных столбцов определяется шириной текста в заголовках столбцов и составляет соответственно 7, 11 и 13 символьных мест. Учитывая вертикальные линии ширина строки составляет 47 знакомест. Первая строка - горизонтальная линия, которая состоит из символа '-', повторенного 47 раз. Вторая строка - общий заголовок, дополненный до ширины 47 пробелами. Третья строка - еще одна горизонтальная линия. Четвертая и пятая строки - заголовки столбцов, каждый из них имеет установленную ширину. Шестая строка - еще одна горизонтальная линия. Наконец, строки с седьмой до девятой - фактические даные. В каждой строке выводятся значения набора переменных для одной строки. Например: printf("| %9s | %c | %-3d | %5.1f |\n", name1, sc1, cnt1, sq1); Значения имени выводятся по спецификации типа %s с шириной 9. Значения школы выводятся по спецификации типа %c. Поскольку значения в этом столбце выводится по центру столбца, перед и после него ставятся пробелы. Значения количества выводятся по спецификации типа %d с шириной 3, а площадь - %f с общей шириной 5 и одним знаком после точки. Значения в этих столбцах дополняются до нужной ширины пробелами. В столбце 3 ставится признак выравнивания по правому краю. Остальные четыре строки выводятся как текстовые константы. Общие рекомендации 1. В функциях printf и scanf для каждой переменной указывайте спецификацию формата, соответствующую ее типу. Не забывайте, что в scanf передается адрес переменной, а не ее значение. 2. Не смешивайте в одной программе ввод/вывод с помощью классов (в стиле C++) и с помощью функций библиотеки (в стиле С). Полный текст программы приведен ниже. /*******************************************************/ /* Лабораторная работа №2 */ /* Типы данных и ввод-вывод */ /* Пример выполнения. Вариант №30. */ /*******************************************************/ #include<stdio.h> int main(void) { char name1[9], name2[9], name3[9]; char sc1, sc2, sc3; unsigned short cnt1, cnt2, cnt3; float sq1, sq2, sq3; /* Введение фактических данных*/ printf("1.Введите: название, школу, количество, площадь >"); scanf("%s %c %d %f",name1, &sc1, &cnt1, &sq1); printf("2.Введите: название, школу, количество, площадь >"); scanf("%s %c %d %f",name2, &sc2, &cnt2, &sq2); printf("3.Введите: название, школу, количество, площадь >"); scanf("%s %c %d %f",name3, &sc3, &cnt3, &sq3); /* Вывод таблицы */ /* вывод заголовков */ printf("-----------------------------------------------\n"); printf("|Буддийские монастыри Японии периода Нара |\n"); printf("|---------------------------------------------|\n"); printf("| Название | Школа | Количество|Площадь земли|\n"); printf("| | | монахов| (га) |\n"); printf("|----------|-------|-----------|-------------|\n"); /* вывод строк фактических данных */ printf("| %9s | %c | %3d | %-5.1f |\n", name1, sc1, cnt1, sq1); printf("| %9s | %c | %3d | %-5.1f |\n", name2, sc2, cnt2, sq2); printf("| %9s | %c | %3d | %-5.1f |\n", name3, sc3, cnt3, sq3); /* выводпримечаний */ printf("|---------------------------------------------|\n"); printf("| Примечание: Т - Тэндай; С - Сингон; |\n"); printf("| Д - Дзедзицу |\n"); printf("-----------------------------------------------\n"); return 0; } Отладка программы При отладке программы можно использовать пошаговый режим отладки с отслеживанием значений переменных - тех, которые вводятся. Если возникнут проблемы с вводом переменных, есть смысл вводить каждую переменную отдельным оператором. Аккуратный формат таблицы достигается несколькими запусками программы с последующим выравниванием столбцов по результатам запуска. Результаты работы программы При работе программы на экран было выдано следующее: 1. Введите: название, школу, количество, площадь >Тодайдзи Т 220 368.8 2. Введите: название, школу, количество, площадь >Якусидзи С 50 54.7 3. Введите: название, школу, количество, площадь >Дайаедзи Д 10 12.2
---------------------------------------------- |Буддийские монастыри Японии периода Нара | |--------------------------------------------| | Название | Школа | Количество|Площадь земли| | | | монахов | (га) | |----------|-------|-----------|-------------| | Тодайдзи | Т | 220 | 368.8 | | Якусидзи | С | 50 | 54.7 | | Дайаедзи | Д | 10 | 12.2 | |--------------------------------------------| | Примечание: Т - Тендай; С - Сингон; | | Д - Дзедзицу | ---------------------------------------------- Выводы При выполнении практического занятия изучены вопросы:
Контрольные вопросы 1. Для каких типов данных используются суффиксы при инициализации переменных? 2. Чем отличаются функции printf() и puts() при консольном выводе информации? 3. При использовании функции gets_s()с какими разделителями может происходить считывание информации с консоли? 4. Какой тип данных возвращает функция gets_s() при считывании информации? 5. Как осуществляются автоматическое и принудительное приведение типов в языке С(С++)? Приложение 1. Базовые типы данных языка С++
Приложение 2. Некоторые функции стандартного ввода-вывода Функции стандартного ввода - вывода описаны в файле stdio.h. printf() - форматный вывод на экран: intprintf(char *format, <списоквывода>); Первый параметр является символьной строкой, которая задает спецификации формата. Остальные параметры - перечисление переменных и выражений, значения которых выводятся. Каждая спецификация формата имеет вид (параметры в квадратных скобках необязательны): %[flags][width][.prec][F|N|h|l]type где:
scanf() - форматный ввод с клавиатуры: intscanf(char *format, <списокввода>); Первый параметр является символьной строкой, которая задает спецификации формата (см. функцию printf()). Остальные параметры - перечисление адресов переменных, в которые вводятся данные. В этом списке перед именами всех переменных, кроме тех, которые вводятся по спецификации типа %s, должен стоять символ &. В таких средах разработки как MS VisualStudio 2008 и 2010 рекомендуется для безопасной работы применять функциюscanf_s(). Для этой функции при чтении символа следует указать его размер в байтах. Например, scanf_s("%c", &ch, 1). В VisualStudio 2010 тип данных char занимает 1 байт. putchar() - вывод одного символа на экран: intputchar(intch); Параметр функции - код символа, который выводится. При успешном выполнении функция возвращает этот же код, при неуспешном - EOF. getchar() - ввод одного символа с клавиатуры: intgetchar(void); Функция возвращает код введенного символа. puts() - вывод строки символов на экран: intputs(char *string); Параметр функции - указатель на начало той строки, из которой выводятся данные. Функция возвращает количество выведенных символов. gets() - ввод строки символов с клавиатуры: char *gets(char *string); Параметр функции - указатель на начало той строки, в которую вводятся данные. Функция возвращает тот же самый указатель.Функция gets() читает символы (включая пробелы) из стандартного потока stdin и помещает их в массив символов, адресуемый указателем *str (далее это массив символов). Символы читаются до тех пор, пока не встретится разделитель строк или значение EOF. Для реализации EOF на клавиатуре следует набрать одновременно Ctrl+Z. Вместо разделителя строк в конец строки вставляется нулевой символ, свидетельствующий о ее завершении. Следует учесть, что нет способа ограничить количество символов, которое прочитает функция gets(). Поэтому массив, адресуемый указателем *str, может переполниться, и тогда программа выдаст непредсказуемые результаты [23]. В MicrosoftVisualStudio 2010 рекомендуется использовать gets_s(), чтобы не было предупреждений.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2018-05-10; просмотров: 265. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |