Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
инфа.docx
Скачиваний:
78
Добавлен:
14.03.2016
Размер:
389.3 Кб
Скачать

Сдвиговые операции

Операции арифметического сдвига применяются в целочисленной арифметике и обозначаются как:

  • >> - сдвиг вправо;

  • << - сдвиг влево.

Общий синтаксис осуществления операции сдвига: объект = выражение сдвиг КоличествоРазрядов; Пример:

unsigned char a=6;  // a = 0000 0110 unsigned char b; b = a >> 1; // b = 0000 0110 >> 1 = 0000 0011 = 3

Арифметический сдвиг целого числа вправо >> на 1 разряд соответствует делению числа на 2. Арифметический сдвиг целого числа влево << на 1 разряд соответствует умножению числа на 2.

3.2 Цикл с предусловием while

Общая форма записи

while(выражение) {

  блок операций; }

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

Пример

int k=5; int i=1; int sum=0; while(i <=k) {

 sum = sum + i;

 i++; }

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

while(1) {

  блок операций; }

while — цикл с предусловием, поэтому вполне возможно, что тело цикла не будет выполнено ни разу если в момент первой проверки проверяемое условие окажется ложным.

Пример

int k=5; int n=10; while(k>n) {

 printf(" k=%d n=%d \n", k, n);

 k = k + 2;

}

Цикл с постусловием do...While

Общая форма записи

do {

  блок операций;

} while(выражение);

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

Цикл do...while — это цикл с постусловием, где истинность выражения проверяется после выполнения всех операций, включенных в блок, ограниченный фигурными скобками.Тело цикла выполняется до тех пор, пока выражение не станет ложным, то есть тело цикла с постусловием выполнится хотя бы один раз.

Использовать цикл do...while лучше использовать в тех случаях, когда должна быть выполнена хотя бы одна итерация, либо когда инициализация объектов, участвующих в проверке условия, происходит внутри тела цикла.

Пример. Ввести число от 0 до 10

#include <stdio.h> #include <stdlib.h> int main() {

  int num;

  system("chcp 1251");

  system("cls");

  do {

    printf("Введите число от 0 до 10: ");

    scanf("%d", &num);

  } while((num < 0) || (num > 10));

  printf("Вы ввели число %d", num);

  getchar(); getchar();

  return 0; }

Результат работы программы:

Параметрический цикл for

Общая форма записи

for (инициализация параметра; проверка условия окончания; коррекция параметра) {

блок операций;

}

for — параметрический цикл (цикл с фиксированным числом повторений). Для организации такого цикла необходимо осуществить три операции:

  • инициализация параметра - присваивание параметру цикла начального значения;

  • проверка условия окончания - сравнение величины параметра с некоторым граничным значением;

  • коррекция параметра - изменение значения параметра при каждом прохождении тела цикла.

Эти три операции записываются в скобках и разделяются точкой с запятой (;). Как правило, параметром цикла является целочисленная переменная. Инициализация параметра осуществляется только один раз — когда цикл for начинает выполняться. Проверка условия окончания осуществляется перед каждым возможным выполнением тела цикла. Когда выражение становится ложным (равным нулю), цикл завершается. Коррекция параметра осуществляется в конце каждого выполнения тела цикла. Параметр может как увеличиваться, так и уменьшаться.

Пример

#include <stdio.h> int main() {

  int num;

  for(num = 1; num < 5; num++)

      printf("num = %d\n",num);

  getchar();

  return 0; }

Результат работы программы

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

#include <stdio.h> int main() {

  int num = 1;

  for(; num < 5; num++)

      printf("num = %d\n",num);

  getchar();

  return 0; }

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

#include <stdio.h> int main() {

  int i,j;

  for(i = 1, j=2; i < 5; i++, j=j+2)

       printf("i = %d   j = %d\n",i,j);

  getchar();

  return 0; }

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

for ( i=0; i<n; i++)  {     // цикл 1

  for( j=0; j<n; j++) {  // цикл 2

    // блок операций цикла 2;

  }

 // блок операций цикла 1; }

Пример: Вывести числа от 0 до 99

#include <stdio.h> #include <stdlib.h> int main() {

  unsigned int i,j;

  for(i=0; i<10; i++) {

    for(j=0; j<10; j++) {

      printf("%2d ",i*10+j);

    }

    printf("\n");    // перевод строки

  }

  getchar();

  return 0; }

Результат выполнения