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

Пример вычисления значения выражения

Вычислить значение выражения:

при x=6.251, y=0.827, z=25.001

// formula_1 вывод в стиле С #include <stdio.h> #include <math.h>

#include <conio.h>

int main() { double x, y, z, b, r1, r2, r3, r4; //r1, r2, r3, r4 – вспомогательные переменные puts ("input x, y, z: "); // функция выводит на экран строку scanf ("%lf %lf %lf", &x, &y, &z); //ввод значений через пробел или <enter> r1=pow(y, pow(fabs(x), 1./3.)); //вычисление первого слагаемого r2= cos(y); r3=fabs(x-y)*(1+r2*r2/sqrt(x+y)); //вычисление числителя большой дроби r4=exp(fabs(x-y))+x/2; //вычисление знаменателя большой дроби b=r1+r2*r2*r2*r3/r4; printf ("\nfor x=%lf, y=%lf, z=%lf, b=%10.6lf\n", x, y, z, b); // вывод на экран _getch();

return 0;

}

Результат: for x=6.251000, y=0.827000, z=25.001000, b= 0.713336

// formula_2 вывод в стиле С++ #include <iostream.h> #include <math.h>

#include <conio.h>

int main() { double x, y, z, b, r1, r2, r3, r4; //r1, r2, r3, r4 – вспомогательные переменные cout << "input x, y, z: "<< endl; // вывод строки с приглашением cin >> x >> y >> z; //ввод значений через пробел или <enter> r1=pow(y, pow(fabs(x), 1./3.)); //вычисление первого слагаемого r2= cos(y); r3=fabs(x-y)*(1+r2*r2/sqrt(x+y)); //вычисление числителя большой дроби r4=exp(fabs(x-y))+x/2; //вычисление знаменателя большой дроби b=r1+r2*r2*r2*r3/r4; cout << "\n x=" << x << " y=" << y << " z=" << z << " b=" << b << endl; _getch();

return 0;

}

Примеры использования преобразования типов

1. Внимание !!! Иногда при смешивании в одном выражении операндов разных арифметических типов могут получиться «неожиданные» результаты. Например:

int a=8, b=5; double var1, var2; var1 = a/b; //результат имеет значение 1, т.к. выполняется целочисленное деление var2 = (double)a/b; //результат имеет ожидаемое значение1.6

2. Особенности преобразования типов int и double:

main() {double d=3.2, x; int i=2, j; x = (j = d/i)*2; // i преобразуется к типу double, результат деления = 1.6 // при присваивании j значение 1.6 усекается до 1 printf (”x=%f\t, j=%d\n”, x, j); // х=2, j=1 j=(x=d/i)*2; // i преобразуется к типу double, результат деления = 1.6 printf (”x=%f\t, j=%d\n”, x, j); // x=1.6 j=3 (3.2 усекается при присваивании до 3) j=d*(x=2.5/d); //правая часть выражения для j получит значение 2.5

//усекается при присваивании до 2

printf (”j=%d\n”, j); // j=2 x=d*(j=((int)2.9+1.1)/d); // значение выражения ((int)2.9+1.1) равно 3.1 // значение выражения ((int)2.9+1.1)/d) < 1 и при

printf (”x=%f\t, j=%d\n”, x, j); // присваивании целой переменной j усекается до 0, //значит и x=0, j=0

}

3. Чтобы вывести на экран код символа, нужно применить операцию явного преобразования. Например:

#include <conio.h>

#include <iostream.h>

int main() { char c= 'a'; cout << (unsigned) c << endl; // будет напечатан код символа _getch();

return 0;

}

4. Переменной перечислимого типа нельзя присвоить значение с помощью оператора ввода. Однако можно ввести значение для переменной целого типа и воспользоваться далее приведением типа:

#include <iostream.h>

#include <conio.h>

enum Predmet {alg, geom, progr, analiz}; //описание типа

int main() {Predmet pred (progr); //определение и инициализация переменной pred

cout << pred << endl; // будет выведено 2 - внутреннее представление переменной

int i=3;

pred = (Predmet) i; // преобразование к перечислимому типу

cout << pred << endl; // будет выведено 3 - внутреннее представление // нового значения переменной _getch();

return 0;

}

Заметим, что подобная форма преобразования типа не может применяться для типов со сложным наименованием (например, unsigned long (x/3+2) вызовет ошибку компиляции). Для таких типов удобно выполнять явное преобразование с помощью typedef.

Например, если имеем:

typedef unsigned long UL;

typefef char * PCH;

то можно применить функциональную запись преобразования типа в виде:

UL (x/3+2) или PCH(0777);

5. Приведение типов может быть полезным при работе с условными операторами. Сравните приведенные ниже выражения (они на самом деле решают одну задачу):

if (x > 15) x = x – 15;

x =x – 15 * (unsigned) (x > 15);