Шпаргалка по С та С++

// ля-ля-ля
Коментар. Дія коментарю – від // та до кінця цієї одної стрічки

/* ку-ку-ку
гав-мяв */
Коментар. Позначає певну часту коду як коментар. /* позначає початок, */ кінець блоку.

int
Цілий тип даних. Має 32 розряди (від -2 147 483 648 до 2 147 483 647).
int k;
k=3;

char
Символьний тип. Для представлення символів та чисел. Розмірність 8 біт.
-128 <= X <= 127
char ch;
ch=’M’;

bool
Логічний тип. Приймає лише 2 значення: true (вірно) та false (невірно)
bool begin_bool;
begin_bool=true;

float
Тип даних з плаваючою точкою. Розмірність 32 розряди. 7 значущих цифр.
1.18e-38 < X < 3.40e+38
float s, d, k;
s=4.345; d=3.45e8; k=6.5e-4;

double
Тип даних з плаваючою точкою. Розмірність 64 розряди. 15 значущих цифр.
2.23e-308 < X < 1.79e+308

long double
Тип даних з плаваючою точкою. Розмірність 80 розрядів. 18 значущих цифр.
3.37e-4932 < X < 1.18e+4932

int number[25];
Масив даних типу int, що складається з 25 значень. Нумерація починається з нуля.
int sum, number[25];
number[0]=23; number[5]=12; number[15]=9; //присвоєння значень
sum=number[0]+ number[5]+ number[15];
int k[4]={3,4,1,7}; //ініціалізація масиву, лише при його визначенні

double D[5][5];
Двохвимірний масив. Аналогічно представляються масиви й вищої розмірності.
double r, K[3][3][3];
K[2][2][2]=3.45; K[1][1][1]=0.34; K[0][0][0]=1.2e-2; //присвоєння значень
r = K[2][2][2] – K[1][1][1] – K[0][0][0];
double D[3][3]={{1.2, 5.45, 2.4},{0.1, 2.1, 3.4},{5.7, 6.5, 7.3}}; //ініціалізація

char S[5];
Масив символів. Стрічкою він стає при наявності нульового символу \0 , що служить для позначення кінця стрічки
char dog[5] = {‘s’,’f’’,’d’,’r’,’q’}; //простий масив символів
char pig[5] = {‘r’,’t’,’z’,’k’,’\0’}; //стрічка
char fish[20] = “My name is Andrew”; //ініціалізація стрічки з \0 в кінці
char car[] = “Who is this?”; //автоматичне визначення розміру масиву

struct
Структура – визначений користувачем тип даних. Опис структури здійснюється як правило на початку лістингу, хоча може описуватися і всередині функції, але тоді вона буде недоступною для інших функцій. В С++ зручніше використовувати класи. Доступ до елементів структури здійснюється через крапку (.).
struct book //шаблон структури
{
char name[20];
double price;
};
void main()
{
book Kipling={“The jungle book”, 25.5}; //ініціалізація структури
Kipling.price=21.25; //присвоєння елементу іншого значення
}

union
Об’єднання можуть містити один елемент різних типів. Використовується для економії пам’яті. Розмір виділяється для найбільш ємнісного типу.
union one
{
int k;
double dd;
};
………………………
one men;
men.k=15; //містить значення типу int
men.dd=2.34; //містить значення типу double, значення int втрачено

enum
Перелік створює символічні константи для цілих чисел, починаючи з 0 (за замовчуванням). Єдино допустимими значеннями можуть бути лише значення (назви) зі списку. Часто має застосування для оператора switch.
enum color {red, orange, yellow};
……………………..
color a, b;
a=red; b=yellow;
a=2; //невірно!!!!!

&number
Оператор & визначає адрес змінної.

int *
Оголошення покажчика на значення типу int.
int M, number=5; //оголошення та ініціалізація змінних
int *p_number; //оголошення покажчика
p_number = &number; //присвоєння адресу змінної покажчику
M = *p_number; //отримання значення змінної через покажчик
*p_number = *p_number + 2; //додавання до змінної числа 2

new
Оператор виділення пам’яті. Виділяє пам'ять під змінні будь-яких типів, в тому числі структури, класи і т.п. Це є необхідним особливо при створенні динамічних масивів, розмір яких ми не знаємо наперед.
double *dob; //оголошення покажчика
dob = new double; //виділення області пам’яті для величини типу double
*dop = 34.237; //занесення значення в область пам’яті

delete
Оператор очищення виділеної пам’яті.
int *ps = new int; //виділення пам’яті
delete ps; //очищення пам’яті

new int [10]
Виділення пам’яті для масиву з 10 значень. Доступ до елементів масиву, виділеного динамічно, здійснюється так само, як і до звичайного.
int *k = new int [10]; //виділення блоку пам’яті для масиву з 10 елементів
k[0]=2; k[4]=4;
delete [ ] k; //очищення пам’яті, відведеної для динамічного масиву

double **
Покажчик на двовимірний масив. Спершу виділяється пам'ять для масиву покажчиків, а потім для елементів цього масиву покажчиків покроково виділяються блоки пам’яті.
double **dd; //оголошення покажчика на покажчики типу double
dd = new double *[3]; //виділення пам’яті для масиву покажчиків
for (int j=0; j<3; j++)
dd[j] = new double [3]; //поелементне виділення пам’яті одинарних масивів
dd[1][2] = 3.45; dd[0][2] = 0.54; //присвоєння значень елементам масиву
Очищення пам’яті здійснюється у зворотному порядку
for (int i=0; i<3; i++)
delete [ ] dd[i]; //очищення пам’яті для елементів масиву покажчиків
delete [ ] dd; //очищення пам’яті з під масиву покажчиків

->
Оператор приналежності. Використовується для доступу до елементів структур та класів, які оголошені через покажчик та є виділена для них пам’ять.
struct book { сhar name[20]; double price; }; //шаблон структури
void main()
{
book *Kipling; //оголошення покажчика на структуру
Kipling = new book; //виділення пам’яті
Kipling->price = 31.25; //присвоєння елементу значення
}

++
– –
Оператори інкремента та декремента. ++ збільшує значення на 1, -- зменшує. Розрізняють префіксну та суфіксну форму: ++x та x++. При ++x зміна значення здійснюється до обробки операнда, при x++ після обробки.
int x = 5, z = 5, y;
y = ++x; //змінити значення x, а потім присвоїти його y. (x = 6, y = 6)
y = z++; //z присвоїти y, а потім змінити z (z=6, y=5)

+= –=
*= /=
Комбіновані оператори присвоєння. Суть полягає в накопиченні значення для змінної.
i = i+ b; k = k * c;
i += b; k *= c; //результат аналогічний як і у рядку вище

<, <=, ==, >, >=, !=
Оператори порівняння. Використовують для перевірки умов. Кожен вираз зводиться до значення true або false, в залежності від результату порівняння.
< менше, <= менше або рівно, == рівно, > більше, >= більше або рівно, != не рівно

||
&&
!
Логічні операції. Використовують для об’єднання та зміни існуючих операцій порівняння. || – або, && – і, ! – не
if (x<-3 && x>3) //результат true якщо виконуються обидні умови
if (x<-3 || x>3) //результат true якщо виконується одна з умов
if ( !(x>3) ) //міняє результат логіки на протилежний, false = ! true

for (i=0; i<m; i++)
Цикл. Здійснює кількість повторів операції, допоки умова має значення true.
for (ініціалізація змінної; умова продовження циклу; обновлення змінної циклу)
int i, k;
for (i=0; i<5; i++)
k=k+i; //в циклі повторюється одна операція,
for (int j=50; j >10; j=j-5) //або декілька, які об’єднані у блок за допомогою { }
{
k=k*j;
k=k+j;
}
int h, g;
for (h = 1, g = 25; g<5; h++, g--) // h = 1, g = 25 – один вираз розділений комою
k=k*g+h;

while ()
Простий цикл. Циклить допоки умова має значення true
int k=1;
while (k<5) //коли k стане рівним 5, цикл завершиться
k++;

do while ()
Цикл, який виконується хоча б один раз. Циклить допоки умова має значення true.
int z, k=1;
do
{
k++;
z=z*k;
}
while (k<5) //коли k стане рівним 5, цикл завершиться

if () else
Логічний оператор. Якщо умова виконується, то тоді виконується певна дія, в противному випадку виконується інша дія. Переважно використовують у спрощеній формі if (), не зазначаючи протилежної дії.
int z, x, k=1;
if (k==1) z=k;
k=2;
if (k==1) z=k;
else x=k;
При вкадених операторах if if else рекомендується використовувати { }, щоб уникнути помилки належності останньої операції.

? :
Умовний оператор. Альтернатива if else
(умова) ? (вираз1) : (вираз2)
c = a>b ? a : b; //якщо a>b , тоді c=a, в протилежному випадку c=b

switch ()
Оператор переключення.
int choice, k;
…………………….
switch (choice)
{
case 1 : k=1; break;
case 2 : k=5; break;
case 3 : k=9; break;
default : k=1; break;
}
В дужках () має бути значення цілочислового виразу. Якщо choice рівне 2, то програма переходить до стрічки із міткою case 2:, якщо значення не відповідає ні одній мітці, тоді виконується стрічка default: Найчастіше мітками є просто константи типу int, char або елементи з переліку enum.
Варто зазначити, що даний оператор switch не здійснює єдиний вибір між наявними варіантами операцій, а лише здійснює перехід до позначеної міткою стрічки. Тобто, якщо значення дорівнює 2, то він переходить на другу стрічку та послідовно потім виконує усі наступні. Тому тут використовують оператор break для пропуску решта стрічок та виходу із оператора switch.

break
Оператор break використовується в операторі switch та любих циклах. Він завершує їхню дію та переходить до наступного оператора, що стоїть за ними.

continue
Оператор continue використовується в циклах. Він пропускає решту тіла цикла та починає нову ітерацію циклу.
for (int i=0; i<24; i++)
{
if (i==15) continue; //пропускає решта циклу цієї ітерації
if (i==20) break; //вихід з циклу
k=k+23;
}

return
Оператор завершення тіла функції та передачі назовні певного значення.

Функція ()
Функція складається з переліку вхідних змінних різних типів та однієї змінної, що повертається туди, де був здійснений виклик даної функції
int get (int a, int b)
{
int c;
c=a+b*3;
return c; //повернення назовні значення
}
void main (void)
{
int k, f=5, d=2;
k = get(f, d); //виклик функції та присвоєння змінній k результату
}

Функції та масиви
Одномірні масиви. У функції необхідно передавати покажчик на масив та кількість елементів масиву.
int sum (int arr[], int n)
{
int S=0;
for (int i=0 ; i<n ; i++) S+=arr[i];
return S;
}
void main (void)
{
int d, f[5]= {2, 4, 6, 5, 3};
d=sum(f, 5);
}
У заголовку функції sum() замість int arr[] можна використовувати запис int *arr. По змісту вони ідентичні. При передачі покажчика на масив у фунцію, ми одразу працюємо з оригінальним масивом, а не з копією.
int sum (int arr[], int n)
{
for (int i=0 ; i<n ; i++)
arr[i] = i*2; //заповнення масиву значеннями
return 1;
}
Двовимірні масиви.
int data [3][4] = {{1,2,3,4,}, {2,3,4,5}, {3,4,5,6}};
s = sum(data, 3);
……………………………………….
int sum (int ar2[ ] [4], int n)
{
return ar2[2][3];
}

<<
>>
Організація потокового вводу-виводу у файлах.
#include<fstream>
using namespace std;
…………………………………………………..
int x1,x2,y1,y2;
fstream file; //оголошення файлового потоку
file.open("data.txt",ios_base::out | ios_base::trunc); //відкриття файлу для запису
file <<x1<<" "<<x2<<endl; //вивід у файл значень x1,x2. endl – кін.стрічки
file.close(); //закриття файлу
file.open("data.txt",ios_base:: in); //відкриття файлу для читання
while(!file.eof()) //перевірка на кінець файлу
file>>y1>>y2; //вивід значень у змінні y1 та y2
file.close(); //закриття файлу