Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Параметри і аргументи функції



У мові Сі є особливість, пов'язана з тим, що всі аргументи функції передаються по значенню. При виклику функції в стеці виділяється місце для формальних параметрів і в це виділене місце заноситься значення фактичного параметра, тобто значення параметра при виклику функції. Далі функція використовує і змінює параметри в стеку. При виході з функції змінені значення параметрів втрачаються.

У мові Сі викликана функція не може змінити змінні, вказані в якості фактичних параметрів при звертанні до неї.

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

char – символьний; int – цілочисельний; float – опрацьовує дробові числа (числа з плаваючою крапкою); double – числа з плаваючою точкою подвійної довжини; void – пустий тип, який немає значення.

Типи char та int є цілими типами даних і призначені для зберігання цілих чисел. Тип char також призначений для цілих чисел, оскільки будь-який символ у комп'ютері пов'язаний з цілим числом – кодом цього символу у таблиці ASCII. Сам символ нам необхідний, коли інформація виводиться на екран, на принтер або вводиться з клавіатури.

Усі типи по замовчуванню є знаковими (signed).

Неможливо створити змінну типу vоid. Однак, введення такого типу є корисним про що ми поговоримо пізніше.

Різниця між додатними і від'ємними цілими числами полягає в тому як інтерпретується старший біт цілого числа. Якщо старший біт рівний 0 – число додатнє, якщо старший біт – 1, число від'ємне. Ціле число +3 буде мати вигляд:

 

 

Для отримання від'ємного числа –3 код змінного на зворотній (обернений) і до молодшого біту додається 1:

 

 

На основі вищевикладених типів будуються подальші типи даних. Ці типи створюються модифікаторами (modifiers), які ставляться перед основним тілом. Модифікаторами є наступні зарезервовані слова: signed – знаковий, unsigned – беззнаковий, long – довгий, short – короткий.

 

Тип Розмір в байтах (бітах) Інтервал зміни
char 1(8) -128
unsigned char 1(8)
signed char 1(8) -128
int 2(16) -32768
unsigned int 2(16)
signed int 2(16) -32768
short int 2(16) -32768
unsigned short int 2(16)
signed short int 2(16) -32768
long int 4(32) -2147483648
signed long int 4(32) -2147483648
unsigned long int 4(32)
float 4(32) 3.4Е-38 3.4Е+38
double 8(64) 1.7Е-308 1.7Е+308
long double 10(80) 3.4Е-4932 3.4Е+4932

 

При уважному розгляді можна помітити, що типи int, short int, signed int та signed short int мають однакові границі зміни. Ці типи хоча і мають різні назви є абсолютно однаковими для даної реалізації компілятора мови.

Оголошення змінних

Всі змінні повинні бути оголошені (declare) до їх використання в програмі. Оголошення змінної приводить до виділення пам'яті в розмірі, який необхідний для розміщення змінної даного типу (char – 1 байт, int – 2 байти, float – 4 байти, double – 8 байтів).

Основна форма оголошення (declaration):

тип <список_змінних>;

Приклади:

char c_symbol;

int ia, ib, ic;

float fa123, fradius;

double dArray1abc;

Оголошення змінних одного типу обов'язково закінчується ;

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

Коли змінна з'являється у програмі, велике значення має місце оголошення змінної. Правило, яке визначає де змінна може бути використана, залежить від того, де змінна була оголошена, і називається правилом видимості (scope rules). У мові Сі є три місця в програмі, де може бути оголошена змінна.

1. Поза будь-якими функціями, у тому числі main( ) – глобальна (global), може бути використана в будь-якому місці програми.

2. Всередині блоку, у тому числі всередині тіла функції – локальна (local), може бути використана тільки всередині блоку.

3. Як формальний параметр функції, може використовуватись як локальна змінна для даної функції.

Важливо запам'ятати наступне:

− дві глобальні змінні не можуть мати однакові імена;

− локальна змінна однієї функції може мати таке ж ім'я як і локальна змінна іншої функції (або формує параметр іншої функції);

− дві локальні змінні в одному блоці не можуть мати однакові імена, у тому числі формований параметр функції не може співпадати з локальним параметром.

Константи можуть бути будь-якого базового типу даних:

const <тип_даних> = <чисельне значення>;

Приклади:

const int i_con1 = 10;

const float f_co2 = 2.45;

Числа також вважаються константами в мові Сі. Для визначення до якого типу даних їх віднести використовується наступне правило. Ціла константа (без плаваючої точки) відноситься до типу int, якщо попадає в інтервал значень, якщо не попадає – до типу unsigned int, якщо не попадає – то long int. Це саме стосується і дробових чисел: float – unsigned float – double – long double.

У мові С існує механізм явного задавання типу констант з допомогою суфіксів: 12h, 344 – short int, 23L – long int, 23.4f – float.

Так як при програмуванні важливе значення мають вісімкові і шістнадцяткові системи числення, то розглянемо (octal) і (hexadecimal) константи.

Для 16-кових попереду ставиться Ox, для 8-кових О:

16-кова – OxFF28 8-кова – О1, О55, О38.

Ініціалізація змінних

Ініціалізація – це присвоєння змінній першого значення. Мова Сі надає користувачу можливість присвоїти змінній значення одночасно з її оголошенням у програмі.

тип <ім'я_змінної>=<константний вираз>;

Приклади:

char ch='e';

int pr=24;

int ia=2*28-4;

float rr1=23.345;

Ініціалізація приводить до того, що у виділену пам'ять заноситься значення ініціалізації. Якщо не ініціалізувати змінну, але використовувати її в програмі, то слід врахувати, що цій змінній присвоїлося значення "0".

1. #include<stdio.h>

2. /* Приклад 1 */

3. void main(void)

4. {

5. int year, month;

6. year=2006;

7.

8. printf("Зараз %d рік \n", year);

9. }

(Рядки пронумеровані для зручності подальшого пояснення).

Після введення програми з клавіатури в інтегрованому середовищі програмування необхідно зайти в пункт меню Run і запустити програму на виконання викликавши підпункт меню Run. Після виконання програми на екрані виникне повідомлення – результат виконання програми: Зараз 2006 рік. В певних трансляторах для перегляду результатів виконання програми необхідно викликати екран результатів – Alt F5 .

Пояснення:

1. Перший рядок повідомляє компілятору про необхідність підключення бібліотечного файлу stdio.h. Цей файл містить опис функцій стандартного вводу-виводу (standard input/output), зокрема в нашій програмі буде використано функцію printf(). Ця функція є необхідною, оскільки в мові програмування Сі не передбачено операторів вводу-виводу.

2. Коментар.

3. Визначає ім'я функції. В програмі обов'язково повинна бути хоча б одна функція – головна (main), яка повинна мати свій тип – перший void і мати аргументи – другий void. Представлений запис означає, що функція main() не передає жодного значення в основний проект, який може містити кілька окремих програм, і дана функція немає жодних аргументів. Можливий простіший запис – main().

4. Фігурна дужка означає відкриття основної функції. Фігурні дужки завжди ідуть парами. Закриваюча дужка повинна завершувати головну функцію.

5. Оголошення змінних. В програмі планується використання двох змінних цілого типу – year, month.

6. Оператор присвоювання. Змінній year присвоюється чисельне значення 2006. Всі оператори обов'язково закінчуються ;.

7. Пусті рядки не грають жодної ролі і вставляються для зручності читання.

8. Виклик стандартної функції виводу на екран printf(). Функція складається з двох частин – імені і двох аргументів – "Зараз %d рік \n" і year, аргументи розділяються комою. Перший аргумент – керуюча стрічка (control string) може містити між лапками будь-яки символи і специфікатори формату, які починаються з %. В нашому випадку %d показує, що в даному місці керуючої стрічки при виводі на екран повинно бути вставлене ціле число, якому відповідає значення змінної з другого аргументу. Комбінація символів \n повідомляє функції printf() про перехід на новий рядок.

9. Закриваюча фігурна дужка означає кінець функції main().

Увага! В процесі виконання програми буде видане попередження, оскільки змінна month була оголошена, але не використана в програмі. Це попередження не перешкоджає правильному виконанню програми.

 

#include<stdio.h>

/* Приклад 2 */

void main(void)

{

int radius;

float length, square;

printf("Введіть радіус кола");

scanf("%d", &radius);

length=2*3.14*radius;

square=3.14*radius*radius;

printf("Довжина кола-%f, площа кола-%f", length, square);

}

Пояснення:

Функція scanf() забезпечує введення значень змінних з клавіатури, & необхідний для правильної роботи програми, його використання буде пояснене при описі вказівників; %f – специфікатор формату, який відповідає за чисельні значення змінних з плаваючою крапкою.

 

#include<stdio.h>

/* Приклад 3 */

void main(void)

{

int i;

printf("Введіть ціле число");

scanf("%d", &i);

if(i<0) printf("Число від'ємне");

if(i>0) printf("Число додатнє");

if(i==0) printf("Число рівне 0");

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

printf("%i \n", i)

}

Пояснення:

if – оператор умови

загальний вигляд: if(умова) оператор;

Умова – це логічний вираз, який приймає значення або "правда" або "неправда" (true i false). Якщо умова виконується – "правда", то виконується наступний оператор, якщо умова не виконується – "неправда", то наступний оператор не виконується, а програма переходить далі.

for – оператор циклу

загальний вигляд: for(ініціалізація;умова;приріст) оператор;

Ініціалізація – встановлення початкового значення параметра циклу; умова – вираз, значення якого перевіряється кожний раз при виконанні циклу, цикл виконується до того часу, поки умова – ""правда"; приріст – вираз, який змінює параметр циклу; і++ ідентичне і=і+1.

 

 

#include<stdio.h>

#include<math.h>

/* Приклад 4 */

void length(int r);

float square(int r);

void main(void)

{

int radius;

float sq;

printf("Введіть радіус кола");

scanf("%d", &radius);

length(radius);

sq=square(radius);

printf("Площа кола-%f", sq);

}

void length(int r) // Опис функції length

{

float l;

l=2*3.14*r;

printf("\n Довжина кола-%f", l);

}

void square(int r) // Опис функції square

{

float s;

s=3.14*pow(r,2);

return s;

}

Пояснення:

Програма складається з трьох функцій – main(), length() i square(), дві останні функції залежать від одного параметру цілого типу, а функція square() ще і повертає результат виконання в функцію main().

Бібліотека math.h підключається для використання функції pow(), яка дозволяє підносити до степеня: ab = pow(a,b).

 

#include<stdio.h>

#include<conio.h>

/* Приклад 5 */

void print_str(int m);

char ch; // глобальна змінна

void main(void)

{

int n; // локальна змінна

printf("Введіть символ");

ch=getch();

printf("Введіть кількість символів в стрічці");

scanf("%d",&n);

print_str(n);

}

print_str(int m); // формальний параметр

{

int j; // локальна змінна

for(j=0;j<m;j++) printf("%c", ch); // використання змінної

}

Пояснення:

Бібліотека conio.h підключається для використання функції getch(), яка сприймає натиснуту клавішу на клавіатурі і присвоює змінній, в нашому випадку сh, чисельне значення цієї клавіші згідно таблиці ASCII.




©2015 studopedya.ru Все права принадлежат авторам размещенных материалов.