Пример 8: найти сумму элементов массива a из N элементов (вариант 1)



 

define N = 10

...

int a [N], i, s;

...

s = 0;

for (i = 0; i <N; i + +) N- шагов

s + = a [i];

Пример 9: найти сумму элементов массива a из N элементов (вариант 2)

...

for (i = 0; i <= N - 1; i + +) N- шагов

s + = a [i];

Особенности цикла for в Си:

  • границы цикла for можно менять внутрi цикла;
  • как бы ни закончился цикл, его параметр сохраняет свое значение;
  • можно перенести в for все осуществлении операторы тела цикла;

4.6 Операция "," (запятая)

  • Используется в операторе for ;
  • Пара выражений, разделенных запятыми, вычисляются слева направо;
  • в каждом из выражений (вир1, вир2, вир3) можно размещать несколько выражений

Пример 10: поворот строки S на месте - reverse (S).

char s [10];

int r, i, j;

for (i = 0, j = strlen (s) - 1; i <j; i + +, j -)

 {

r = s [i];

s [i] = s [j];

s [j] = r;

 }

Запятая, разделяющая аргументы функций, переменные в описаниях и т.п., не является операция "запятая", и она не гарантирует вычисление слева направо.

Цикл do - while

Синтаксис

do

<Инструкция>

while (<выр>)

Семантика

1. Выполняется <инструкция>;
2. Выполняется <водоворот>;
3. Если <водоворот> отлично от 0, то снова выполняется пункт 1) и т.д.;
4. Если <водоворот> равно 0, то повторения заканчиваются;
5. <инструкция> цикла do - while всегда выполняется хотя бы один раз.

Пример 11: найти сумму элементов массива a из N элементов (вариант 3)

 

define N 10

...

int a [N], i, S;

...

S = 0; i = 0;

do

{S + = a [i]; i = i +1;}

while (i <N);

Инструкция break

Оператор break обеспечивает преждевременное прекращение циклов for, while, do - while, также как и переключателя.
Этот оператор вызывает немедленный выход из самого внутреннего из циклов или переключателей.

Сontinue

Вызывает начало следующего шага цикла while, for, do - while. В циклах while и do - while сразу выполняется часть, проверяет условие продолжения цикла. В цикле for управление передается на этап повторной инициалiзации.
Оператор continue не применяется с переключателями.

Пример 12: обработка только положительных элементов массива 

define N 10

...

int a [N], i;

...

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

{
 if (a [i] <0) / * пропускаем негативные элементы * /
 continue;

 ... / * Обработка положительных * /

}

Переходы и метки

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

Пример 13:

for (...)

for (...)

{...

  if (<выражение>)

goto <метка>;

  ...

  }

...

<Метка>:

...

Метка имеет вид обычного имени переменной, за которым нужна двоеточие.

Если оператор с данной меткой отсутствует или имеется более одного оператора, помеченного той же меткой, то компилятор сообщает об ошибке.
Нельзя с помощью оператора goto передать управление на конструкции case и default в теле переключателя, на инструкции ветвей "то" или "иначе" конструкций if-else.

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

Цель: познакомиться с понятием "указатель", с представлением массивов в памяти ЭВМ, доступ к элементам массива с помощью индексов i указателей, с понятием "адресная арифметика", со способами представления строк в языке Си.

Указатели

Связь указателей и массивов

Связь между адресной арифметикой и индексированием массивов

Различие между именем массива и указателем (в роли именi массива)

Буквенные указатели

Массивы указателей

Инициализация массивов указателей

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

Указатели вместо многомерных массивов

Функции обработки строк

Функции проверки свойств символов

Функции преобразования строк

Указатели

Указатель - это переменная, значением которой является адрес.
Указатель можно описать в декларации. Организация памяти:

-Номера ячеек - адреса


Компилятор распределяет память по переменным. Память представляет собой последовательность ячеек, которые перенумерованы (проадресованi).
Обработка ячеек памяти может быть выполнена либо отдельными ячейках или группами ячеек (2 байта, 4 байта, 8 байтiв).

Оператор & (унарный)

- Префiксний;
- высокий приоритет;
- правоасоцiативний.


Этот оператор выдает адрес объекта.

Пример 1:

p = &c;

 

pi = &i;

В Turbo-C адреса могут быть двух-или чотирьохбайтовi (это зависит от модели памяти).

<Имя операции главного меню> => Options => Compiler => Model (6 моделей памяти)

* р ссылается на переменную (указывает).
pi ссылается на i


- Оператор адреса применяется только к операндов, расположенным в оперативной памяти. Это переменные или элемент массива. Нельзя применять его к констант или выражений.

Унарный оператор *

- Префiксний
- высокий приоритет;
- правоасоцiативнbй;

* - Раскрытие ссылки (розiменування).
Применяется только к указателям и выдает объект, на который ссылается указатель.

- Указатель всегда ссылается на объекты заданного типа (кроме void)

Пример 2:

int a = 1; / * * ip можно использовать везде, где

int * ip; нужно использовать а: * /

ip = &a; 

-2 Способы доступа к а

* Ip = * ip +10; / * a = 11 * /

y = * ip +1; / * y = 12 * /

* Ip + = 1; / * a = 12 * /

(* Ip) + +;

! * ip + + происходит изменение самого указателя - перейти к следующему целого значения (+2) - (если тип - указатель на float, то +4) - переход к следующему объекту этого типа

Указатель - это переменная

Связь указателей и массивов

[ ] = *
Оператор [] в Си эквивалентный работе оператора * (компилятор превращает [] в *).

i-й элемент: а [i]

с указателями:

int * pa;

pa = & a [0]

x = * pa; / * x = a [0] (= -1) * /


Адресная арифметика

Если ра указывает на некоторый элемент, то ра +1 указывает на следующий элемент , pа + i - на i-й элемент после ра , ра-1 - на предыдущей (перед ра) .


Во всех языках программирования команда вырезки элемента из массива ([]) стоит десятки машинных команд, а в языке Си - ни одной лишней команды.

! Если pa = & a [0]

 то * (pa + 1) ~ a [1]

    pa + i ~ адрес [i]

    * (Pa + i) ~ a [i]

Пример 3:

int * pa;

int a [5] = {-1, -10, -100, -1000, -10000};

int a1, a2;

pa = & a [0]; / * pa =- 1 * /

a1 = * (pa +1); / * a1 = a [1] * /

a2 = * (pa +2); / * a2 = a [2] * /


Дата добавления: 2020-04-25; просмотров: 57; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!