Какие значения примут переменные с и d в результате выполнения программы

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

Когда мы меняем значение обычной переменной, то, можно сказать, просто удаляем из конкретной области памяти данные и записываем туда новые. Когда мы меняем значение переменной-указателя, то начинаем работать с совершенно иным участком памяти, т.к. меняем содержащийся в ней адрес.

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

Оператор присваивания и типы переменных в 1С

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

int i = 0; printf («i=%d, , i,

В результате выполнения данного программного кода на экране появляется примерно следующее (шестнадцатеричное число у вас будет другим):

i=0, ) перед переменной позволяет получить ее адрес в памяти. Для вывода адреса переменной на экран используется специальный формат %p . Адреса обычных переменных (не указателей) в процессе выполнения программы никогда не меняются. В этом можно убедиться:

int a = 6; float b = 10.11; char c = ‘k’; printf(«%5d — %pn», a, printf(«%5.2f — %pn», b, printf(«%5c — %pn», c, a = 2; b = 50.99; c = ‘z’; printf(«%5d — %pn», a, printf(«%5.2f — %pn», b, printf(«%5c — %pn», c,
6 — 0x7fff653532e0 10.11 — 0x7fff653532e4 k — 0x7fff653532df 2 — 0x7fff653532e0 50.99 — 0x7fff653532e4 z — 0x7fff653532df

Как мы видим, несмотря на то, что значения переменных поменялись, ячейки памяти остались прежними.

Зная адрес, можно получить значение, которое находится по этому адресу, поставив знак * перед адресом:

Читайте также:
Как прочесть чужую переписку в контакте без программ

int a = 8; printf(«%d n», *

На экране будет выведено число 8.

Однако запись типа float *pf;

Обратите внимание на то, что в данном случае * говорит о том, что объявляется переменная-указатель. Когда * используется перед указателем не при его объявлении, а в выражениях, то обозначает совсем иное — «получить значение (данные) по адресу, который присвоен указателю». Посмотрите на код ниже:

int x = 1, y, z = 3; int *p, *q; p = printf(«%dn», *p); // 1 y = *p; printf(«%dn», y); // 1 *p = 0; printf(«%d %dn», x, y); // 0 1 q = printf(«%dn», *q); // 3 p = q; *p = 4; printf(«%dn», z); // 4 printf(«%p %pn», p, q); // p == q

С помощью комментариев указаны текущие значения ячеек памяти. Подробно опишем, что происходит:

Что такое переменная в программировании.

  1. Выделяется память под пять переменных: три типа int и два указателя на int . В ячейки x и z записываются числа 1 и 3 соответственно.
  2. Указателю p присваивается адрес ячейки x. Извлекая оттуда значение ( *p ), получаем 1.
  3. В область памяти, которая названа именем у, помещают значение равное содержимому ячейки, на которую ссылается указатель p. В результате имеем две области памяти (x и y), в которые записаны единицы.
  4. В качестве значения по адресу p записываем 0. Поскольку p указывает на x, то значение xменяется. Переменная p не указывает на y, поэтому там остается прежнее значение.
  5. Указателю q присваивается адрес переменной z. Извлекая оттуда значение ( *q ), получаем 3.
  6. Переменной p присваивается значение, хранимое в q. Это значит, что p начинает ссылаться на тот же участок памяти, что и q. Поскольку q ссылается на z, то и p начинает ссылаться туда же.
  7. В качестве значения по адресу p записываем 4. Т.к. p является указателем на z, следовательно, меняется значение z.
  8. Проверяем, p и q являются указателями на одну и туже ячейку памяти.

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

int *pi; float *pf; printf(«%lun», sizeof(pi)); printf(«%lun», sizeof(pf));

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

Читайте также:
Какая программа видит телефон

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

int *pa, *pb; float *pc; printf(» %p %p %pn», pa, pc, pb); // может возникнуть ошибка printf(» %d %fn», *pa, *pc);

Результат (в Ubuntu):

0x400410 0x7fff5b729580 (nil) -1991643855 0.000000

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

int a = 5; float c = 6.98; int *pa; float *pc; pa = NULL; pc = NULL; printf(» %15p %15pn», pa, pc); // Error // printf(» %15d %15fn», *pa, *pc); pa = pc = printf(» %15p %15pn», pa, pc); printf(» %15d %15fn», *pa, *pc);

Результат (в Ubuntu):

(nil) (nil) 0x7ffd8e77e550 0x7ffd8e77e554 5 6.980000

В данном случае, если попытаться извлечь значение из памяти с помощью указателя, который никуда не ссылается, то возникает «ошибка сегментирования».

На этом уроке вы должны понять, что такое адрес переменной и как его получить ( p_var = https://younglinux.info/c/pointers» target=»_blank»]younglinux.info[/mask_link]

Задание 3. В каком случае выполняется Инструкция 2 в приведенном операторе

Определить результат выполнения алгоритма при определённых значениях исходных данных:

Задание 5. Какое значение примет переменная d после выполнения фрагмента алгоритма (операция mod(x,y) получение целочисленного остатка от деления x на y)?

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

Задание 6. В представленных фрагментах программ

1) b:=12 d:=46 нц пока d>=b d:=d — b кц 2) f:=1 для i от 1 до n нц f:=f*i кц вывод f

определите, сколько раз выполнится тело цикла. Какие значения примут переменные d и f (при n=6) после выполнения фрагмента программ?

Читайте также:
Какая программа стоит в пятерочке на кассе

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

Задание 7. Дана блок-схема алгоритма

Определить результат выполнения алгоритма при определённых значениях исходных данных

Задание 8. Составить алгоритм вычисления суммы квадратов первых n-натуральных чисел.

Задание 9. Составить блок-схему алгоритма проверки попадания точки М(a,b) в круг с центром в начале координат с радиусом R.

Контрольные вопросы

1. Что понимают под алгоритмом?

2. Каковы способы записи алгоритмов?

3. В чем заключаются основные свойства алгоритма?

  1. Перечислите основные алгоритмические структуры и опишите их.

Источник: mydocx.ru

Задан фрагмент алгоритма. Определить какие значения примут переменные «c» и «d» в результате выполнения данного фрагмента алгоритма с начальными значениями а = 2, b = 3. если а > b то с = a — 2 * b иначе с = b + 2*a d = 1 пока с > a нц d = d + 2 с = с — 1 кц все c=? d=?

Правильный ответ на вопрос «Задан фрагмент алгоритма. Определить какие значения примут переменные «c» и «d» в результате выполнения данного фрагмента алгоритма с . » по предмету Информатика. Развернутая система поиска нашего сайта обязательно приведёт вас к нужной информации. Как вариант — оцените ответы на похожие вопросы. Но если вдруг и это не помогло — задавайте свой вопрос знающим оппонентам, которые быстро дадут на него ответ!

Новые вопросы по информатике

Объём видеопамяти составляет 100 Кбайт. Графический режим работает в режиме 640 х200 пикселей. Какое максимальное кол-во цветов может содержать палитра?

Переведите число 202 из восьмеричной системы счисления в десятичную

Переведите величины из одних единиц измерения информации в другие: 1 4 Гбайта=? Кбайт 2 217 Мбайт=? Гбайт 3 13 Мбит=? бит 4 27 Гбит=? бит 5 228 бит=? Мбайт 6 227 Гбит=? Мбайт 7 231 Кбайт=? Мбит

Вводятся 3 числа, вывести на экран нечетные числа pascal

1. Посчитай, сколько бит информации содержит 19 байт 2. Посчитай, сколько байт информации содержат 2 кб 3. Посчитай, сколько байт информации содержит 144 бит

Главная » Информатика » Задан фрагмент алгоритма. Определить какие значения примут переменные «c» и «d» в результате выполнения данного фрагмента алгоритма с начальными значениями а = 2, b = 3.

Источник: abiturient.pro

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru