
- •«Утверждаю»
- •Учебно-методический комплекс
- •Астана 2010 График выполнения и сдачи заданий по дисциплине
- •Карта учебно-методической обеспеченности дисциплины Учебники, учебные пособия
- •Конспект лекционных занятий
- •Тема 1. Введение в программирование на Си. Структура программы. Директивы препроцессора. Типы данных.
- •Основные операции в языке Си.
- •Преобразование типов
- •Тема 2. Управляющие структуры. Выбор вариантов. Структура выбора If, If – Else, логические операции, операция условия, множественный выбор.
- •Тема 3. Управляющие структуры. Структуры повторения While, do – While, For. Управляющие операторы break и continue.
- •Тема 4. Массивы. Разработка программ с использованием одномерных и двумерных массивов.
- •Тема 5. Функции в Си. Создание и использование функций.
- •Тема 6. Классы памяти и разработка программ.
- •Тема 7. Указатели в Си.
- •Тема 8. Использование указателей при обработке одномерных и двумерных массивов.
- •Тема 9. Символы и строки в Си.
- •Функции сравнения из библиотеки обработки строк. Прототипы функций и краткое описание каждой из них приведены в таблице 6.
- •Функции поиска из библиотеки обработки строк. Прототипы функций и краткое описание каждой из них приведены в таблице 7.
- •Другие функции из библиотеки обработки строк. В таблице 8 приведены прототипы и краткое описание остальных функций из библиотеки обработки строк.
- •Ниже приведены примеры программы, использующих функции работы со троками.
- •Тема 11. Структуры данных в Си.
- •Тема 12. Динамические структуры данных.
- •Тема 13. Работа с файлами в Си.
- •Тема 14. Графика в Си.
- •Тема 15. Объектно-ориентированное программирование.
- •Методические рекомендации по выполнению лабораторных заданий
- •Лабораторная работа № 3. Использование операторов цикла при решении задач.
- •Лабораторная работа №4. Разработка программ с использованием одномерных массивов.
- •Лабораторная работа №5. Разработка программ с использованием двумерных массивов.
- •Лабораторная работа № 6. Программирование задач с использованием нескольких функций на языке Си.
- •Лабораторная работа № 8. Программирование задач обработки структур данных.
- •Лабораторная работа № 9. Разработка программ с использованием файловых переменных.
- •Лабораторная работа № 10. Разработка программ с использованием графических функций языка Си.
- •Содержание отчета по выполнению лабораторной работы
- •1 Задание
- •Тема 1. Запись констант, стандартных функций, выражений, операторов присваивания. Запись программ линейных структур алгоритмов.
- •Тема 2. Алгоритмическое описание, запись программ линейных, разветвляющихся.
- •Тема 3. Алгоритмическое описание, запись программ циклических структур алгоритмов.
- •Тема 4. Алгоритмическое описание, составление программ обработки одномерного массива.
- •Тема 5. Алгоритмическое описание, составление программ обработки двумерного массива.
- •Тема 6-7. Составление программ решения задач с использованием функции.
- •Рекомендуемая литература:
- •Тема 8-9. Составление программ решения задач обработки массивов с использованием указателей.
- •Тема 10-11. Программирование задач обработки символьных и стрковых данных.
- •Рекомендуемая литература.
- •Тема 12. Методы сортировки.
- •Тема 13. Составление программ решения задач с использованием структур данных.
- •Тема 14. Составление программ решения задач с использованием файла произвольного доступа.
- •Рекомендуемая литература.
- •Тема 15. Алгоритмизация графических построений.
- •Варианты заданий:
- •Сведения
- •Перечень экзаменационных вопросов по пройденному курсу
- •Глоссарий
Тема 4. Массивы. Разработка программ с использованием одномерных и двумерных массивов.
Массивы представляют собой структуры данных, состоящие из логически связанных элементов данных одного и того же типа. Массивы являются «статическими» объектами в том смысле, что их размер остается одним и тем же в процессе выполнения программы.
Объявление массивов. Массив является группой ячеек памяти, логически связанных в том отношении, что все они имеют одно и то же имя и один и тот же тип. Для обращения к элементу массива необходимо указать имя массива и номер позиции этого элемента в массиве. Первый элемент в любом массиве имеет нулевой порядковый номер. Номер позиции элемента, содержащейся внутри квадратных скобок ([]), более формально называют индексом. Индекс должен быть целым числом или целочисленным выражением. Скобки, в которые заключается индекс массива, на самом деле рассматриваются в качестве операции языка Си, они имеют тот же самый приоритет, что и круглые скобки. При объявлении массива необходимо указать имя массива, тип каждого элемента и число элементов массива. При помощи одного объявления можно зарезервировать память для нескольких массивов, например:
int b[100], x[27];
В программе, приведенной ниже, используется структура повторения forдля инициализации нулями элементов целочисленного массиваnиз десяти элементов.
/* Инициализация массива */
#include<stdio.h>
main()
{ int n[10], i;
for (i=0; i<=9; i++)
n[i]=0; /* инициализация массива */
for(i=0;i<=9;i++) /* вывод элементов массива */
printf(“%3d%10d\n”, i, n[i]);
return0; }
Результат программы:
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
Элементы массива также могут инициализироваться при объявлении массива путем помещения вслед за его объявлением знака равенства и списка (заключенного в фигурные скобки) инициализирующих значений, разделенных запятыми. Программа, приведенная ниже, инициализирует целочисленный массив десятью значениями.
/* Инициализация массива при объявлении */
#include <stdio.h>
main()
{ int i, n[10]={2, 27, 64, 18, 95, 14, 90, 70, 6, 3};
for (i=0; i<=9; i++)
printf(“%3d”, n[i]);
return0; }
Результат программы:
2 27 64 18 95 14 90 70 6 3
Если инициализирующих значений меньше, чем элементов массива, остающиеся элементы автоматически инициализируются нулями. Например, элементы массива n можно было бы инициализировать нулями посредством объявления
intn[10]={0};
которое явно инициализирует нулем первый элемент и автоматически инициализирует нулями оставшиеся девять элементов, поскольку инициализирующих значений меньше, чем элементов в массиве. Необходимо помнить, что массивы не инициализируются нулями автоматически. Программист должен инициализировать по крайней мере первый элемент, чтобы оставшиеся элементы были автоматически заполнены нулями.
Если размер массива не включается в его объявление со списком инициализирующих значений, то число элементов в массиве будет равно числу элементов в списке инициализации.
Массивы в Си могут иметь несколько индексов. Многомерные массивы часто применяются для предоставления таблиц, состоящих из значений, упорядоченных по строкам и столбцам. Для идентификации конкретного элемента таблицы мы должны указать два индекса: первый, идентифицирующий строку элемента, и второй, идентифицирующий столбец. Такие таблицы или массивы называются двумерными массивами.
Многомерный массив, подобно одномерному, может быть инициализирован при его объявлении. Например, двумерный массив b[2][2] может быть объявлен и инициализирован посредством
intb[2][2]={{1, 2}, {3, 4}};
Значения группируются в фигурных скобках по строкам. Таким образом, 1 и 2 инициализируют b[0][0] иb[0][1], 3 и 4 инициализируютb[1][0] иb[1][1]. Если для данной строки недостаточно инициализирующих значений, оставшиеся ее элементы инициализируются нулями. Таким образом, объявление
intb[2][2]={{1}, {3, 4}};
инициализировало бы b[0][0] единицей,b[0][1] нулем,b[1][0] тройкой иb[1][1] четверкой.
Следующая программа демонстрирует инициализацию двумерных массивов при их объявлении. В программе объявляются три массива с двумя строками и тремя столбцами (каждый состоит из шести элементов). Объявление массива а1 предусматривает шесть инициализирующих значений в двух подсписках. Первый подсписок инициализирует первую строку массива значениями 1, 2 и 3; второй подсписок инициализирует вторую строку массива значениями 4, 5 и 6. Если из списка инициализирующих значений массива а1 убрать фигурные скобки, в которые заключен каждый подсписок, компилятор автоматически проинициализирует элементы первой строки, а затем элементы второй строки. Объявление массива а2 предусматривает пять инициализирующих значений. Инициализирующие значения присваиваются сначала первой строке, затем второй строке. Элемент а2[1][2] инициализирован нулем. Объявление массива а3 предусматривает три инициализирующих значения в двух подсписках. Соответственно элементы а3[0][2], а3[1][1] и а3[1][2] инициализируются нулями. Для вывода элементов каждого массива в программе вызывается функция printarray.
/* Инициализация многомерного массива */
#include <stdio.h>
void printarray(int [][3]);
main()
{ int a1[2][3] = {{1, 2, 3}, {4, 5, 6}}, a2[2][3] = {1, 2, 3, 4, 5}, a3[2][3] = {{1, 2}, {4}},
printf(“Массив А1”);
printfarray(a1);
printf(“Массив А2”);
printfarray(a2);
printf(“Массив А3”);
printfarray(a3);
printf(“\n”);
return 0; }
void printarray(int a[][3]);
{ int i, j;
for (i=0; i<=1; i++)
{ for (j=0; j<=2; j++)
printf(“%d ”, a[i][j]);
printf(“\n”); }
}
Результат программы:
Массив А1
1 2 3
4 5 6
Массив А2
1 2 3
4 5 0
Массив А3
1 2 0
4 0 0
Основная литература: 1осн[223-253],2осн[244-255]
Дополнительная литература:10доп[41-46]
Контрольные вопросы:
1. Как осуществляется ввод и вывод одномерного массива?
2. Как осуществляется ввод и вывод двумерного массива?
3. При каком условии можно передать все элементы одного массива другому массиву?
4. Каким образом можно сравнить два массива?
5. Приведите примеры инициализации одномерных и двумерных массивов.