книги / Язык Си
..pdfЗадача 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); |