Решение практических задач. Определение порядка управления операндов

Страницы работы

Содержание работы

Задание 1. Расставить операции в порядке старшинства:

( ),          !,           ++,        sizeof,                 /,            &&,                     | =.

Задание 2. Найти ошибку:

float x;                                //тип указан неправильно, т.к. далее идет сдвиг y на число позиций x, //следовательно, x не может быть типа число

//с плавающей точкой, а может быть только типа

//целое число

int y=0x000F;

scanf (“%f”, &x);             //будет вызывать ошибку %, т.к. не подключен библиотечный

//модуль <stdio.h>

y<<=x;                //также нужно заключить данный блок в {}, и написать перед

//блоком main().

Задание 3. Определить порядок группирования операндов и вычисления операций в выражениях. Получить результат вычисления выражения, привести полное решение с комментариями.

1.    int a,c;

double d, f;

a=(1<2)&&(2>3)||(!1);            //(1<2) – истинно, т.е. =1; (2>3) – ложно, т.е. =0; (!1) – т.к. //операнд //слева от знака имеет значение 1 (истинно), то //унарная операция //дает 0 (ложно); 1&&0 – т.к. один из //операндов имеет значение 0, //то в результате логического //умножения будет 0; 0||0 – т.к. не один //из операндов не равны //1, то результат примет значение 0; это и //будет результатом //выражения, присваиваемого переменной a

c=a?12:34;                                 //т.к. логическое выражение a ложное, то результатом операции //является <выражение2>, следовательно, с =34

d=!a?—c:c++;                           //т.к. логическое выражение a ложное, то !a примет значение //истина, результатом операции является <выражение1>, //следовательно, d = –34.000000

f=a,d;                                          //результатом выполнения операции (,) будет значение //<выражения2>, следовательно выражение равно –34.

2.    (0xFA&0x72)^0xC3;             //сначала выполняется по приоритету операция (0xFA&0x72), //следом выполняется операция ^

00000000 11111010=0xFA

00000000 01110010=0x72

00000000 11000011=0xc3

00000000 11111010

&

00000000 01110010

_________________

00000000 01110010

00000000 01110010 ^ 00000000 1100001 = 0000000010110001 = B1

3. А=0xFF + 5        //сначала необходимо перевести шестнадцатеричную константу в

//десятичную, а затем уже выполнять операцию сложения двух операндов.

// при переводе числа 0xFF из шестнадцатеричной системы счисления в

//десятичную получим число 255

А = 255 + 5 = 260   // теперь выполняем операцию сложения. Результатом  данного

//выражения будет число 260.

4. i = j = 3 + 31 >> 4  // по приоритету сначала выполняется операция сдвига, затем

//операция сложения и лишь затем операция присваивания.

3+31=34                             // вычисляется значение выражения.

34 = 100010.                      //Для выполнения операции сдвига необходимо перевести число 34 в

//двоичную систему счисления.

// выполняя сдвиг, получаем число 00000010=2

J=2                                       // происходит присваивание переменной J

I=J=2                                   //происходит присваивание переменной I значения переменной J.

5. 07 & 024 || -8.            //по приоритету сначала выполняется побитовая операция &, а затем –

//логическая операция ИЛИ

07 = 111

024 = 10100                   // для выполнения побитовой операции & переводим числа в двоичную //систему счисления

0000000000000111

&

0000000000010100                                //в результате операции получаем 4

__________________

0000000000000100

4 || -8                            //результатом операции будет 1 (истина), т.к. операция считается

//истинной, если хотя бы один из операндов имеет значение истина

//(не равен 0.). В результате получим 1.

6. int x=5,y;                               // происходит объявление переменных

y= (3*x) %( 2*x++);               // по приоритету сначала выполняются операции в скобках, а

//затем операция %

3*x=3*5=15                              //операция произведения двух операндов.

2*x++=2*5=10                         //операция произведения двух операндов. Причем после

//выполнения этой операции значение переменной x будет

//увеличено на 1, т.е. x  примет значение 6.

y=15%10=5                              //операция % позволяет получить остаток от деления двух чисел.

y+= (12/5*++x)                        //по приоритету сначала выполняется операции в скобках,

// а затем выполняется операция присвоения.

12/5                                            //сначала вычислим выражение 12/5, в результате получаем

//2,4, но т.к. результат должен быть целым, то число округляется

//и получаем в итоге число 2.

2*++x=2*7=14                         //операция произведения двух операндов. Операция ++

//увеличила предыдущее значение переменной x на 1.

y+=                                             //операция y+=эквивалентна операции  y=y+.

y=5

Похожие материалы

Информация о работе