Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Упражнение 3.doc
Скачиваний:
2
Добавлен:
17.11.2019
Размер:
178.69 Кб
Скачать

Упражнение №3

Структуры данных.

Основные структурные элементы программы.

Переменные.

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

Память компьютера можно рассматривать как ряд ячеек. Все ячейки последовательно пронумерованы. Эти номера называют адресами памяти. Переменная занимает одну или несколько ячеек, в которых можно хранить некоторое значение.

При определении переменной в языке Си необходимо предоставить компилятору информацию о её типе, например int или char. Благодаря этой информации компилятору будет известно, сколько места нужно зарезервировать для неё и какого рода значения будут храниться в этой переменной.

Например объявление переменной с именем myVariable :

int myVariable;

Операторы отношения.

Данные операторы используются для выяснения равенства или неравенства двух значений. Выражения сравнения всегда возвращают значения true(истина) или false(ложь). Операторы представлены в таблице:

Название

Оператор

Пример

Возвращаемое значение

Равно

==

7 == 11

30 == 30

False

true

Не равно

! =

7 != 11

30 != 30

True

false

Больше

>

5 > 2

2 > 2

True

false

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

>=

5 > =2

2 >= 2

True

true

Меньше

<

5 < 2

2 < 2

False

false

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

<=

5 < =2

2 < =2

False

true

Если одна целочисленная переменная a содержит значение 7, а другая целочисленная переменная b содержит значение 11, то используя оператор равенства (==) можно узнать равны ли эти переменные:

a == b;

Это выражение возвращает значение false(ложь), так как эти переменные не равны.

Замечание: не путайте оператор присваивания (=) с оператором равенства (==). Случайное использование не того оператора может привести к ошибке, которую будет сложно обнаружить.

Оператор условия.

Обычно программа выполняется строка за строкой. Оператор if позволяет проверить условие (например, равны ли переменные) и изменить ход выполнения программы, направив её в другое русло, которое будет зависеть от результата сравнения.

Простейшая форма оператора if имеет следующий вид:

if (условие)

выражение;

Условие в круглых скобках может быть любым выражением, возвращающим булевый результат. Если это выражение возвращает false, то последующий оператор пропускается, если возвращает значение true, то оператор выполняется. Например:

if(a < b)

cout << ”a больше б” ;

при выполнении данного участка кода будет проведена проверка выражения a < b. Если а действительно меньше b, то результатом выражения будет true(истина) и выражение cout << ”a больше б” выполниться. Если a окажется больше чем b или равно ему, то выражение после оператора условия проигнорируется и выполнено не будет.

Блок выражений, заключённый в фигурные скобки, эквивалентен одному выражению, поэтому за строкой оператора if можно использовать целые блоки выражений:

if(a == b)

{

}

Ключевое слово else используется для команд, которые должны выполняться при ложности условия:

if (a == b)

{

a=5; // данный оператор выполняется, когда a равно b

}

else

{

a=2 // данный оператор выполняется, когда a не равно b

}

Пример 1.

С клавиатуры вводятся два числа. Произвести сравнение, вывести результат на экран.

Задание 1.

С клавиатуры вводится номер месяца. На монитор должна быть выведена строка с названием этого месяца.

Функции.

Функция – это подпрограмма, которая может манипулировать данными и возвращать некоторое значение. Каждая программа на языке Си имеет по крайней мере одну функцию main(). Во время начала выполнения программы данная функция вызывается автоматически. Функция main() может вызывать другие функции. Каждая функция обладает собственным именем, когда оно встречается в программе, управление переходит к телу данной функции. Этот процесс называется вызовом функции. По возвращении из функции выполнение возобновляется со строки, следующей после вызова функции. Данный процесс показан на рисунке:

Функции могут возвращать значения. После обращения к функции она может выполнить некоторые действия, а затем в качестве результата своей работы послать назад некоторое значение. Оно является возвращаемым значением. Тип этого значения обязательно объявляется.

Запись int myFunction(); объявляет, что функция myFunction возвращает целочисленное значение типа int.

В функцию можно также и посылать некоторые значения. Описание посылаемых значений называется списком параметров.

Данная запись: void myFunction(int a, int b); означает, что функция не возвращает никакого значения, но принимает два числа типа int в качестве параметров. Фактические значения, передаваемые в функцию называются аргументами : myFunction(10,20). Здесь переменная a инициализируется значением 10, а переменная b инициализируется значением 20.

Ниодну функцию нельзя вызвать в программе, если она не была предварительно объявлена. Существует 3 способа объявления функции:

- прототип функции записывается в файл, затем он включается в файл вашей программы с помощью #include;

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

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

Прототип функции состоит из следующих частей:

[тип возврата] Имя функции(параметры);

Определение функции состоит из заголовка функции и её тела.

Заголовок функции

{

тело функции

}

Например:

int myFunction(int a, int b)

{

a:=a+1;

b:=b*b;

return a; // возвращение вычисленного значения функцией

}

Циклы.

Для решения ряда задач часто требуется многократное выполнение одних и тех же действий.

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

while(условие)

{

тело цикла;

}

Цикл while является циклом с предусловием. Это означает, что тело цикла выполняется только после проверки условия выхода из цикла:

Вторым вариантом организации циклов является связка do while. Выполнение последовательности операций продолжается до тех пор, пока условие выхода из цикла не станет ложным, однако проверка данного условия выполняется после прохождения тела цикла.

do

{

тело цикла

}

while(условие);

Таким образом do…while является циклом с постусловием и его тело выполняется хотябы один раз.

Третьим вариантом организации цикла является конструкция For. Данный оператор объединяет три операции, необходимых для работы цикла: инициализация, проверка условия выхода из цикла и изменения счётчика цикла. Выражение for состоит из самого этого оператора, за которым в круглых скобках следуют три выражения, устанавливающие параметры выполнения цикла. Выражения в круглых скобках разделяются точкой с запятой.

for(выражение1; выражение2; выражение 3)

{

тело цикла

}

Первое выражение устанавливает начальное значение счётчика цикла. Второе выражение определяет условие продолжения цикла. Третье выражение производит изменение значения счётчика цикла.

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

Пример 2.

Написать программу, которая выводит на экран слово Looping! пять раз.

Задание 2.

Написать программу, которая выводит на экран целые числа от 0 до 9, используя цикл for.

Указатели.

Указатель – это переменная, в которой записан адрес ячейки памяти компьютера. Каждая переменная программы имеет свой адрес, для хранения которого можно использовать указатель на эту переменную. Пусть определена переменная int myVariable. Чтобы объявить указатель, для хранения адреса этой переменной нужно набрать:

int *pmyVariable=0;

Это означает, что pmyVariable будет содержать адрес значения типа int. Указатели, которым присвоены нулевые значения называются пустыми. Для избежания ошибок необходимо всегда инициализировать указатели нулевыми значениями. Далее присвоим указателю адрес нашей переменной myVariable:

pmyVariable = &myVariable;

С помощью указателя, связанного с переменной, можно получить и значение этой переменной. Обращение к значению myVariable с помощью указателя на эту переменную pmyVariable называется операцией разыменования, или косвенного обращения. Оператор разыменования (*) может рассматриваться как ”значение, хранящееся по адресу”:

*pmyVariable;