Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Тема: типы данных. Обработка числовой информации





В языке Си используются данные пяти типов:

· символы - тип char,

· целые числа - тип int,

· числа с плавающей точкой - тип float,

· числа с плавающей точкой двойной точности - тип double,

· переменные без значения - тип void .

Функция printf () используется для вывода информации:

printf(("управляющая строка", список аргументов);

Число аргументов должно соответствовать числу спецификаторов формата.

Общий вид спецификаторов формата

%[флаг][ширина][.точность][префикс] код формата

Код формата может принимать следующие значения:

%c отдельный символ

%d десятичное

%i десятичное

%e научная нотация

%f десятичное с плавающей точкой

%g использует %e или %f (какой короче)

%o восьмиричное

%s цепочка символов

%u десятичное без знака

%x шестнадцатиричное

%% печатает знак %

%p визуализирует указатель

Флаг (в таком порядке):

- Выравнивание по левому краю (по умолчанию – по правому)

+ Печать знака, если аргумент знакового типа («-» печатается всегда, «+», если указан флаг, иначе пробел)

# Для форматов «о» и «х» печать лидирующих 0 или 0х.

Ширина – неотрицательное целое число, определяет минимальный размер поля, отводимое для печати (если знаков больше, то поле печати будет расширено).

Точность – неотрицательное целое число, определяет число цифр, печатаемых после десятичной точки для данных типа float, double (по умолчанию 6 знаков).

Префикс – используется для указания, что аргументы short – h или long – l: %ld – длинное целое, %lf - длинное double.

Функция scanf() используется для ввода информации:

scanf("управляющая строка", список аргументов);

Все переменные, используемые для приема значений посредством функции scanf(), должны передаваться их адресами.

Задание 1. Распечатать введенные с клавиатуры символы и соответствующие им ASCII - коды в десятичном, восьмеричном и шестнадцатеричном виде.

Задание 2. Форматированный ввод - вывод. Используя допустимые спецификации преобразования, распечатать символ, целое (знаковое и беззнаковое), числа с плавающей точкой.

Тема: операции

Программы на языке Си строятся из операторов, операторы - из выражений, выражения - из операндов и операций.

В языке Си имеется три основных класса операторов:

· арифметические;

· логические;

· операторы сравнения и побитовые операторы.

Арифметические операции (операнды - числа или указатели).

Аддитивные

Операция Результат Ограничения Примеры выражений
x+y сумма х и у если один из операндов является указателем, то другой должен быть целой величиной (типа int, char, short, long или unsigned) int a=5, b=2; char c='A' (код 65) float d=2.0; a+b (результат=7) a+c (результат=67) а+d (результат=7.0)
x-y разность х и у если один из операндов является указателем, то другой должен быть целой величиной или указателем с тем же базовым типом int a=5, b=2; char c='A' (код 65) float d=2.0; a-b (результат=3) a-c (результат=-60) а-d (результат=3.0)

Мультипликативные



Операция Результат Ограничения Примеры выражений
x*y произведение х на у х и у не должны быть указателями int a=5, b=2; char c='A' (код 65) float d=2.0; a*b (результат=10) a*c (результат=325) а*d (результат=10.0)
x/y частное от деления х на у х и у не должны быть указателями int a=5, b=2; char c='A' (код 65) float d=2.0; a/b (результат=2) a/c (результат=0) а/d (результат=10.0)
х%y остаток от деления х на у х и у не должны быть типов double, float или указателями int a=5, b=2; char c='A' (код 65) a%b (результат=1) c%b (результат=1)  
изменение знака х не должен быть указателем int b=-2; char c='A' (код 65) float d=2.2; -c (результат=-65) -b (результат=2) -d (результат=-2.2)

Увеличения (increment) и уменьшения (decrement)

Операция Результат Ограничения Примеры выражений
++x (--x) x+1 (х-1) х увеличивается (уменьшается) перед использованием х - числовое значение или указатель int i=1, iv; iv = ++i ; (результат: iv=2, i=2)
x++ (x--) х после использования х увеличивается (уменьшается) на 1. х - числовое значение или указатель int i=1, iv; iv = i++; (результат: iv=1, i=2)

Операции присваивания

Операция Результат Ограничения Примеры выражений
х=у у приводится к типу х; х получает значение у х, у могут быть любого типа, но не массивом int a, b=2; char c='A' (код 65) float d=2.2; a=b (результат=2) a=c/2 (результат=32) а=d (результат=2)
х <оп>=у оп - знак операции (+, -, *, /, %, <<, >>, &, |, ^) х оп у приводится к типу х, х получает значение х оп у. х, у могут быть любого типа, но не массивом или структурой k+=2 (k=k+2) k*=2 (k=k*2) k>>=2 (k=k>>+2) k&=2 (k=k&2)

Условие (тернарная операция)

Операция Результат Ограничения Примеры выражений
х? y: z y, если х не равно 0; z- иначе   float s = 1.234; s >2.15 ? 1: 0 (результат 0)

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

Операция Результат Ограничения Примеры выражений
х && у логическое И: 1, если х и у не равны 0; 0 - иначе результат типа int 3&&2 (результат =1) 3&&0 (результат =0)
х|| у логическое ИЛИ: 0, если х и у равны 0; 1 - иначе результат типа int 3 || 2 (результат =1) 3 || 0 (результат =1) 0 || 0 (результат =0)
логическое отрицание (НЕ) 1- если х =0, иначе 0 результат типа int !0 (результат =1) !3 (результат =0)

Поразрядные операции (побитовые)

Логические

Операция Результат Ограничения Примеры выражений
х & у поразрядное логическое И: соответствующий разряд результата 1, если оба разряда х и у равны 1; 0 - иначе х и у - целочисленные операнды типа char, short, int, long char c = '\325' (c=11010101) c & 3 (3=00000011) ->
х| у поразрядное логическое ИЛИ: соответствующий разряд результата 0, если оба разряда х и у равны 0; 1 - иначе х и у - целочисленные операнды типа char, short, int, long char c = '\325' (c=11010101) c | 3 (3=00000011) ->
х ^ y поразрядное исключающее ИЛИ: соответствующий разряд результата 1, если оба разряда х и у различны 0 - если совпадают х и у - целочисленные операнды типа char, short, int, long char c = '\325' (c=11010101) c ^ 3 (3=00000011) ->
~ х дополнение до единицы: бит со значением 1 обращается в 0 и наоборот х - операнд типа char, short, int, long char c = '\325' (c=11010101) ~ c -> 00101010

Сдвиг

Операция Результат Ограничения Примеры выражений
х << у сдвиг влево на у разря-дов; освобождающиеся младшие разряды запол-няются нулями у положительно и меньше разрядности машины char c = '\325' (c=11010101) c <<| 3 -> 10101000
х>> у сдвиг вправо на у разря-дов; освобождающиеся старшие разряды запол-няются нулями для переменных типа unsigned или значением старшего (знакового) бита у положительно и меньше разрядности машины char c = '\325' (c=11010101) c >>| 3 -> 11111010

Операции сравнения

Отношения

Операция Результат Ограничения Примеры выражений
х < у (x > y) 1, если х меньше (больше) у; 0- иначе результат типа int 3 < 2 (результат 0) 3 > 2 (результат 1)
х <= у (x >=y) 1, если х меньше или равно (больше или равно) у; 0- иначе результат типа int 3 <= 2 (результат 0) 3 >= 2 (результат 1) 3 >= 3 (результат 1)

Сравнение на равенство.

Операция Результат Ограничения Примеры выражений
х == у 1, если х равно у; 0- иначе результат типа int 3 == 2 (результат 0) 3 == 3 (результат 1)
х != у 1, если х не равно у; 0- иначе результат типа int 3 != 3 (результат 0) 3 != 2 (результат 1)

Адресные операции.

Операция Результат Ограничения Примеры выражений
&x вычисление адреса: ре-зультат - адрес операнда х х должно указывать на некоторое значение int *pi, i=5; pi = &i; (pi содержит адрес переменной i)
операция косвенной адресации: значение по адресу, хранящемуся в х, приведенное к базовому типу х х должен быть указателем int *pi, i=5, j; рi = &i; j = *pi; -> j=5
х.у доступ к элементу структуры или объеди-нения; результат - значение элемента у из х х должно быть струк-турой или объединени-ем, у - элемент структу-ры или объединения struct stud {char fio[20]; long nzk; }current; strcpy (current.fio, "Иванов И. И."); current.nzk=999887;
х->у доступ к элементу структуры или объеди-нения по указателю; результат - значение элемента у из х х должно быть структурой или объединением, у - элемент структуры или объединения struct stud current; struct stud *ptr; ptr=&current; strcpy (ptr->fio, "Иванов И. И."); ptr->nzk=999887;

В языке Си операции выполняются в очередности, определяемой их приоритетом.

Таблица приоритетов.

Прио- ритет Знак операции Тип операции Порядок выполнения
( ) [ ] . - > первичные (вызов функции, выбор элемента массива, доступ к полю структуры) слева направо
- ~ ! * ++ -- & (тип) sizeof унарные справа налево
* / % мультипликативные слева направо
+ - аддитивные слева направо
<< >> сдвиг слева направо
< <= > >= отношение (неравенство) слева направо
= != сравнения на равенство слева направо
& побитовое И слева направо
^ побитовое исключающее ИЛИ слева направо
| побитовое ИЛИ слева направо
&& логическое И слева направо
|| логическое ИЛИ слева направо
? : условие справа налево
= *= /= %= += -= <<= >>= присваивание справа налево
, запятая слева направо

 

Задание 3. Что напечатает следующая программа?

main()

{

//основные арифметические операции

int x, y, z ;

x = - 3 + 4 * 5 - 6 ; printf ("%d\n",x);

x = 3 + 4 % 5 - 6 ; printf ("%d\n",x);

x = - 3 + 4 % 5 - 6 /5 ; printf ("%d\n",x);

x = (6 + 7) % 5 / 6 ; printf ("%d\n",x);

//операции присваивания

x=2;

x *= 3 + 2 ; printf ("%d\n",x);

x *= y = z = 4 ; printf ("%d\n",x);

x = y = = z ; printf ("%d\n",x);

x = = (y = z) ; printf ("%d\n",x);

//логические операции и операции увеличения

x = 2; y = 1; z = 0;

x = x && y || z ; printf ("%d\n",x);

x = x || ! y && z ; printf ("%d\n",x);

x = y = 1;

z = x ++ - 1 ; printf ("%d %d\n",x, z);

z += - x ++ + ++ y ; printf ("%d %d\n",x, z);

z = x / ++ x ; printf ("%d %d\n",x, z);

//побитовые операции

x = 03; y = 02; z = 01;

printf ("%d\n", x | y & z);

printf ("%d\n", x | y & ~ z);

printf ("%d\n", x ^ y & ~ z);

printf ("%d\n", x & y && z);

x = 1; y = - 1;

printf ("%d\n", ! x | x);

printf ("%d\n", ~ x | x);

printf ("%d\n", x ^ x);

x <<=3 ; printf ("%d\n", x);

y <<=3 ; printf ("%d\n", y);

y >>=3 ; printf ("%d\n", y);

//отношения и условия

x = y = z = 1;

x += y += z ; printf ("%d\n", x < y ? y : x);

printf ("%d\n", x < y ? x ++ : y ++);

printf ("%d %d\n", x, y);

printf ("%d\n", z += x < y ? x ++ : y ++);

printf ("%d %d\n", z, y);

x = 3 ; y = z = 4;

printf ("%d\n", (z >= y >= x) ? 1: 0);

printf ("%d\n", z && y >= x );

//выполнение операций и их приоритеты

int res;

x = y = z = 1;

res = ++x || ++y && ++z;

printf ("x=%d\t y=%d\t z=%d\t res=%d\n", x, y, z, res);

x = y = z = 1;

res = ++x && ++y || ++z;

printf ("x=%d\t y=%d\t z=%d\t res=%d\n", x, y, z, res);

x = y = z = -1;

res = ++x || ++y && ++z;

printf ("x=%d\t y=%d\t z=%d\t res=%d\n", x, y, z, res);

x = y = z = -1;

res = ++x && ++y || ++z;

printf ("x=%d\t y=%d\t z=%d\t res=%d\n", x, y, z, res);

x = y = z = -1;

res = ++x && ++y && ++z;

printf ("x=%d\t y=%d\t z=%d\t res=%d\n", x, y, z, res);

Тема: преобразование типов

· неявное преобразование(выполняет компилятор)

Результат любого вычисления будет преобразовываться к наиболее точному типу данных, из тех типов данных, которые участвуют ввычислении.

· явное преобразование(выполняет программист)

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

Задание 4. "Вечный календарь". Даны натуральные числа d, m, g, которые обозначают число, месяц и год. Определить день недели на который падает введенная дата.

Замечание. Дата должна находиться в диапазоне от 1582 до 4902 гг. Номер дня недели (воскресенье - 0, понедельник - 1, ..., суббота - 6) равен остатку от деления на 7 значения выражения

[ 2.6 * m - 0.2] + d + y + [y / 4] + [x / 4] - 2 * x.

Если полученное значение будет отрицательным, для получения истинного значения необходимо прибавить 7.

d - номер дня в месяце (1, 2, ...);

m - номер месяца, нумерация начинается с марта (март - 1, апрель - 2,..., декабрь - 10, январь и февраль считаются месяцами с номерами 11 и 12 предыдущего года;

y - две младшие цифры года;

x - две старшие цифры года;

[a] - целая часть а.









Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2018 zdamsam.ru Размещенные материалы защищены законодательством РФ.