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

Логические операции

Логические операции делятся на две группы:

  • условные;

  • побитовые.

Условные логические операции чаще всего используются в операциях проверки условия if и могут выполняться над любыми объектами. Результат условной логической операции:

  • 1 если выражение истинно;

  • 0 если выражение ложно.

Вообще, все значения, отличные от нуля, интерпретируются условными логическими операциями как истинные.

Основные условные логические операции:

  • && - И (бинарная) — требуется одновременное выполнение всех операций отношения;

  • || - ИЛИ (бинарная) — требуется выполнение хотя бы одной операции отношения;

  • ! - НЕ (унарная) — требуется невыполнение операции отношения.

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

Основные побитовые логические операции в языке Си:

  • & конъюнкция (логическое И) - бинарная операция, результат которой равен 1 только когда оба операнда единичны (в общем случае - когда все операнды единичны);

  • | дизъюнкция (логическое ИЛИ) - бинарная операция, результат которой равен 1 когда хотя бы один из операндов равен 1;

  • ~ инверсия (логическое НЕ) - унарная операция, результат которой равен 0 если операнд единичный, и равен 1, если операнд нулевой;

  • ^ исключающее ИЛИ - бинарная операция, результат которой равен 1, если только один из двух операндов равен 1 (в общем случае если во входном наборе операндов нечетное число единиц).

Для каждого бита результат выполнения операции будет получен в соответствии с таблицей.

a

b

a & b

a | b

~a

a ^ b

0

0

0

0

1

1

0

1

0

1

1

0

1

0

0

1

0

0

1

1

1

1

0

1

Пример:

unsigned char a = 14;    // a = 0000 1110 unsigned char b = 9;     // b = 0000 1001 unsigned char c, d, e, f; c = a & b;               // c = 8 = 0000 1000 d = a | b;               // d = 15 = 0000 1111 e = ~a;                  // e = 241 = 1111 0001 f = a ^ b;               // f = 7 = 0000 0111

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

Бит

Маска

0

0x01

1

0x02

2

0x04

3

0x08

4

0x10

5

0x20

6

0x40

7

0x80

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

unsigned char a = 3; a = a | 0x04;  // a = 7, бит 2 установлен

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

unsigned char a = 3; a = a & (~0x02);  // a = 1, бит 1 сброшен

Бинарные побитовые логические операции могут быть объединены с операцией присваивания:

  • объект &= выражение; // объект = объект & выражение

  • объект |= выражение; // объект = объект | выражение

  • объект ^= выражение; // объект = объект ^ выражение

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

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

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

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

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

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

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

Ввод-вывод в Си

Главная > Язык Си > Ввод-вывод в Си

Основной задачей программирования является обработка информации, поэтому любой язык программирования имеет средства для ввода и вывода информации. В языке Си нет операторов ввода-вывода.

Ввод и вывод информации осуществляется через функции стандартной библиотеки. Прототипы рассматриваемых функций находятся в файле stdio.h. Эта библиотека содержит функции

  • printf() - для вывода информации

  • scanf() - для ввода информации.

Вывод информации

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

Общая форма записи функции printf():

printf("СтрокаФорматов", объект1, объект2, ..., объектn);

СтрокаФорматов состоит из следующих элементов:

  • управляющих символов;

  • текста, представленного для непосредственного вывода;

  • форматов, предназначенных для вывода значений переменных различных типов.

Объекты могут отсутствовать.

Управляющие символы не выводятся на экран, а управляют расположением выводимых символов. Отличительной чертой управляющего символа является наличие обратного слэша '\' перед ним. Основные управляющие символы:

  • '\n' — перевод строки;

  • '\t' — горизонтальная табуляция;

  • '\v' — вертикальная табуляция;

  • '\b' — возврат на символ;

  • '\r' — возврат на начало строки;

  • '\a' — звуковой сигнал.

Форматы нужны для того, чтобы указывать вид, в котором информация будет выведена на экран. Отличительной чертой формата является наличие символа процент '%' перед ним:

  • %d — целое число типа int со знаком в десятичной системе счисления;

  • %u — целое число типа unsigned int;

  • %x — целое число типа int со знаком в шестнадцатеричной системе счисления;

  • %o — целое число типа int со знаком в восьмеричной системе счисления;

  • %hd — целое число типа short со знаком в десятичной системе счисления;

  • %hu — целое число типа unsigned short;

  • %hx — целое число типа short со знаком в шестнадцатеричной системе счисления;

  • %ld — целое число типа long int со знаком в десятичной системе счисления;

  • %lu — целое число типа unsigned long int;

  • %lx — целое число типа long int со знаком в шестнадцатеричной системе счисления;

  • %f — вещественный формат (числа с плавающей точкой типа float);

  • %lf — вещественный формат двойной точности (числа с плавающей точкой типа double);

  • %e — вещественный формат в экспоненциальной форме (числа с плавающей точкой типа float в экспоненциальной форме);

  • %c — символьный формат;

  • %s — строковый формат.

Пример

int a=5; float x = 2.78; printf("\n Значение переменной a=%d", a); printf("\n Значение переменной x=%f", x);

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

Значение переменной a=5 Значение переменной x=2.780000

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

float y=1.2345; printf("\n Значение переменной y=%10.5\n", y);

Результат работы программы Значение переменной y=   1.23450

В приведенном примере 10 — общее количество знакомест под значение переменной; 5 — количество позиций после десятичной точки. В указанном примере количество знакомест в выводимом числе меньше 10, поэтому свободные знакоместа слева от числа заполняются пробелами. Такой способ форматирования часто используется для построения таблиц.

Ввод информации

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

scanf ("CтрокаФорматов", адрес1, адрес2,...);

Строка форматов аналогична функции printf(). Для формирования адреса переменной используется символ амперсанд '&':

адрес = &объект

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

Пример

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

  float y;

  system("chcp 1251");

  system("cls");

  printf("Введите y: ");

  scanf("%f",&y);  // Ввод значения переменной y

  printf("Значение переменной y=%f",y);

  getchar(); getchar();

  return 0; }

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

Условные операторы в Си

Главная > Язык Си > Условные операторы в Си

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

Операция проверки условия в языке Си осуществляется с использованием оператора if. Общая форма записи

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

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

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

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

Такая структура представляет собой полную развилку.

Оператор if может также применяться в случае неполной развилки. При этом форма записи этого условного оператора будет следующей:

if(выражение){ блок операций 1; }

Пример

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

  int k;

  printf("k= ");

  scanf("%d",&k);

  if(k >= 5) {

    printf("%d >= 5", k);

  } else {

    printf("%d < 5", k);

  }

  getchar(); getchar();

  return 0; }

Оператор if может быть вложенным.

Пример:

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

  int key;

  system("chcp 1251");

  system("cls");

  printf("Введите номер пункта, 1 или 2: ");

  scanf("%d",&key);

  if (key == 1)

    printf("\n Выбран первый пункт");

  else if (key == 2)

    printf("\n Выбран второй пункт");

  else

    printf("\n Первый и второй пункты не выбраны");

  getchar(); getchar();

  return 0; }

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

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

if (key!= 1) {

  if (key == 2)

    printf("\n Выбран второй пункт");

  } else

    printf("\n Выбран первый пункт");