Типове, оператори и изрази - 1
Chapter 2 - Types, Operators and Expressions
2.1 Variable Names
2.2 Data Types and Sizes
2.3 Constants
2.4 Declarations
2.5 Arithmetic Operators
2.6 Relational and Logical Operators
Имена на променливи
* Променливите са места в паметта, които съхраняват
стойности от даден тип.
* Правила за имена на променливи (символични имена,
идентификатори):
- Имената
започват с буква.
- Оставащи
символи са букви, цифри или долна черта (underscore, _), не
съдържат интервали или специални символи.
- Не се
използват запазените думи от езика (като int, return и др.).
- В имената на
променливите се отличават малки и главни букви (case-sensitive),
напр. Area и area са
различни имена.
- Имената на
променливите се пишат само с малки букви (добър стил на
програмиране).
Типове данни и техните размери
* Променливите са места (един или няколко байта) в паметта,
които съхраняват стойности от даден тип.
char - един байт
int - цяло число
float - число с плаваща запетая и
единична точност (floating point number, single precision)
double - число с плаваща запетая и
двойна точност (floating point number, doublе precision)
long int = long
short int = short
signed int = int
unsigned int
signed long = long
unsigned
long
signed
short = short
unsigned
short
signed char = char [-128, 127]
unsigned char [0, 255]
long double
Константи (литерали)
Числови константи
1234, 123456789L, 234U, 24680UL
9.05, 9.0, 9.0f, 9999.09999l
31, 037, 0X1F, 0x1f
Символни константи
'a', '0'
'\n', '\0', '\a'
Низови константи
"Hello", "a", "\n"
"" - празен низ
ebook - The C Programming Language Ritchie & kernighan
-.doc
/* strlen: return length of s */
int strlen(char s[])
{
int i = 0;
while (s[i] != '\0')
++i;
return i;
}
<string.h>
Константни изрази
#define MAXLINE 1000
char line[MAXLINE+1];
Константи от изброим тип
enum months { JAN = 1, FEB, MAR, APR, MAY, JUN,
JUL, AUG, SEP, OCT, NOV, DEC };
/* FEB = 2, MAR = 3, etc. */
Декларации
Дефиниции
int lower, upper, step;
char c, line[1000];
Инициализация
char esc = '\\';
int i=0;
int limit = MAXLINE+1;
float eps = 1.0e-5;
Константи
const double e = 2.71828182845905;
const char msg[] = "warning: ";
Аритметични операции
Дефинирани са 4-те аритметични операции и операция остатък
от целочислено деление.
Операция |
символ |
|
тип на аргументите |
математика
|
събиране |
+ |
a+b |
int, double |
a + b
|
изваждане |
- |
a-b |
int, double |
a - b
|
умножение |
* |
a*b |
int, double |
ab
|
деление |
/ |
a/b |
int, double, b не е 0 |
a/b
|
остатък от деление |
% |
a%b |
int, b не е 0 |
a mod b
|
* Приоритети - както в
математиката (най-напред се извършват действия *, / и % и след тях
+ и -)
* Използване на скоби за промяна на реда на изпълнение на
аритметичните операции
Пример:
(a+b)/2 сборът
на числата a и b се дели на 2;
a+b/2 числото a се събира с
половинката на числото b.
* Аргументна зависимост - действието на операцията зависи от типа
на аргументите.
- Двата аргумента на аритметичните операции трябва да са от един и
същи числов тип данни; резултатът е от същия тип.
- Когато единият от аргументите е от тип double,
а другият - от тип int,
тогава аргументът от тип int се преобразува
(автоматично) на тип double и след това се
извършва аритметичната операция с аргументи тип double.
- Примери:
операция
+ |
резултат |
1.25 + 2.0 |
3.25 |
1.25 + 2 |
3.25 |
1 + 2 |
3 |
|
операция
/ |
резултат |
4.1 / 2.0 |
2.05 |
5.0 / 2 |
2.5 |
5 / 2 |
2 |
|
операция
% |
резултат |
5 % 2 |
1 |
34 % 2 |
0 |
5.1 % 2 |
грешка |
|
Проверка за високосна година:
if ((year % 4 == 0 && year % 100 != 0)
|| year % 400 == 0)
printf("%d is a leap year\n", year);
else
printf("%d is not a leap year\n",
year);
В С има и две унарни аритметични операции +,
-
Примери: -x, +hi, a =
-b, x = +8, d + (-e + -f)
Релационни и логически операции
** Операции за сравнения
(relational operators)
В езика C има 6 операции за сравнение:
C
|
Описание
|
Пример
|
Бележки
|
>
|
по-голямо от
|
a > 5
|
|
>=
|
по-голямо от или
равно на
|
x >= 5
|
Внимавайте да не напишете =>
Двата знака са в реда на произнасяне. |
<
|
по-малко от
|
x < 10
|
|
<=
|
по-малко от или
равно на
|
x <= 11
|
Внимавайте да не напишете =<
Двата знака са в реда на произнасяне. |
==
|
равно на
|
a == 5
|
Не бъркайте с = , което
е операция присвояване! |
!=
|
неравно на
(различно от)
|
a != 5
|
Все едно ! минава през (задрасква) знака
за равенство.
|
Сравняване на числа в С е по
правилата в математиката.
** Булеви (логически) операции
Логически константи - възможни са само две стойности:
истина |
да |
true |
1 |
изпълнено |
вярно |
удовлетворено |
лъжа |
не |
false |
0 |
нарушено |
невярно |
неудовлетворено |
Операция конюнкция (и) има стойност истина, ако и двата
аргумента са истина.
Операция дизюнкция (или) има стойност истина,
ако и поне един от двата аргумента е истина.
Основни логически операции:
и |
and
|
конюнкция |
&& |
бинарна операция |
или |
or
|
дизюнкция |
|| |
бинарна операция |
не |
not
|
отрицание |
! |
унарна операция |
Таблици за стойностите на логическите операции:
A
|
B
|
A && B
|
true
|
true
|
true
|
true
|
false
|
false
|
false
|
Any
|
false
|
|
|
A
|
B
|
A ||B
|
true
|
Any
|
true
|
false
|
true
|
true
|
false
|
false
|
false
|
|
|
A
|
!A
|
true
|
false
|
false
|
true
|
|
** Отложени пресмятания
За логическата операция and: ако първият аргумент
е false, то
стойността на операцията е false,
независимо от стойността на втория аргумент.
За логическата операция or:
ако първият аргумент е true, то
стойността на операцията е true,
независимо от стойността на втория аргумент.
Затова и двата случая не се проверява стойността на втория
аргумент - нарича се отложено пресмятане.
Пример.
for (i=0; i < lim-1 && (c=getchar()) != '\n' && c != EOF; ++i)
s[i] = c;