Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB_TO2.doc
Скачиваний:
15
Добавлен:
19.02.2016
Размер:
2.62 Mб
Скачать

3 Методичні вказівки

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

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

  3. Уважно прочитати умову задачі індивідуального завдання, продумати алгоритм її розв'язку, вибрати потрібну бібліотечну функцію для роботи з символьними рядками.

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

4 Приклад виконання лабораторної роботи

Знайти довжину трьох заданих символьних рядків за допомогою функції strlen(). Результати вивести на екран. Приєднати другий рядок в кінець першого, а третій - в кінець другого, результатуючі рядки вивести на екран.

Текст програми

# include <string.h>

# include <stdio.h>

char a1[]=”qwerett”;

char a2[20]=”qyuwerp[ett”;

char a3[255]=”qwerett”;

int l1,l2,l3;

void main()

{/* Знаходження довжин рядків */

l1=strlen(a1);

l2=strlen(a2);

l3=strlen(a3);

/* Вивід довжин рядків */

printf(“l1=%d\t l2=%d\t l3=%d\n”);

strcat(a1,a2);

strcat(a2,a3);

puts(a1);

puts(a2); }

5 Контрольні запитання

        1. Що таке довжина рядка і як її можна визначити?

        2. Що таке рядок в мові С?

        3. Що необхідно зробити перед копіюванням рядка?

        4. В чому різниця між функціями strcmp() і strcnmp()?

        5. , В чому різниця між функціями strcpy() i strncpy()?.

        6. За допомогою якої функції порівнюють рядки?

Лабораторна робота № 17-18

Тема: Складання програм на використання структур даних

Мета роботи: Вивчити способи опису і ініціалізації масивів структур та здобути практичні навики роботи з ними.

1 Короткі теоретичні відомості

Структури це складні конструкції даних на мові С. Структура являє собою нестандартний об’єкт для зберігання різних даних.

Прості структури. Опис і визначення структур. Структура - це сукупність декількох змінних під одним іменем., які розглядаються як одне ціле. На відміну від масивів змінні в структурах можуть мати різні типи. Змінні в структурі називаються її членами або полями. Структури можуть містити дані будь-яких типів, в тому числі масиви і інші структури.

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

Struct coord

{ int x;

iny y; }

Описати структуру фактично можна двома способами

  1. Список імен змінних ставиться після визначення структури

Struct coord

{ int x;

iny y; } x1, y1;

В цьому операторі визначається структурний тип coord і описуються дві структури цього типу x1, y1. Ці дві структури є екземплярами типу coord - кожна з них містьть дві цілочисельні змінні x і y. При такому способі визначення структурного типу суміщається з описом його екземплярів.

  1. Опис екземплярів поміщається окремо від визначення типу. Приклад

Struct coord

{ int x;

iny y; }

оператори;

Struct coord x1, y1;

Звернення до полів структури. Окремі елементи структури можуть використовуватися як прості змінні. Щоб одержати їх значення з структури, використовується знак операції звернення до елементів структури. (.). , який являє собою крапку між іменем структури і іменем елемента поля. Щоб структура x1 містила координати x=50 і y=100, треба записати.

x1.x=50; x1.y=100;

Вивід елементів структури y1:

printf(“%d, %d”, y1.x, y1.y);

Перевага структур та, що копіювати інформацію з одної структури в іншу можна простим присвоюванням.

х1=y1; Цей оператор еквівалентний двом операторам

x1.x=y1.x; x1.y=y1.y;

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

#include <stdio.h>

#include <stdlib.h>

int length, width;

long area;

struct coord{

int x; /* Тіло структури*/

int y;

} k /*описаний екземпляр структури coord - змінна k типу структури */;

void main(){

k.x = 12;

k.y = 15;

printf("\Координати точки : (%d, %d).",

k.x, k.y); }

/* Результат Координати точки : (12, 14). */

Це можна було записати

struct coord k;

Ключове слово struct. (синтаксис).

Struct мітка {

елементи структури;

/* Додаткові оператори */ } екземпляр;

З допомогою ключового слова struct визначаються структурні типи і описуються структури. Елементами структури є прості змінні, вказівники і інші структури.

Приклад 1./*Визначення шаблону структури під іменем s1*/

struct s1 {

int a1;

char a2;

short a3;

int a4; }

/* Використання шаблону для опису структури nst1*/

struct s1 nst1;

Структури, які містять масиви. Структури в ролі елементів(полів) містять масиви. В прикладі визначений структурний тип data, який містить цілочисельний масив з 4-х елементів і символьний масив з 10-ти елементів.

struct data

{ int x[4];

char y[10]; } ;

Опис змінної record цього типу

struct data record;

На рис. елементи мас. х займають вдвоє більше місця, ніж елементи масиву y.

record

record.x[0]

record.x[0]

record.x[0]

record.x[0]

Record.x

rd.y[0]

rd.y[1]

rd.y[2]

rd.y[3]

rd.y[4]

rd.y[5]

rd.y[6]

rd.y[7]

Record.y[8]

rd.y[9]

Record.y

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

record.x[2]=100; Record.y[1]=’x’;

Оскільки ім’я масиву це вказівник на цей масив, тому вміст масиву y[] в структурі record можна вивести так

puts(record.y);

Масиви структур. Структури можна зберігати в масивах.. Масиви структур є потужним засобом програмування. Наприклад, структура entry

struct entry { Визначення структури

char fname[10];

char lname[12];

char phone[8]; }

struct entry list[100]; Опис структури з іменем list, яка є масивом з ста елементів. Кожний елемент являє собою структуру типу entry, в якій міститься три поля, причому ці поля - масиви типу char. Елемент розпізнається по індексу.

Для присвоєння даних з одного елементу масиву в другий можна записати

List[1]=list[5];

Цей оператор присвоює всім полям структури List[1] значення відповідних полів структури List[5]

Strcpy(list[1].phone, list[5].phone);

Копіює рядок list[5].phone в рядок list[1].phone.

Вказівники можуть бути елементами структури. Приклад

struct data

{int *value;

int *rate;

} first;

Обидва елементи структури є вказівниками на int. Вказівники треба ще задати, тобто просвоїти їм адреси змінних, які описані int. Приклад

First.value=&a1;

First.rate=&a2; де a1 і a2 змінні цілого типу.

Тепер вказівники мають конкретне значення і до них можна звернутися з допомогою операції посилання по вказівнику (*)

Вираз

*First.value=значенню змінної a1;

*First.rate=значенню змінної a2;

Приклад структур:

struct data{

int a1;

char a2[5]; } ;

Визначимо вказівник p_data на змінну типу data

struct data *p_data; * вказує, що p_data є вказівником на змінну типу data, а не екземпляром цього структурного типу.

Задати вказівник ще не можна, бо тільки заданий тип, а не описана ні одна змінна цього типу. Опишемо змінну data1 структурного типу data.

struct data data1;

Тепер можна ініціалізувати вказівник

p_data=&data1;

Цей оператор присвоює адресу структури data1 вказівнику p_data.

Вказівник на структуру, вказує на перший байт збережуваних даних. Якщо p_data вказівник на структуру data1, то *p_data – це сама структура. До окремих полів структури можна звертатися за допомогою (.) (*p_data).a1=100;

Вираз (*p_data) треба брати в дужки, бо операція звернення до елементів структури крапка (.) має вищий пріоритет, ніж операція посилання по вказівнику (*).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]