Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект Лекций «программирование На Языке Высокого Уровня Си» По Информатике (Попов Д. И.).pdf
Скачиваний:
172
Добавлен:
07.10.2014
Размер:
1.31 Mб
Скачать

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

int *ptr1, *ptr2, a[10];

int i;

 

ptr1 = a+4;

 

ptr2 = a+9;

// равно 5

i = ptr1-ptr2;

i = ptr2-ptr1;

// равно -5

Значения двух указателей на одинаковые типы можно сравнивать в операциях ==, !=, <, <=, >, >= при этом значения указателей рассматриваются просто как целые числа, а результат сравнения равен 0 (ложь) или 1 (истина).

int *ptr1, *ptr2, a[10]; ptr1 = a+5;

ptr2 = a+7;

if (prt1 > ptr2) a[3] = 4;

В данном примере значение ptr1 меньше значения ptr2 и поэтому оператор a[3] = 4 не будет выполнен.

Тема 7. Представление основных управляющих структур программирования

Оператор присваивания

Оператор присваивания записывается в виде: <переменная> = <выражение>;

Значение выражения из правой части присваивается переменной из левой части оператора присваивания. При присваивании необходимо обеспечивать совместимость типов (иногда говорят – совместимость по присваиванию), т.е. тип, полученный при вычислении выражения, должен быть совместим с типом переменной, которой это значение должно быть присвоено. Значение типа T1 является совместимым по присваиванию с типом T2 (то есть, допустим, оператор T1=T2), если выполняется одно из следующих условий:

T1 и T2 имеют тождественные типы, и ни один из них не является файловым типом или структурным типом, содержащим компонент с файловым типом на одном из своих уровней.

87

T1 и T2 являются совместимыми порядковыми типами, и значения типа T2 попадают в диапазон возможных значений T1.

T1 и T2 являются вещественными типами, и значения типа T2 попадают в диапазон возможных значений T1.

T1 является вещественным типом, а T2 является целочисленным

типом.

T1 и T2 являются строковыми типами.

T1 является строковым типом, а T2 является символьным типом

(Char).

T1 и T2 являются совместимыми множественными типами, и все члены значения типа T2 попадают в диапазон возможных значений T1.

T1 и T2 являются совместимыми типами указателей.

T1 и T2 являются совместимыми процедурными типами.

T1 представляет собой процедурный тип, а T2 – процедура или функция с идентичным типом результата, идентичным числом параметров и соответствием между типами параметров.

На этапе компиляции и выполнения программы выдается сообщение об

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

Составной оператор

Синтаксис оператора { <операторы> }

Здесь «операторы» – один или несколько любых операторов языка Си, разделенных точкой с запятой. Составной оператор предназначен для объединения нескольких операторов в один, что имеет решающее значение там, где синтаксис языка Си допускает использование только одного оператора.

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

Синтаксис оператора goto <метка>;

88

P1 = Pl^.next; if (a > 0)
{ if (b > 0)
{ if (c > 0) d = a*b*c; else
if (d < 0)
{ d = SQRT(–a*b*c);

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

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

Всинтаксисе языка Си предусмотрены две конструкции для записи условного оператора: условный оператор с одним вариантом действии (сокращенная форма) и условный оператор с двумя вариантами действии (полная форма).

Синтаксис оператора if можно представить следующим образом: if (<условие>) <оператор1> [else <оператор2>];

Здесь «условие» – логическое выражение. В результате его вычисления должен получаться результат, имеющий стандартный логический тип. Если результатом является значение True (Истина), то выполняется «оператор1». Если логическое выражение принимает значение False, и ключевое слово else отсутствует (сокращенная форма), то управление передается оператору, следующему за оператором if. В полной форме условного оператора в этом случае сначала будет выполнен «оператор2».

Вобщем случае, при наличии множественных вложенных операторов if ключевое слово else связывается с ближайшим ключевым словом if, которое еще не связано с ключевым словом else.

Приведем примеры использования оператора if.

if (A != B) Z = X+Y; else Z = 1;

if (P1 = null)

{

89

} c = –c*b;

}

else d = SQR(d);

}

else d = a*b; else d = a;

Пример 15. Используем оператор if для разработки программы и блоксхемы алгоритма поиска действительных корней квадратного уравнения (рис.31).

 

 

Начало

a, b, c

 

 

 

ввести a, b, c

 

 

 

 

 

 

 

f(x)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нет

a=0

да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D:=b*b-4*a*c

 

 

 

 

 

 

b=0

 

да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D=0

D

D>0

 

 

 

 

 

 

нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x := – c / b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D<0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x1:=(-b+sqrt(D))/(2*a)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x := -b/(2*a)

 

 

 

x2:=(-b–sqrt(D))/(2*a)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

Корней нет

x1, x2

 

 

 

 

Корней нет

 

 

 

 

 

 

 

 

 

Конец

Рис. 31. Алгоритм вычисления корней квадратного уравнения

float a,b,c,z;/*Даны коэффициенты квадратного уравнения*/ float x1,x2; /*Найти и вычислить их корни*/

printf("\nВведите коэффициент а:\n"); scanf("%f",&a);

printf("Введите коэффициент b:\n"); scanf("%f",&b);

printf("Введите коэффициент с:\n"); scanf("%f",&c);

z=b*b-4*a*c; /*Z-дискриминант*/ if(z>=0.0)

{x1=(-b+sqrt(z))/2/a; x2=(-b-sqrt(z))/2/a;

} printf("\nКорни уравнения:x1=%f,\nx2=%f",x1,x2);

else

printf("\nДействительные корни отсутствуют.");

90