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

3 Приклад виконання лабораторної роботиІндивідуальне завдання

Задати одновимірний масив цілих чисел розмірністю 17, який відсортувати масив по спаданню. У відсортованому масиві знайти номер першого елементу, який рівний або менший від 12. Одержаний відсортований масив і номер шуканого елементу вивести на екран.

Програма розв'язку

#include<stdio.h>

#include<conio.h>

int a[17]={54,64,3,76,12,43,56,76,2,14,87,89,7,21,17,16,67},b[17],n,i,j,max;

void main() { clrscr();

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

for(j=16;j>=i;j--)

if(a[j]<a[j+1]) { max=a[j+1]; a[j+1]=a[j]; a[j]=max; }

for(i=0;i<17;i++) printf("%d\t",a[i]);

printf("\n");

for(i=0;i<17;i++) if(a[i]<=12) { n=i+1; printf("n=%d",n); break;}

}

Результати:

89 87 76 76 67 64 56 54 43 21 17 16 14 12

7 3 2

N=14

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

1. Що таке сортування масивів?

2. Яке значення має індекс 10-го елементу масиву?

3. Як виглядає оператор for при перегляді масиву справа наліво?

4. Які способи сортування масивів Ви знаєте?

5. В чому суть сортування масивів методом простого обміну?

6. В чому суть сортування масивів методом простого пошуку?

Лабораторна робота № 9

Тема: Написання програм для знаходження вказівників на змінні різних типів

Мета роботи: Навчитись описувати і задавати вказівники; оволодіти основними способами роботи з вказівниками в C- програмах.

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

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

Переваги вказівників включають:

  • Операції, які з допомогою вказівників виконуються легше і зручніше.

  • Операції, які без вказівників взагалі виконати неможливо.

Коли компілятор обробляє оператор визначення змінної, наприклад, int i=10, то в пам'яті виділяється ділянка відповідно до типу змінної (int=> 4 байти) і записує в цю ділянку значення змінної. Всі звертання до цієї змінної компілятор замінить на адресу області пам'яті, у якій зберігається ця змінна.

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

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

2. Створення вказівників. Адреса змінної являє собою число. Тому з ним можна поводитися як з звичайним числом. Знаючи адресу даної змінної, можна ввести іншу змінну і помістити в ній адресу першої. Тому описуємо другу змінну, яка зберігає адресу першої.

Нехай змінна data поміщена в ділянку пам’яті з адресою, яка позначена змінною p_data. Ця змінна описана і в неї нічого не занесено. (Рекомендація, яка не обов’язкова, якщо ім’я data, то вказівник .p_data ).

Наступний крок – це помістити адресу змінної data, в змінну p_data. Оскільки змінна p_data тепер містить адресу data, вона вказує на data або є вказівником на змінну data.

3. Опис вказівників. Вказівники є числовими змінними, тому їх треба описати перед використанням. Імена вказівників повинні задовольняти тим умовам, що і інші змінні і бути унікальними. Вказівник не має самостійного типу. Тип вказівника - це тип змінної, на яку вказує вказівник.

Синтаксис опису.

Ім’я типу *ім’я вказівника

Наприклад: int *i; double *f, *ff; char *c;

Вказівник може бути константою або змінною, а також вказувати на константу або змінну.

int i; //ціла змінна

const int ci=1; //ціла константа

int *pi; //вказівник на цілу змінну

const int *pci; //вказівник на цілу константу

Якщо модифікатор const ставиться до вказівника (тобто перебуває між ім'ям вказівника й * ), то він забороняє зміну вказівника, а якщо він перебуває ліворуч від типу (тобто ліворуч від *), то він забороняє зміну значення, на яке вказує вказівник.

Наприклад,

float *p_data, d;

/* *p_data вказівник на змінну типу float, а d звичайна змінна типу float */

4. Ініціалізація (задання) вказівників. Використання не заданих вказівників дає непередбачені результати і це небезпечно, хоч і можливо. Якщо вказівник не містить адреси змінної, він не приносить ніякої користі. Адреса в вказівнику сама не з’явиться, її треба там помістити з допомогою операції взяття адреси, яка позначається значком амперсанд (&). Операція поєднання & і імені змінної, перед якою він стоїть, повертає адресу даної змінної. Тому вказівник можна ініціалізувати таким оператором присвоєння.

Вказівник = &змінна;

P_data =&data.; /* присвоює адресу data вказівнику P_data*/

Після ініціалізації вказівник вказує на змінну.

Операція посилання по вказівнику (*).

Коли знак цієї операції стоїть перед іменем вказівника, така конструкція позначає змінну, на яку вказує вказівник. Тому змінна і посилання на вказівник цієї змінної є речі ідентичні.

Наприклад, оператори

printf(“%d”, data);

printf(“%d”, *p_data);

дають однаковий ефект. Ці оператори еквівалентні.

5. Вказівники і типи змінних. Змінні різних типів займають різний об’єм пам’яті. Адреси змінної являє собою адресу першого молодшого байта.

Наприклад,

char =12252;

short =90;

float t=1200.

Опис і задання вказівників на ці змінні

char *p_vchar;

short *p_vshor;

float *p_vfloat;

p_vchar=&vchar;

p_vshor=&vshor; /* додаткові оператори */

p_vfloat=&vfloat;

Кожний вказівник рівний адресі першого байта змінної, на яку він вказує. Тому p_vshor=1000, p_vchar=1003, а p_vfloat=1 006.

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