Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Programmirovanie_i_osnovyi_algo

.pdf
Скачиваний:
10
Добавлен:
05.03.2016
Размер:
9.5 Mб
Скачать

параметров. С целью обработки ошибок предусмотреть кон­ троль значений, возвращаемых функциями библиотеки Си ^^fopen^\ ^^fscanf^ и операцией new. Подключить необходимые стандартные заголовочные файлы.

Вариант 2, Определен следующий указатель на начало ли­ нейного списка:

stJTuct Node

 

//

NODE: узел

линейного

списка

{

*рЫпк;

//

Pointer

LINK:

 

Node

узел

dovible

In fo ;

//

указатель

на очередной

//

INFOrmat

ion:

инф ормация

}

*start;

 

 

 

 

 

Написать прототип, определение и пример вызова функции, которая должна определить, сколько в линейном списке имеется элементов с отрицательными значениями. В частном случае, перед вызовом этой функции линейный список может быть пуст.

Все исходные данные (указатель на начало линейного спи­ ска) и все результаты работы функции (количество найденных элементов) должны передаваться через список параметров — это обязательное требование.

Вариант

3. Определен

следующий

указатель

на

начало ли­

нейного списка:

 

 

 

 

 

 

 

stxnict Node

 

//

NODE: узел

линейного

 

списка

{

*pL±nk;

//

Pointer

LINK:

 

 

Node

 

 

 

//

указатель

на очередной

узел

float

 

In fo;

//

INFOrma tion:

информа

ция

}

*start/

 

 

 

 

 

 

Написать прототип, определение и пример вызова функции, которая должна определить, сколько в линейном списке имеется элементов, в которых хранится заданное значение add. В частном случае, перед вызовом этой функции линейный список может быть пуст.

Все исходные данные (add^ указатель на начало линейного списка) и все результаты работы функции (количество найден­ ных элементов) должны передаваться через список параметров — это обязательное требование.

Вариант 4. Определен следующий /-^азатель на начало ли­ нейного списка:

380

struct

Node

 

//

NODE: узел

линейного

списка

{

Node

*pLlnk;

//

Pointer

LINK:

 

 

узел

 

±nt

Info;

//

указатель

на очередной

}

//

INFOrmation:

информация

 

*start;

 

 

 

 

 

Написать прототип, определение и пример вызова функции, которая должна в начало линейного списка добавить еще один эле­ мент, в котором будет храниться значение add. В частном случае, перед вызовом этой функции линейный список может быть пуст.

Все исходные данные {add^ указатель на начало линейного списка) и все результаты работы функции (указатель на начало линейного списка) должны передаваться через список парамет­ ров. С целью обработки ошибок предусмотреть контроль значе­ ния, возвращаемого операцией new.

 

Вариант

5. Определен

следующий

указатель на

начало ли­

нейного списка:

 

 

 

 

 

 

struct

Node

 

//

NODE: узел

линейного

списка

{

Node

*pLink;

//

Pointer

LINK:

 

 

узел

 

float

Info;

//

указатель

на очередной

}

//

INFOrmation:

информация

 

*start;

 

 

 

 

 

Написать прототип, определение и пример вызова функции, которая должна в конец линейного списка добавить еще один эле­ мент, в котором будет храниться значение add. В частном случае, перед вызовом этой функции линейный список может быть пуст.

Все исходные данные {add, указатель на начало линейного списка) и все результаты работы функции (указатель на начало линейного списка) должны передаваться через список парамет­ ров. С целью обработки ошибок предусмотреть контроль значе­ ния, возвращаемого операцией new.

Вариант 6. Определен следующий структурный тип:

struct

Node

 

//

NODE:

 

 

 

 

{

 

^pLink;

//

узел

линейного

списка

на

Node

//

Pointer

LINK: указатель

 

t

 

//

очередной

узел

списка

 

in

Info;

//

INFOrm at

ion:

 

 

 

 

 

//

содержательная

информация

} ;

В текстовом файле операционной системы "TestS.in" содер-

381

жится некоторое количество целых чисел, разделенных символами пробельной группы ( ' ', V , '\«' ).

Написать прототип, определение и пример вызова функции, которая должна BBCCTJI ИЗ файла ''TestS.in'' содержащиеся в нём це­ лые числа и запомнить их в узлах линейного списка, в котором каж­ дый узел (динамически размещенная в памяти структура) имеет тип Node. При этом первое прочитанное число должно находиться в первом от начала узле линейного списка, второе число - во втором узле и т.д.

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

^^fopen^\ ^^fscanf^ и операцией new.

Подключить необходимые

стандартные заголовочные файлы.

 

 

 

Вариант 7. Определен следующий указатель на начало ли­

нейного списка:

 

 

 

 

 

 

зЬгасЬ Node

 

//

NODE: узел

линейного

списка

{

*рЫпк;

//

Pointer

LINK:

 

Node

узел

float

Info;

//

указатель

на очередной

//

INFOrmation:

информация

}

*start;

 

 

 

 

 

Написать прототип, определение и пример вызова функции, которая в процессе просмотра списка выводит данные (числа) в файл на магнитном диске ^'f.ouV\ не разрушая информацию в линей­ ном списке. В частном случае, перед вызовом этой функции линей­ ный список может быть пуст.

Все исходные данные (указатель на начало линейного спи­ ска, указатель на **имя. расширение** файла вывода) должны пе­ редаваться через список параметров. С целью обработки ошибок предусмотреть контроль значения, возвращаемого функцией библиотеки Си ^^fopen^\ Подключить необходимые стандартные заголовочные файлы.

 

Вариант

8. Определен

следующий

указатель на

начало ли­

нейного списка:

 

 

 

 

 

 

struct

Node

 

//

NODE: узел

линейного

списка

{

Node

*рЫпк;

//

Pointer

LINK:

 

 

 

 

 

 

//

указатель

на очередной

узел

382

float

Info;

// INFOrm at ion: информа ция

I

*start;

 

Написать прототип, определение и пример вызова функции, которая в процессе просмотра списка выводит данные (числа) в файл на магнитном диске "f.ouf\ одновременно освобождая память, занятую линейным списком. В частном случае, перед вызовом этой функции линейный список может быть пуст.

Все исходные данные (указатель на начало линейного спи­ ска, указатель на **имя. расширение** файла вывода) и результа­ ты работы функции (указатель на начало линейного списка) должны передаваться через список параметров. С целью обра­ ботки ошибок предусмотреть контроль значения, возвращаемо­ го функцией библиотеки Си ^^fopen^\ Подключить необходимые стандартные заголовочные файлы.

Вариант

9. Определен

следующий

указатель

на

начало ли­

нейного списка:

 

 

 

 

 

 

 

stxnjct

Node

 

//

NODE: узел

линейного

 

списка

{

 

*рЫпк;

//

Pointer

LINK:

 

 

Node

 

 

узел

float

 

 

//

указатель

на очередной

 

Info;

//

INFOrm ation

: информа

ция

}

 

*start;

 

 

 

 

 

 

Написать прототип, определение и пример вызова функции для удаления из списка к последних элементов с освобождением занятой ими памяти. В частном случае, перед вызовом этой функции линейный список может быть пуст или может содержать любое ко­ личество элементов.

Все исходные данные (указатель на начало линейного спи­ ска, количество удаляемых элементов) и результаты выполне­ ния функции (указатель на начало линейного списка) должны передаваться через список параметров.

Вариант 10. Определен следующий указатель на начало ли­ нейного списка:

stjract

Node

 

//

NODE: узел

линейного

списка

(

 

*рЫпк;

//

Pointer

LINK:

 

Node

 

узел

 

 

 

//

указатель

на очередной

float

 

Info;

//

INFOrm ation:

информа ция

 

 

*start;

 

 

 

 

 

Написать прототип, определение и пример вызова функции

383

для удаления из списка к первых элементов с освобождением заня­ той ими памяти. В частном случае, перед вызовом этой функции ли­ нейный список может быть пуст или может содержать любое коли­ чество элементов.

Все исходные данные (указатель на начало линейного спи­ ска, количество удаляемых элементов) и результаты выполне­ ния функции (указатель на начало линейного списка) должны передаваться через список параметров.

Вариант 11, Определен следующий указатель на начало ли­ нейного списка:

stmict

Node

 

//

NODE: узел

линейного

списка

{

 

*pLink/

//

Pointer

LINK:

 

 

Node

 

 

узел

 

 

 

//

указатель

на очередной

±nt

 

In fo ;

//

INFOrm ati

 

on : ин форма

ция

 

}

 

*start;

 

 

 

 

 

 

Написать прототип, определение и пример вызова функции для вставки в линейный список после каждого элемента, в котором хранится значение find, элемента, в котором будет храниться значе­ ние add. В частном случае, перед вызовом этой функции линейный список может быть пуст или может содержать любое количество элементов.

Все исходные данные (find^ add^ указатель на начало ли­ нейного списка) должны передаваться через список параметров. С целью обработки ошибок предусмотреть контроль значения, возвращаемого операцией new.

Вариант 12. Определен следующий указатель на начало ли­ нейного списка:

stmjct

Node

 

//

NODE: узел

линейного

списка

{

Node

 

*рЫпк;

//

Pointer

LINK:

 

 

 

 

 

узел

 

±nt

 

In fo ;

//

указатель

на очередной

 

 

//

INFOrm at Ion:

информа

ция

 

}

 

 

*start;

 

 

 

 

 

 

Написать прототип, определение и пример вызова функции для удаления из линейного списка элемента, следующего после каж­ дого элемента, в котором хранится знгченне find. В частном случае, перед вызовом этой функции линейный список может быть пуст или может содержать любое количество элементов.

Все исходные данные (Jind^ указатель на начало линейного списка) должны передаваться через список параметров.

384

Вариант 13. Определен следующий указатель на начало ли­ нейного списка:

stxract

Node

 

//

NODE: узел

линейного

списка

{

 

*pLink;

//

Pointer

LINK:

 

Node

 

узел

±nt

 

Info;

//

указатель

на очередной

 

//

INFOrmation:

информация

}

 

*start;

 

 

 

 

 

Написать прототип, определение и пример вызова функции для удаления из линейного списка элемента, предшествующего каж­ дому элементу, в котором хранится значение y?«(i. В частном случае, перед вызовом этой функции линейный список может быть пуст или может содержать любое количество элементов.

Все исходные данные {find^ указатель на начало линейного списка) и результаты выполнения функции (указатель на нача­ ло линейного списка) должны передаваться через список пара­ метров.

Вариант 14. Определен следующий указатель на начало ли­ нейного списка:

зЬгасЬ

Node

 

//

NODE: узел

линейного

списка

{

 

*pLink;

//

Pointer

LINK:

 

Node

 

узел

 

 

 

//

указатель

на очередной

 

 

Info;

//

INFOrm at ion:

информа ция

}

 

*start;

 

 

 

 

 

Написать прототип, определение и пример вызова функции для вставки в линейный список перед каждым элементом, в котором хранится значение find, элемента, в котором будет храниться значе­ ние add. В частном случае, перед вызовом этой функции линейный список может быть пуст или может содержать любое количество элементов.

Все исходные данные (find, add^ указатель на начало ли­ нейного списка) и результаты выполнения функции (указатель на начало линейного списка) должны передаваться через список параметров. С целью обработки ошибок предусмотреть кон­ троль значения, возвращаемого операцией new.

Вариант 15. Определен следующий указатель на начало ли­ нейного списка:

stzTict Node

// NODE: узел линейного

списка

385

Node

*pL±nk;

//

Pointer

LINK:

узел

 

 

//

указатель

на очередной

±nt

Info;

/ /

INFOrm at ion:

мнформа ция

 

}

*start;

 

 

 

 

 

Написать прототип, определение и пример вызова функции для удаления из линейного списка второго, четвертого и т.д. эле­ ментов. В частном случае, перед вызовом этой функции линейный список может быть пуст или может содержать любое количество элементов.

Вариант 16. Определен следующий указатель на начало ли­ нейного списка:

struct

Node

 

//

NODE: узел

линейного

списка

{

Node

*рЫпк;

//

Pointer

LINK:

 

 

узел

 

±nt

Info/

//

указатель

на очередной

 

/ /

INFOrm at ion:

ин форма ция

}

 

*start;

 

 

 

 

 

Написать прототип, определение и пример вызова функции для модификации каждого из элементов линейного списка, в кото­ ром хранится значение find. Модификация подобных элементов за­ ключается в хранении в них значения add. В частном случае, перед вызовом этой функции линейный список может быть пуст или мо­ жет содержать любое количество элементов.

Все исходные данные (find^ add^ указатель на начало ли­ нейного списка) должны передаваться через список параметров.

Вариант 17. Определен следующий указатель на начало ли­ нейного списка:

stxract

Node

 

//

NODE: узел

линейного

списка

{

 

*pLink;

//

Pointer

LINK:

 

Node

 

узел

±nt

 

Info;

//

указатель

на очередной

 

//

INFOrm at ion:

информа ция

}

 

*start;

 

 

 

 

 

Написать прототип, определение и пример вызова функции для удаления первого и последнего элементов списка с освобожде­ нием занятой ими памяти. В частном случае, перед вызовом этой функции линейный список может быть пуст или может содержать любое количество элементов.

Все исходные данные (указатель на начало линейного спи­ ска) и результаты работы функции (указатель на начало линей-

386

ного списка) должны передаваться через список параметров.

Вариант 18. Определен следующий указатель на начало ли­ нейного списка:

stjTuct Node

 

//

NODE: узел

линейного

списка

{

*pLink;

//

Pointer

LINK:

 

Node

узел

 

Infor­

//

указатель

на очередной

 

//

INFOrmation:

информация

}

ms tart;

 

 

 

 

 

Написать прототип, определение и пример вызова функции для вставки новых элементов и в начало (в него помещается значе­ ние addjbeg), и в конец (в него помещается значение add_end) ли­ нейного списка. В частном случае, перед вызовом этой функции ли­ нейный список может быть пуст или может содержать любое коли­ чество элементов.

Все исходные данные {addbeg^ add_end указатель на нача­ ло линейного списка) и результаты работы функции (указатель на начало линейного списка) должны передаваться через список параметров. С целью обработки ошибок предусмотреть кон­ троль значения, возвращаемого операцией new.

Вариант

19. Определен

следующий

указатель на

начало ли­

нейного списка:

 

 

 

 

 

 

stxTict Node

 

//

NODE: узел

линейного

списка

{

*pLlnk;

//

Pointer

LINK:

 

Node

узел

±nt

Info;

//

указатель

на очередной

//

INFOrmation:

информация

}

*start;

 

 

 

 

 

Написать прототип, определение и пример вызова функции для вставки в линейный список после каждого элемента, в котором хранится значение/?/7(i, двух элементов, в которых будут храниться значения addl и add2, В частном случае, перед вызовом этой функ­ ции линейный список может быть пуст или может содержать любое количество элементов.

Все исходные данные {find^ addl^ add2^ указатель на начало линейного списка) должны передаваться через список парамет­ ров. С целью обработки ошибок предусмотреть контроль значе­ ния, возвращаемого операцией new.

Вариант 20. Определен следующий указатель на начало ли­ нейного списка:

387

stmict

Node

 

//

NODE: узел

линейного

списка

{

 

*pLink;

//

Pointer

LINK:

 

Node

узел

xnt

 

Info;

//

указатель

на очередной

 

//

INFOrmation:

информация

}

 

*start;

 

 

 

 

 

Написать прототип, определение и пример вызова функции для вставки в линейный список перед каждым элементом, в котором хранится значение yz«<i, двух элементов, в которых будут храниться значения addl и add2. В частном случае, перед вызовом этой функ­ ции линейный список может быть пуст или может содержать любое количество элементов.

Все исходные данные (Jlnd^ addl^ add2^ указатель на начало линейного списка) и результаты выполнения функции (указа­ тель на начало линейного списка) должны передаваться через список параметров. С целью обработки ошибок предусмотреть контроль значения, возвращаемого операцией new.

П.1.1.11. Препроцессор, перечисления, функции с умалчиваемыми значениями аргументов, перегрузка функций, шаблоны функций, перегрузка операций. Варианты тестов

Вариант 1, Директивы препроцессора. Укажите, как следует оформить заголовочный файл, чтобы приведенная ниже запись не приводила к возникновению ошибки:

#include

"flle.h''

#include

"file.h''

Укажите как будет выглядеть модифицированный заголовоч­ ный файл.

Вариант 2. Перечисления. Будет ли корректной приведенная ниже программа:

^include <stdio.h>

±nt main ( jroid )

{

enum

t{

c=-l,

pasc=4,

ada, modula2,

forth=4

} ;

t

m;

m

= a da;

 

 

 

printfi

"\n m

-

%d",

m ) ;

 

 

 

return

0;

 

 

 

 

 

 

}

Что при этом будет выведено на экран?

388

Вариант 3. Функции с умалчиваемыми значениями пара­ метров. Имеется следующий фрагмент программного кода:

voxd. DrawCircle

( izit

к=100,

Int

у=100,

±nt

radius=100

) ;

Является ли запись прототипа функции правильной (обоснуйте ответ)? Являются ли правильными приведенные ниже вызовы функ­ ции? В случае положительного ответа укажите, с какими значения­ ми параметров функция будет выполняться?

DrawCircle(

)

;

 

 

DrawCircle(

200

) ;

 

DrawCircle(

200,

300

) ;

DrawCircle(

200,

300,

400 ) ;

DrawCircle(

,

,

400

) ;

Являются ли правильными приводимые ниже записи прототи­ пов функций (обоснуйте ответ)?

void.

DrawCircle

(

int

х ,

int

у=100,

Int

rad ) ;

 

void.

DrawCircle

(

int

x,

int

y=100,

int

radlus=100

) ;

void

DrawCircle

(

int

x,

int

y,

int

radlus=100

) ;

Вариант 4. Шаблоны функций, В одномерном массиве, со­ стоящем из п элементов, вычислить сумму отрицательных элемен­ тов. Исходные данные и полученные результаты обязательно передавать через список параметров. Написать прототип, опреде­ ление шаблона функций и пример ее вызова для типов int, float и double.

Вариант 5. Перегрузка операций для пользовательских ти­ пов. Определен следующий пользовательский тип для работы с ком­ плексными данными:

struct

CMP

//

CoMPlex:

 

комплексный

тип

(

 

 

 

 

 

 

dovible

г;

//

Вещественная

часть

 

double

i;

//

Мнимая

часть

 

} ;

Написать определение функции, перегружающей операцию суммирования комплексных данных, и пример вызова этой функ­ ции. Имейте ввиду, что вещественная часть суммы равна сумме ве­ щественных частей операндов. Аналогично — для мнимых частей.

Вариант б. Перегрузка операций для пользовательских ти­ пов. Определен следующий пользовательский тип для работы с ком­ плексными данными:

389

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