- •Предисловие
- •Лабораторная работа № 1. Структура программы, ввод/вывод
- •Лабораторная работа № 2. Программирование ветвлений
- •Лабораторная работа № 3. Программирование циклов
- •Лабораторная работа № 4. Указатели
- •Лабораторная работа № 5. Одномерные массивы
- •Лабораторная работа № 6. Двумерные массивы
- •Лабораторная работа № 7. Функции
- •Лабораторная работа №8. Строки
- •Библиографический список
- •Приложение Образец оформления отчета по лабораторной работе
- •Лабораторная работа № 3 «циклы»
- •Основы программирования на языке Си
- •190005, С.-Петербург, 1-я Красноармейская ул., д.1
Лабораторная работа № 4. Указатели
Цель работы – познакомиться с адресацией памяти, научиться правильно использовать указатели различных типов.
Постановка задачи
Набрать текст программы, найти в нем ошибки и исправить их, проанализировать полученные результаты и объяснить, почему они именно такие.
Листинг
#include<stdio.h>
#include<conio.h>
int main(void)
{
int *a, b;
float *x, y = 3.5;
double *m, n;
clrscr();
printf(" Enter b = ");
scanf("%d", &b);
a = &b;
x = &y;
printf(" a = %p\tb = %d\n", a, b);
getch();
b -= y;
printf(" a = %p\t*a = %d\tb = %d\n", a, *a, b);
getch();
m = a;
printf(" a = %p\tm = %p\n", a, m);
getch();
m = &n;
printf(" n = %p\tm = %p\n", &n, m);
getch();
n = 5.5;
m++;
printf(" n = %f\tn = %p\tm = %p\n", n, &n, m);
getch();
*m = (float) *a - n + (int) *x;
printf(" m = %p\t*m = %f\n", m, *m);
getch();
m -= 1;
printf(" n = %f n = %p m = %p *(m+1) = %f\n", n, &n, m, *(m+1));
getch();
return 0;
}
Контрольные вопросы
-
Что такое указатель?
-
Какой объем памяти занимает указатель?
-
Что является значением переменной-указателя?
-
Как проинициализировать указатель?
-
Что такое NULL?
-
Что такое указатель на void? Зачем нужны такие указатели?
-
Какие операции допустимы при работе с указателями?
-
Чем отличается унарная операция "&" от унарной "*" ?
-
Совместимость типов указателей.
-
Можно ли получить адрес указателя?
-
Можно ли указателю присвоить его же адрес?
-
Почему к указателю на void нельзя применить операцию разыменования?
-
Как работают операции инкремента и декремента, примененные к указателям?
-
Каков результат операции вычитания, примененной к указателям одного типа?
-
Какой спецификатор типа используется при выводе адреса на экран с помощью функции printf()?
-
В чем отличие записи (float *) a от (float) * a, если а – указатель на целое число?
-
В чем отличие записи *а++ от (*а)++, если а – некоторый указатель, отличный от void*?
-
Как описать указатель на начало массива?
-
Как описать указатель на указатель?
-
Когда и зачем может повторно использоваться операция разыменования?
Лабораторная работа № 5. Одномерные массивы
Цель работы – познакомиться с организацией одномерных массивов, изучить принципы работы с массивами, освоить работу с массивами через указатели.
Постановка задачи
Написать две программы согласно индивидуальному варианту. Ввод элементов массива осуществлять с клавиатуры. Во время отладки и тестирования программы размер массива можно уменьшить.
Варианты заданий
-
Сформировать новый массив из элементов массива М (25), встречающихся в этом массиве только один раз.
-
Определить, представляют ли собой элементы массива А (20) возрастающую последовательность.
-
Записать элементы массива С (20) в обратном порядке {С20;С19;С18;…;С2;С1}. Вспомогательный массив не использовать.
-
Вставить число 100 после второго положительного элемента массива А (15).
-
Определить количество элементов массива М (22), больших среднего арифметического значения элементов этого массива.
-
В массиве А (45) найти локальные максимумы, определить их местоположение. Локальным максимумом назовем элемент массива, значение которого больше, чем значения двух соседних с ним элементов.
-
Из массивов А (20) и С (20) образовать новый массив Х={a1,c1,a2,c2,…,a20,c20}
-
Удалить из массива М (25) все элементы, значения которых в этом массиве повторяются, оставив по одному.
-
Найти 2 первых элемента в массиве С (17), значения которых не попадают в заданный с клавиатуры диапазон [A, B]. Поменять их местами.
-
В массиве А (35) найти минимум, определить его местоположение (с учетом возможного повторения).
-
Упорядочить массив А (12) в порядке убывания методом выбора.
-
Вычислить сумму отрицательных элементов массива D (19), кратных четырем.
-
Сформировать массив простых двузначных чисел.
-
Поменять местами максимальный отрицательный и первый положительный элементы массива В (18).
-
Вставить число 0 в середину массива М (20), предварительно сдвинув вправо значения элементов массива, начиная с 11-го.
-
Упорядочить массив А (50) в порядке убывания методом попарно-обменной перестановки.
-
Вычислить сумму элементов массива М (15), значения которых лежат в введенном с клавиатуры диапазоне [X, Y].
-
Удалить из массива А (20) первый отрицательный элемент.
-
Поменять местами максимальный и последний отрицательный элементы массива А (40).
-
Сформировать новый массив из элементов заданного целочисленного массива М (50), кратных 7 или содержащих в записи числа цифру 7.
-
Удалить из массива М (26) первый положительный элемент.
-
Заменить все четные элементы массива А (20) на их квадраты, а нечетные удвоить.
-
Удалить из массива В (50) все элементы, кратные 3 или 5.
-
Определить, есть ли в массиве Q (10) заданное число Х, и если нет, то найти ближайшее к нему.
-
Найти сумму элементов массива А (45), находящихся между максимальным и минимальным значениями.
-
Сформировать новый массив из положительных нечетных элементов заданного массива Р (20).
-
Определить местоположение элементов массива А (30), не встречающихся в массиве В (15).
-
Найти сумму четных элементов массива М (15), имеющих четные индексы.
-
Определить, есть ли в массиве М (15) пары соседних одинаковых элементов.
-
Найти наибольший отрицательный элемент массива А (23) и удалить его.
-
Поменять местами первый и последний отрицательные элементы массива В (18).
-
Определить, является ли массив М (20) перестановкой последовательности натуральных чисел от 1 до 20, т. е. проверить, все ли числа из этого диапазона входят в указанный массив.
-
Элементы массива D (14) – длины сторон многоугольника. Определить длину самой короткой стороны.
-
Значение каждого элемента массива Р (60) является дополнением его порядкового номера до 100. Вывести этот массив на экран.
-
Элементы массива D (12) – длины сторон многоугольника. Определить, является ли он равносторонним.
-
Даны целые числа x и y. Вычислить сумму элементов массива А(35) таких, что x<Аi<y.
-
Дан массив целых чисел В (30). Определить, сколько из них делится на 7 без остатка.
-
Вычислить , где Sп и Sо – суммы положительных и отрицательных элементов массива А (70).
-
Массив M (100) содержит целые числа. Поменять знак у элементов, номер которых оканчивается на 2 или на 9.
-
Вычислить , где Sп и Kп – сумма и количество положительных элементов массива А (70), а Sо и Kо – сумма и количество отрицательных элементов того же массива.
-
Вычислить сумму положительных элементов массива М (40), кратных заданному натуральному а.
-
Вычислить , где Sп и Sо – суммы положительных и отрицательных элементов массива М (60).
-
Определить количество элементов целочисленного массива А (35), кратных 3 и не кратных 5 одновременно.
-
Вычислить , где Sп и Sо – суммы положительных и отрицательных элементов массива А (100).
-
Вывести на экран массив Q (25), значение каждого элемента которого равно удвоенному квадрату индекса этого элемента.
-
Вычислить , где Kп и Kо – суммы положительных и отрицательных элементов массива Z (65).
-
В массиве Х (50) каждый последующий элемент вдвое больше предыдущего. Вывести на экран этот массив, учитывая, что х1=0,55.
-
Сформировать новый массив из элементов заданного целочисленного массива М (100), кратных 8 или содержащих в записи числа цифру 5.
-
Определить количество элементов массива А (50), отличающихся от своих соседей слева как минимум вдвое.
-
Найти наибольший отрицательный элемент массива А (40), лежащего в диапазоне , и удалить его.
-
Определить количество элементов массива Q (40), отличающихся от своих соседей справа не более, чем на единицу.
-
Вычислить , где Kп и Kо – количество положительных и отрицательных элементов массива Z (50) соответственно.
Контрольные вопросы
-
Что такое массив?
-
Что представляет собой имя массива?
-
Что представляет собой индекс элемента массива?
-
Как можно обратиться к элементу массива?
-
Как получить адрес элемента массива?
-
Как описать указатель на начало массива?
-
Как обратиться к элементу массива через указатель?
-
Существует ли связь между индексом элемента и его значением?
-
Чему равен индекс первого элемента массива?
-
Как проинициализировать массив?
-
Когда можно не указывать количество элементов массива при описании?
-
Какого типа могут быть элементы массива?
-
Какие операции можно производить над целым массивом?
-
Почему при обработке массивов используют циклы?
-
Как поменять местами два элемента массива?
-
Чему равен индекс последнего элемента массива?
-
Возникнет ли ошибка при обращении к элементу массива, индекс которого больше индекса последнего элемента этого массива?
-
Может ли существовать массив из одного элемента? Если может, то как его описать?
-
Что такое сортировка массива?
-
Какие методы сортировки массива Вы знаете?