Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С (для ИВТ) / Готовые лабы С / Лаба1 / Laba1 (1)
.c#include <stdio.h>
#include <stdlib.h>
int main(void) {
int a, b = 5, c;
double x, y = -.5, z;
printf("a=");
scanf("%d", &a); // Пусть a = 3
// Анализ: x = c = a;
c = a; // c = 3
x = c; // x = 3.0 (неявное приведение int к double)
printf("x = c = a : a=%d c=%d x=%f\n", a, c, x); // a=3 c=3 x=3.000000
// Анализ: a += b;
a = a + b; // a = 3 + 5 = 8
printf("a += b : a=%d\n", a); // a=8
// Анализ: x *= b + a;
x = x * (b + a); // x = 3.0 * (5 + 8) = 3.0 * 13 = 39.0
printf("x *= b+a : x=%lf\n", x); // x=39.000000
// Анализ: b += a--;
// Сначала b = b + a, потом a уменьшается на 1
b = b + a; // b = 5 + 8 = 13
a = a - 1; // a = 8 - 1 = 7
printf("b += a-- : a=%d b=%d\n", a, b); // a=7 b=13
// Анализ: x -= ++c;
// Сначала c увеличивается на 1, потом x = x - c
c = c + 1; // c был 3, стал 4
x = x - c; // x = 39.0 - 4 = 35.0
printf("x -= ++c : c=%d x=%lf\n", c, x); // c=4 x=35.000000
// Анализ: c = a/b;
// Целочисленное деление: 7 / 13 = 0
c = a / b; // c = 7 / 13 = 0
printf("c = a/b : c=%4d\n", c); // c= 0
// Анализ: c = a%b;
// Остаток от деления: 7 % 13 = 7
c = a % b; // c = 7
printf("c = a%%b : c=%d\n", c); // c=7
// Анализ: y += (a+1)/a++;
// Поведение неопределенное из-за изменения и использования a в одном выражении
// В зависимости от компилятора результат может различаться
int temp1 = a + 1; // 7 + 1 = 8
int temp2 = a; // 7
a = a + 1; // a = 8
y = y + (double)temp1 / temp2; // y = -0.5 + 8/7 ≈ -0.5 + 1.142857 = 0.642857
printf("y += (a+1)/a++ : a=%d y=%.31f\ty=%.01f\n", a, y, y); // a=8 y=0.642857 y=0.6
// Анализ: b = 3*(y -=.6)+2*b+1;
y = y - 0.6; // y = 0.642857 - 0.6 = 0.042857
b = 3 * y + 2 * b + 1; // b = 3*0.042857 + 2*13 + 1 ≈ 0.128571 + 26 + 1 = 27.128571 → 27 (целое)
printf("b = 3*(y -=.6)+2*b+1 : b=%d y=%.11f\n", b, y); // b=27 y=0.042857
// Анализ: z = a/2;
// Целочисленное деление: 8/2=4, затем преобразование в double
z = a / 2; // z = 8/2 = 4 → 4.0
printf("z = a/2 : z=%lf\n", z); // z=4.000000
// Анализ: z = (double)a/2;
// Вещественное деление: 8.0/2=4.0
z = (double)a / 2; // z = 4.0
printf("z = (double)a/2 : z=%lf\n", z); // z=4.000000
// Анализ: y = (x = 5.7)/2;
x = 5.7; // x = 5.7
y = x / 2; // y = 5.7/2 = 2.85
printf("y = (x = 5.7)/2 : x=%lf y=%lf\n", x, y); // x=5.700000 y=2.850000
// Анализ: y = (int)x/2;
// Приведение x к int: 5.7 → 5, затем целочисленное деление 5/2=2
y = (int)x / 2; // y = 5/2 = 2 → 2.0
printf("y = (int)x/2 : y=%f\n", y); // y=2.000000
// Анализ сложного выражения с разбивкой:
// z = (b-3)/2 - x/5 + (c/=2) + 1/4*z - y++ + ++b/3.;
int b_old = b; // b=27
double y_old = y; // y=2.0
// Вычисляем по частям согласно приоритету операций
int part1 = (b - 3) / 2; // (27-3)/2 = 24/2 = 12
double part2 = x / 5; // 5.7/5 = 1.14
c = c / 2; // c=7/2=3 (целочисленное деление)
int part3 = c; // part3=3
double part4 = 1 / 4 * z; // 1/4=0 (целое), 0*z=0.0
double part5 = y_old; // y++ - используем старое значение y=2.0
y = y + 1; // y увеличивается после использования
b = b + 1; // ++b - сначала увеличиваем b=28
double part6 = b / 3.0; // 28/3.0 ≈ 9.333333
z = part1 - part2 + part3 + part4 - part5 + part6;
// z = 12 - 1.14 + 3 + 0 - 2.0 + 9.333333 ≈ 21.193333
printf("z = ... : a=%d b=%d c=%d x=%lf y=%lf z=%lf\n", a, b, c, x, y, z);
system("pause");
return 0;
}
Соседние файлы в папке Лаба1
