- •Московский государственный институт пищевой промышленности
- •Type * имя указателя;
- •Int **p7; //неинициализированный указатель на объект типа int * // р7 – указатель на указатель
- •1.2. Типы указателей и операции над ними
- •Операция разыменования
- •Операция преобразования типов
- •Операция присваивания
- •Операция получения адреса указателя
- •Операция сложения и вычитания
- •Операции отношений (операции сравнений)
- •1.3. Массивы Массивы и переменные с индексами
- •Int z[100]; // одномерный массив из 100 элементов типа int char s[80]; // одномерный массив из 80 элементов типа char (строка) float y[3][4];// двумерный массив из 12 элементов типа float
- •Задача – 1
- •Математическая постановка задачи
- •Задача – 2
- •Математическая постановка задачи
- •Инициализация массивов
- •Массивы и указатели
- •Динамические массивы
- •2. Функции, передача параметров
- •2.1.Определение функции
- •Void Sum(float *s,float *X, int n); //прототип функции Sum
Операции отношений (операции сравнений)
Операции сравнений ( <, <=, >=, >, ==, != ) применимы к указателям также как и к обычным переменным. Таким образом, указатели можно использовать в отношениях. Но сравнивать указатели можно только с другими указателями того же типа или с константойNULL, обозначающей значение условного нулевого адреса, или с адресами переменных того же типа.
С использованием операции сравнения программу –3 (program-3) можно переписать в следующем виде:
// program – 3m
#include<stdio.h>
#include<conio.h>
void main ()
{
float y1 = 1.2345, y2 = 2.3456, y3 = 3.4567;
float *p;
clrscr();
for(p = &y1; p >= &y3; p--)
printf (" *p = %7.4f \n", *p);
getch();
}
1.3. Массивы Массивы и переменные с индексами
Понятие “массив” соответствует математическим понятиям “матрица” и ее частному случаю “вектору”. Элементы матриц принято обозначать с использованием индексов. Существенно, что все элементы матрицы одинаковы: либо целые числа, либо вещественные, либо символы, либо другие объекты, введенные программистом (об этом позднее). Такая “однородность” элементов свойственна и массиву, объявление которого описывает тип элементов, имя массива и его размерность и размер, т. е. число индексов и количество значений, принимаемых каждым индексом. Таким образом, массив можно определить как набор однотипных, пронумерованных объектов, располагающихся в соседних участках оперативной памяти.Обращение к элементам массива – с помощью индексов (номеров): а[i] – для одномерного массива, x[i][j] – для двумерного массива. Примеры объявлений массивов представлены ниже:
Int z[100]; // одномерный массив из 100 элементов типа int char s[80]; // одномерный массив из 80 элементов типа char (строка) float y[3][4];// двумерный массив из 12 элементов типа float
Нумерация любого индекса начинается с нуля. Таким образом, элементы массива Z обозначаются:Z[0], Z[1], Z[2], … Z[99],элементы массиваSобозначаются:S[0], S[1],…S[79],элементы массиваyобозначаются:y[0][0], y[0][1], y[0][2], …y[2][3]. При обращении к элементам массива используются переменные с индексами. Например: Z[i], Z[1], y[i][j], y[1][2]. При этом следует помнить, что транслятор не проверяет правильность значений индексов. Эта обязанность возлагается на программиста.
Рассмотрим примеры программ на создание и обработку массивов.
Задача – 1
Для заданного массива вещественных чисел с количеством элементов не более 20 составить программу получения суммы элементов массива и суммы квадратов элементов массива.
Математическая постановка задачи
Дано: вектор вещественных чиселX[n],n<= 20.Определить:

Программа
на Си
//
program
– 4 #include<stdio.h> #include<conio.h> void
main () {int
n,i; float
X[20]; float
s1,s2;
clrscr();
//ввод
n
while (1)
{ printf(“\n n = ”); scanf(“%d”,&n);
if ( n > 0 && n < =20) break;
printf (“\n
Ошибка!
”);
printf (“\n Необходимо,
чтобы
”);
printf (“n > 0 && n < 20\n”);
} //
ввод массива printf
(“\n
введите элементы массива\n”); for
(i = 0; i < n; i++)
{printf (“X[%d] =”,i);
scanf
(“%f”, &X[i]);
} //
обработка
массива for
(s1 =0,s2 =0, i = 0; i < n; i++)
{s1
+=X[i];
s2 +=X[i]* X[i]; } //вывод
результата
printf(“\n
s1=%7.2fs2=%7.2f\n”,s1,s2); getch(); }
Алгоритм на АЯРН:
Начало цикл для ввода n ввод n если n > 0 и n <=20
то прервать цикл
конец-если сообщить об ошибке конец цикла по вводу n
цикл по i от 0 с шагом 1 до n -1 ввод Xi конец цикла по I
s1 = 0 s2 = 0 цикл по i от 0 с шагом 1 до n –1 s1 = s1 +Xi s2 = s2 + Xi * Xi
конец цикла по I печать s1, s2 Конец
Напомним, что оператор while (1) { } означает бесконечный цикл (1 –всегда истинное выражение). Выход из этого цикла осуществляется операторомbreak, в том случае, если введенное значениеnокажется в допустимом диапазоне. В математической постановке индексiменяется от 1 доN. Поскольку в Си элементы массива нумеруются с нуля, то в алгоритме и программе этот же индекс меняется от 0 доN– 1. Обратите внимание на тот факт, что и в алгоритме, и в программе используются два цикла: один для ввода массива, другой для обработки, несмотря на то, что можно было ввод и обработку выполнить в одном цикле. И хотя в таком варианте программа была бы короче,
профессиональный стиль программирования, тем не менее, не рекомендует совмещать обработку с вводом и выводом информации. Эти этапы обычно разделяются.
