Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты 1-5.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
144.19 Кб
Скачать

Вопрос 1:Формативный ввод/вывод в языке c.Примеры

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

Ввод и вывод информации осуществляется через функции стандартной библиотеки. Прототипы рассматриваемых функций находятся в файле stdio.h. Эта библиотека содержит функции

  • printf() - для вывода информации

  • scanf() - для ввода информации.

Вывод информации

Функция printf() предназначена для форматированного вывода. Она переводит данные в символьное представление и выводит полученные изображения символов на экран. При этом у программиста имеется возможность форматировать данные, то есть влиять на их представление на экране.

Общая форма записи функции printf():

printf("СтрокаФорматов", объект1, объект2, ..., объектn);

СтрокаФорматов состоит из следующих элементов:

  • управляющих символов;

  • текста, представленного для непосредственного вывода;

  • форматов, предназначенных для вывода значений переменных различных типов.

Объекты могут отсутствовать.

Управляющие символы не выводятся на экран, а управляют расположением выводимых символов. Отличительной чертой управляющего символа является наличие обратного слэша '\' перед ним. Основные управляющие символы:

  • '\n' — перевод строки;

  • '\t' — горизонтальная табуляция;

  • '\v' — вертикальная табуляция;

  • '\b' — возврат на символ;

  • '\r' — возврат на начало строки;

  • '\a' — звуковой сигнал.

Форматы нужны для того, чтобы указывать вид, в котором информация будет выведена на экран. Отличительной чертой формата является наличие символа процент '%' перед ним:

  • %d — целое число типа int со знаком в десятичной системе счисления;

  • %u — целое число типа unsigned int;

  • %x — целое число типа int со знаком в шестнадцатеричной системе счисления;

  • %o — целое число типа int со знаком в восьмеричной системе счисления;

  • %hd — целое число типа short со знаком в десятичной системе счисления;

  • %hu — целое число типа unsigned short;

  • %hx — целое число типа short со знаком в шестнадцатеричной системе счисления;

  • %ld — целое число типа long int со знаком в десятичной системе счисления;

  • %lu — целое число типа unsigned long int;

  • %lx — целое число типа long int со знаком в шестнадцатеричной системе счисления;

  • %f — вещественный формат (числа с плавающей точкой типа float);

  • %lf — вещественный формат двойной точности (числа с плавающей точкой типа double);

  • %e — вещественный формат в экспоненциальной форме (числа с плавающей точкой типа float в экспоненциальной форме);

  • %c — символьный формат;

  • %s — строковый формат.

Пример

int a=5; float x = 2.78; printf("\n Значение переменной a=%d", a); printf("\n Значение переменной x=%f", x);

Результат работы программы

Значение переменной a=5 Значение переменной x=2.780000

При указании формата можно явным образом указать общее количество знакомест и количество знакомест, занимаемых дробной частью. Пример

float y=1.2345; printf("\n Значение переменной y=%10.5f\n", y);

Результат работы программы Значение переменной y=   1.23450

В приведенном примере 10 — общее количество знакомест под значение переменной; 5 — количество позиций после десятичной точки. В указанном примере количество знакомест в выводимом числе меньше 10, поэтому свободные знакоместа слева от числа заполняются пробелами. Такой способ форматирования часто используется для построения таблиц.

Ввод информации

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

scanf ("CтрокаФорматов", адрес1, адрес2,...);

Строка форматов аналогична функции printf(). Для формирования адреса переменной используется символ амперсанд '&':

адрес = &объект

Строка форматов и список аргументов для функции обязательны.

Пример

#include <stdio.h> #include <stdlib.h> int main() {

  float y;

  system("chcp 1251");

  system("cls");

  printf("Введите y: ");

  scanf("%f",&y);  // Ввод значения переменной y

  printf("Значение переменной y=%f",y);

  getchar(); getchar();

  return 0; }

Результат работы программы:

Вопрос 2:Указатели на объекты в C++.Указатель this

1)Указатели на объекты в C++

В языке С можно получить доступ к структуре непосредственно или с использованием указателей на эту структуру. Аналогичным образом в С++ можно ссылаться на объект непосредственно, или используя указатель на этот объект. Указате­ли на объекты являются одним из важнейших понятий С++.

Для доступа к членам объекта через сам объект используется оператор «точка» (.). Если же используется указатель на объект, тогда необходимо использовать оператор «стрелка» (—>). Ис­пользование операторов «точка» и «стрелка» аналогично их использованию для структур и объе­динений.

Указатель на объект объявляется с использованием того же синтаксиса, что и указатели на данные других типов. В следующей программе создается простой класс с именем P_example и определяется объект этого класса ob, а также указатель р на объект P_example. Ниже проиллюс­трировано, как получить доступ к объекту ob непосредственно и опосредованно с использовани­ем указателя: // простой пример использования указателя на объект #include <iostream.h> class P_example { int num; public: void set_num(int val) {num = val; } void show_num(); }; void P_example::show_num() { cout << num << " \n"; } int main() { P_example ob, *p; // объявление объекта и указателя на него ob.set_num(1); // прямой доступ к ob ob.show_num(); р = &ob; // присвоение р адреса ob p->show_num(); // доступ к ob с помощью указателя return 0; }

Обратим внимание, что адрес объекта ob получен с использованием оператора взятия адреса & точно так же, как берется адрес переменной любого типа.

Инкремент или декремент указателя изменяет его таким образом, что он всегда указывает на следующий элемент базового типа. То же самое справедливо и для объектов. Следующий пример модифицирует предыдущую программу, в результате чего ob становится массивом из двух эле­ментов типа P_example. Обратим внимание на инкремент и декремент указателя р, с помощью которого осуществляется доступ к элементам массива: // увеличение указателя на объект #include <iostream.h> class P_example { int num; public: void set_num(int val) {num = val;} void show_num(); }; void P_example::show_num() { cout << num << "\n"; } int main() { P_example ob[2], *p; ob[0].set_num(10); // прямой доступ к объекту ob[1].set_num(20); p = &ob[0]; // получение указателя на первый элемент p->show_num(); // вывод значения ob[0] с помощью указателя р++; // переход к следующему объекту p->show_num(); // вывод значения ob[1] с помощью указателя р--; // переход к предыдущему объекту p->show_num(); // вывод значения оb [0] return 0; }

Программа выводит на экран числа 10, 20, 10.

2)Указатели this

Всякий раз, когда вызывается функция-член, автоматически передается указатель на объект, вызывающий данную функцию. Можно получить доступ к этому указателю, используя this. Ука­затель this служит неявным параметром всех функций-членов. (Функции-друзья не имеют указате­ля this.) Например, в операторе: оb.f(); функции f() автоматически передается указатель this, указывающий на объект ob.

Как известно, функции-члены имеют непосредственный доступ к данным класса. Например, если задан следующий класс: class cl { int i; // ... }; то функция-член может присвоить переменной i значение 10, используя следующую инструкцию: i = 10; Фактически эта инструкция является сокращенной записью следующий инструкции: this->i = 10;

Для того, чтобы увидеть, как работает указатель this, рассмотрим следующую короткую программу: #include <iostream.h> class cl { int i; public: void load_i(int val) { this->i = val; } // то же самое, что и i = val int get_i() { return this->i; } // то же самое, что и return i }; int main () { cl o; o.load_i(100); cout << o.get_i(); return 0; }

Эта программа выводит на экран число 100.

Билет 4