- •Int a; /* целая
- •Int n; // Переменная n целого типа double a; // Переменная a вещественного типа двойной точности
- •Вещественные константы
- •Символьные константы
- •Строковые константы
- •Логические операции
- •Тернарные операции
- •Оператор ветвления switch
- •Параметрический цикл for
- •Тип *имя_объекта;
- •Стандартные функции динамического выделения памяти
- •Динамическое выделение памяти для одномерных массивов
- •Основные функции стандартной библиотеки string.H
- •Массивы структур
- •Идентификатор(аргумент1, ..., агрументn)
- •Функция, позволяющая вывести день недели на русском языке
- •Файловая структура fat32
- •Работа с файлами в языке Си
Логические операции
Логические операции делятся на две группы:
условные;
побитовые.
Условные логические операции чаще всего используются в операциях проверки условия 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 Выбран первый пункт");
