Краткий конспект семинарских занятий по языку Си. (учебно-методическое пособие для студентов II курса)




НазваниеКраткий конспект семинарских занятий по языку Си. (учебно-методическое пособие для студентов II курса)
страница9/12
Дата публикации21.03.2013
Размер0.5 Mb.
ТипКонспект
vbibl.ru > Информатика > Конспект
1   ...   4   5   6   7   8   9   10   11   12

ТЕМА 7. Многомерные массивы и их инициализация. Передача многомерных массивов в качестве параметров функций. Указатель на массив. Интерпретация сложных деклараций. Оператор typedef.


В языке Си массив представляет собой совокупность элементов одного и того же типа. При определении массива указывается тип элементов и их количество в квадратных скобках. Массив можно конструировать из объектов арифметического типа, указателей, структур и объединений, а также других массивов(генерируя при этом многомерные массивы). Например, int m[3][4]; - это определение массива из трех элементов, каждый элемент которого в свою очередь является массивом, состоящим из четырех целочисленных объектов.

В общем случае декларация массива имеет вид:

T D, где D имеет вид

D1[<константное выражение целого типа>] .

Аналогично определяется D1 и т.д.

Доступ к элементам массивов осуществляется через индексирование, например: m[i][j], где i – номер строки, а j – номер столбца. Операция индексирования E1[E2] определена как *(E1+E2), следовательно m[i][j] тождественно *(*(m+i)+j).

Массивы хранятся построчно, т.е. в общем виде быстрее всего изменяется самый правый индекс.

Инициализация многомерных массивов осуществляется аналогично одномерным массивам. Например:

int m[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

Если инициализирующих значений меньше, чем указанная размерность, то соответствующим элементам присваиваются нулевые значения. Например:

int w[3][3]={{1,2,3},{4,5}};

Элементы: w[1][2], w[2][0], w[2][1], w[2][2] примут нулевые значения.

Для многомерных массивов пустой может быть только первая размерность, реальное значение которой определяется по количеству инициализирующих значений. Например, если в выше приведенном примере опустить число строк, то тогда будет определена матрица 2х3.

На примере двумерного целочисленного массива m рассмотрим понятие указателя на массив.

int *p1;

int (*p2)[4];

p1 – это указатель на объект целого типа, ему может быть присвоен адрес любого элемента матрицы m. Например, адрес 0-го элемента 1-ой строки можно присвоить тремя эквивалентными способами:

p1=&m[1][0];

p1=m[1];

p1=*(m+1);

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

p2=m+1;

Соответственно, оператор p1++; вызывает переход к следующему элементу 1-ой строки, а оператор p2++; вызывает переход к следующей строке матрицы. Тогда *p1=6, а **p2=9.



При передаче двумерного массива в качестве параметра функции возможно три варианта записи заголовка функции:

  1. f(int mas[3][4]);

  2. f(int mas[][4]);

  3. f(int (*p)[4]);

Все три варианта эквивалентны и позволяют пользоваться внутри функции как индексной записью, так и указателями.
Задача 1. Написать функцию, которая вычисляет и распечатывает сумму элементов каждого столбца вещественной матрицы 5х6.

void sum(double (*p)[6])

{ int i,j;

double s,(*pp)[6];

for(i=0;i<6;i++) {

pp=p;

for(j=0,s=0.0; j<5; j++) {

s+=*(*pp+i);

pp++;

}

printf(“%f\n”,s);

}

}

^ Интерпретация сложных деклараций. В декларациях обычно используется имя (идентификатор) и один из модификаторов *, [ ] и ( ), причем разрешается использовать более одного модификатора в одной декларации8. Для раскрытия этих деклараций применяются следующие правила:

  1. Чем ближе модификатор стоит к идентификатору, тем выше его приоритет.

  2. Приоритет ( ) и [ ] выше, чем приоритет *.

  3. Приоритет повышается заключением в скобки ().

Примеры:

  1. Массивы и указатели

    int matrix[10][10];

    matrix – массив массивов типа int

    char **argv;

    argv – указатель на указатель на char

    int (*ip)[10];

    ip – указатель на массив из 10 элементов типа int

    int *ip[10];

    ip - 10-элементный массив указателей на int

    int *ipp[3][4];

    ipp - 3-элементный массив указателей на 4-элементный массив типа int

    int (*ipp)[3][4];

    ipp – указатель на 3-элементный массив, каждый элемент которого - 4-элементный массив типа int

  2. Функции и указатели

int *f();

f – функция, возвращающая указатель на int

int (*pf)();

pf – указатель на функцию, возвращающую int

char (*(*x())[])();

x – функция, возвращающая указатель на массив указателей на функцию, возвращающую char

char (*(*x[3])())[5];

x – массив из 3 указателей на функцию, возвращающую указатель на массив из 5 элементов типа char


Для упрощения прочтения сложных деклараций, а также для именования, типам данных можно задавать новые имена с помощью оператора typedef9. Например:

typedef double (*PFD)();

определяет тип PFD как “указатель на функцию, возвращающую double”; typedef не создает новый тип, а декларирует новое имя уже существующего типа.
Задачи10.

  1. Дано множество точек на плоскости, заданных координатами (x,y). Написать функцию, возвращающую минимальное расстояние между двумя точками.

  2. Написать функцию обработки вещественной матрицы (50x20). Функция должна находить строку, содержащую наибольшее количество отрицательных элементов и распечатывать все элементы этой строки. Если таких строк несколько, то печатать все такие строки.

  3. Написать функцию, осуществляющую умножение двух матриц порядка MxN и NxK.

  4. Что будет выведено на печать?

int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};

int *pa[3]={a[0],a[1],a[2]};

int *p=a[0];

main()

{ int i;

for(i=0;i<3;i++)

printf(“%d %d %d %d %d\n”,a[i][2-i],*a[i],*(*(a+i)+i),*pa[i],p[i]);

}

  1. Что будет выведено на печать?

char *c[]={“ENTER”,”NEW”,”POINT”,”FIRST”};

char **cp[]={c+3,c+2,c+1,c};

char ***cpp=cp;

main()

{ printf(“%s”,**++cpp);

printf(“%s”,*--*++cpp+3);

printf(“ %s”,*cpp[-2]+3);

printf(“%s\n”,cpp[-1][-1]+1);

}

1   ...   4   5   6   7   8   9   10   11   12

Похожие:

Краткий конспект семинарских занятий по языку Си. (учебно-методическое пособие для студентов II курса) iconУчебно-методическое пособие предназначено для проведения практических...
Учебно-методическое пособие предназначено для проведения практических занятий по дисциплине «Английский язык по специальности», соответствует...

Краткий конспект семинарских занятий по языку Си. (учебно-методическое пособие для студентов II курса) iconУчебно-методическое пособие для студентов 1 курса всех специальностей...
Учебно-методическое пособие предназначено для студентов 1 курса всех специальностей заочной формы обучения. Целью издания является...

Краткий конспект семинарских занятий по языку Си. (учебно-методическое пособие для студентов II курса) iconУчебно-методическое пособие Н. Новгород
...

Краткий конспект семинарских занятий по языку Си. (учебно-методическое пособие для студентов II курса) iconУчебно-методическое пособие для студентов специальностей «История»
Шинаков Е. А., Поляков Г. П., Чубур А. А. Основы восточноевропейской археологии (учебно-методическое пособие). – Брянск, рио бгу,...

Краткий конспект семинарских занятий по языку Си. (учебно-методическое пособие для студентов II курса) iconВ сокращении Учебно-методическое пособие Томск 2008 утверждено
Учебно-методическое пособие предназначено для научных руководителей и студентов, выполняющих квалификационные работы и отчеты о нир...

Краткий конспект семинарских занятий по языку Си. (учебно-методическое пособие для студентов II курса) iconУчебно-методическое пособие для студентов заочной (дистанционной) формы обучения Москва 2008
Знаменский В. В. Налоги и налогообложение: Учебно–методическое пособие. – М.: Миир, 68 с., 2008

Краткий конспект семинарских занятий по языку Си. (учебно-методическое пособие для студентов II курса) iconУчебно-методическое пособие
Составитель Синицына З. М. Написание и защита выпускной квалификационной (дипломной) работы. Учебно-методическое пособие для студентов...

Краткий конспект семинарских занятий по языку Си. (учебно-методическое пособие для студентов II курса) iconУчебно-методическое пособие предназначено для проведения практических...
Оводство, которое поможет студентам лучше освоить теоретический материал по дисциплине «Безопасность жизнедеятельности» в разделе...

Краткий конспект семинарских занятий по языку Си. (учебно-методическое пособие для студентов II курса) iconУчебно-методическое пособие для самостоятельной работы студентов заочной формы обучения
Учебно-методическое пособие предназначено для организации самостоятельной работы студентов заочной формы обучения по специальности...

Краткий конспект семинарских занятий по языку Си. (учебно-методическое пособие для студентов II курса) iconУстройство автомобиля часть 2 системы питания двигателей учебно-методическое пособие
Учебно-методическое пособие предназначено для студентов дневного и заочного отделений технолого-экономического факультета нгпу, обучающихся...

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
vbibl.ru
Главная страница