close

Вход

Забыли?

вход по аккаунту

?

Лаба 2

код для вставкиСкачать
Лабораторная работа №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 %
l
f
\
n"
, -
b/a);
getchar();
return
0;
}
Задание.
Создать текст программы из примера №1, откомпилировать программу и разобраться в том
,
какие переменные отно
сятся к какому кл
ассу памяти. Согласно таблице 3
выбрать нужный вариант и разработать программу.
Таблица
3
Номер варианта
Задание
1
, 9, 17, 25
Создать программу, определяющую действительные корни квадратного уравнения, если они существуют. Коэффициент
ы должны вводит
ь
ся с клавиатуры.
2, 10, 18, 26
Создать программу, вычисляющую площадь треугольника по формуле , где –
полупериметр треугольника, –
длины сторон треугольника. Длины сторон должны вводит
ь
ся с клавиатуры. Прогр
амма должна обрабатывать, в том числе, и некорректно введнные данные.
3
, 11, 19, 27
Создать программу, выдающую по номеру дня недели его название (нумерация начинается с понедельника). 4
, 12, 20, 28
Создать программу, выдающую по номеру месяца название
сезона, к которому он относится.
5
, 13, 21, 29
Создать программу, находящую решения линейной системы уравнений с вещественными коэффициентами. Коэффициенты вводить с клавиатуры.
6, 14, 22, 30
Создать программу, вычисляющую значение по формуле . Значения переменных вводить с клавиатуры.
Программа должна обрабатывать, в том числе, и некорректно введнные данные.
7
, 15, 23, 31
Пусть две прямые задаются в виде . Разработать программу определяющую пересекаются ли эти прямые и в каких точках. Значения переменных вводить с клавиатуры.
8
, 16, 24, 32
Разработать программу, которая выводит в порядке возрастания три числа вводимых с клавиатуры.
Требования к отчету
Отчет должен содержать:
1)
конспект теоретической части,
2)
лабораторное за
дание,
3)
блок
-
схему алгоритма,
4)
результаты выполнения программ.
Автор
maximrazor
Документ
Категория
Без категории
Просмотров
178
Размер файла
66 Кб
Теги
лаба
1/--страниц
Пожаловаться на содержимое документа