Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 2 Программирование ветвящихся алгоритмов

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 9.11.2024

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

Программирование ветвящихся алгоритмов.

Введение

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

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

Спецификаторы хранения

Имеется 4 спецификатора хранения, поддерживаемые в С. Это

extern

static

register

auto

Они говорят компилятору, как должны храниться переменные. Спецификаторы предшествуют объявлению переменной. В общем случае это выглядит так:

спецификатор_хранения тип имя_переменной;

extern

Поскольку С позволяет выполнять раздельную компиляцию модулей для большой программы, в целях ускорения компиляции и помощи управлению большими проектами, должны быть способы передачи информации о глобальных переменных файлам программы. Решение заключается в объявлении всех глобальных переменных в одном файле и использовании при объявлении в других файлах слова extern.

Таблица 1

Файл 1

Файл 2

int x, y;

char ch;

int main(void)

{

.

.

.

}

void func1(void)

{

      x = 23;

}

extern int x, y;

extern char ch;

void func22(void)

{

    x = y/10;

}

void func23(void)

{

   y = 10;

}

Имеется другой вариант использования extern. Когда используется глобальная переменная внутри функции, находящейся в том же файле, где происходит объявление глобальной переменной, то можно объявлять её как extern.

static

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

Статические локальные переменные

Когда static применяется к локальной переменной, это приводит к тому, что компилятор создаёт долговременную область для хранения переменной почти таким же способом, как это делается для глобальной переменной. Ключевое различие между статической локальной и глобальной переменными заключается в том, что статическая локальная переменная остаётся известной только в том блоке, в котором она была объявлена.

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

int series(void)

{

static int series_num;

series_num = series_num+23;

return(series_num);

}

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

Статические глобальные переменные

Когда оператор static применяется к глобальной переменной, он сообщает компилятору о необходимости создания глобальной переменной, которая будет известна только в файле, где она объявлена. Это означает, что, даже если переменная является глобальной, другие подпрограммы в других файлах не будут знать о ней. Таким образом, не возникает побочных эффектов.

auto

Спецификатор auto может быть задан только при определении объектов блока, например, в теле функции. Этим объектам память выделяется при входе в блок и освобождается при выходе из него. Вне блока объекты класса auto не существуют.

register

Спецификатор register просит, чтобы компилятор сохранил переменную способом, позволяющим осуществлять наибыстрейший доступ. Для целых чисел и символов это обычно подразумевает размещение не в памяти, а в регистрах процессора. Для других типов переменных компилятор может использовать другие способы для уменьшения времени доступа. Компилятор может просто проигнорировать  данную просьбу.

Нельзя применять register к глобальным переменным. Также, поскольку регистровая переменная может быть сохранена в регистре процессора, нельзя получить адрес регистровой переменной. (Данное ограничение присутствует только в С, но не в С++.)

Пример 1.

#include <stdio.h>

float pi=3.141593;

int s0;

int s2=5;

int main()

{

 extern int s0;

 extern char s1;

 int s2(4);

 // Инициализация по умолчанию:

printf("\n s0=%d", s0);

 // Явная инициализация:

printf("\n s1=%c", s1);

 // Внутренняя переменная

printf("\n s2=%d", s2);

 // Внешняя переменная

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

getchar();

 return 0;

}

char s1='@';

//Конец программы

Условный оператор if

Синтаксис полной формы условного оператора:

if ( логическое выражение ) оператор1;

else оператор2;

Если логическое выражение истинно, т.е. не равно нулю, то выполняется оператор1, иначе выполняется оператор2.

Синтаксис сокращенной формы условного оператора:

if ( логическое выражение ) оператор;

Оператор выполняется только в том случае, если логическое выражение не равно нулю, т.е. истинно.

Под логическим выражением понимается совокупность операций отношений и логических операций. Основные логические операции приведены в табл.2.

Таблица 2

Основные логические операции

Операция

Значение

Пример

!

Логическое НЕ

!EOF

= =

Равно

value==0

!=

Не равно

value!=0

<

Меньше

i<count

>

Больше

i>count

> =

Больше или равно

i>=count

< =

Меньше или равно

i<=count

||

Логическое ИЛИ

!a || b

&&

Логическое И

a>8 && c<5

Часто, каждая из альтернативных возможностей оператора if требует выполнения более одного оператора. В этом случае необходимо заключить группу операторов в фигурные скобки { }.

Список операторов, заключенный в фигурные скобки, называется блоком.

Оператор  множественного выбора

Когда необходимо выбрать один из нескольких вариантов, можно воспользоваться конструкцией if else if…else или оператором множественного выбора switch.

Синтаксис оператора switch:

switch ( выражение )  

{

   case константное выражение: оператор или группа операторов;

     break;   

   case константное выражение: оператор или группа операторов;

     break;

   case константное выражение: оператор или группа операторов;

     break;

         . . . . . . . .

    defaulf: оператор или группа операторов;

}

Результат вычисленного выражения сравнивается с каждым из константных выражений. Если находится совпадение, то управление передается оператору, связанному с данным case. Исполнение продолжается до конца тела оператора switch или пока не встретится оператор break, который передает управление из тела switch оператору, следующему за switch. Оператор или группа операторов, стоящий после default, выполняется, если выражение не соответствует ни одному из константных выражений в case.

Константные выражения должны быть целого или символьного типа. Если нескольким константным выражениям соответствует один и тот же оператор, то возможна следующая запись:

switch выражение

{

     case константное выражение:

     case константное выражение:

     case константное выражение: оператор или группа операторов;

       break;

};

Пример 2

Данная программа решает линейное уравнение с действительными коэффициентами. Коэффициенты должны вводиться в виде десятичной записи, точность решения определяется типом данных double.

#include <stdio.h>

int main()

{

 double a,b;

printf("Programm solve equation a*x+b=0.\n");

printf("Enter coef a ");

scanf("%lf", &a);

printf("Enter coef b ");

scanf("%lf", &b);

printf("You enter a=%e, b=%e\n", a, b);

 if(a==0){

 if(b==0) printf("Root is any value\n");

 else printf("Haven't root\n");

}

 else printf("Root is %lf\n", -b/a);

getchar();

 return 0;

}

Задание.

Создать текст программы из примера №1, откомпилировать программу и разобраться в том, какие переменные относятся к какому классу памяти.  Согласно таблице 3 выбрать нужный вариант и разработать программу.

Таблица 3 

Номер варианта

Задание

1, 9, 17, 25

Создать программу, определяющую действительные корни квадратного уравнения, если они существуют. Коэффициенты должны вводиться с клавиатуры.

2, 10, 18, 26

Создать программу, вычисляющую площадь треугольника по формуле , где p – полупериметр треугольника, a,b,c – длины сторон треугольника.  Длины сторон должны вводиться с клавиатуры. Программа должна обрабатывать, в том числе, и некорректно введённые данные.

3, 11, 19, 27

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

4, 12, 20, 28

Создать программу, выдающую по номеру месяца название сезона, к которому он относится.

5, 13, 21, 29

Создать программу, находящую решения линейной системы уравнений с вещественными коэффициентами. Коэффициенты вводить с клавиатуры.

6, 14, 22, 30

Создать программу, вычисляющую значение по формуле . Значения переменных вводить с клавиатуры. Программа должна обрабатывать, в том числе, и некорректно введённые данные.

7, 15, 23, 31

Пусть две прямые задаются в виде y=a*x+b. Разработать программу определяющую пересекаются ли эти прямые и в каких точках. Значения переменных вводить с клавиатуры.

8, 16, 24, 32

Разработать программу, которая выводит в порядке возрастания три числа вводимых с клавиатуры.

Требования к отчету

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

  1.  конспект теоретической части,
  2.  лабораторное задание,
  3.  блок-схему алгоритма,
  4.  результаты выполнения программ.




1. на тему- Дееспособность и ее виды Студент заочного отделения
2. Тема- ПРАВИЛА ПОВЕДЕНИЯ И ДЕЙСТВИЯ НАСЕЛЕНИЯ В ОЧАГАХ ПОРАЖЕНИЯ В
3. Курсовая работа- Учет нематериальных активов.html
4. домом Реддлей хотя семья Реддлей давно уже не жила здесь
5. Тема 14 Организационнометодические основы оперативного управления производством ОУП 14
6. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата історичних наук Ужгород ~ 2
7. .Общая характеристика иллюстрации.
8. Методические рекомендации Дзержинск ~ 2012 ББК 74
9. тематических методов и информационных технологий Сахабиева Г
10. Материалам по обоснованию Градостроительного плана земельного участка ГПЗУ для осуществления строительс
11. Использование геохимии при прогнозировании разведке и эксплу атации месторождений.
12. Современное состояние логистики и её развитие во многом сформировалось благодаря бурному развитию и внед
13. Буданов Историческим основанием права наследства служат союзы лиц устраиваемые самой природойсемьи и р
14. темам обслуживания 2 Адрес ячейки записанный в виде ldquo;знак доллараG5rdquo; называется- смешанный 3 Адр
15. направление усилий компании на обслуживание одной или нескольких групп потребителей отличающихся общност
16. МГТУ им Баумана Карта технологического процесса механической обработки черте
17. Форма государства Форма государства показывает политическое структурное и территориальное внешнее ус
18. Постоянно общаясь друг с другом на работе сотрудники со временем устают от такого общения
19. Учет производственных затрат на предприятии
20. Архитектурное материаловедение.html