Часть 2. составление и отладка программы. вычисление и обработка результатов

Порядок выполнения лабораторных работ

1 Изучите теоретический материал к лабораторной работе.

2 Ознакомьтесь с примерами программ на языке С.

3 Составьте алгоритм и программу по указанному варианту задания.

4 Отладьте программу и выполните расчеты на ЭВМ.

5 Оформите отчет о выполненной работе.

Содержаниеотчета

Отчет должен содержать:

1) цель работы;

2) условие задачи;

3) блок-схему алгоритма решения задачи;

4) Программу;

5) решение задачи (листинг) на ЭВМ;

6) краткие выводы по работе.

Лабораторная работа № 4

Изучение интегрированной среды С

Цель работы: научиться использовать интегрированную среду С.

Теоретические сведения

Вид интегрированной среды и ее возможности зависят от типа и версии компилятора.

Пример 15

/* ЗАНЯТИЕ N 1

Разработал Петров Ю.В. */

/* <-Это начало многострочного комментария

Это окончание многострочного комментария -> */

// <-Это однострочный комментарий

#include <stdio.h> //Директива препроцессора (#include) включает

#include <conio.h> //заголовочные файлы с расширением (.h)

void main(void) //Главная функция

{ //Начало составного оператора (блока, тела функции)

clrscr(); //Функция очистки экрана

printf("\n\t Здравствуй,\n"); //Функция вывода на экран

printf("\n мир!"); // '\n' '\t' -управляющие

// последовательности

} //Конец составного оператора (блока, тела функции)

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

Здравствуй,

мир! */

Ход работы

1 Выполнить загрузку интегрированной среды разработки С (IDE) для Turbo C, расположенной в каталоге N:\APL\TC\BIN\TC.EXE, из активной директории.

2 Изучить особенности IDE (структуру меню и подменю), а также повторить возможности текстового редактора (типа Brief), изучить «горячие» клавиши.

3 Выполнить загрузку программ-примеров (N:\APL\TC\LAB\*.CPP), их корректировку, сохранение и компиляцию.

4 Изучить непонятные синтаксические конструкции с использованием встроенной помощи. Скопировать пример из помощи в активное окно и изучить его работу.

5 Повторить выполнение пунктов 1-4 для интегрированной среды разработки Borland C (N:\APL\BC\BIN\BC.EXE).

6 Сравнить возможности IDE Turbo C и Borland C.

7 Написать отчет и сделать выводы по работе, изучив контрольные вопросы по теме.

Вопросы для контроля и самостоятельной работы

1 Как осуществляется запуск и выход из IDE?

2 Как осуществляется настройка путей для подключения внешних файлов?

3 Перечислите режимы компиляции. Что они обозначают?

4 Как производится подключение библиотеки графических функций?

5 Как осуществляется открытие и закрытие окон, переход между окнами, копирование текста из окна в окно?

6 Как осуществляется модификация имени файла?

7 Что такое проект? Как проиизводится создание, дополнение и выполнение проекта?

8 Почему загрузка IDE осуществляется из активной директории?

9 Назовите «горячие » клавиши и их назначение.

10 Как выделить комментарии вС?

11 Как подключиться заголовочные файлы, что они содержат?

12 Что обозначается словом main()?

Лабораторная работа 5

Операторы присваивания, ввода, вывода.

Программирование линейного

Вычислительного процесса

Цель работы - выработать практические навыки в написании и отладке простых С-программ на линейный вычислительный процесс.

Теоретические сведения

Присваивание (выражение и оператор). Символ "=" в языке Си обозначает бинарную операцию, у которой в выражении должно быть два операнда - левый (обычно переменная) и правый (обычно выражение). Если z - имя переменной, то

z = 2.3 + 5.1

есть выражение со значением 7.4. Одновременно это значение присваивается и переменной z. Только в том случае, когда в конце выражения с операцией присваивания помещен символ ";", это выражение становится оператором присваивания. Таким образом,

z = 2.3 + 5.1;

есть оператор простого присваивания переменной z значения, равного 7.4.

Тип и значение выражения с операцией присваивания определяются значением выражения, помещенного справа от знака '='. Однако этот тип может не совпадать с типом переменной из левой части выражения. В этом случае при определении значения переменной выполняется преобразование (приведение).

Так как выражение справа от знака '=' может содержать, в свою очередь, операцию присваивания, то в одном операторе присваивания можно присвоить значения нескольким переменным, т.е. организовать "множественное" присваивание, например:

c=x=d=4.0+2.4;

Здесь значение 6.4 присваивается переменной d, затем 6.4 как значение выражения с операцией присваивания "d=4.0+2.4" присваивается х и, наконец, 6.4 как значение выражения "x=d" присваивается с. Естественное ограничение - слева от знака '=' в каждой из операций присваивания может быть только леводопустимое выражение (имя переменной).

В языке Си существует целый набор "составных операций присваивания" {ранг 14). Каждая из составных операций присваивания объединяет некоторую бинарную логическую или арифметическую операцию и собственно присваивание. Операция составного присваивания является основой оператора составного присваивания:

имя переменной ор=выражение;

где ор - одна из операций *, /, %, +, -, &, Ù, |, «, ». Если рассматривать конструкцию "ор=" как две операции, то вначале выполняется ор, а затем '='. Например, х*=2; z+=4; i/=x+4*z;

При выполнении каждого из этих операторов операндами для операции ор служат переменная из левой части и выражение из правой. Результат присваивается переменной из левой части.

Таким образом, первый пример можно рассматривать как обозначение требования "удвоить значение переменной х"; второй пример - "увеличить на 4 значение переменной z"; третий пример - "уменьшить значение переменной i в (x+4*z) раз". Этим операторам эквивалентны такие операторы простого присваивания:

х=х*2; z=z+4; i=i/(x+4*z) ;

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

a=b/a; x=z%x.

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

Перечислим операции присваивания, отметив, что существуют одна простая операция присваивания и ряд составных операций:

= - простое присваивание: присвоить значение выражения-операнда из правой части операнду левой части. Пример: Р = 10.3 - 2*х;

*= - присваивание после умножения: присвоить операнду левой части произведение значений обоих операндов. Р *= 2 эквивалентно Р = Р * 2;

/= - присваивание после деления: присвоить операнду левой части частное от деления значения левого операнда на значение правого. Р /= 2.2 - d эквивалентно Р=- Р / (2.2 - d);

%= - присваивание после деления по модулю: присвоить операнду левой части остаток от целочисленного деления значения левого операнда на значение правого операнда. N %= 3 эквивалентно N = N % 3;

= - присваивание после суммирования: присвоить операнду левой части сумму значений обоих операндов А += В эквивалентно А = А + В;

-= - присваивание после вычитания: присвоить операнду левой части разность значений левого и правого операндов. X -= 4.3 - Z эквивалентно X = X - (4.3 - Z);

Обратите внимание, что для всех составных операций присваивания форма присваивания Е1 ор= Е2 эквивалентна Е1 = El op (E2), где ор - обозначение операции.

Запятая в качестве операции (ранг 15)

Несколько выражений, разделенных запятыми ",", вычисляются последовательно слева направо. В качестве результата сохраняются тип и значение самого правого выражения. Например, если переменная х имеет тип int, то значением выражения (х=3, 3*х) будет 9, а переменная х примет значение 3.

Стандартные математические функции (файл math.h):

Функция Краткое описание
abs нахождение абсолютного значения выражения типа int
acos вычисление арккосинуса. Аргументы этой и других тригонометрических функций задаются в радианах
asin вычисление арксинуса
atan вычисление арктангенса х
atan2 вычисление арктангенса от у/х
cabs нахождение абсолютного значения комплексного числа
ceil нахождение наименьшего целого, большего или равного х
_clear87 получение значения и инициализация слова состояния сопроцессора и библиотеки арифметики с плавающей точкой
_control87 получение старого значения слова состояния для функций арифметики с плавающей точкой и установка нового состояния
cos вычисление косинуса
cosh вычисление гиперболического косинуса
exp вычисление экспоненты
fabs нахождение абсолютного значения типа double
floor нахождение наибольшего целого, меньшего или равного х
fmod нахождение остатка от деления х/у
_fpreset повторная инициализация пакета плавающей арифметики
frexp вычисляет для х вещественную мантиссу m и целое n так, что x=m*2n
hypot вычисление гипотенузы
labs нахождение абсолютного значения типа long
ldexp вычисление х*2e
log вычисление натурального логарифма
log10 вычисление логарифма по основанию 10
matherr управление реакцией на ошибки при выполнении функций математической библиотеки
modf разложение х на дробную и целую часть
pow вычисление х в степени у
sin вычисление синуса
sinh вычисление гиперболического синуса
sqrt нахождение квадратного корня
_status87 получение значения слова состояния с плавающей точкой
tan вычисление тангенса
tanh вычисление гиперболического тангенса

В библиотеке определен также ряд констант, таких как M_PI (число π), M_E (основание натурального логарифма e) и др.

Функция форматированного вывода.Достаточно часто для вывода информации из ЭВМ в программах используется функция printf(). Она переводит данные из внутреннего кода в символьное представление и выводит полученные изображения символов результатов на экран дисплея. При этом у программиста имеется возможность форматировать данные, т.е. влиять на их представление на экране дисплея.

Возможность форматирования условно отмечена в самом имени функции с помощью литеры fв конце ее названия (print formatted).

Оператор вызова функции printf() можно представить так:

printf(форматная строка, список _аргументов);

Форматная строка ограничена двойными кавычками и может включать произвольный текст, управляющие символы и спецификации преобразования данных. Список аргументов (с предшествующей запятой) мо­жет отсутствовать. Например:

#include <stdio.h> void main( )

{ printf ("\n Здравствуй, Мир!\n");

}

Директива #include <stdio.h>включает в текст программы описание (прототип) библиотечной функции printf(). (Если удалить из текста программы эту препроцессорную директиву, то появятся сообщения об ошибках и исполнимый код программы не будет создан. Среди параметров функции printf() есть в этом примере только форматная строка (список аргументов отсутствует). В форматной строке два управляющих символа '\n' - "перевод строки". Между ними текст, который выво­дится на экран дисплея:

Здравствуй, Мир!

Первый символ '\n' обеспечивает вывод этой фразы с начала новой строки. Второй управляющий символ '\n' переведет курсор к началу следующей строки, где и начнется вывод других сообщений (не связанных с программой) на экран дисплея.

Для изображения в программе соответствующих символьных констант используются комбинации из нескольких символов, имеющих графическое представление. Каждая такая комбинация начинается с символа ‘\’ (обратная косая черта - backslash). Такие наборы литер, начинающиеся с символа ‘\’, в литературе по языку Си называют управляющими последовательностями. Ниже приводится их список:

'\n'- перевод строки;

'\t' - горизонтальная табуляция;

'\r' - возврат каретки (курсора) к началу строки;

'\\' - обратная косая черта \;

'\n''- апостроф (одиночная кавычка);

'\'" - кавычка (символ двойной кавычки);

'\0'-нулевой символ;

'\а' - сигнал-звонок;

'\b'- возврат на одну позицию (на один символ);

'\f' - перевод (прогон) страницы;

'\v'- вертикальная табуляция;

'\?' - знак вопроса.

Итак, произвольный текст (не спецификации преобразования и не управляющие символы) непосредственно без изменений выводится на экран. Управляющие символы (перевод строки, табуляция и т.д.) позволяют влиять на размещение выводимой информации на экране дисплея.

Спецификации преобразования данных предназначены для управления формой внешнего представления значений аргументов функции printf(). Обобщенный формат спецификации пре­образования имеет вид:

%фпажки ширина _поля.точность модификатор спецификатор

Среди элементов спецификации преобразования обязатель­ными являются только два — символ '% ' и спецификатор.

В задачах вычислительного характера будем использовать спецификаторы:

d - для целых десятичных чисел (тип int);

u -для целых десятичных чисел без знака (тип unsigned);

f- для вещественных чисел в форме с фиксированной точкой (типы float и double);

е - для вещественных чисел в форме с плавающей точкой (с мантиссой и порядком) - для типов double и float.

В список аргументов функции printf() включают объекты, значения которых должны быть выведены из программы. Это выражения и их частные случаи - переменные и константы. Количество аргументов и их типы должны соответствовать последовательности спецификаций преобразования в форматной строке. Например, если вещественная переменная summa имеет значение 2102.3, то при таком вызове функции

printf("\n summa=%f", summa);

на экран с новой строки будет выведено: summa=2102.3

После выполнения операторов

float с, е ;

int к;

с=48.3; к=-83; e=16.33;

printf ("\nc=%f\tk=%d\te=%e", с, к, e);

на экране получится такая строка:

с=48.299999 к=-83 e=1.63300e+01

Здесь обратите внимание на управляющий символ \t (табуляция). С его помощью выводимые значения в строке результата отделены друг от друга.

Для вывода числовых значений в спецификации преобразования весьма полезны "ширина поля" и "точность".

Ширина_поля - целое положительное число, определяющее длину (в позициях на экране) представления выводимого значения.

Точность - целое положительное число, определяющее количество цифр в дробной части внешнего представления вещественного числа (с фиксированной точкой) или его мантиссы (при использовании формы с плавающей точкой).

Пример с теми же переменными:

printf ("\nc=%5.2\tk=%5d\te=%8.2f\te=%11.4e", c, k , e, e) ;

Результат на экране:

с=48.30 к= -83 e= 16.33 e= 1.6330e+01

В качестве модификаторов в спецификации преобразования используются символы:

h - для вывода значений типа short int;

I - для вывода значений типа long;

L - для вывода значений типа long double.

Ввод данных.Для ввода данных с клавиатуры ЭВМ в программе будем использовать функцию (описана в заголовочном файле stdio.h):

scanf {форматная_строка, список_аргументов);

Функция scanf() выполняет "чтение" кодов, вводимых с клавиатуры. Это могут быть как коды видимых символов, так и управляющие коды, поступающие от вспомогательных клавиш и от их сочетаний. Функция scanf() воспринимает коды, преобразует их во внутренний формат и передает программе. При этом программист может влиять на правила интерпретации входных кодов с помощью спецификаций форматной строки. (Возможность форматирования условно отмечена в названии функции с помощью литеры fв конце имени.)

И форматная строка, и список аргументов для функции scanf()обязательны. Форматную строку для функции scanf() будем формировать из спецификаций преобразования вида:

Наши рекомендации