Использование операторов break и continue в циклах




1. Оператор break; прекращает работу цикла. Например:

while (x<=2)

{....

if (y>5) break;

....

}

2. Оператор continue; пропускает следующую за ним часть тела цикла и переходит к новому шагу цикла. Например: программа выводит на экран только положительные y и считает их количество k.

while (x<=2)

{ y = sqrt (fabs (x)) – x*x;

if (y<0)

{ x+=0.1;

continue;

}

printf (“x=....”, x, y);

k++;

x+=0.1;

}

Сложные (вложенные) циклы

Сложный цикл образуется, когда один цикл входит в другой цикл и т.д.

Уровень сложности цикла – количество вложенных друг в друга циклов.

Пример сложного цикла:

Вычислить

f = 2,7*sin(x) + 1,3*cos(y), где величины x и y изменяются следующим образом:

-3 ≤ x ≤ 3 Δx = 0,1 -4 ≤ y ≤ 4 Δy = 0,2

Рассмотрим 2 варианта реализации: 1. С использованием цикла while; 2. С использованием цикла for.

1. float x = -3, y;

while (x<=3)

{ y = -4;

while (y <=4)

{ f = 2.7*sin(x) + 1.3*cos(x);

printf(“x=%.1 y=%.1f f=%.3f\n”, x, y, f);

y+ = 0.2;

}

x+=0.1;

}

 

2. float x, y;

for (x=-3; x<=3; x+=0.1)

for (y=-4; y<=4; y+=0.2)

{

f=2.7*sin(x)+1.3*cos(y);

printf(“x=%.1 y=%.1f f=%.3f\n”, x, y, f);

}

Массивы в языке С

Массив – набор значений одного типа, обозначенных общим именем.

Например: массив X = {x1, x2, …, x50} = {xi}, i = 1…50

Размерность массива – количество индексов у элемента массива.

X = {xi} – одномерный массив (Вектор)

Y = {yij} – двухмерный массив (Матрица)

Z = {zijk} – трёхмерный массив (Куб чисел)

Y, Z – многомерные массивы.

В программе на языке С все массивы должны быть описаны.

 

Одномерные массивы

Форма описания одномерного массива:

тип имя [к];

где к – количество элементов в массиве, целое число.

int p[10];

float x[50];

Начальный индекс элемента массива всегда равен 0.

p[0] p[1] … p[9]

x[0] x[1] … x[49]

Инициализация массива (задание его элементам начальных значений):

тип имя [k] = { конст1, конст2, …, констК};

int d[5] = {-1, 2, 7, -4, 10};

d[0]= = -1 d[1]= = 2 d[2]= = 7 … d[4]= =10

Для работы с одномерными массивами чаще всего используются простые циклы типа for, параметром которых является индекс элемента массива. Например: необходимо вычислить и вывести на экран элементы одномерного массива y[30].

float y[30];

int i;

for (i=0; i<30; i++)

{ y[i] = 1.5*sin(2.1*i);

printf(“y[%d]=%.3f\n”, i, y[i]);

}

 

Многомерные массивы

Виды многомерных массивов:

а) двухмерные массивы {aij} – матрицы

б) трёхмерные массивы {bijk} – куб чисел

в) четырёхмерные массивы {cijkl} и т.д.

Форма описания многомерного массива:

тип имя [k1] [k2] … [kn];

где ki – количество элементов по i-му индексу.

Общее число элементов многомерного массива равно

kобщ = k1*k2*…*kn

int d[5][10]; kd = 50 эл-тов.

float x[7][10][5]; kx = 350 эл-тов.

Начальные индексы у элементов многомерных массивов равны 0.

Индексы для элементов массива d[5][10]:

d [0][0] d[0][1] d[0][2] … d[0][9] d[1][0] … d[4][9]

Индексы для элементов массива x[7][10][5]:

x[0][0][0] x[0][0][1] ……………x[6][9][4]

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

Инициализация многомерных массивов:

int t[3][4] = { {2, 7, -1, 10},

{5, 12, 18, -3},

{11, -8, 25, 4} };

Для работы с многомерными массивами чаще всего используются сложные циклы for. Количество операторов цикла for равно размерности массива. Параметрами этих циклов являются индексы элементов массива. Например: необходимо вычислить и вывести на экран элементы двухмерного массива z[5][7].

int i, j;

float z[5][7];

printf(“Массив Z\n”);

for (i=0; i<5; i++)

{

for (j=0; j<7; j++)

{

z[i][j]=-1.9*i + 2.5*j;

printf(“%.1f “, z[i][j]);

}

printf(“\n”);

}

Операции с адресами. Указатели.

В языке С есть две адресных операции.

1. Получение адреса переменной V - &V

Результат операции – физический адрес переменной V в памяти компьютера.

Пример: вывести на экран значения и адреса в памяти переменных p, y, z, m.

int p=25;

float y=371.9;

double z=18.469E-12;

char m=’+’;

printf (“Переменная Значение Адрес \n”);

printf (“ P %10d %u\n”, p, &p);

printf (“ Y %10.1f %u\n”, y, &y);

printf (“ Z %10.3e %u\n”, z, &z);

printf (” M %10c %u\n”, m, &m);

Распределение памяти:

p y z m

  371.9 18.469E-12 +

 

Адреса: 6921 → 6921+2 → 6923+4 → 6927+8

На экран будет выведена следующая информация:

Переменная Значение Адрес

P 25 6921
Y 371.9 6923

Z 18.469е-12 6927

M + 6935

 

2. Получение значения по адресу, заданному Р - *Р

где Р – указатель или адресное выражение.

Результат операции – из памяти считывается значение, хранящееся по адресу Р.

Указатель это специальный вид переменной, которая может хранить адрес.

Форма описания указателя:

тип *имя;

где имя – любой идентификатор, рекомендуется обозначать указатели следующим

образом: ptr pt_a pt_x ptr_k (ptr сокращение от английского pointer).

int m=125, *ptr_m;

float b=221.9, *ptr_b, c;

ptr_m=&m;

ptr_b=&b;

c=*ptr_b;

Адресные операции используются при работе с функциями для передачи адресов параметров, например:

scanf(“%f%d”, &z, &k);

Указатели и массивы

1. В языке С имя массива – это указатель-константа на начало массива
int p[10]; p= =&p[0]

float a[5][7]; a= =&a[0][0]

Для двухмерного массива запись его имени с одним индексом задает адрес начала соответствующей строки:

a[i] = =&a[i][0] – адрес i-й строки

2. С элементами массивов можно работать через указатели. Для этого указателю необходимо присвоить адрес начала массива, а затем можно получить доступ к любому его элементу путем прибавления к указателю индекс этого элемента.

В одномерном массиве x[25] расположение элементов следующее:
x x[0] x[1] …. x[24]

       

 

float x[25], *ptx;
ptx = x;

i-й элемент массива: x[i] → *(ptx+i)

В адресном выражении (ptx+i) - +1 – это увеличение адреса на длину float

x[5] → *(ptx+5)

 

В двухмерном массиве m[5][6] расположение элементов следующее:

m00 m01 m02 …. m05 m10 m11 m12 … m45

                 

 

int m[5][6], *ptm;

ptm=m;

i-й j-й элемент массива: m[i][j]→ *(ptm+i*6+j)

В адресном выражении (ptm+i*6+j) к адресу начала массива ptm прибавляется смещение на количество предыдущих строк i*6 и смещение по текущей строке j.

m[1][2] = = *(ptm+1*6+2)

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: