Часть 2. составление и отладка программы. вычисление и обработка результатов
Порядок выполнения лабораторных работ
1 Изучите теоретический материал к лабораторной работе.
2 Ознакомьтесь с примерами программ на языке С.
3 Составьте алгоритм и программу по указанному варианту задания.
4 Отладьте программу и выполните расчеты на ЭВМ.
5 Оформите отчет о выполненной работе.
Содержаниеотчета
Отчет должен содержать:
1) цель работы;
2) условие задачи;
3) блок-схему алгоритма решения задачи;
4) Программу;
5) решение задачи (листинг) на ЭВМ;
6) краткие выводы по работе.
Лабораторная работа № 4
Изучение интегрированной среды С
(2 часа)
Цель работы: научиться использовать интегрированную среду С.
Теоретические сведения
Вид интегрированной среды и ее возможности зависят от типа и версии компилятора.
Пример
/* ЗАНЯТИЕ 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
Операторы присваивания, ввода, вывода.
Программирование линейного
Вычислительного процесса
Цель работы - выработать практические навыки в написании и отладке простых С-программ на линейный вычислительный процесс.
Теоретические сведения
Одной из основных задач при программировании является ввод и вывод данных. В С для этого применяют ряд функций – printf(), scanf(), cprintf(), ecvt(), fprintf(), fread(), fscanf(), hutc(), puts(), putw(), sprintf(), vprintf(). Функция printf() осуществляет форматированный вывод в поток stdout. Объявление функции находится в заголовочном файле <stdio.h>.
Синтаксис объявления функции
printf() #includ <stdio.h> printf (const char* format [,argument,…]);
В скобках [ ] указаны необязательные элементы спецификации.
Спецификация формата, определяющая вывод аргументов, имеет вид:
%[flags] [width] [.precision] [F/N/h/l/L] type
Функция scanf() - Осуществляет форматированный ввод из потока stdin
Синтаксис #include <stdio.h>
int scanf(const char *format[,adress, ...]);
Неотображаемыми символами являются пробел ( ), символ табуляции (\t), символ перехода на новую строку (\n) и другие управляющие последовательности. Если функция scanf() встречает неотображаемый символ в форматной строке, она будет считывать, но не сохранять всю последовательность символов вплоть до следующего отображаемого символа во входном потоке.
Отображаемыми символами являются все другие символы кода ASCII, за исключением символа процента (%). Если функция scanf() встречает в строке формата отображаемый символ, то она прочитает, и сохранит соответствующий ему символ.
Спецификации формата предписывают функциям scanf() осуществить чтение и преобразование символов из входного поля в значения определенного типа, затем запомнить их в память по адресу, указанному соответствующим адресным аргументом. Завершающий (последний) неотображаемый символ не читается (включая символ перехода на новую строку), если только он не описан явно в форматной строке.
Спецификация формата функции …scanf()имеет следующий вид
% [*] [widht] [F|N] [h|l|L] <type>
Спецификация формата начинается с символа процента (%). После этого символа следуют символы спецификации. Ниже представлено общее описание строки формата scanf(), управляющей формированием потока данных.
Символ или спецификатор | Чем управляет или что определяет |
*- подавление назначения width – ширина поля Size - - | Отменяет присваивание следующего поля ввода Максимальное число считываемых символов Изменяет размер по умолчанию адресного аргумента |
Символы типа
Символ | Ожидается на входе | Тип аргумента |
d D o O i I u U x X e, E f g, G s c | Десятичное целое Десятичное целое Восьмеричное целое Восьмеричное целое Десятичное целое Десятичное целое Десятичное целое без знака Десятичное целое без знака Шестнадцатеричное целое Шестнадцатеричное целое Число с плавающей запятой Число с плавающей запятой Число с плавающей запятой Строка символов Символ | Указатель на int (int *arg) Указатель на long (long *arg) Указатель на int (int *arg) Указатель на long (long *arg) Указатель на int (int *arg) Указатель на long (long *arg) Указатель на unsigned int (unsigned int *arg) Указатель на unsigned long (unsigned long *arg) Указатель на int (int *arg) Указатель на long (long *arg) Указатель на float (float *arg) Указатель на float (float *arg) Указатель на float (float *arg) Указатель на массив символов (char arg[ ]) Указатель на символ (char *arg) |
Пример
/* ЗАНЯТИЕ N 2
Разработал Сидоров К.В. */
#include <stdio.h> //Директива препроцессора (#include) включает
#include <conio.h> //Заголовочные файлы с расширением (.h)
#include <string.h>
int a; //Объявление глобальной переменной типа int
int main(void) //Главная функция
{//Начало составного оператора (блока, тела функции)
char c,buf[20]; //Объявление локальных переменных
char *pst="\"slovo\"";//Объявление локальной переменной c
float f=26.6; //инициализацией
double d;
clrscr(); //Функция очистки экрана
printf(" Ввод переменной типа char: "); //Функция вывода на экран
fflush(stdin); //Функция очистки буфера клавиатуры
scanf("%c",&c); //Функция ввода данных,
// & - операция взятия адреса
printf(" Вывод переменной типа char: ");
printf("%c\n",c);
printf("\n Ввод переменной типа int: ");
scanf("%d",&a);
printf(" \t Вывод переменной типа int\n");
printf(" Формат вывода (int): +6d #6o #8x\n");
printf("\t\t |%+6d|%#6o|%#8x|\n ",a,a,a);
printf("\n Ввод переменной типа int: ");
scanf("%d",&a);
printf("\t Вывод переменной типа int\n");
printf(" Формат вывода (int): -6d +6d #8d\n");
printf("\t\t |%-6d|%+6d|%#6d|\n",a,a,a);
printf("\n Вывод исходной cтроки: %s\n\n",pst);
printf(" Ввод cтроки в массив: ");
scanf("%s",buf);
printf(" Вывод cтроки из массива: %s\n\n",buf);
printf(" Ввод переменных типа float and double (через пробел):\n");
printf("\t\t ");
scanf("%f %lf",&f,&d);
printf("\t Вывод переменных типа float and double\n");
printf(" Формат вывода (float): 10.6f 10.6e +10.6g\n");
printf("\t\t |%10.6f|%10.6e|%+10.6g|\n",f,f,f);
printf(" Формат вывода (double): 10.8lf 10.8e 10.8g\n");
printf("\t\t |%10.8lf|%10.8e|%+10.8g|\n ",d,d,d);
getche(); //Функция ввода символа с клавиатуры
return 0; //Оператор возврата значения из функции (0)
} //Конец составного оператора (блока, тела функции)
/* Результат выполнения программы
Ввод переменной типа char: u
Вывод переменной типа char: u
Ввод переменной типа int: 78
Вывод переменной типа int
Формат вывода (int): +6d #6o #8x
| +78| 0116| 0x4e|
Ввод переменной типа int: 90
Вывод переменной типа int
Формат вывода (int): -6d +6d #8d
|90 | +90| 90|
Вывод исходной cтроки: "slovo"
Ввод cтроки в массив: символы 45!"#:$.;?%;?
Вывод cтроки из массива: символы 45!"#:$.;?%;?
Ввод переменных типа float and double (через пробел):
78.89 6778.0
Вывод переменных типа float and double
Формат вывода (float): 10.6f 10.6e +10.6g
| 78.889999|7.889000e+01| +78.89|
Формат вывода (double): 10.8lf 10.8e 10.8g
|6778.00000000|6.77800000e+03| +6778| */
Ход работы
1 Изучить теоретические сведения.
2 Выполнить загрузку интегрированной среды разработки С (IDE) для
Borland C, расположенной в каталоге N:\APL\BC\BIN\BC.EXE, из активной директории.
3Ознакомиться с форматом функций printf()иscanf().
4 Скопировать примеры для функций printf, scanf из встроенной помощи в активное окно и изучить их работу. Изучить синтаксические конструкции, приведенные во встроенной помощи.
5 Выполнить загрузку программ-примеров (N:\APL\TC\LAB\*.CPP),их корректировку с использованием различных возможностей функций printf (), scanf (),сохранение файлов и компиляцию.
6 Написать отчет и сделать выводы по работе.
7 Подготовиться к защите лабораторной работы, изучив вопросы по данной теме, изучив контрольные вопросы по теме.
Задание к лабораторной работе
Составьте программу для вычисления функции b=f(x,y,z), где z=j(x,y). Вид функции и исходные данные приведены в таблице 1.
Таблица 1
Вар. | f(x,y,z) | j(x,y) | x | y |
e|x-y|(tg2z)x | -4,52 | 0,75 | ||
2,87 | 0,84 | |||
1,82 | 18,25 | |||
5,34 | 3,85 | |||
-2,75 | -1,42 | |||
1,54 | -3,26 | |||
1,82 | 18,23 | |||
-0,85 | 1,25 | |||
0,12 | -8,75 | |||
1,58 | 3,42 | |||
0,42 | -0,87 | |||
-15,24 | 4,67 | |||
6,55 | -2,78 | |||
0,84 | 0,65 | |||
1,12 | 0,87 | |||
0,27 | 4,38 | |||
6,35 | 7,32 | |||
0,42 | 1,23 | |||
4,32 | -0,54 | |||
0,83 | 2,38 | |||
-0,93 | -0,25 | |||
3,25 | 4,12 | |||
-0,72 | -1,42 | |||
3,98 | -1,63 | |||
2sin(px+y) | 3,91 | -0,51 | ||
-0,62 | 5,54 | |||
-4,58 | 2,32 | |||
-3,44 | 5,28 | |||
5,48 | 2,25 |
Лабораторная работа №6
Разветвляющийся вычислительный процесс с различными логическими условиями: оператор if... else, условная операция (?:).
Цель работы: Изучить реализацию в языке ветвящихся вычислительных процессов . Научиться писать программы, используя операторы: ветвления if...else, переключения switch в паре с операторомbreak,оператор перехода goto, тернарную условную операцию(?:).
Теоретические сведения
Разветвляющийся вычислительный процесс применяется в тех случаях, когда необходимо произвести выбор одного из вариантов дальнейших действий или вычислений в зависимости от текущих значений переменных и логических условий. Например, произвести вычисление по одной или по другой формуле.
Оператор if…else(если…иначе)
Формат оператораif…elseприведен ниже:
if(<выражение>) <оператор 1>
[else <оператор2>]
Действия оператора зависят от значения выражения. Реализация различных возможностей выполняется следующими способами. Если <выражение> в скобках не равно Æ(“Истинно”), то будет выполнятся <оператор1>. В противном случае, если указанное <выражение> равно Æ (“Ложно”), то будет выполняться <оператор2> в блоке else,если он присутствует.
В теле оператора ifможет находиться один или более операторов. Если должны выполняться два или более операторов, их необходимо заключить в операторные скобки: "{"и"}". <Выражение> представляет собой запись логического условия или условий. Например: 1) if(i<=j)...; 2) if(size= =a)...; 3) if(t>10 && v<3) ..; 4) if(a){…}else{…}; 5) if(!a){…}else{…}.
В первом случае <выражение>истинно, если значение переменнойi будет меньше или равно значению переменной j; во втором случае условие будет истинно, если значения переменных size и a будут равны; в третьем выражении истина будет соблюдаться, когда переменная tбудет больше десяти “И” (&&)переменная v будет меньше трех. В четвертом случае первый блок будет выполняться при ане равном Æ, в противном случае выполняется блок после else. В пятом выполняются действия, обратные, указанные в четвертом варианте. Вместо переменных можно использовать выражения, которые будут непосредственно вычисляться, например: if ( (i+2)/3 < 4*j)...выделение. Основные операции, которые ставятся между сравниваемыми величинами, следующие :
= = - знак "равно" (Не путать с присваиванием "="(!)); ! = - знак "не равно"; < -знак "меньше"; | <= - знак "меньше или равно"; > - знак "больше"; > = - знак "больше или равно". |
Основные логические операции, которые ставятся между сравниваемыми выражениями (если их два как в примере 3 или более), следующие :
!- операция "НЕ". Пример: if ( !(num % 2) )... // истина -еслиnumнечетно.
&& - операция "И". Пример 3 (см. выше).
||- операция "ИЛИ".Пример: if ( i+n*2<l || i%2=0)...
Детально логические операции будут рассмотрены в следующей лабораторной работе. Ниже приведен фрагмент программы, который выполняет следующие действия: запрашивает на ввод три числа и выдает в результате сравнения наименьшее из них. Оператор if…elseдопускает возможность вложенности при ветвлении, что обеспечивает гибкость реализации логики и компактность записи операторов.
Пример
...
printf("Ввести три числа через пробел: ");
scanf(" %d%d%d ", &a, &b, &c);
if (a<=b && a<=c) printf("\ n Наименьшее: %d", a);
else
if (b<=a && b<=c) printf("\ n Наименьшее: %d", b);
else printf("\ n Наименьшее: %d", c);
...
Ход работы
1 В соответствии с индивидуальным заданием разработать программу с применением операторов ветвления, выбора варианта, разрыва, перехода (при составлении программы использовать операторы if…else).
2 Набрать программу и устранить ошибки.
3 Изучить работу операторов, различные возможности их применения.
4 Получить результаты.
5 Оформить отчет и сделать выводы по работе, изучив контрольные вопросы по теме.
Индивидуальное задание к лабораторной работе №5
Вычислить значение функции
y = f(x), где
ì f1(z), если z < 0;
x = í f2(z), если 0 £ z £ 8;
î f3(z), если z > 8;
z = cos(с).
Значения функций приведены в таблице 5.1.
Таблица 5.1 - индивидуальное задание
Вар. | f(x) | f1(z) | f2(z) | f3(z) | c |
x2+8x-6 | z3-3z2 | zln(z) | Ez-e-z | 5,1 | |
X3lnx2 | e-z+3z | ln|z| | Cosz+z2 | 5,4 | |
X1/4+sinx | 2z-ln|z| | tgz-2z | Sin3z | 4,1 | |
X4+2sinx2 | sinz+tgz | cos3z+3/z | Z2+lnz2 | 3,2 | |
Cosx3 | z2+2sinz | lnz+2z | Ez+1/z | 4,7 | |
Sinx+2lnx | 2z+tgz | lnz4+2z | Cosz+2z | 1,3 | |
Sin4x2 | sinz2-z3 | 2sinz2 | 1,6 | ||
Tgx-4x3 | 1/cos2z | z-ln|z| | Z3+sinz | 1,5 | |
Lnx-e2x | z2+ez | cos4z/z3 | Tg(z+1/z) | 2,7 | |
2x-lnx | 2cosz+1/z | z3-2ln|z| | Tg2z+z3 | 3,8 | |
3x-sinx | 3tg3z | 1/cos4z | E2z+sinz | 1,6 | |
4x2+cosx | 3z/sinz | z2+2sinz | 2z-ln|z| | 2,4 | |
+cosx | z2+lnz2 | ez+1/z | Z4-sinz | 4,1 | |
x1/3+2x | ln|cosz| | 2z+ez | Tg2z | 2,5 | |
Sin4x+2x | z5/sin2z | e-2z+tgz | Cos4z+z1/3 | 3,2 | |
Tg4x+1/x | z/sinz1/5 | 2ztg3z | Z +8 | 1,4 | |
Ln(1/x) | zsin2z-8 | lnsinz0,8 | -2,5 | 2,3 | |
e2x+4x | cos(p /4)-z | 1/(ez+1) | arctg(z+3) | 4,1 | |
Cosx4+x/2 | sin(z+30° ) | lncos(pz/6) | e-tg(z-2) | 3,2 | |
2tgx+ex | z+cos(p +z) | z3+z1/3 | Z4-lnz | 2,8 | |
2lnx2 | arccosz2 | sinz+lncosz | Z3-sin(p x) | 1,7 | |
Cos2x/3 | z2+ln(z+4) | e(z-5)+sinz | 2,2 | ||
1/tgx4 | e-4z+2+z2 | cos(z1/3+2) | Sin(p +4z2) | 5,6 | |
e2x-x3 | tg(z2+ ) | ln(sinz+5) | Z4+z2-cosz | 3,4 | |
Tgx-2lnx | arcsin(z+3) | z3-z2+cosz | Ln(z3+4z) | 2,5 | |
Cosx4+x/2 | lnsinz0,8 | cos(p /4)-z | Z/sinz1/5 | 3,7 | |
Ln(x+x2) | 2ztg3z | sin(p +4z2) | Z3+z1/3 | 2,6 | |
Cosx4+2x | tg(z+1/z) | e2z+sinz | Cosz1/5 | 3,8 | |
Sin4x+2x | z2+lnz2 | cos3z+3/z | Cos(p /4)-z | 5,8 | |
3ln(x2+5) | z4-lnz | sinz+tgz | Sinz+lncosz | 3,5 |
Контрольные вопросы для подготовки и самостоятельной работы
1Какой тип должно иметь <выражение> в операторахifи switch?
2Можно ли использовать оператор goto для передачи управления наelse, метку case…; default:?
3С помощью каких операторов можно досрочно завершить выполнение операторов if…else, switch?
4 Можно ли использовать в качестве <выражения> в оператореswitch указатель?
5 Можно ли использовать в качестве константного <выражения> в операторе switchконстанту?
6 Обязательно ли использовать операторbreakв операторе switch? Каково его действие? Что происходит при отсутствии break?
7 Какому из вложенных операторов if относится else при наличии и отсутствии операторных скобок ¢¢{¢¢и ¢¢}¢¢.
8 Какие типы операндов допустимы в условной операции (? :)?
9 Объясните работу операторов в приведенных примерах.
10 Как объявить и использовать метки в программе?
Лабораторная работа 7