русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Задачи для самостоятельного решения


Дата добавления: 2015-07-09; просмотров: 1003; Нарушение авторских прав


Если маленькие хитрости не позволяют достичь желаемого, прибегните к большим хитростям.

Маленькая хитрость

При работе со ссылочными типами требуется знать:

  • определение указателя; понятие статической и динамической переменной;
  • операции над указателями;
  • семантику операций new и delete.

 

3.1. Дано описание: int *p,*q; . Пусть переменные p и q имеют следующие значения:

       
   

 


Ответьте на следующие вопросы.

A. Что является значением переменной p: ссылка на объект (переменную) целого типа или сам этот объект? Что обозначает переменная *p: ссылку на объект целого типа, сам этот объект или целое 5? Каковы типы переменных p и *p?

B. Что будет выдано на печать в результате выполнения следую­щих операторов:

*p = *q;

if (p==q) p = NULL;

else

if (*p==*q)

q = p;

if (p==q) *q = 4;

cout<<*p; ?

3.2. Дано описание:

struct D

{

int a;

int *b;

int *c;

} *r;

 

Чему будет равно значение переменной r после выполнения операторов:

if ((*r).b!=NULL) (*r).c = (*r).b;

*(*r).b = *(*r).c-4; (*r).a = (*r).b==(*r).c; ?

3.3. Дано описание переменных: int *p,*q; char *r;. Какие из следующих операторов неправильны и почему?

а) p = q; б) q = r; в) p = NULL; г) r =NULL; д) q = *p; е) *p = NULL; .

3.4. Дано описание переменных: int *p,*q; char *r;. Какие из следующих операторов неправильны и почему?

а) *r = *p; б) *q = (int)*r; в) if (r!=NULL) *r = *NULL;
г) if (q>NULL) *q = *p; д) if (q==p) cout<<q; e) if (q!=r) cin>>r;

3.5. Имеется программа:

#include<iostream.h>

void main ()

{

int *x,y;

/* a */ x = new int;

/* b */ *x = 1; y = - *x;

/* c */ delete x;

/* d */ cout<<y;

}

Ответьте на следующие вопросы.



A. Какие из переменных существуют в каждой из точек a,b,c,d и каковы их значения в эти моменты?

B. Почему объекты (переменные), создаваемые операцией new и уничтожаемые операцией delete, называют динамическими? Почему им не дают имена?

C. Можно ли переменной x присвоить ссылку на переменную y? Можно ли с помощью операции delete уничтожить переменные x и y?

3.6. Дано описание:

typedef struct b

{

char f1;

char *f2;

}B;

B *p;

char *q;

Нарисовать структуру значений переменных p и q после выполне­ния следующих операторов:

q = new char;

(*q) = '7';

p = new B;

(*p).f1 = (char) (((int)(*q))+1); (*p).f2 = q;

3.7. Дано описание:

 

struct elem

{

int data;

struct elem *link;

} *p,*q;

Нарисовать структуру значения переменной p после выполнения следующих операторов:

a) p = new elem; (*p).data = 4; (*p).link = NULL;

б) p = new elem; (*p).data = 7; (*p).link = p;

в) q = new elem; (*q).data = 2; (*q).link = NULL; p = new elem;

(*p).data = 1; (*p).link = q;

г) p = new elem; (*p).data = 5; (*p).link = new elem;

(*(*p).link).data = (*p).data; (*(*p).link).link = (*p).link;

3.8. Почему недопустимы следующие описания и как их исправить?

а) typedef struct str { int a; pointer p; } STR; typedef STR *pointer; б) typedef STR *pointer; typedef struct str { int a; pointer p; } STR;

3.9. Описать переменную p (и, если надо, вспомогательные переменные) и выписать операторы, присваивающие ей указанные значения:

 

 
 


a)

 

 

 
 


б)

 

3.10. Описать переменную p (и, если надо, вспомогательные пере­менные) и выписать операторы, присваивающие ей указанные значения:

а)

 
 

 


б)

 
 

 

 


3.11. Дано описание типа:

struct zveno

{

int elem;

struct zveno *sled;

}*p;

Выписать операторы, которые преобразуют значение переменной p:

 
 

 

 


к значению, показанному на следующих рисунках (звенья, ставшие ненужными, уничтожить):

 
 


а)

 

 
 


б)

 

       
 
*
 
 


p
в)

 

 

3.12. Допустимы ли в языке C++ конструкции (*p)[2], *q+2 и **r? Ответ обосновать.

3.13. Дано описание типа:

typedef int *Ssylka;

typedef Ssylka Vector[100];

Считая, что все элементы вектора x отличны от NULL, составить функцию max(x) для нахождения наибольшего из чисел, на которые ссылаются элементы вектора x.

3.14. Дано описание типа:

typedef int *Ssylka;

typedef Ssylka Vector[100];

Считая, что все элементы вектора x отличны от NULL, составить функцию negl(x), значением которой является первый из элементов вектора x, ссылающихся на отрицательные числа или NULL, если та­ких элементов нет.

3.15. Дано описание типа:

typedef int *Ssylka;

typedef Ssylka Vector[100];

Считая, что все элементы вектора x отличны от NULL, составить функцию same(x), которая проверяет, есть ли в векторе x хотя бы две одинаковые ссылки.

16. Дано описание типа:

typedef int *Ssylka;

typedef Ssylka Vector[100];

Считая, что все элементы вектора x отличны от NULL, составить функцию unique(x), которая в векторе x все элементы, ссылающиеся на равные числа, заменяет на значение первого элемента.

3.17*. Одно из возможных представлений "длинного" текста - это разделение его на участки (строки) равной длины и создание масси­ва ссылок на эти строки:

#define d 80 //Длина строки.

#define n 90 //Максимальное число строк.

typedef char stroka[d];

typedef stroka *ssylka;

typedef ssylka text[n];

Если в тексте менее n строк, то последние элементы массива равны NULL; в начале массива ссылок NULL не должно быть. Если в операции над текстом указан номер отсутствующей строки, то есть эле­мент массива с этим номером равен NULL, то такая операция не вы­полняется.

Используя данное представление текста, описать:

а) функцию числострок(T) для подсчета числа строк в тексте T;

б) функцию элем(T,i,j,c), возвращающую 1, если в тексте T есть строка с номером i, и 0 в противном случае. Если такая строка есть, необходимо присвоить j-ю литеру этой строки параметру c;

в) функцию перестановка(T,i,j), меняющую местами i-ю и j-ю строки текста T;

г) функцию замена(T,i,j), заменяющую i-ю строку текста T на копию j-й строки;

д**) функцию добавить(T,i,j), добавляющую после i-й строки текста T копию j-й строки;

е) функцию удалить(T,i), удаляющую i-ю строку из текста T;

ж) функцию поиск(T,c,i,j), определяющую, входит ли литера c в текст T, и возвращающую 1, если - "да", и 0, если - "нет". Если такая литера есть, то присвоить параметрам i и j "координаты" первого вхождения этой литеры: i - номер строки, а j - номер по­зиции в этой строке;

з) функциювывод(T), печатающую построчно текст T;

и**) функцию ввод(T), считывающую из входного файла последова­тельность литер до первой точки и формирующую из них текст T (последнюю строку, если надо, дополнить пробелами).

 



<== предыдущая лекция | следующая лекция ==>
Б.Керниган, Ф.Плоджер | Г.Остер. Задачник


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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