Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Язык Си

..pdf
Скачиваний:
6
Добавлен:
20.11.2023
Размер:
7.64 Mб
Скачать

Задача 1. Вычислить площадь поверхности и объем шара, ци­ линдра, конуса.

Для решения задачи прежде всего нам нужно вспомнить не­ обходимые формулы:

Затем нужно подумать, какие переменные для обозначения тех или иных величин нужно ввести:

pi - число я ;

Rjsph, R_cyl, R_con - радиус сферы, цилиндра и конуса соот­ ветственно;

Н_су1, Н соп - высота цилиндра и конуса соответственно; L_cyl - длина образующей конуса.

S_sph, S_cyl, S_con - площадь поверхности сферы, цилиндра и конуса соответственно;

V_sph, V_cyl, V_con - объем сферы, цилиндра и конуса соот­ ветственно.

Можете для обозначения данных параметров придумать пе­ ременным другие имена.

#include<stdio.h>

#include<conio.h>

#include<math.h>

main ()

{float pi=3.141593; //зададем радиусы

float R_sph=2,R_cyl=2,R_con=2;

float H_cyl=5,H_con=5; //зададем высоты float L_con;

float S_sph,S_cyl,S_con; float V_sph, V_cyl, V_con;

//Вычисляем параметры сферы S_sph = 4*pi*R_sph*R_sph; V_sph = 4./3*pi*pow(R_sph,3);

printf (1 phera: s=%f v=%f\n",S_sph,V_sph); //печать на экран

//Вычисляем параметры цилиндра

S_cyl = 2*pi*R_cyl*(H_cyl+R_cyl); V_cyl = pi*R_cyl*R_cyl*H_cyl; //печать на экран

printf("Cylinder:s=%f v=%f\n", S_cylfV_cyl);

// Вычисляем параметры конуса L_con = hypot(H_con,R_con); S_con = pi*R_con*(L_con+R_con);

V_con = 1./3*pi*R_con*R_con*H_con; //печать на экран

printf("Cone: s=%f v=%f\n"r S_confV_con);

getch(); return 0;

}

Здесь мы использовали математические функции pow - воз­ ведение в степень, hypot - вычисление гипотенузы, которые объ­ явлены в файле math.h.

Задача 2. Вычислить площадь треугольника по заданным ко­ ординатам вершин.

Для вычисления площади треугольника используем формулу Герона. Мы уже рассмотрели подобный пример в начале лекции, но там были заданы стороны треугольника. В данной программе вычислим стороны треугольника по заданным координатам вер­ шин, для чего воспользуемся формулой Пифагора.

#include<math.h>

#include<stdio.h>

#include<conio.h>

main()

{i n t x l , y l , x 2 , y 2 , x 3 , y 3 ; f l o a t a , b , c , S , p ;

//Задание координат вершин xl=0; yl=0;

x2=4; y2=0; x3=0; y3=3;

//Вычисление сторон треугольника

//по формуле Пифагора

a=hypot(x2-xl,у2-у1); //х2-х1 и у2-у1 - длины //катетов

b=hypot(хЗ-х2,уЗ-у2); //хЗ-х2 и уЗ-у2 - длины //катетов

c=hypot(xl-x3,yl-y3); //xl-хЗ и yl-уЗ - длины //катетов

//Вычисление площади треугольника

//по формуле Герона

р=(а+Ь+с)/2; S=sqrt(р*(р-а)*(р-b)* (р-с));

printf("%f" t S); //вывод результата на экран

getch() ;

return 0;

1.Набрать все рассмотренные примеры программ. Скомпили­ ровать исполняемые файлы.

2.Написать программу для вычисления объема и площади поверхности кольца. Размеры кольца задать самостоятельно.

3.Написать программу для вычисления значения функции

z =x3—2, 5JCV+1, 78JC2 -2 ,5 у + 1 при любых значениях х и у .

ЛЕКЦИЯ 2. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ

ИМАТЕМАТИЧЕСКИЕ ФУНКЦИИ

2.1.Арифметические операции

Вязыке Си используют следующие арифметические опера­

ции:

+сложение;

-вычитание;

*умножение; / деление;

% вычисление остатка от деления двух целых чисел. Операцию % нельзя использовать с типамиfloat или double.

Пример. Использование операции %.

11%5=1, 16% 6=4, 4%2=0, 5%9=5, 0%8=0, 8%0=8,

-19%7=-5, 19%-7=5, -19%-7=-5.

Арифметические операции имеют следующие особенности:

-нет операции возведения в степень (для этого есть функция

pow);

-дробная часть при делении целых чисел (тип int)

ОТБРАСЫВАЕТСЯ.

Запомните следующие правила при делении:

int

/ int =

int

int

/

float

=

float

float

/

int

=

float

float

/

float

=

float

Пример. Операция деления с целыми числами.

int а; float b;

а=13/5; // 13/5=2.6, однако будет а=2 а=3/6; // 3/6=0.5, однако будет а=0 Ь=4/3; // 4/3=1.333333 однако будет Ь=1

Чтобы не терять дробную часть при делении констант, в числителе или знаменателе нужно ставить точку (.).

float b;

b = 4./3; //или Ь=4/3.;

Теперь 4. воспринимается как 4.0, а это уже константа типа

float.

Если при делении переменной типа int на константу или пере­ менную типа int мы хотим сохранить дробную часть, то нужно ис­ пользовать приведение типов.

float b;

int

а=2;

//Ь=0

b

=

а/3;

b

=

(float)а/3;

//Ь=0.666666

В последней строке переменная а в числителе используется как переменная типа float, данная операция называется приведени­ ем типа. Также в Си++ допустим вариант

b = float(а)/3;

К арифметическим операциям также относится увеличение на 1 (increment) ++ и уменьшение на 1 (decrement) — .

float

a=5,b=7;

а--;

//аналогично записи а=а-1, т.е. а=4

Ь++;

//аналогично записи b=b+l, т.е. Ь=8

Операции ++ и — могут быть префиксными и постфиксны­ ми. Если они выполняются в отдельной строке, то между префикс­ ной и постфиксной операцией разницы нет.

float а=5,Ь=7;

--а; //или а-- результат все равно а=4 ++Ь; //или Ь++ результат все равно Ь=8

Если операции ++ и — выполняются в правой части операто­ ра присваивания ( = + = - = и т.д.), то префиксность и постфиксность важны. Префиксная операция ++я увеличивает значение а на 1, а затем эта переменная используется в правой части присваивания. Постфиксная операция а++ увеличивает значение а на 1 после

использования этой переменной в правой части присваивания. Дня операции— правила те же.

int

a=7,b=5,c;

 

эквивалентно

с

=

а++;

//с=7, а=8, т.к. это

с

=

— Ь;

//записи

с=а; а=а+1;

эквивалентно

//с=4, Ъ=А, т.к. это

 

 

 

//записи

b=b-l; с=Ь;

 

Все операции (не только арифметические) разделяются на унарные (один операнд) и бинарные (два операнда). Операции ++ и

— являются унарными. Операции + - / * % относятся к бинарным. Приоритет операций - это порядок их выполнения по стар­ шинству. Операции + и - имеют одинаковое старшинство, которое младше одинакового старшинства операций * / %, которые, в свою очередь, младше унарного минуса (ставится перед числом или выражением, чтобы изменить его знак на противоположный) и операций ++ и — . Арифметические операции группируются слева направо, т.е. если приоритет операций одинаковый, то первой вы­

полняется та операция, которая в строке находится левее.

Пример. Порядок выполнения операций.

i n t

х;

//х = 1 1

х

=

- 3 + 4 * 5 - 6 ;

X

=

3+4%5-6;

/ / х—1

X

=

- 3*4% - 6/5;

/ / х=0

X

=

(7 +6)% 7 / 2 ;

/ / х=3

X

=

19%(7+3)/2;

/ / х=4

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

Операция присваивания в языке Си обозначается знаком =. Возможна следующая запись а = Ь = с= 15.6. Присваивание вы­ полняется справа налево.

float а, с;

а=с=5.6; //ПРАВИЛЬНО

float а=с=15.6; //ОШИБКА! Не объявлена //переменная с до ее первого //использования

float с;

float а=с=15.6; //ПРАВИЛЬНО

В левой части оператора присваивания должен стоять объект (имя переменной или элемент массива), которому можно присво­ ить значение. Такой объект в языке Си называется lvalue (от англ. left value - значение слева).

а=15.6; //ПРАВИЛЬНО с=а+Ь; //ПРАВИЛЬНО а+Ь=14; //ОШИБКА 2=2; //ОШИБКА

В языке Си имеются дополнительные операции присваивания

+= -= /= *= %=

Вместо выражения а = а + 5 можно использовать а += 5. Ана­ логично

а-= 10 эквивалентно а=а-10

а*= 10 эквивалентно а=а*10

а/= 10 эквивалентно а=а/10

а%= 10 эквивалентно а=а%10

Пример. Подсчитать сумму цифр, составляющих целое трехзначное число.

#include<stdio.h>

 

 

main()

//задаем трехзначное число

{int N=724;

int

a,b,c,S;

 

 

a

= N/100;

//724/100=7.24, т.е. a=7,

 

 

 

//поскольку а тип int

N

-=

a*100;

//724-7*100, т.е. a=24

b

=

N /10;

//24/10=2.4,

т.е. b=2,

 

 

 

//поскольку b

тип int

c = N-b*10;

//24-2*10, т.е. c=4

S

=

a+b+c;

 

 

printf (,f%d" ,S) ;

 

 

return 0;

}

Измените программу так, чтобы число N раскладывалось на разряды только с помощью арифметических операций % и /

2.3. Математические функции

Для использования математических функций (табл. 2.1) необ­ ходимо подключить файл math.fi.

 

 

 

 

Т а б л и ц а 2.1

 

 

Основные математические функции

Функция

 

Прототип функции, назначение

п/п

 

и пример использования

1

 

int abs(int х) - возвращает целое абсолютное значение,

abs

а =

abs(3.5);

//а=3

 

 

а =

abs (-4.6);

//а=4

double fabs(double х) - возвращает абсолютное значе­

2fobs ние сплавающей точкой.

а= fabs(-4.6); //а=4.6

Функция

п/п

3 ceil

Прототип функции, назначение и пример использования

double ceil(double х) - округление в большую сторону до ближайшего целого числа,

а

=

ceil(2.31);

//а

=

3

а

=

ceil(-4.75);

//а

=

-4

4 floor

5 fmod

6 modf

7 sqrt

doublefloor(double х) - округление в меньшую сторо­ ну до ближайшего целого числа.

а

=

floor(5.96);

//а

=

5

а

=

floor(-5.01);

//а

=

-6

doublefmod(double х, doubleу) - остаток от деления аргументов х/у.

а= fmod(5, 3); //а = 2 равносильно

а= 5%3;

а= fmod( 1 . 2 , 2); //а = 1.2

double modfldouble х, double *i) - разделяет число х на целую и дробную части, возвращает дробную часть, а целую размещает в переменной, адресуемой парамет­ ром /.

double а=5.2, Ь, с;

с

=

modf(а, &Ь);

/ / с = 0.2, b = 5,

а

=

5.2

 

double sqrt(double х) - корень квадратный из выраже­ ния в скобках.

а = sqrt(30);

//а = 5.477226

а = sqrt(3*3+4*4); //а = 5

8 hypot

9 pow

10 exp

double hypot(double х,doubleу) - гипотенуза треуголь­ ника с катетами х иу, т.е. вычисляет выражение

V7 7 7

а= hypot(3,4); //а = 5 равносильно

//а = sqrt(3*3+4*4); idoublepow(double х, doubleу) - возведение основания

;с в степень у.

cа. = pow(2,

5);

//а

=

32

а = pow(27,

1./3);

//а

=

3

louble exp(double х) -

вычисляет значение ех

C

//а = 2.718282

c1 = exp (1);