Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб_1_метод_указания прога.doc
Скачиваний:
3
Добавлен:
03.11.2018
Размер:
301.57 Кб
Скачать

Замечания по программированию алгебраических выражений

  1. Не забываем включать требуемые заголовочные файлы.

  2. При программировании больших формул придерживаемся подхода «здравого смысла», т.к. запись формулы в виде одного выражения чревата появлением ошибок (как правило, несоответствие открывающих и закрывающих скобок), а введение большого числа дополнительных переменных для сохранения промежуточных результатов – также не лучший выход.

  3. При форматном выводе с помощью функции printf необходимо внимательно относиться к заданию спецификатора. Например, для переменной, определенной как double df; запись оператора вывода в виде printf(“%d”, df) даст неверный результат.

  4. При форматном вводе с помощью функции scanf необходимо не забывать указывать адрес вводимой переменной (например, &x).

  5. При использовании функции pow для извлечения корня некоторой, (например, 4-ой степени) из выражения (например, a+b*b) помнить, что запись вида pow (a+b*b, 1/4) всегда даст значение, равное 1 из-за целочисленного деления 1 на 4. Исправить положение поможет запись степени в виде 1.0/4 или 1/4.0 или 1.0/4.0 или 0.25

  6. Заменяем умножением возведение выражений в небольшую степень (в том числе и значений, возвращаемых функциями), стараемся не использовать в таком случае функцию pow,

  7. Не путаем операции = и ==.

  8. Не забываем о приоритете операций.

  9. Невозможно определить порядок обработки операндов в коммутативных операциях: например: int z, x=1; z=(x*5) +((x=10)/2); z может получить различные значения в зависимости от того, какое выражение в скобках будет вычисляться первым; во избежание двусмысленности следует использовать промежуточную переменную: int z, t, x=1; t=x*5; z=(x*5) +((x=10)/2);

  10. Следим за наличием точки с запятой перед второй частью (else) условного оператора if.

  11. Если в какой-либо ветви условия необходимо выполнить более одного оператора, их следует объединить в один блок с помощью фигурных скобок.

  12. Если в операторе вывода в поток используется тернарная операция, то тернарное выражение полностью заключается в скобки.

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

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

Пример 1.

Проанализируйте конструкции и убедитесь, что ваш ответ совпадает с приведенным в тексте:

int x, y=1, z; if (y !=0) x=5; printf (” %d”, x); // x=5

if (y ==0) x=3; else x=5; printf (” %d”, x); // x=5

x=1;

if (y <0) if (y>0) x=3; else x=5; printf (” %d”, x); // x=1

if (z = y <0) x=3; else if (y==0) x=5; else x=7; printf (” %d %d”, x, z); // x=7 z=0

if (z=(y==0)) x=5; x=3; printf (” %d %d”, x, z); // x=3, z=0, y=1

if (x = z = y); x=3; printf (” %d %d”, x, z); // x=3, z=1

Пример 2.

Проанализируйте конструкции и вспомните, когда возможно их применение:

if (выражение1) break;

if (выражение2) continue;

if (выражение3) return;

Пример 3. Даны вещественные числа a, b, c, d. Если a b c d, то каждое число заменить наибольшим, если a > b > c > d, то числа оставить без изменений, в противном случае – все числа заменить их квадратами.

//program 6_1

#include <conio.h>

#include <stdio.h>

int main ()

{double a, b, c, d;

printf (" Input a, b, c, d:\n");

scanf ("%lf%lf%lf%lf", &a, &b, &c, &d);

printf ("a = %lf; b = %lf; c = %lf; d = %lf;\n", a, b, c, d);

if (a<=b && b <=c && c<=d)

{a = d; b = d; c=d;}

else if (a >b && b>c && c>d) ;

else {a = a*a; b = b*b; c = c*c;}

printf ("a = %lf; b = %lf; c = %lf; d = %lf;\n", a, b, c, d);

_getch();

return 0;

}