Автор работы: Пользователь скрыл имя, 18 Октября 2012 в 00:26, лабораторная работа
Первая лабораторная работа по программированию на языке C в VISUAL STUDIO.
В28
Журнал регистрации аварий: | |||
Название предприятия |
Категория |
Ущерб от аварии (т. руб) |
Срок простоя (дн) |
Птицефабрика |
1 |
12.7 |
4 |
Теплоцентраль |
1 |
0.711 |
1 |
Автосервис |
2 |
1770.15 |
38 |
Примечание: указываются только прямые затраты, связанные с ликвидацией последствий аварии |
В29
Ведомости о присвоении квалификации | |||
Фамилия |
Год рождения |
Оценка результатов экзаменов |
Присвоен уровень квалификации |
Шевченко |
1970 |
4.33 |
6 |
Розанов |
1975 |
5.1 |
5 |
Панасюк |
1966 |
3.07 |
3 |
Примечание: показана итоговая оценка по результатам экзаменов по теоретической и практической подготовке |
5. Пример решения задачи (вариант 30)
5.1. Разработка алгоритма решения
5.1.1. Общий метод решения.
В таблице, приведенной в индивидуальном задании, первая строка - общий заголовок таблицы, вторая - заголовки столбцов таблицы. Фактические данные составляют третью, четвертую и пятую строки. Шестая строка - примечания.
Программа должна начинаться с ввода фактических данных. Для удобства оператора перед вводом на экран должно выводиться приглашение, в котором перечисляется, какие именно данные ожидает программа. За одно приглашение-ввод будет вводиться одна строка фактических данных таблицы. Т.е., приглашение - ввода должно повторяться трижды. Введенные данные будут сохранятся в переменных программы.
На втором этапе программа выполняет вывод данных на экран. Каждая строка таблицы может выводиться одним оператором вывода. Среди строк, которые выводятся, будут строки без переменных значений (заголовки и линии) и строки с переменными значениями (строки с фактическими данными).
Для формирования наглядного табличного вида можно применять символы '|' и '-'.
Поскольку алгоритм программы чисто линейный, схему алгоритма мы не приводим
5.2. Определение переменных программы
Определение переменных является первой и самой главной задачей нашей программы. Для каждой переменной нужно подобрать такой тип, который бы обеспечивал представление в памяти ее значения с достаточным диапазоном и достаточной точностью.
Название. Во всех фактических значениях этот столбец является символьной строкой из 8 символов. Т.е. для представления его в памяти переменные, в которых хранятся значения этого столбца, должны быть объявлены как:
char name1[9], name2[9], name3[9];
дополнительный символ резервируется
для обозначения конца
Школа. Эти данные являются одним символом. Их объявление:
char sch1, sch2, sch3;
Количество монахов. Эти данные являются целыми числами в диапазоне 10 - 220. Этот диапазон перекрывается диапазоном возможных значений типа unsigned short (диапазон этого типа: 0 - 255). Т.е. объявление соответственных переменных:
unsigned short cnt1, cnt2, cnt3;
Площадь земель. Это число с дробной частью, следовательно, соответствующие переменные должны быть переменными с плавающей точкой. Точность данных - всего один знак после точки, поэтому для их представления будет достаточно типа float:
float sq1, sq2, sq3;
5.3. Разработка текста программы
Начинаем разработку текста программы с заголовка главной функции main():
int main(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 */
/*Типы данных и ввод-вывод */
/*Вариант 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("----------------------
printf("|Буддийские монастыри Японии периода Нара |\n");
printf("|---------------------
printf("| Название | Школа | Количество|Площадь земли|\n");
printf("|| | монахов| (га)|\n");
printf("|----------|-------|--
/* вывод строк фактических данных */
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("|---------------------
printf("| Примечание: Т - Тэндай; С - Сингон; |\n");
printf("| Д - Дзедзицу|\n");
printf("----------------------
return 0;
}
5.4. Отладка программы
При отладке программы можно использовать пошаговый режим отладки с отслеживанием значений переменных - тех, которые вводятся. Если возникнут проблемы с вводом переменных, есть смысл вводить каждую переменную отдельным оператором.
Аккуратный формат таблицы достигается
несколькими запусками программ
5.5. Результаты работы программы
При работе програмы на екран было выдано следущее:
1. Введите: название, школу, количество, площадь > Тодайдзи Т 220 368.8
2. Введите: название, школу, количество, площадь > Якусидзи С 50 54.7
3. Введите: название, школу, количество, площадь > Дайаедзи Д 10 12.2
------------------------------
|Буддийские монастыри Японии периода Нара |
|-----------------------------
| Название | Школа | Количество|Площадь земли|
|| | монахов | (га)|
|----------|-------|----------
| Тодайдзи | Т | 220 | 368.8 |
| Якусидзи | С | 50 | 54.7 |
| Дайаедзи | Д | 10 | 12.2 |
|-----------------------------
| Примечание: Т - Тендай; С - Сингон; |
| Д - Дзедзицу |
------------------------------
5.6. Выводы
При выполнении лабораторной работы изучены вопросы:
Приложение 1. Базовые типы данных языка С
Название типа |
Пояснения |
Диапазон значений |
short |
Краткое целое число |
-128 . . . 127 |
unsigned short |
Краткое целое число без знака |
0 . . . 255 |
int |
Целое число |
-32768 . . . 32767 |
unsigned int |
Целое число |
0 . . . 65535 |
long |
Длинное целое число |
-230 . . . 230-1 |
unsigned long |
Длинное целое число без знака |
0 . . . 231-1 |
char |
Один символ |
символы кода ASCII |
char[ ] |
Строка |
|
float |
Число с плавающей точкой |
3.4 10-38 . . . 3.4 10+38 |
double |
Число с плавающей точкой двойной точности |
1.7 10-308 . . . 1.7 10+308 |
Приложение 2. Некоторые функции стандартного ввода-вывода
Функции стандартного ввода - вывода описаны в файле stdio.h.
printf() - форматный вывод на экран:
int printf(char *format, <список вывода>);
Первый параметр является символьной строкой, которая задает спецификации формата. Остальные параметры - перечисление переменных и выражений, значения которых выводятся. Каждая спецификация формата имеет вид (параметры в квадратных скобках необязательны):
%[flags][width][.prec][F|N|h|
где |
type - |
тип спецификации |
d или i |
целое десятичное число со знаком | |
u |
десятичное число без знака | |
x |
целое 16-ричное число без знака | |
f |
число с плавающей точкой | |
e |
число в E-форме | |
g |
число с плавающей точкой или в E-форме | |
c |
один символ | |
s |
строка | |
% |
символ % | |
flags - |
признак выравнивания: | |
+ или пусто |
выравнивание по правому краю | |
- |
выравнивание по левому краю | |
width - |
целое число - общая ширина поля. Если это число начинается с цифры 0, вывод дополняется слева нулями до заданной ширины. В заданную ширину входят все символы вывода, включая знак, дробную часть и т.п. | |
prec - |
целое число, количество знаков после точки при выводе чисел с плавающей точкой | |
F - |
соответственный элемент списка вывода является дальним указателем | |
N - |
соответственный елемент списка вывода является близким указателем | |
l - |
соответствующий елемент списка вывода является long int или double |