Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Приклад 2

int main() { char str[100]; printf(“Введіть ваше ім’я: ”); scanf(“%s”, str); printf(“Дякую, %s”, str); return 0; } Важливо: 1. Рядок може містити до 99 символів (чому?). 2. Для введення та виведення рядків використовують символ %s. 3. У scanf змінна str записується без символу &. 4. Символ \0 у кінець рядку str записується автоматично.

 

Найбільш поширеними операціями з рядками є:

— конкатенація (об’єднання),

— копіювання,

— пошук фрагменту рядка та окремого символу,

— порівняння,

— визначення довжини.

Операції з обробки рядків виконуються за допомогою функцій з бібліотеки string (файл заголовку string.h).

char * strcat (char *str1, const char *str2)

приєднує до рядку str1 копію рядку str2. Повертає вказівник на str1.

char * strncat (char *str1, const char *str2, size_t count)

аналогічно strcat, але приєднує count символів.

char * strcpy (char *str1, const char *str2)

копіює зміст рядку str2 до рядку str1. Повертає вказівник на str1.

char * strncpy (char *str1, const char *str2, size_t count)

аналогічно strcpy, але копіює count символів.

char * strstr (const char *str1, const char *str2)

повертає вказівник на перше входження рядку str2
у рядок str1, або пустий вказівник.

char * strchr (const char *str, int ch)

повертає вказівник на перше входження символу ch
у рядок str, або пустий вказівник.

int strcmp (const char *str1, const char *str2)

порівнює у алфавітному порядку символи рядків str1
та str2, та повертає число:

<0, якщо str1 < str2,

0, якщо str1 = str2,

>0, якщо str1 > str2.

int strncmp (const char *str1, const char *str2, size_t count)

аналогічно strcmp, але порівнює не більш ніж count символів.

size_t strlen (const char *str)

повертає довжину рядку str, не враховує символ \0.

 

Пояснення до роботи деяких функцій.

include <string.h> підключення бібліотеки
int main() {  
char *str1[80] = “Hello, ”; max=79 символів, довжина=7
char *str2[30] = “World!”; max=29 символів, довжина=6
char *str3; вказівник на рядок
strcat(str1, str2); str1 = “Hello, World!”
printf(“%s”, str1); Виведення: Hello, World!
printf(“%d”, strlen(str1)); Виведення: 13
str3 = strstr(str1, str2);
if (str3!= ‘\0’) printf(“%s”, str3);   Виведення: World!
return 0; }  

 

Самостійно: ввести власне ім’я та прізвище, визначити довжину рядка та кількість літер «о» та «а».

 

Лекція 7. Структури.

Структури: призначення, опис, об’ява, використання.

 

Програми обробляють данні, що описують об’єкти реального світу, які мають багато ознак. Такі об’єкти називають сутностями предметної області. Наприклад, сутність «Курсант» має ознаки: прізвище, ім’я, по-батькові; стать; дата народження; спеціальне звання; номер службового посвідчення, та інші. Ознаки можуть бути різних типів: рядок, ціле число, символ.

Для агрегації даних про сутності у мові С використовують структури. Таким чином, структури – складений тип даних, що поєднує множину даних різного типу. Елементи структури називаються полями. На відміну від масивів, що поєднують однотипні данні, структури у своєму складі можуть мати дані різних типів.

Синтаксис опису структури на С:

struct ім’я_структури {

тип1 field1;

тип2 field2;

...

}

Приклад опису структури, що зберігає відомості про курсанта:

struct cadet {

char name[100]; /* прізвище, ім’я */

char stat; /* стать */

int dob; /* дата народження */

char rank[50]; /* звання */

int posvidchennya; /* номер посвідчення */

}

Синтаксис об’яви змінних структурного типу:

struct ім’я_структури ім’я_змінної;

Приклад.

struct cadet one_cadet;

struct cadet cadets[30]; /* масив структур */

struct cadet *cadet1; /* вказівник на структуру */

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

ім’я_змінної.поле

Приклад.

struct cadet one_cadet;

one_cadet.stat = ‘ч’;

one_cadet.posvidchennya = 123456;

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

Приклад.

struct cadet cadet1, cadet2;

cadet2 = cadet1; /* копіювання відповідних полів */

Операції порівняння над структурами не визначена. Для порівняння змінних структурного типу необхідно виконати порівняння відповідних полів цих змінних.

Приклад.

struct cadet cadet1, cadet2;

 

if (

strcmp(cadet1.name, cadet2.name) == 0 &&

cadet1.stat == cadet2.stat &&

cadet1.dob == cadet2.dob &&

strcmp(cadet1.rank, cadet2.rank) == 0 &&

cadet1.posvidchennya == cadet2.posvidchennya

)

printf(“Той же курсант”);

else

printf(“Різни курсанти”);

Обробка полів структури, що зберігають рядки, потребує використання функцій для роботи з рядками (бібліотека strings.h).

Часто є корисним використання масивів, елементами якого є структури. Так, у масиві зручно зберігати відомості про курсантів навчальної групи, де данні про кожного курсанта зберігаються як структура.

Приклад 1.

struct cadet cad[29];

 

/* виведення усіх курсантів*/

for (i = 0; i < 30; i++) {

puts(cad[i].name); /* ім’я */

puts(cad[i].rank); /* звання */

printf(“Номер посвідчення: %d\n”, cad[i].posvidchennya);

}

 

/* виведення усіх курсантів-рядових */

for (i = 0; i < 30; i++) {

if (strcmp(cad[i].rank, “рядовий”)!= 0)

continue;

 

puts(cad[i].name);

printf(“Номер посвідчення: %d\n”, cad[i].posvidchennya);

}

 

/* виведення усіх курсантів-рядових жіночої статі */

for (i = 0; i < 30; i++) {

if (strcmp(cad[i].rank, “рядовий”)!= 0 &&

cad[i].stat!= ‘ж’)

continue;

 

puts(cad[i].name);

printf(“Номер посвідчення: %d\n”, cad[i].posvidchennya);

}

Самостійно: описати структури для збереження інформації про а) вогнепальну зброю; б) осіб, що розшукуються; в) викрадені автомобілі.

Лекція 8. Функції.

Поняття підпрограми. Створення функцій. Параметри функції. Локальні та глобальні змінні. Способи передачі параметрів.

 

Мінімальною одиницею коду, що виконується, у мові С є функція. Так, будь-яка програма на мові С містить функцію main(); для введення та виведення даних використовуються функції scanf() та printf().

Функції, що входять до складу бібліотек С, що поставляються з компілятором, називаються стандартними. Стандартні бібліотеки С містять велику кількість функцій:

— введення/виведення: бібліотека stdio;

— математичні: бібліотека math;

— обробка рядків: string;

— робота з консоллю: conio, та інші.

Кожна функція є окремим програмним кодом, що вирішує деяку задачу. Функції викликають з основної програми (функція main), або з іншої функції. Функціям, що виконують обробку даних, необхідно задавати вхідні параметри. Наприклад, для визначення довжини рядка, у функцію strlen() необхідно подати відповідний рядок. Існують також функції, що не потребують параметрів. Так, для зчитування нажатої клавіші використовується функція getch().

Функції, як правило, повертають результати своєї роботи. Так, strlen() повертає ціле чисто – довжину рядка, getch() також повертає ціле число – код введеного символу. Функція gotoxy(), що встановлює курсор у вказану позицію екрану, результату не повертає. Універсальність функцій полягає у тому, що функція обробляє будь-які дозволені значення, що подаються як вхідні параметри. Так, функція strlen() коректно визначає довжину будь-якого рядка.

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

Мова С дозволяє програмісту створювати власні функції. Об’ява функції містить заголовок функції та її тіло. У заголовку вказується тип результату, що повертає функція, ім’я функції та її параметри. Параметри – це перелік даних та їх типів, що подається на вхід функції. Тип результату функції, або тип функції, визначає тип даних, що повертає функція у результаті виконання. Тіло функції – це той код, що виконується під час роботи функції. В цьому коді виконується обробка вхідних даних. Виконання функції завершується оператором return, після якого вказується результат, що повертає функція. Операторів return у функції може декілька, функція завершується після виконання будь-якого з них. Але, рекомендується використання лише одного оператора return, оскільки це полегшує налагодження вихідного коду та мінімізує вірогідність помилок. Синтаксис об’яви функції:

тип ім’я_функції(параметри функції)

{

тіло функції

}

Параметри функцій, що вказуються у заголовку, називаються формальними. Формальні змінні не існують у програмі, для них не виділяється пам’ять. Вони лише визначають кількість та типи змінних, що будуть подані на вхід функції під час її виклику. Змінні, що подаються на вхід під час виклику функції, називаються фактичними параметрами. Це реально існуючі у програмі змінні. Типи та кількість фактичних параметрів визначаються у заголовку функції (за допомогою формальних змінних).

Приклад 1. Розробити функцію, що повертає квадрат числа, що подається на вхід.

int pow2(int x) { return x * x; } int a, b = 10; a = pow2(b); // a = 100 У заголовку функції x – формальний параметр, що не існує у програмі. При використанні функції на її вхід подається фактичний параметр – b, що існує у програмі.

 

<== предыдущая лекция | следующая лекция ==>
Сортування масивів | Передача параметрів функцій
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 357; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.024 сек.