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

отчет 1 семестр практика 4 11 вариант

.docx
Скачиваний:
10
Добавлен:
06.07.2021
Размер:
60.21 Кб
Скачать

Балтийский государственный технический университет «ВОЕНМЕХ» им. Д. Ф. Устинова

Кафедра И5 «Информационные системы и программная инженерия»

Практическая работа №4 по дисциплине «Информатика: Основы программирования» на тему «Указатели»

Выполнил: Студент Ситева Софья Борисовна Группа О401Б Преподаватель: Лазарева Татьяна Ильинична

Санкт-Петербург 2020 г.

Условие задачи:

Набрать текст программы, проанализировать ее, в начало программы

добавить вывод на экран адресов всех переменных, а в конец – значений всех

переменных, выполнить программу, проанализировать полученные

результаты и попытаться объяснить, почему они именно такие. Обратите

внимание на операторы (double*) a;и (float) *a и объясните в чем отличие.

Текст программы:

#include <stdio.h>

#include <stdlib.h>

#define NULL ((void*)0)

int main()

{

int* a, b;

float* x, y = 3.5;

double* m, n;

printf("adress a =%p\n", &a);

printf("adress b =%p\n", &b);

printf("adress x =%p\n", &x);

printf("adress y =%p\n", &y);

printf("adress m =%p\n", &m);

printf("adress n =%p\n", &n);

a = &b; // получаем адрес переменной b

printf(" Enter b = ");

scanf_s("%d", a);

x = &y; // получаем адрес переменной y

printf("1 &a = %p\tb = %d\n", a, b);

b -= y; // т.к. y вещественное число, а b целое, то значение выражения округляется

printf("2 &a = %p\t *a = %d\tb = %d\n", a, *a, b); // *a выводит содержимое переменной b

m = (double*)a; // получаем адрес переменной b и меняем тип a

printf("3 &a = %p\t &m = %p\n", a, m);

m = &n; // получаем адрес переменной n

printf("4 &n = %p\t &m = %p\n", &n, m);

n = 5.5; // меняем значение переменной n

m += 2; // меняем значение переменной m, которая раньше содержала адрес переменной a

printf("5 n = %lf \t &n = %p\t &m = %p\n", n, &n, m); // m получает новый адрес

*m = (float)*a - n + (int)*x; // a и x разыменовываются и меняют тип т.е. используются значения тех адресов что хранились в этих переменных

printf("6 &m = %p\t *m = %lf\n", m, *m);

m -= 2;

printf("7 n = %lf\t &n = %p \t&m = %p \t *(m+2) = %lf\n", n, &n, m, *(m + 2));

// вставить значения всех переменных с пояснительным текстом при выводе

return 0;

}

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

Вывод:

(double*) a отличается от (float) *a тем, что в первом случае «*» относится к названию типа, а во втором случае «*» - разыменование