1 / 12

ПРОГРАМИРАНЕ И ИЗПОЛЗВАНЕ НА КОМПЮТРИ – II ЧАСТ Доц. д-р Юлиана Георгиева

ПРОГРАМИРАНЕ И ИЗПОЛЗВАНЕ НА КОМПЮТРИ – II ЧАСТ Доц. д-р Юлиана Георгиева Катедра “Програмиране и компютърни технологии” Факултет Компютърни Системи и Управление. ПРЕГОВОР. УКАЗАТЕЛИ

lukas
Download Presentation

ПРОГРАМИРАНЕ И ИЗПОЛЗВАНЕ НА КОМПЮТРИ – II ЧАСТ Доц. д-р Юлиана Георгиева

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ПРОГРАМИРАНЕ И ИЗПОЛЗВАНЕ НА КОМПЮТРИ– II ЧАСТ Доц. д-р Юлиана Георгиева Катедра “Програмиране и компютърни технологии” Факултет Компютърни Системи и Управление

  2. ПРЕГОВОР УКАЗАТЕЛИ • Дефиницията на променлива от тип указател предизвиква в ОП да се отделят4B, в които се записва адрес, ако дефиницията е с инициализация и неопределено или NULL,ако дефиницията не е с инициализация. ОП има вида: i p q x r 12 0x00000000 1.56 int i = 12; int* p = &i; // p е инициализирано с адреса на i double *q = NULL; // q е инициализирано с нулевия указтел doublex = 1.56; double *r = &x; // r е инициализирано с адреса на x

  3. ПРЕГОВОР УКАЗАТЕЛИ • Програмата илюстрира дефинирането и операциите за работа с указатели. #include <stdio.h> intmain() { intn = 10;// дефинира и инициализира цяла променлива int* pn = &n; // дефинира и инициализира указател pn към n // показва, че указателят сочи към n printf("n=%d,*pn=%d\n",n,*pn); // показва, че адресът на n е равен на стойността на pn printf("&n=%p,pn=%p\n",&n,pn); // намиране на стойността на m чрез pn intm = *pn; // m == 10 // промяна на стойността на n чрез pn *pn = 20; //промяна на стойността на n чрез pn printf("n=%d\n",n); return 0; } n=10,*pn=10 &n=249F:21FC,pn=249F:21FC n=20

  4. ПРЕГОВОР УКАЗАТЕЛИ • Указател към тип void - предвиден с цел една и съща променлива - указател да може в различни моменти да сочи къмданни от различен тип. inta = 100; void* p; // дефинира указател към void p = &a; // инициализира p printf("*p=%d\n", *p); // грешка printf("*p=%d\n",*((int*) p); // преобразува p в указател към int // и тогава извлича съдържанието му.

  5. ПРЕГОВОР УКАЗАТЕЛИИ МАСИВИ • Имената на масивите са указатели към техните “първи” елементи. Указателите се разглеждат като алтернативен начин за обхождане на елементите на даден масив. #include <stdio.h> void main() { int a[ ] = {1, 2, 3, 4, 5, 6}; int i; for (i = 0; i <= 5; i++) printf("%d\n",a[i]); for (i = 0; i <= 5; i++) printf("%d\n",*(a+i)); } а е константен указател

  6. ПРЕГОВОР УКАЗАТЕЛИИ МАСИВИ #include <stdio.h> void main() { int a[ ] = {1, 2, 3, 4, 5, 6}; int i; for (i = 0; i <= 5; i++) { printf("%d\n",*a); a++; } } а е константен указател ГРЕШКА

  7. ПРЕГОВОР УКАЗАТЕЛИИ МАСИВИ • Използването на указатели е по-бърз начин за достъп до елементите на масива. #include <stdio.h> void main() { int a[ ] = {1, 2, 3, 4, 5, 6}; int i; int* p = a; for (i = 0; i <= 5; i++) { printf("%d\n",*p); p++; } } p е указателпроменлива

  8. ПРЕГОВОР УКАЗАТЕЛИИ СИМВОЛНИ НИЗОВЕ #include <stdio.h> void main() {charstr[] = "C++Language"; // str е константен указател char* pstr = str; // pstr е указател към низа str while (*pstr) {printf("%c",*pstr); pstr++; } // pstr вече не е свързан с низа “C++Language”. } str е указателконстанта pstrе указател променлива

  9. ПРЕГОВОР ПРИМЕР • Обработка на едномерен масив от цели числа с максимален брой елементи SIZE = 100. От елементите на дадения масив xда се копират в нов масив y само зададен от потребителя брой - nbr, като копирането започва от зададена позиция - pos. • Да се използват следните функции: • 1) попълване на елементите на масив; • 2) извеждане на елементите на масив; • 3) копиране от един масив в друг на зададен брой елементи, започвайки от зададена позиция.

  10. ПРЕГОВОР #include <stdio.h> #define SIZE 100 int in(int *a,int*n); void out(int*a,int n); void copy(int *a,int *b,int pos,int nbr); void main() { int x[SIZE], y[SIZE]; int n,nbr,pos; in(x,&n); out(x,n); printf(“Въведи брой елементи за копиране nbr="); fflush(stdin); scanf("%d",&nbr); printf(“Въведи начална позиция pos="); scanf("%d",&pos); copy(x,y,pos,nbr); out(y,nbr); } Прототипи на функциите Въведи елемент 1:2 Въведи елемент2:4 Въведи елемент3:6 Въведи елемент4:8 Въведи елемент5:10 Въведи елемент6:12 Въведи елемент7:* Въведените стойности са6 2 4 6 8 10 12 Въведи брой елементи за копиране nbr=3 Въведи начална позиция pos=2 6 8 10

  11. ПРЕГОВОР Дефиниция на функция за попълване на елементите на масив int in(int *t, int *n) { *n=0; int temp; while( 1 ) { printf(“Въведи елемент %d:",*n+1); if(scanf("%d",&temp)==1 && *n<SIZE) { *t++=temp; (*n)++; } else { printf(“Въведените стойности са %d\n",*n); return 0; } } }

  12. ПРЕГОВОР Дефиниция на функция за извеждане на елементите на масив void out(int *t,int n) { int i; printf("\n"); for(i=0;i<n;i++,t++) printf("%4d",*t); printf("\n"); } void copy(int *t,int *c,int pos,int nbr) { while(nbr) { *c++=*(t+pos); nbr--; t++; } } Дефиниция на функция за копиране на елементите на един масив в друг

More Related