Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_po_proge_otvety.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
44.93 Кб
Скачать
  1. Ссылочный тип данных. Определение, отличия от переменной-указателя. Передача параметра в функцию по ссылке.

Ссылка (reference) является альтернативным именем объекта.

Объявление ссылок:Для каждого типа T есть такой тип T&, называющийся «ссылка на T».

int i = 1;

int& r = i; //r ссылаетсяна i(целое)

r = 25; //i = 25

i = 50; //r = 50

floatf = 3.14;

float& r2 = f; //r2 ссылается на f (вещественное)

r2 = sin(1.25); //тоже, что и f = sin(1.25)

Время жизни ссылок: • Время жизни ссылок равно или меньше времени жизни объекта, на который они ссылаются • При уничтожении объекта ссылка на него становится недействительной.

Различия ссылок и указателей: в отличие от указателей, ссылкам не требуется дополнительной памяти; доступ к объекту производится напрямую (разыменовывания не требуется):

int main(...)

{

int i = 1;

int& r = i; // r и i ссылаются на одно и то же целое

int* x = &i; // x указывает на ячейку с r и i

r = 2; // i = 2;

*x = 5; // i = 5;

}

Связь между ссылкой и объектом задается в момент инициализации и не может быть изменена во время выполнения программы:

int i = 1, k = 2;

int& r = i; // r и i ссылаются на одно и то же целое

int* x = &r; // x указывает на ячейку с r и i

r = 2; // i = 2

*x = 5; // i = 5

x = &k; // x указывает на ячейку с k

*x = 7; // k = 7

// ...

r = k; // i = 7 (присваивает значение k переменной i)

Область применения – изменяемые параметры функций:

void addOneVal(int x)

{

x = x + 1; //увеличить значение x на 1

}

void addOneRef(int& x)

{

x = x + 1; //увеличить значение x на 1

}

int _tmain(int argc, _TCHAR* argv[])

{

int i = 1;

addOneVal(i); //i = 1 - значение i не изменилось

addOneRef(i); //i = 2(!) – значение i изменилось!

return 0; }

  1. Псевдокод. Определение, примеры хорошего и плохого псевдокода.

Псевдокодом называют неформальную нотацию на естественном языке, описывающую работу алгоритма, метода (функции) или программы.

• Применяйте формулировки, в точности описывающие конкретные действия. • Избегайте синтаксических элементов языков программирования. • Пишите псевдокод на уровне намерений (т.е. описывайте назначение подхода, а не то, как этот подход нужно реализовать на том или ином языке программирования). • Пишите псевдокод на достаточно низком уровне, так, чтобы реальный код из него генерировался практически автоматически.

Пример плохого псевдокода:

Выделить структуру Student посредством malloc() Если malloc() вернет NULL, то вернуть 0 Увеличить номер студента на 1 Вызвать FillStudent() для заполнения полей Вернуть указатель на выделенный экземпляр

Пример хорошего псевдокода:

  1. Выделить структуру для студента.

  2. Если структура может быть выделена:

  3. Учесть, что имеется еще один студент;

  4. Заполнить поля структуры стандартными значениями;

  5. Хранить данные студенте в вызывающей программе.

  6. Конец «если».

  7. Вернуть true, если студент был создан; иначе вернуть false.

  1. Бинарные файлы. Преимущества и недостатки использования бинарных файлов, функции для записи и чтения бинарных файлов в языке c.

Бинарный (двоичный) файл: • Последовательность произвольных байтов. • Название связано с тем, что байты состоят из бит, т.е. двоичных (binary) цифр.

Текстовые файлы хранят только байты, соответствующие печатным символам таблицы ASCII, в то время как бинарные файлы могут хранить байты с любыми значениями [0...255]. Тестовые файлы можно редактировать в любом текстовом редакторе. Бинарные файлы необходимо редактировать в специальных Hex‐редакторах.

Преимущества:

• Выше скорость загрузки и сохранения данных в бинарном файле. • Обычно требуется меньший объем дискового пространства для хранения данных. • Проще реализация для программистов.

Недостатки:

• Проблемы с переносимостью на другую платформу. • «Закрытость» данных: затруднено редактирование вне приложения. • Негибкость: при смене порядка следования блоков файл становится нечитаемым.

Запись в бинарный файл:

Чтение из бинарного файла:

int fwrite(

void *buffer, / *откуда* /

int size, /*размер*/

int count, /*кол‐во*/

FILE *stream/*куда*/

);

int fread(

void *buffer, /*куда*/

int size, /*размер*/

int count, /*кол‐во*/

FILE *stream/*откуда*/

);

Пример сохранения целого числа в бинарный файл:

#include<stdio.h>

// ...

FILE* fp = fopen("myFile.dat", "w");

int k = 25;

fwrite(&k, sizeof(int), 1, fp);

Пример чтения числа из бинарного файла:

#include<stdio.h>

// ...

FILE* fp = fopen("myFile.dat", "r");

int k = 0;

fread(&k, sizeof(int), 1, fp);

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