Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пособие

.pdf
Скачиваний:
67
Добавлен:
22.03.2015
Размер:
1.35 Mб
Скачать

 

тервалі (a, b). Якщо потрібні елементи відсутні, то вивести – 1.

 

k

 

i

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Дано число n. Обчислити:

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(2i)!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. Вивести на екран у вигляді

 

 

 

 

 

 

ax

2

 

+b, при a < 0 та c 0,

 

таблиці значення функції F на

 

 

 

 

 

 

 

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

інтервалі від Xпоч до Xкін з

 

F =

x

 

a

, при a > 0

та c = 0,

 

кроком Н. Значення a, b, c,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

Xпоч, Хкін, Н – дійсні числа.

 

 

 

 

 

 

c

+

 

,

 

 

в інших випадках.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

c

 

 

 

 

 

22.

1. Згенерувати набір із десяти цілих

 

елементів. в

діапазоні

 

(0,25). Знайти кількість елементів, що розташовані перед пер-

 

шим мінімальним елементом.

 

i!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Дано число n. Обчислити: n

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=1 (2i)!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. Вивести на екран у вигляді

 

 

 

 

 

 

 

 

 

c

 

 

, при x <

0 та b 0,

 

таблиці значення функції F на

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

+b

 

 

 

 

 

 

 

ax

 

 

 

 

 

 

інтервалі від Xпоч до Xкін з

 

F =

x2

a2

 

, при x >

0 та b = 0,

 

кроком Н. Значення a, b, c,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c3

 

 

 

 

 

 

 

x2

 

 

 

 

Xпоч, Хкін, Н – дійсні числа.

 

 

 

 

 

 

1

,

 

 

в інших випадках.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c

 

 

 

 

 

 

 

 

 

 

 

23.

1. Згенерувати набір із десяти цілих

 

елементів, в

діапазоні

 

(-100,20). Знайти кількість елементів, що розташовані після

 

останнього максимального елементу.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Дано число n. Обчислити: n

 

k!

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k =1

k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. Вивести на екран у вигляді

 

 

 

 

 

 

 

 

 

c

 

 

 

, при x <

0 та b 0,

 

таблиці значення функції F на

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

+b

 

 

 

 

 

 

 

ax

 

 

 

 

 

 

інтервалі від Xпоч до Xкін з

 

F =

x2

a

2

 

, при x > 0 та b = 0,

 

кроком Н. Значення a, b, c,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c3

 

 

 

 

 

 

 

 

x2

 

 

 

 

 

Xпоч, Хкін, Н – дійсні числа.

 

 

 

 

 

 

1

 

,

 

 

в інших випадках.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

61

24. 1. Згенерувати десять дійсних чисел в діапазоні (-20,20). Знайти

номер першого екстремального (тобто мінімального або макси-

мального) із десяти цілих чисел елементів.

 

 

2. Дано число n. Обчислити: n

i!

 

.

 

 

i + 2i

2

 

 

i=1

 

 

 

 

 

3. Вивести на екран у вигляді

 

c + (x c)2

, при a 0 та b 0,

таблиці значення функції F на

 

 

 

 

 

a 2 + b2

 

 

 

інтервалі від Xпоч до Xкін з

 

 

a 2

, при x > 0 та b = 0,

кроком Н. Значення a, b, c,

F =

 

 

 

x c

 

 

Xпоч, Хкін, Н – дійсні числа.

 

a(x + c), в інших випадках.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

25.1. Згенерувати десять дійсних чисел в діапазоні (0,50). Знайти номер останнього екстремального (тобто мінімального або максимального) із десяти цілих чисел елементів.

2. Дано число n. Обчислити: n 2i + 1i! .i=1

3. Вивести на екран у вигляді

 

 

1

 

 

 

, при x < 0 та c 0,

таблиці значення функції F на

 

 

 

 

 

 

 

 

2

 

 

 

 

ax

 

+b

інтервалі від Xпоч до Xкін з

 

10x

 

 

 

 

кроком Н. Значення a, b, c,

F =

 

 

 

,

при x > 0 та c = 0,

 

 

4

c

 

 

 

 

Xпоч, Хкін, Н – дійсні числа.

 

bx

 

 

,

 

в інших випадках.

 

 

 

 

 

 

 

 

c a

 

 

 

 

7.5Оператори передачі управління

7.5.1Оператор розриву break

Синтаксис : break;

Оператор розриву break перериває виконання операторів do, for, while або switch.

В операторі switch він використовується для завершення блоку case. В операторах циклу – для негайного завершення циклу, що не

62

зв’язане з перевіркою звичайної умови завершення циклу. Коли оператор break зустрічається всередині оператора циклу, то здійснюється негайний вихід з циклу і перехід до виконання оператору, що слідує за оператором циклу.

Приклад.

#include<stdio.h> #include <conio.h> int main()

{

for (int i=0;i<1000;i++)

{

printf("%d - %d\n",i,i*i*i); if (i*i*i>=10000) break;

}

_getch(); return 0;

}

7.5.2 Оператор продовження continue

Синтаксис : continue;

Оператор continue передає управління на наступну ітерацію в операторах циклу do, for, while. Він може розміщуватися тільки в тілі цих операторів. В операторах do і while наступна ітерація починається з обчислення виразу умови. Для оператора for наступна ітерація починається з обчислення виразу зміни значення лічильника.

Приклад.

while (i-- > 0)

{

x=f(i);

if (x == 1) continue; else y=x*x;

}

У даному прикладі тіло циклу while виконується, якщо i більше нуля. Спочатку значення f(i) присвоюється змінній x, потім, якщо x не рівний 1, то y присвоюється значення квадрата числа х, і

63

управління передається на «заголовок» циклу, тобто на обчислення виразу (i-->0). Якщо ж х рівний 1, то виконується оператор продовження continue, і виконання продовжується з «заголовку» оператора циклу while, без обчислення квадрата x.

7.5.3 Оператор переходу goto

Синтаксис: goto <мітка>;

Оператор безумовного переходу goto передає управління безпосередньо на <оператор>, перед яким розташована <мітка>. Область дії мітки обмежена функцією, в якій вона визначена. Тому кожна мітка повинна бути відмінною від інших в одній і тій самій функції. Також, неможливо передати управління оператором goto в іншу функцію [20].

Оператор, перед яким розташована <мітка>, виконується зразу після виконання оператора goto.

Якщо оператор з міткою відсутній, то компілятор видасть повідомлення про помилку.

Наведемо, приклад використання goto:

if (errorcode>0) goto exit;

exit:

return errorcode;

У свою чергу при появі концепції структурного програмування оператор goto піддався критиці, і його використання стало розглядатися як ознака поганого стилю програмування. Дійсно, надмірно широке використання goto робить структуру програми надмірно заплутаною, тому без особливої необхідності намагайтесь обходитися без оператора goto.

7.5.4Оператор return

Даний оператор повертає результат у точку виклику функції. Ми вже досить часто зустрічали його у функції main(). У відповідності зі стандартом мови С, функція main() повинна повертати операційній системі ціле значення, що служить кодом завершення програми.

64

Оператор return має наступний вид: return вираз;

Кількість операторів return усередині функції нічим не обмежена. Варто лише мати на увазі, що їх виконання припиняє роботу функції. Крім того, вираз в операторі return може бути відсутнім.

Уцьому випадку функція повертає керування в точку виклику.

7.5.5Функція exit

Удеяких випадках виконання програми продовжувати небезпечно. Якщо відбулася подія, що може привести до серйозної помилки, розумніше припинити виконання програми взагалі. Якщо це відбуло-

ся у функції main(), варто виконати оператор return, задавши як значення, що повертається, ознаку помилки. Якщо ж помилка відбулася в іншій функції, передача керування в точку виклику може виявитися нездійсненною. У цьому випадку варто виконати функцію exit() і передати керування операційній системі.

Прототип функції exit() визначений у заголовному файлі

<stdlib.h>.

void exit(int ознака);

Значення змінної ознака передається операційній системі. Якщо ця змінна дорівнює нулю, програма завершена успішно. Інші значення позначають помилку. У мові С як ознаку помилки можна застосовувати макроси EXIT_SUCCESS і EXIT_FAILURE. Функція exit() використовує заголовний файл stdlib.h чи заголовок

<cstdlib>.

65

8МАСИВИ

8.1Одномірні масиви

Масив являє собою сукупність однотипних змінних, розташованих у послідовно пронумерованих суміжних комірках пам’яті. Номер елемента масиву задається індексом. Індексація елементів масиву починається з нуля. Найменший індекс відноситься до першого елемента масиву, а найбільший – до останнього. Масиви можуть бути одномірними і багатомірними.

Основні властивості масивів в мові С:

масив займає неперервну ділянку оперативної пам’яті;

всі елементи масиву мають однаковий тип і спільне ім’я;

тип елементів масиву може бути довільним простим або складеним;

індекс першого елементу можна звертатись як через індекси, так і через вказівники;

ім’я масиву є константним вказівником на його початок в оперативній пам’яті, тобто ім’я масиву зберігає адресу першого елемента цього масиву;

масив може бути одномірним чи багатомірним.

Загальна форма оголошення одновимірного масиву з явною вказівкою кількості елементів масиву:

тип ім’я_масива [кількість_елементів_масива];

Наприклад,

float а[10]; //опис масиву з 10 дійсних чисел int d[20]; //опис масиву з 20 цілих чисел

Розмірність масиву разом з типом його елементів визначає обсяг пам’яті, необхідний для розміщення масиву, що виконується на етапі компіляції, тому розмірність може бути задана тільки цілою додатною константою або константним виразом. Якщо при описі масиву не вказана розмірність, повинен бути присутній ініціалізатор, у цьому випадку компілятор виділить пам’ять за кількістю значень. Розмір масива неможливо змінити під час роботи програми.

Надалі ми побачимо, що розмірність може бути опущена також у списку формальних параметрів.

Для доступу до елементу масиву після його імені вказується номер елемента (індекс) у квадратних дужках.

66

ім’я_масива [вираз];

де ім’я_масиву – покажчик-константа; вираз – індекс, число цілого типу; він визначає адресу заданого елемента масиву відносно адреси нульового елемента масиву.

Елементи масиву можна проініціалізувати або присвоїти їм значення різними методами, наприклад:

1. Значення масиву ініціалізуються безпосередньо в програмі:

int b[5]={3,2,1};

//b[0]=3; b[l]=2; b[2]=l; b[3]=0; b[4]=0;

2. Значення масиву зчитуються з клавіатури:

int b [10],i; for(i=0;i<10;i++)

{

printf("Введіть значення %d-того елементу",i); scanf("%d",&b[i]);

}

3. Значення масиву генеруються випадковим чином:

int c[10],i; for(i=0;i<10;i++)

{

c[i]=rand()%10-5; printf("%d\n",c[i]);

}

4. Значення масиву зчитується з файлу.

Приклад. Розрахуємо суму елементів масиву.

#include <stdio.h> #include <conio.h> int main()

{

int c[10],i, sum=0; for(i=0;i<10;i++)

{

c[i]=rand()%10-5; printf("%d\n",c[i]);

67

}

for(i=0;i<10;i++)

sum=sum+c[i];

printf("sum=%d",sum); _getch();

return 0;

}

8.2Багатомірні масиви

Багатомірний масив у мові С розглядається як сукупність масивів меншої розмірності. Наприклад, двомірний масив – це сукупність одномірних масивів (його рядків), тримірний масив – це сукупність матриць, матриці – сукупності рядків, а рядок – сукупність елементів одновимірного масиву.

При звертанні до багатомірних масивів одержання значення елемента масиву можливо лише при повній кількості індексів. При цьому обчислюються індексні вирази зліва на право, і доступ до значення виконується після обчислення останнього індексного виразу.

Матриця – це двомірний масив, кожний елемент якого має два індекси: номер рядка та номер стовпця. Тому для роботи з елементами матриці необхідно використовувати два цикли. Якщо значення параметра першого циклу буде номер рядка матриці, то значенням параметра другого – стовпці (або навпаки). Опрацювання матриці полягає в тому, що спочатку розглядаються елементи першого рядка (стовпця), потім другого і т.д. до останнього.

Приклад оголошення двовимірного масиву значень типу int:

int а[10][10] ; float b[100][100];

Елементи двомірних масивів можна ініціалізувати та присвоювати їм значення одним із способів наведених для одномірних масивів.

1.Значення двовимірного масиву ініціалізуються безпосередньо

впрограмі:

int mass2 [][2] = { {1, 1}, {0, 2}, {1, 0} }; int mass2 [3][2] = {1, 1, 0, 2, 1, 0};

2. Значення двовимірного масиву зчитуються з клавіатури:

int b [10][10],i,j; for(i=0;i<10;i++)

68

for(j=0;j<10;j++)

{

printf("Введіть значення %d,%d-того елементу",i,j); scanf("%d",&b[i][j]);

}

3. Значення двовимірного масиву генерується випадково:

int b [10][10],i,j; for(i=0;i<10;i++)

{

for(j=0;j<10;j++)

{

b[i][j]=rand()%100-50; printf("%3d",b[i][j]);

}

printf("\n");

}

Приклад оголошення тривимірного масиву: int а[k][m][n];

де:

k- кількість матриць з m рядками і n стовпцями;

m - кількість рядків (одномірних масивів) у матриці;

n - кількість стовпців (елементів у рядку) матриці.

Цей масив складається з k матриць, кожна з яких складається з m одномірних масивів (рядків), з n елементів (стовпців).

8.3Робота з діагоналями двомірного масиву

Для опрацювання матриці необхідно згадати деякі властивості:

якщо номер рядка елемента збігається з номером стовпця (i=j) – елемент знаходиться на головній діагоналі матриці;

якщо номер рядка перевищує номер стовпця (i>j) – елемент знаходиться нижче головної діагоналі;

якщо номер стовпця більше номера рядка (i<j) – елемент знаходиться вище головної діагоналі;

елемент знаходиться на бічній діагоналі, якщо його індекси за-

довольняють рівності i+j-1 = n;

69

нерівність i+j-1 < n характерна для елементів, що знаходяться вище бічної діагоналі;

відповідно елементу, що знаходиться нижче бічної діагоналі,

відповідає нерівність i+j-1 > n..

Рис. 8.1. Індексація діагоналей в матриці а) головна діагональ б) бічна діагональ

Наведемо приклад друку елементів що знаходяться на головній діагоналі [10]:

#include <stdio.h> #include <conio.h> int main()

{

int b [10][10],i,j; for(i=0;i<10;i++)

{

for(j=0;j<10;j++)

{

b[i][j]=rand()%100-50; printf("%3d",b[i][j]);

}

printf("\n");

}

for (i=0;i<10;i++) printf("%3d",b[i][i]); _getch();

return 0;

}

70