Типове, оператори и изрази - 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;