Сделай Сам Свою Работу на 5

Операции отношения и логические операции





Операции сравнения: == (равно), != (не равно), <, >, <=, >= используются при сравнении двух выражений. Результатом такого сравнения могут быть значения true (истина) или false (ложь). Однако результатом логического вы­ражения может являться и целочисленное арифметическое значение. При этом значение 0 расценивается как false, а любое ненулевое значение — как true. Рас­смотрим пример: int tr, fal; tr = (101<=105); fal= (101>105);

В результате выполнения этих операторов переменная tr получит значение 1, а переменная fal станет равной 0.

Не следует путать операторы типа if (A = =2)...;

и

if (A =2).;

Оба эти оператора верны, так как в C любое выражение, имеющее некоторое значение, может использоваться в условных операторах. Но если в первом слу­чае значение логического выражения может быть как истинным, так и ложным, в зависимости от значения переменной А, то во втором случае значение логиче­ского выражения всегда истинно, так как в результате присваивания значение А равно двум и не является нулевым.

В С имеется три логические операции:

&& — логическое И (AND)

|| — логическое ИЛИ (OR)

! — логическое НЕ (NOT)

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



Операции присваивания

Особенностью обычного оператора присваивания является то, что он

и допускает многократное использование, например:

a=b=c=x*y;

Выполняются операции присваивания справа налево, т. е. сначала вычисляется значение выражения x*y, затем это значение присваивается c, потом b и лишь затем а.

Кроме обычного присваивания, все прочие являются составными опера­циями. Они присваивают переменной, стоящей слева, результат применения простой операции, указанной перед символом «=», к обоим операндам.

Например, выражение X+=Y эквивалентно выражению X=X+Y, но запи­сывается компактнее и выполняется быстрее.

Операторы выбора

 

Операторы выбора – это условный оператор и переключатель.

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

Оператор if имеет две формы: краткую и полную. Краткая форма имеет вид:

if (условие) оператор;

Полная форма этого оператора следующая:

if (условие) оператор; else оператор;



Если значение условия истинно, то выполняется оператор, следующий за усло­вием. Если же условие ложно, то выполняется оператор, стоящий после слова else. Если еlse часть отсутствует, то выполняется следующий оператор про­граммы.

В качестве условия может выступать любое выражение. Если его значе­ние — нуль, оно считается ложным. Ненулевое выражение считается истинным.

Для того, чтобы проверить, является ли некоторое число х равным 0, можно написать

if (x= =0) ShowMessage(“Число равно нулю”); else ShowMessage(“Число не равно нулю”);

Тот же результат можно получить следующим оператором:

if (!x) ShowMessage(“Число равно нулю”); else

ShowMessage(“Число не равно нулю”);

В качестве операторов могут выступать и составные операторы:

if (J = =0)

{ ShowMessage(“Деление на нуль”); result = 0; } else result = I / J;

Обратите внимание, что после фигурной скобки перед else точка с запятой не ставится.

Пример. Ввести значения координат (х, у) точки плоскости. Опреде­лить, какой четверти плоскости принадлежит эта точка.

// Описание функции, определяющей номер четверти плоскости

int nomer(float x, float y)

{

if((x= =0)||(y= =0))

{ ShowMessage("Точка лежит на оси");

return 0;

} else

if ((x>0)&&(y>0))return 1; else if ((x<0)&&(y>0))return 2; else if ((x<0)&&(y<0))return 3; else return 4;

}

// Обработчик кнопки

void_ fastcall TForm1::Button1Click(TObject *Sender)

{

float x=StrToFloat(Edit1->Text); float y=StrToFloat(Edit2->Text);

Edit3 ->Text=IntToStr(nomer(x,y));

 

2. Переключательswitch определяет множественный выбор .

 

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

{

case константа1 : оператор1 ;

case константа2 : оператор2 ;

. . . . . . . . . . .

[default: операторы;]

}

 

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



 

{

int i;

i=StrToInt(Edit1->Text);

switch(i)

{

case 1: ShowMessage(“Вы ввели число 1”);

case 2: ShowMessage(“Вы ввели число 2”);

case 3: ShowMessage(“Вы ввели число 3”);

case 4: ShowMessage(“Вы угадали”);

default: ShowMessage(“Конец работы”);

}

}

 

Операторы циклов

 

· Цикл с предусловием:

 

while (выражение-условие)

оператор;

 

В качестве <выражения-условия> чаще всего используется отношение или логическое выражение. Если оно истинно, т. е. не равно 0, то тело цикла выполняется до тех пор, пока выражение-условие не станет ложным.

 

while (a!=0)

{

a =StrToInt(Edit1->Text);

s+=a;

}

 

· Цикл с постусловием:

 

do

оператор

while (выражение-условие);

 

Тело цикла выполняется до тех пор, пока выражение-условие истинно.

 

do

{

a =StrToInt(Edit1->Text);

s+=a;

}

while(a!=0);

 

· Цикл с параметром:

 

for (выражение_1;выражение-условие;выражение_3)

оператор;

 

выражение_1 и выражение_3 могут состоять из нескольких выражений, разделенных запятыми. Выражение_1 – задает начальные условия для цикла (инициализация). Выражение-условие определяет условие выполнения цикла, если оно не равно 0, цикл выполняется, а затем вычисляется значение выражения_3. Выражение_3 – задает изменение параметра цикла или других переменных (коррекция). Цикл продолжается до тех пор, пока выражение-условие не станет равно 0. Любое выражение может отсутствовать, но разделяющие их « ; » должны быть обязательно.

 

1.

for ( n=10; n>0; n--)// Уменьшение параметра

{

оператор;

}

2.

for ( n=2; n>60; n+=13)// Изменение шага корректировки

{

оператор;

}

3.

for ( num=1;num*num*num<216; num++)//проверка условия отличного от
//того, которое налагается на число итераций

{

оператор;

}

4.

for ( d=100.0; d<150.0;d*=1.1)//коррекция с помощью
//умножения

{

оператор;

}

5.

for (x=1;y<=75;y=5*(x++)+10)//коррекция с помощью
//арифметического выражения

{

оператор;

}

6.

for (x=1, y=0; x<10;x++;y+=x);//использование нескольких корректирующих выражений, тело цикла отсутствует

 

Операторы перехода

 

Операторы перехода выполняют безусловную передачу управления.

 

· break – оператор прерывания цикла.

{

оператор;

if (<выражение_условие>) break;

оператор;

}

 

Т. е. оператор break целесообразно использовать, когда условие продолжения итераций надо проверять в середине цикла.

 

// Найти сумму чисел, числа вводятся с клавиатуры до тех пор, пока не будет //введено 100 чисел или 0.

for(s=0, i=1; i<100;i++)

{

x =StrToInt(Edit1->Text);

if( x==0) break; // если ввели 0, то суммирование заканчивается

s+=x;

}

· continue – переход к следующей итерации цикла. Он используется, когда тело цикла содержит ветвления.

 

//Найти количество и сумму положительных чисел

for( k=0,s=0,x=1;x!=0;)

{

x =StrToInt(Edit1->Text);

if (x<=0) continue;

k++; s+=x;

}

 

· goto <метка> – передает управление оператору, который содержит метку.

В теле той же функции должна присутствовать конструкция:
<метка>:оператор;

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

Применение goto нарушает принципы структурного и модульного программирования, по которым все блоки, из которых состоит программа, должны иметь только один вход и только один выход.

Нельзя передавать управление внутрь операторов if, switch и циклов. Нельзя переходить внутрь блоков, содержащих инициализацию, на операторы, которые стоят после инициализации.

· return – оператор возврата из функции. Он всегда завершает выполнение функции и передает управление в точку ее вызова. Вид оператора:

return [выражение];

 

 

5.4 Пример простейшего проекта

Вычислить периметр, площадь и диагональ прямоугольника со сторонами a и b. После // в программе написан комментарий к строкам.

Форма для данного проекта может быть, например такой, как на рис.

 

 

Рисунок 6 - Форма проекта

 

//------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop #include "Unit1.h"

//-----------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

#include <math.h> // подключение математической библиотеки

TForm1 *Form1;

//-----------------------------------------------------------------

 

_fastcall TForm 1::TForm 1 (TComponent* Owner) : TForm(Owner)

// сюда помещаются операторы,

// которые должны выполняться при создании формы

{ Label4->Visible=0; // сделать невидимыми метки Label4

Label5->Visible=0; // и Label5

Label6 ->Visible=0;

}

//-----------------------------------------------------------------

void_fastcall TForm1::Button2Click(TObject *Sender)

// сюда помещаются операторы,

// которые должны выполняться при нажатии наButton2 , обязательно необходимо нажать мышкой на форме на кнопку Button2 два раза

{

Close(); // закрывает форму

}

//-----------------------------------------------------------------

void_ fastcall TForm1::Button1Click(TObject *Sender)

// сюда помещаются операторы,

// которые должны выполняться при нажатии наButton1, обязательно необходимо нажать мышкой на форме на кнопку Button1 два раза

{

double a, b; // объявление переменных

a= StrToFloat(Edit 1->Text); // введенное значение в полеEdit 1 запомнится // в переменной а

b= StrToFloat(Edit2->Text);

double S, P, D; // объявление переменных

P=2*(a+b); // вычисление выражения

S=a*b;

D=sqrt(pow(a,2)+pow(b,2));

Label4->Visible=1; // сделать видимыми метку Label4

Label5 ->Visible=1;

Label6 ->Visible=1;

Label4->Caption=" Периметр прямоугольника Р ="+FloatToStr(P); // вывести // в метку Label4 « Периметр прямоугольника Р = »

Label5->Caption=" Площадь прямоугольника S ="+FloatToStr(S);

Label6->Caption="Диагональ прямоугольника D="+FloatToStr(D);

}

 

В конструктор форм внесены операторы, делающие невидимыми метки Label4 и Label5 в момент создания формы. Эти метки используются в обработчике кнопки для вывода результатов на экран. Основные вычисления производятся в подпрограмме ButtonlClick. Обратите внимание, что после заголовка подпрограммы следует открывающая фигурная скобка. Фигурные скобки ( {} ) в С всегда используются парами (открывающая и закрывающая) и являются операторными скобками.

Строка

double R,L;

объявляет вещественные переменные R и L. Все переменные в языке С должны быть объявлены перед их использованием.

Строка

R=StrToFloat(Edit 1 ->Text); является оператором присваивания. Переменной R присваивается содержимое редактора Editl. Для перевода значения из строки в вещественное число ис­пользуются, как и в Delphi, функция StrToFloat. Для обращения к свойству компонента используется символы «-» и «>», записанные без пробела.

При написании программы помните, что большие и маленькие буквы в языке C++ различаются, в отличие от Delphi. То есть, например, переменные R и r считаются различными.

Пример 2: Сформировать последовательность из n целых чисел. Определить минимальный элемент и количество четных чисел.

 

Рисунок 7 - Форма проекта

 

#include <vcl.h>

#pragma hdrstop

 

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int s,x,m=1000000;

int i=1,n,k;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{ Label1->Caption=" Введите количество элементов n= ";

Label2->Caption=" Введите 1 элемент =";

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1::Button1Click(TObject *Sender)

{

n=StrToInt(Edit1->Text);

x=StrToInt(Edit2->Text);

Edit2->Text="";

i=i+1; // Увеличивает значение переменной i на единицу

if (x<m) m=x;

if ((x%2)==0) k++; // Если остаток от деления х на 2 равен 0, то значение

// переменной к увеличивается на 1

if (i>n) {Button1->Enabled=False; Button2->SetFocus();}

else {Label2->Caption=" Введите"+IntToStr(i)+" элемент =";Edit2->SetFocus();

} }

//-------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Label3->Caption=" min ="+IntToStr(m);

Label4->Caption=" Количество четных элементов ="+IntToStr(k); }

//-------------------------------------------------------------------------

 

Пример 3: S=4+7-10+13+16-19+22+25-28+…, всего n слагаемых;

 

 

//---------------------------------------------------------------------------

 

#include <vcl.h>

#pragma hdrstop

 

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int i,s,n,k;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1::Button1Click(TObject *Sender)

{

n=StrToInt(Edit1->Text);

s=0;k=1;i=4;

do // начало цикла

{

if (k%3= =0) s=s-i; else s=s+i; // Если остаток от деления переменной к

// на 3 равен нулю, то от переменной s отнимаем i, иначе к переменной s

// прибавляем i

i=i+3; k=k+1;}

while (k<n); // конец цикла. Цикл выполняется до тех пор, пока k<n

 

Label2->Caption=" S ="+IntToStr(s);

}

//---------------------------------------------------------------------------

 

 

Для справки

Директива #pragma имеет следующий синтаксис:
#pragma имя опции
и вызывает действия, зависящие от указанной опции. Список возможных опций вы можете найти во встроенной справке C++Builder. Он довольно обширен и связан с различными режимами работы препроцессора.
Пример директивы #pragma вы можете видеть в любом модуле своего проекта. Первые две строки файла любого модуля имеют вид:

#include <vcl.h>
#pragma hdrstop
Здесь использована опция hdrstop. Она связана с особенностью работы препроцессора, производительность которого существенно повышается, если учитывается, что некоторое количество заголовочных файлов общие для всех модулей. Директива #pragma hdrstop указывает компилятору конец списка таких общих файлов. Так что надо следить за тем, чтобы не добавлять перед этой директивой включение каких-то заголовочных файлов, не являющихся общими для других модулей.
В файлах модулей вы можете еще увидеть две директивы #pragma:
#pragma package(smart_init)
#pragma resource "*.dfm"
Первая из них определяет последовательность инициализации пакетов такой, какая устанавливается взаимными ссылками использующих их модулей. Вторая говорит препроцессору, что для формы надо использовать файл .dfm с тем же именем, что и имя данного файла.
...
Например, директива #include <vcl.h> подключает заголовочный файл vcl.h, содержащий объявления, используемые в библиотеке визуальных компонентов C++Builder.
...
Следующая директива включает файл Unit1.h, который ищется прежде всего в каталоге, в котором расположен файл, содержащий данную директиву:
#include "Unit1.h"

TForm1 *Form1;

Так объявляется указатель с именем Form1 на объект класса TForm1, в дальнейшем он может использоваться для доступа к свойствам и методам формы с именем "Form1".

void __fastcall TForm1::Edit1Click(TObject *Sender)

Так начинается определение обработчика события OnClick для компонента типа TEdit с именем "Edit1", принадлежащего форме с именем "Form1".

 

 

ЗАДАНИЯ

 

1. Написать программу, которая будет вычислять следующее выражение по введенным с клавиатуры значениям переменных a и b

2. Написать программу, которая будет вычислять следующее выражение по введенным с клавиатуры значениям переменных a и b

3. Написать программу, которая будет вычислять следующее выражение по введенным с клавиатуры значениям переменных a и b

4. Написать программу, которая будет вычислять следующее выражение по введенным с клавиатуры значениям переменных a и b

5. Написать программу, которая будет вычислять следующее выражение по введенным с клавиатуры значениям переменных a и b

6. Написать программу, которая будет вычислять следующее выражение по введенным с клавиатуры значениям переменных a и b

7. Написать программу, которая будет вычислять следующее выражение по введенным с клавиатуры значениям переменных a и b

8. Написать программу, которая будет вычислять следующее выражение по введенным с клавиатуры значениям переменных a и b

9. Написать программу, которая будет вычислять следующее выражение по введенным с клавиатуры значениям переменных a и b

10. Написать программу, которая будет вычислять следующее выражение по введенным с клавиатуры значениям переменных a и b

11. Дана последовательность из n целых чисел. Найти среднее арифметическое этой последовательности.

12. Дана последовательность из n целых чисел. Найти сумму четных элементов этой последовательности.

13. Дана последовательность из n целых чисел. Найти сумму элементов с четными номерами из этой последовательности.

14. Дана последовательность из n целых чисел. Найти сумму нечетных элементов этой последовательности.

15. Дана последовательность из n целых чисел. Найти сумму элементов с нечетными номерами из этой последовательности.

16. Дана последовательность из n целых чисел. Найти минимальный элемент в этой последовательности.

17. Дана последовательность из n целых чисел. Найти номер максимального элемента в этой последовательности.

18. Дана последовательность из n целых чисел. Найти номер минимального элемента в этой последовательности.

19. Дана последовательность из n целых чисел. Найти максимальный элемент в этой последовательности.

20. Дана последовательность из n целых чисел. Найти сумму минимального и максимального элементов в этой последовательности.

21. , всего n слагаемых;

22. S=1+3+5+7+ …, всего n слагаемых;

23. S=1+2-3+4+5-6+7+8-9+…, всего n слагаемых;

24. S=15+17-19+21+23-25+…, всего n слагаемых;

25.

26.

27.

28.

29. .

30.

 

Варианты

 

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

 

Вариант Задача 1 Задача 2 Задача 3

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.