1. Увод в С++
// hello.cpp | /*Име на файла, съдържащ текста на програмата*/ |
#include <iostream> | /*Директива на препроцесора*/ |
using namespace std; | /*Стандартно пространство на имена*/ |
|
|
int main() | /*Главна функция */ |
{ cout << "Hello, World!\n"; | /*Оператор за потоков изход*/ |
return 0; | /*Връща на операционната система числото 0*/ |
} |
|
Hello, World! |
По-важни характеристики на синтаксиса на
езика:
- Азбуката на езика се състои от всички символи от клавиатурата на
компютъра.
- Поредица от букви и цифри образува име, разделители между
имената са интервал или символ, който не е буква или цифра.
- С++ различава малки от главни букви, напр. имената main
и Main са различни.
- Програмата се разполага линейно - по редове (няма горни и долни
индекси).
- Програмата се състои от оператори - всеки оператор завършва с
точка и запетая ";".
- Един оператор може да се разположи на два и повече реда; няколко
оператора може да се разположат на един ред - добрия стил на
програмиране изисква един оператор да се пише на един ред (освен
ако няма съществена причина за противното).
** Процесът от написване до изпълнение на програмата се
състои от следните стъпки:
I стъпка: Написване на текста на програмата;
използва се текстов редактор, който създава текстов файл - изходен
код (source code) [напр. hello.cpp].
II стъпка: Компилиране на програмата; извършва
се от компилатора, който създава файл - обектен код (object code)
[напр. hello.o или hello.obj].
III стъпка: Свързване на програмата;
извършва се от свързваща програма (linker), която създава изпълним
файл [напр. hello.exe или hello или a].
IV стъпка: Изпълнение на програмата;
операционната система или програмната система стартира създадения
изпълним файл.
** Видове грешки.
* Грешка по време на компилация (синтактична грешка) - неправилно
написана конструкция от езика. Компилаторът не може да продължи,
дава съобщение за грешка, програмистът трябва да поправи грешката
и отново да стартира компилатора.
* Грешка по време на изпълнение (Run-time error) - процесорът не
може да изпълни някоя инструкция, напр. делене на 0. Операционната
система прекратява изпълнението на програмата.
* Грешка в алгоритъма (логическа грешка) - програмата работи, но
дава грешни резултати.
int main()
{
cout << "How many pennies
do you have? ";
int pennies;
cin >> pennies;
cout << "How many nickels
do you have? ";
int nickels;
cin >> nickels;
cout << "How many dimes
do you have? ";
int dimes;
cin >> dimes;
cout << "How many
quarters do you have? ";
int quarters;
cin >> quarters;
/* обща стойност на монетите */
double total = pennies*0.01 +
nickels*0.05 +
dimes*0.10 + quarters*0.25;
cout << "Total value = "
<< total << "\n";
return 0;
}
How many pennies do you have? 10 How many nickels do you have? 3 How many dimes do you have? 7 How many quarters do you have? 3 Total value = 1.70 |
* Четене на цели и дробни числа (десетични
дроби).
* Грешки при вход - състояния на
входния поток: нормално и "грешка".
* Въвеждане на повече от 1 число с един
оператор за вход.
cin >> pennies >> nickels
>> dimes >> quarters;
(един оператор за печат, състоящ се от 4 операции за изходен
поток)
|
|
Низ е редица от символи | "Hello" |
Дефиниция на променлива | string name="John"; |
Заглавен файл | #include <string> |
Оператор за присвояване | name="Carl"; |
Извеждане на низове | cout << name; |
Вход | cin >> name; |
Вход на цял ред | getline(cin, name); |
Дължина на низ | int n=name.length(); |
Празен низ | "" |
Автоматична инициализация | string response; |
Поднизове.
string greeting = "Hello World!\n"
string sub = greeting.substr(0, 4);
cout << sub;
Hell |
Член-функция е функция, свързана с определен тип данни. Тя се
извиква с операция точка (.)
<име на променлива>.<име на функция>(<параметри на функцията>) |
За
променливи от тип string са
дефинирани следните член-функции:
name.length() - връща
дължината на низа;
greeting.substr(0,4)- връща
подниз от позиция 0 до позиция 3 (4 символа).
Позициите в низа се броят от 0.
Сливане на низове
(конкатенация).
string fname = "Nikolay";
string lname = "Kirov";
string name = fname + lname;
NikolayKirov
string name = fname + " " + lname;
Nikolay Kirov
Поне един от аргументите на сливането трябва да е променлива
// initials.cpp
#include <iostream>
#include <string>
using namespace std;
int main()
{ cout << "Please enter your
full name (first middle last): ";
string first;
string middle;
string last;
cin >> first >>
middle >> last;
string initials =
first.substr(0,1) + middle.substr(0,1) + last.substr(0,1);
cout << "Your initials
are " << initials << "\n";
return 0;
}
Please enter your full name
(first middle last): Nikolay Kirov Kirov Your initials are NKK |
Форматиране на
изхода.
Когато просто се отпечатват стойностите на
променливите, не се получава подредена таблица.
cout << pennies << " "
<< pennies * 0.01 << "\n";
cout << nickels <<
" " << nickels * 0.05 << "\n";
cout << dimes << " "
<< dimes * 0.10 << "\n";
cout << quarters << " "
<< quarters * 0.25 << "\n";
1 0.01 12 0.6 4 0.4 120 30 |
*
Използване на манипулатори:
-- setw задава
ширината на следващото изходно поле;
cout << setw(8);
-- setprecision задава
(максимален) брой на цифрите след десетичната точка;
cout << setprecision(2);
-- fixed фиксира
броя на цифрите след десетичната точка.
cout << fixed;
* Манипулаторите са дефинирани в заглавния файл iomanip.h, т.е. за
да ги използваме, трябва да имаме #include
<iomanip>
Така изглежда частта от програмата, която
отпечатва подредена таблица:
cout << fixed <<
setprecision(2);
cout <<setw(8)<< pennies
<<" "<< pennies*0.01 << "\n";
cout <<setw(8)<< nickels
<<" "<< nickels*0.05 << "\n";
cout <<setw(8)<< dimes
<<" "<< dimes*0.10 << "\n";
cout <<setw(8)<< quarters
<<" "<< quarters*0.25 << "\n";
1 0.01 12 0.60 4 0.40 120 30.00 |