
- •Язык высокого програмирования “с”
- •Переменные и типы переменных.
- •2.1 Типы данных в си
- •Подробное описание типов данных в языке си
- •Комплексные числа в си
- •Логический тип данных в си
- •Операторы объявлений
- •Константы в си
- •Оператор создания типов данных в си
- •Неявное приведение типа
- •Явное приведение типа в языке c
- •1.1. Арифметические операции
- •2.4 Побитовые операции в си
- •№3 Циклические алгоритмы.
- •Операция присваивания
- •Операции отношения
- •Арифметические операции
- •Логические операции
- •Сдвиговые операции
- •3.2 Цикл с предусловием while
- •Цикл с постусловием do...While
- •Цикл с постусловием
- •Параметрический цикл for
- •Рекомендации по выбору цикла
- •Операторы break и continue
- •Оператор безусловного перехода goto
- •Синтаксис
- •Синтаксис
- •Заметки
- •Синтаксис
- •Заметки
- •Тернарные операции
- •Оператор ветвления switch (оператор множественного выбора)
- •№5 Указатели и массивы.
- •Объявление и инициализация массивов
- •Многомерные массивы
- •Инициализация многомерных массивов
- •Передача массива в функцию
- •5.2 И 5.3
- •5.1 Указатели и адреса
- •5.2 Указатели и аргументы функций
- •5.3 Указатели и массивы
- •5.4 Адресная арифметика
- •5.5 Символьные указатели функции
- •5.6 Массивы указателей, указатели на указатели
- •5.7 Многомерные массивы
- •5.8 Инициализация массивов указателей
- •5.9 Указатели против многомерных массивов
- •5.10 Аргументы командной строки
- •5.11 Указатели на функции
- •5.12 Сложные объявления
- •5.4 Указатели типа void
Сдвиговые операции
Операции арифметического сдвига применяются в целочисленной арифметике и обозначаются как:
>> - сдвиг вправо;
<< - сдвиг влево.
Общий синтаксис осуществления операции сдвига: объект = выражение сдвиг КоличествоРазрядов; Пример:
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; }
Результат
выполнения