Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Структуры и функции. Указатели на структуры.
6.9. Верны ли следующие утверждения: a) к структурам одного типа применима операция присваивания; b) к структурам одного типа, не содержащим вложенных структур, применима операция сравнения (выполняется почленное сравнение); c) параметром функции может быть указатель на структуру, но не сама структура; d) параметры функции – структуры передаются по значению; e) результатом работы функции может быть структура; f) результатом работы функции может быть указатель на структуру; g) функция sizeof(struct any) выдает результат, равный сумме длин всех полей этой структуры; h) к структурам применима операция взятия адреса;
6.10. Перечислить все операции, применимые к структурам.
6.11. Пусть точка на плоскости описана следующим образом: struct point { int x; int y;} Верно ли решена задача: «описать функцию, которая присваивает значение структуре типа struct point» a) void assign_to_point (struct point p, int a, int b) { p.x = a; p.y = b; } b) void assign_to_point (struct point *p, int a, int b) { (*p).x = a; (*p).y = b; } c) void assign_to_point (struct point *p, int a, int b) { *p.x = a; *p.y = b; } d) void assign_to_point (struct point *p, int a, int b) { p -> x = a; p -> y = b; }
6.12. Пусть точка на плоскости описана следующим образом: struct point { int x; int y;} Верно ли решена задача: «описать функцию, которая создает точку из двух целых чисел» a) struct point create_point (int a, int b) { struct point p; p.x = a; p.y = b; return p; } b) struct point *create_point (int a, int b) { struct point p; p.x = a; p.y = b; return &p; } c) struct point *create_point (int a, int b) { struct point *pp; pp -> x = a; pp -> y = b; return pp; } d) struct point *create_point (int a, int b) { struct point *pp; pp = (struct point *) malloc(sizeof(struct point)); pp -> x = a; pp -> y = b; return pp; }
6.13. Пусть точка на плоскости описана следующим образом: struct point { int x; int y;} Описать функцию, которая по трем точкам, являющимися вершинами некоторого прямоугольника, определяет его четвертую вершину;
6.14. Описать в виде структуры a) точку на плоскости; b) цветную точку на плоскости; c) комплексное число; d) рациональное число. Разработать совокупность операций для данных этого типа; реализовать каждую из них в виде функции.
6.15. Пусть «целочисленная» окружность на плоскости описана следующим образом: struct point { int x; int y;}; struct circle { int radius; struct point center;}; Пусть есть массив struct circle plane [50], содержащий информацию об окружностях на плоскости. Описать функцию, определяющую a) есть ли среди этих окружностей хотя бы две концентрические окружности;
b) есть ли среди этих окружностей хотя бы две вложенные (не обязательно концентрические) окружности; c) есть ли среди этих окружностей три попарно пересекающихся окружности; d) есть ли среди этих окружностей хотя бы одна «уединенная», т.е. не имеющая общих точек ни с какой другой окружностью массива plane.
6.16. Пусть результаты анализа некоторого текста, состоящего из английских слов, содержатся в следующем частотном словаре dictionary: #define MAXSIZE 1000 #define LENGHT 20 /* максимальная длина слова */ struct elem { char * word; struct info *data;}; struct info { int count; /* количество повторений слова в данном тексте */ char *alias; /* синоним данного слова */ }; struct { struct elem *tabl [ MAXSIZE]; int number; /* количество слов в словаре */ } dictionary; Каждое слово (word) встречается в словаре только один раз; синонимы (alias) могут быть одинаковыми у разных слов. Описать функцию, определяющую a) встречается ли данное слово в этом словаре: результат – указатель на соответствующий элемент либо NULL: 1) слова неупорядочены по алфавиту; 2) слова упорядочены по алфавиту; b) какое слово чаще других встречается в анализируемом тексте; если таких слов несколько, то взять первое по алфавиту; результат работы функции – указатель на соответствующий элемент: 1) слова неупорядочены по алфавиту; 2) слова упорядочены по алфавиту; c) на каждую ли букву латинского алфавита в этом словаре найдется хотя бы одно слово: 1) слова неупорядочены по алфавиту; 2) слова упорядочены по алфавиту; d) на какие буквы (букву) латинского алфавита в этом словаре больше всего слов; результат работы функции – указатель на строку, составленную из этих букв, перечисленных в алфавитном порядке: 1) слова неупорядочены по алфавиту; 2) слова упорядочены по алфавиту; e) есть ли в словаре различные слова, имеющие одинаковые синонимы.
6.17. Пусть результаты анализа некоторого текста содержатся в частотном словаре (см. предыдущую задачу). Описать функцию a) struсt elem *add_word (char * word, char *alias), вставляющую новое слово и информацию о нем в словарь dictionary (предполагается, что такого слова в словаре еще нет, оно первый раз встретилось в тексте);
1) слова неупорядочены по алфавиту; 2) слова упорядочены по алфавиту; Результат работы функции – указатель на вставленный элемент. b) struсt elem *update_word (char * word, char *alias), изменяющую значение синонима для данного слова (предполагается, что такое слово в словаре обязательно есть); 1) слова неупорядочены по алфавиту; 2) слова упорядочены по алфавиту; Результат работы функции – указатель на элемент словаря, где изменено значение синонима. c) struct elem *delete_word (char *word), удаляющую данное слово из словаря; результат работы функции – указатель на структуру, содержащую информацию об удаленном слове либо NULL, если такого слова нет в словаре; 1) слова неупорядочены по алфавиту; 2) слова упорядочены по алфавиту;
6.18. Программа. Определить число вхождений каждого служебного слова в данную программу на Си. Тщательно продумать способ представления информации о служебных словах.
6.19. Допустимо ли в Си? Если "да" - опишите семантику этих действий, объясните, что будет напечатано; если "нет" - объясните почему. #include <stdio.h> struct data { char *s; int i; struct data *dp; }; main() { static struct data a[ ] = { { "abcd", 1, a+1 }, { "efgh", 2, a+2 }, { "ijkl",3, a } }; struct data *p = a; int i; printf("a[0].s=%s p -> s=%s a[2].dp -> s=%s\n", a[0].s, p -> s, a[2].dp -> s); for (i = 0; i < 2; i++) printf("--a[i].i=%d ++a[i].s[3]=%c\n", --a[i].i, ++a[i].s[3]); printf("++(p->s)=%s\n", ++(p->s)); printf("a[(++p) -> i].s=%s\n", a[(++p) -> i].s); printf("a[--(p -> dp -> i)].s=%s\n", a[--(p -> dp -> i)].s); } 6.20. Пусть struct s { int k; float *f; char *p[2];}; struct s *ps; Верно ли присвоено значение переменной ps и всем объектам, с ней связанным: char str[5] = “abcd”; ps = (struct s *) malloc(sizeof(struct s)); (*ps).k = 5; ps -> f = (float *) malloc(sizeof(float)); *(ps -> f) = 3.1415; (*ps).p[0] = (char*) malloc(5*sizeof(char)); (*ps).p[1] = (char*) malloc(10*sizeof(char)); (*ps).p[0] = str; (*ps).p[1] = “abcdefghi”;
6.21. Присвоить значение переменной q и всем объектам, с ней связанным: struct data { double **p; char *s; int *a[2]; }; struct data *q; 6.22. Присвоить значение переменной a и всем объектам, с ней связанным: struct b { double *q; int * (*p)[2]; }; struct b **a[1]; 6.23. Присвоить значение переменной x и всем объектам, с ней связанным: struct r { double *a[3]; char **s; union { int i; float f; } u; } struct r x[2]; 6.24. Присвоить значение переменной x и всем объектам, с ней связанным: struct a { char ***s; char (*p)[2]; }; typedef struct a * data; data x[2]; 6.25. Присвоить значение переменной pt и всем объектам, с ней связанным: struct t { int **pi; double (*k)(double,int*); char *p[2]; }; struct t *pt; 6.26. Присвоить значение переменной a и всем объектам, с ней связанным: struct data { int *i; int (*f)(int); char **s; }; struct data a[2];
|
||||||
Последнее изменение этой страницы: 2017-02-05; просмотров: 408; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.147.87 (0.02 с.) |