I. Основи на езика C++ Въведение Произход на езика C++


Други числови типове данни



страница3/4
Дата17.09.2016
Размер0.63 Mb.
#9840
1   2   3   4

5.2.Други числови типове данни

Числата с различна големина, с по-голяма или по-малка точност могат да се представят с помощта на различни типове данни.В следващата таблица са дадени необходимия обем памет, диапазона и точността на числените типове данни. Точността означава броя на значещите цифри в нормалния запис на числото (точно една цифра пред десетичната точка), включително и знака пред десетичната точка. Диапазонът за отрицателните числа е същият, но със знак “-” пред всяка стойност.


И

Тип

Памет

Диапазон

Точност

int

(16-битов комп.)



2 байта

-32 768 до 32 767

-

int

(32-битов комп.)



4 байта

-2 147 483 648 до 2 147 483 647

-

unsigned int

(16-битов комп.)



2 байта

0 до 65 535

(не поддържа отрицателни стойности)



-

unsigned int

(32-битов комп.)



4 байта

0 до 4 294 967 295

(не поддържа отрицателни стойности)



-

short int

2 байта

-32 768 до 32 767

-

long

(long int)

4 байта

-2 147 483 648 до 2 147 483 647

-

unsigned long

4 байта

0 до 4 294 967 295

-

char

1 байт

-128 до 127

-

unsigned char

1 байт

0 до 255

(не поддържа отрицателни стойности)



-

float

4 байта

3.4 * 10-38 до 3.4 * 10+38

7 знака

double

8 байта

1.7 * 10-308 до 1.7 * 10+308

15 знака

long double

10 байта

3.4 * 10-4932 до 1.1 * 10+4932

19 знака


мената long и long int означават един и същ ТД.
Типовете, представящи целочислени стойности се наричат цели типове данни, а представящите дробни числа- ТД с плаваща запетая. Наричат се така, защото се съхраняват в експоненциална форма с десетична точка след първата цифра. Например числото 392.123 първо се привежда във формат 3.92123е2. При това преобразуване десетичната точка преплува (float) в ново положение.

5.3.Тип char

Освен числови в С++ съществуват и други ТД. Типът char позволява ползването на символни променливи. Различните реализации на езика поддържат различни множества от символи.Като минимум множеството от стойности на типа char включва главните и малки латински букви, цифрите, символът интервал, символ за край на ред и други управляващи и графични символи. Обявяването е аналогично на числовите променливи.



Пример:

char symbol, letter;


В езика съществуват също типове данни, които могат да подържат символни низове (редици от символи), но на тях ще се спрем по-късно. Символните константи се ограждат в апострофи, докато символните низове – в кавички.

Пример:

‘А’ е константа от тип char, докато

“А” е низ от един символ и не е от тип char.

В определени ситуации променливи и константи от тип char могат да се интерпретират от езика като числови променливи и константи.

Примерна програма, илюстрираща използването на тип char:


#include
int main()

{

char ch1, ch2, ch3;


cout<<"Въведете Вашите инициали без точки:\n";

cin>>ch1>>ch2;


ch3=' ';
cout<<"Вашите инициали са: \n"

<cout<<"Довиждане!";

return 0;

}

5.4.Съвместимост на типовете данни

По правило на променливи от един тип данни на могат да се шрисвояват стойности от друг тип данни. Например при изпълнение на фрагмента

int int_var;

int_var = 2.99;

повечето компилатори ще дадат съобщение за грешка, други – само предупреждение, а някои ще изпълнят операторите, но при това променливата int_var ще получи стойност 2.

Съществуват обаче няколко особени ситуации, когато на променлива от един тип може да се присвои стойност от друг тип.


- На променлива от реален тип може да се присвои цяла стойност.
Пример:

double double_var = 2;


След това присвояване цялата константа 2 ще бъде интерпретирана като дробна (2.0).

- На променлива от тип char може да се присвои стойност от тип int;

- На променлива от тип int може да се присвои стойност от тип char.
В много случаи езика С++ разглежда символите като числа (техния вътрешен код, който за съжаление не е стандартен). Променливите от тип char използват по-малко памет и затова използването им в аритметични изрази може да довее до известни икономии.

5.5.Аритметични операции и изрази

Над числови променливи и константи са допустими следните аритметични операции: събиране (осъществява се чрез операцията “+”), изваждане (“-”), умножение (“*”) и деление (“/”, “%”). Приоритетът на операциите в даден аритметичен израз е аналогичен на приоритета в математиката. Той може да бъде променен с помощта на кръглите скоби “(“ и “)”.


Аритметични операции

“ + ” – събиране

“ – “ – изваждане

“ * ” – умножение

“ / “ – деление; целочислено деление

“ % “ – остатък от делението (само при целочислени операнди)


Синтаксис:

Операнд Операция Операнд


Ако и двата операнда са цели, резултатът е цял. Ако поне единият операнд е дробен, се получава дробен резултат. Делението на цели числа с “ / ” връща цялата част от делението, а с “ % ” – остатъка.

Примери:

25 / 4.0  6.25

25 / 4  6

25 % 4  1



Приоритет на аритметичните операции

(1) изразите в скоби: ( );

(2) умножение, деление: * , /, %;

(3) събиране, изваждане: +, - ;

(4) сравнение: <, <=, >, >=, = =, !=
Операциите за сравнение връщат стойност 0, ако съответното неравенство (равенство) не е вярно, и произволен друг резултат – ако е вярно. С двойката символи “= =” се отбелязва математическата операция “равно”, а с “!=” – “различно”.
Примери:


Математическа формула

Израз в С++

b2 - 4ac

b*b – 4*a*c

x(y + z)

x*(y + z)



1 / (x*x + x + 3)



(a + b) / (c – d)



5.6.Съкратен запис на оператора за присвояване

Съкратен запис на оператора за присвояване се използва, когато от двете страни на оператора за присвояване участва една и съща променлива


Синтаксис:

Променлива Операция = Израз;


Този запис е еквивалентен на записа

Променлива = Променлива Операция (Израз);




Пример

Еквивалентен запис

number+ = 1;

number = number + 1;

total- = discount;

total = total – discount;

bonus* = 2;

bonus = bonus * 2;

a / = q;

a = a /q;

rest % = num;

rest = rest % num;

bill* = 1 + interest;

bill = bill * (1 + interest);

Съществува още по-кратък запис за операциите инкремент и декремент. Инкремент означава увеличаване на стойността на дадена променлива с 1, а декремент – намаляване с 1.


Инкремент и декремент

Синтаксис:

Променлива++; ( инкремент)

Променлива--; ( декремент)



Примери:

Резултат:

int var1 = 3;




var++;




cout<

4







double var2 = 4.5;




var2--;




cout<

3.5


Въпроси и задачи:


  1. Какво ще се изведе в резултат от изпълнението на следния фрагмент (променливите a, b и c са обявени от тип char):



a = ‘b’;

b = ‘a’;


c = a ;

cout<

Отговор:


    baba



                  1. Какво ще се изведе след изпълнението на следния фрагмент:

а)

int num;



num =(1 / 3)*3;

cout<
б)

double num;

num =(1 / 3)*3;

cout<
в)

double num;

num =(1.0 / 3)*3;

cout<
г)

double num;

num =(1 / 3.0)*3;

cout<
д)

double num;

num =(1 / 3)*3.0;

cout<
Отговори:

а) 0 б) 0 в) 1 г) 1 д) 0




                  1. Да се напише програма. която въвежда от клавиатурата две числа от тип int и извежда цялата част и остатъка от делението им.

                  2. Да се напише израз на С++, отговарящ на следните математически формули:

а)

б)

в), където с [x] се означава цялата част на числото х

г)

д), където n!=1.2.3....n (напр. 5!=1.2.3.4.5=120)


                  1. Нека е дадена декларацията

int x, y, z, n=536;

Какви ще бъдат стойностите на променливите x, y и z след изпълнение на следните оператори:

а) x = n / 100;

б) y = n % 100 / 10;

в) z = n % 10;


                  1. Да се напише програма. която въвежда от клавиатурата четирицифреното цяло число N, намира и извежда цифрите на числото N.

Решение:

#include


int main()

{

int N, d1, d2, d3, d4;


cout<<"Въведете четирицифрено цяло число: \n";

cin>>N;
d4=N%10;

N/=10;

d3=N%10;


N/=10;

d2=N%10;


N/=10;

d1=N%10;
cout<<"d1 = "<

cout<<"d2 = "<

cout<<"d3 = "<

cout<<"d4 = "<return 0;

}


                  1. Дадена е декларацията

int a=10, b=20, c=30;

Какви ще бъдат стойностите на променливите а, b и с след изпълнението на следния фрагмент:

c+ = a+b;

a=c – (a+b);

b=a – (b+c);

c=b – (c+a);



Отговор:

а = 30, b = -50, с = -140




                  1. Съставете програмен фрагмент, с който по дадена стойност на променливата х, да се пресметне

а) х3 с помощта на две умножения;

б) х4 с помощта на две умножения;

в) х18 с помощта на пет умножения;
Решение:

а) а1 = х*х; //х2

а2 = а1*х; //х3
б) а1 = х*х; //х2

а2 = а1*а1; //х4


в) а1 = х*х; //х2

а2 = а1*а1; //х4

а3 = а2*а2; //х8

а4 = а3*а3; //х16

а5 = а4*а1; //х18


                  1. Съставете програма, която въвежда произволна латинска буква и отпечатва следващата по ред буква (напр. B  C)

Решение:

#include


int main()

{

char letter;



cin>>letter;

letter++;

cout<return 0;

}


                  1. Да се напише програма, която въвежда главна латинска буква и извежда съответната малка буква

Упътване:

Използвайте, че множеството от стойности на типа char е наредено като както главните, така и малките латински букви са непосредствено една след друга по азбучен ред, т.е.



char:

………,’A’,’B’, … ,’X’,’Y’,’Z’, …………,’a’,’b’, …,’z’, ………

и разликата между съответните главна и малка буква е постоянно число
Решение:

#include


int main()

{

char letter;



cin>>letter;

letter+='a' - 'A';

cout<return 0;

}


                  1. Да се напише програма, която въвежда малка латинска буква и извежда съответната главна буква

6.Условен оператор

Програмите, които разгледахме, изпълняват операторите в реда, в който са написани. Такива програми се наричат линейни. Понякога обаче се налага този ред да бъде променен или да се направи избор на оператора, който трябва да се изпълни. Тук ще разгледаме един от простите методи за промяна на потока на управление на програмата.



Да_оператор_Пълна_форма'>6.1.Условен оператор – избор между две алтернативни условия

Синтаксис:
Кратка форма:
if (Условие)

Да_оператор


Пълна форма:
if (Условие)

Да_оператор

else

Не_оператор


Условието е логически израз, т.е. израз, който може да приема стойност истина или лъжа.
Семантика:
Пресмята се стойността на условието и ако то е вярно – изпълнява се Да_операторът, а ако не е вярно – Не_операторът (само при пълната форма). След това и при двете форми се преминава към следващия оператор.
Пример 1: Да се напише програма, която пресмята и извежда абсолютната стойност на дадено реално число х (х се въвежда от клавиатурата)

Решение:

Тъй като , програмата трябва да променя знака на числото х само в случая, когато то е отрицателно. За целта ще използваме кратката форма на оператора if.


#include
int main()

{

int x, abs;


abs=x;

cout<<"Въведете стойността на х: ";

cin>>x;
if (x<0) abs = -x;
cout<<"Абсолютната стойност на х е: "<return 0;

}

Операторът if проверява дали числото х е отрицателно и само в този случай променя стойността на променливата abs (съхраняваща абсолютната стойност на числото х). Ако това условие не е изпълнено програмата продължава със следващия оператор – извеждане на абсолютната стойност на х.


Пример 2: Да се напише програма, която пресмята и извежда лицето на квадрат със страна а. Ако числото а не е положително програмата трябва да извежда съобщение, че не съществува квадрат със страна а.

Решение:

#include


int main()

{

int a,S;


cout<<"Въведете дължината на страната на квадрата: \n";

cin>>a;


S=a*a;

if (a>0)


cout<<"Лицето на квадрата е: "<else


cout<<"Не съществува квадрат със страна "<return 0;
}

Програмата използва пълната форма на оператора if, тъй като във всеки от двата случая (а>0 и а0) се извеждат различни съобщения.


Забележки:

1. Условието на if оператора трябва да е напълно определено преди неговото използване.

2. Да_оператор и Не_оператор представляват точно един оператор

3. Кратката форма if (Условие) Да_оператор е еквивалентна на пълната форма if (Условие) Да_оператор else ;
Обърнете внимание, че в Пример 2 се прави излишно пресмятане на лицето на квадрата в случая, когато дължината на страната е отрицателна. По-приемливо е операторът S=a*a; да се изпълнява само в случая, когато а>0. В такъв случай обаче, ако условието на if оператора има стойност истина ще трябва да се изпълнят два оператора – присвояване на стойност на променливата S и извеждане на резултата, което не е допустимо. Проблеми от такъв характер се избягват чрез организирането на съставен оператор.

6.2.Съставен оператор. Блок. Област на видимост на променлива

Съставният оператор представлява група оператори, заключени във фигурните скоби “{” и “}”. Използва се там, където е допустим само един оператор.


Съставен оператор

Синтаксис:

{

Оператор_1



Оператор_2

.....................

Оператор_N

}
Чрез използването на съставен оператор програмата от Пример 2 може да се модифицира по следния начин:

#include
int main()

{

int a,S;


cout<<"Въведете дължината на страната на квадрата: \n";

cin>>a;


if (a>0)

{

cout<<"Лицето на квадрата е: "<

S=a*a;

}

else



cout<<"Не съществува квадрат със страна "<return 0;

}
В С++ е допустимо обявяването на променлива да става на произволно място в програмата, в това число и във вътрешността на съставен оператор. В такъв случай съставния оператор се нарича блок, а обявените в него променливи - локални променливи. Тези променливи са достъпни само от вътрешността на блока и от никое друго място в програмата. Затова блокът представлява област на видимост за съответните променливи. При завършване на изпълнението на блока, паметта, резервирана за локалните променливи се освобождава. По тази причина многократното дефиниране на променливи с едно и също име в различни части на програмата е абсолютно допустимо, стига техните области на видимост да не съвпадат. За компилатора това са различни променливи.

Ако блокът е вмъкнат ( вложен ) в друг блок, в него са достъпни всички променливи, декларирани във външния блок.

6.3.Логически израз

Както видяхме, условието на if оператора трябва да бъде логически израз.



Под логически израз ще разбираме произволно условие, което може да провери за истинност , т.е. израз, който има стойност истина или лъжа.

Логически израз в езика С++ може да се конструира чрез основните логически операции – сравнение, логическо отрицание, логическо умножение (конюнкция), логическо събиране (дизюнкция).

В следващата таблица са дадени операторите за сравнение в езика С++ и техните математически еквиваленти.


оператор

= =

!=

<

<=

>

>=

мат. еквивалент

=



<



>


Обърнете внимание, че някои оператори се представят чрез двойка символи.

Останалите логически операции се представят по следния начин:



Сподели с приятели:
1   2   3   4




©obuch.info 2024
отнасят до администрацията

    Начална страница