- •«Утверждаю»
- •Учебно-методический комплекс
- •Астана 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. Алгоритмизация графических построений.
- •Варианты заданий:
- •Сведения
- •Перечень экзаменационных вопросов по пройденному курсу
- •Глоссарий
Другие функции из библиотеки обработки строк. В таблице 8 приведены прототипы и краткое описание остальных функций из библиотеки обработки строк.
Таблица 8 – Другие функции из библиотеки обработки строк
Прототип |
Описание функции |
int strlen (const char *s) |
Определяет длину строки s. Возвращает число символов, предшествующих ограничивающему символу NULL. |
char *strlwr (char *s)
|
Преобразует символы верхнего регистра в символы нижнего регистра в строке s. Другие символы не затрагиваются. Функция возвращает указатель на строку s. |
char *strupr(char *s) |
Преобразует символы нижнего регистра в символы верхнего регистра в строке s. Другие символы не затрагиваются. Функция возвращает указатель на строку s. |
сhar *strrev(char *s) |
Обращает порядок символов в строке s и возвращает указатель на строку s. |
Ниже приведены примеры программы, использующих функции работы со троками.
Пример 1: main( ) { staticcharl[ ]=”Сведения о результатах сессии”; puts(l); flen(l, 8); puts(l); } flen (stroke, size) char *stroke; int size; { if (strlen(stroka)>size) *(stroke+size)=’\0’; } Результат: Сведения о результатах сессии Сведения |
Пример 3: #include<stdio.h> #define NAME “Ритчи” main() { char a[20]; puts(“Назовите автора языка Си”); gets(a); while (strcmp(a,NAME)!=0) { puts(“Ввод следующего варианта”); gets(a); } puts(“Ответ принят”); }
|
Пример 2: #include <stdio.h> main() { static char name[80]; staticcharstud[ ]= “является студентом факультета ИиВТ”; puts(“Ведите ваше имя.”); gets(name); strcat (name, stud); puts (name); puts (stud); } Результат: Введите ваше имя Марат Марат является студентом факультета ИиВТ является студентом факультета ИиВТ |
#include <stdio.h> #defineSTROKA“С Новым годом!” main() { static char *ptr=STROKA; static char res[25]; puts (ptr); puts (res); strcpy (res,ptr); puts (ptr); puts (res); } Результат: С Новым годом!
С Новым годом! С Новым годом!
|
Основная литература: 1осн[325-355],2осн[371-405]
Дополнительная литература:9доп[46-51],11доп[13-16]
Контрольные вопросы:
Какие функции используются для обработки строк?
Какие функции используются для сравнения строк?
Какие функции используются для поиска?
Какой заголовочный файл необходимо подключить для работы с библиотекой обработки строк?
Какие функции используются для изменения регистров?
Тема 11. Структуры данных в Си.
Определение структурного шаблона. Структура является достаточно гибким типом при представлении данных различных типов, а также при создании новых типов. При описании структур данных можно сначала определить структурный шаблон в следующем виде:
struct <rname>
{
<type> <fname>;
…………
<type> <fname>;
}
где rname– имя типа структуры, имя типа структуры можно не указывать, в фигурных скобках приводится список элементов структуры с указанием их типов. После определения структурного шаблона осуществляется определение переменной в следующем виде:
struct <rname> <vnames>;
vnames– имя структурной переменной.
Пример:
struct sved
{
char fam[25];
char adr[20];
int gr;
};
struct sved inf;
Структурный шаблон может приводится как внутри определения функции, так и вне функции. Шаблон, приведенный внутри функции, может использоваться только внутри этой функции. Если структурный шаблон располагается вне функции, то этот шаблон может использоваться всеми функциями программы, следующими за его определением. Например, в другой функции можно определить другую структурную переменную inf1 в видеstructsvedinf1;
Предполагается, что функция, содержащее данное описание, располагается после определения шаблона. Необходимо отметить следующее: имя типа структуры указывается обязательно, если при описании структуры шаблон определяется в одном месте, а структурные переменные, использующие этот шаблон, определяются в другом месте. Используя описание (определение) структурной переменной компилятор выделяет память по структурному шаблону ( учитывая описание каждого элемента структуры). При описании структур данных процесс определения структурной переменной можно объединить в один этап. При объединении шаблонов и определений переменных имя типа структуры не нужно использовать. Например:
struct
{
char fam[25];
char adr[20];
int gr;
} inf;
Форму с именем типа структуры обычно используют, если структурный шаблон используется более одного раза.
Инициализация структуры. Внешние или статические структурные переменные можно инициализировать. Необходимо отметить, что принадлежность структурной переменной к внешнему типу зависит от того, где определена переменная, а не где определен шаблон. Предположим, имеется описание:
static struct sved inf;
В этом случае используется статическая память, и можно инициализировать структуру следующим способом:
static struct sved inf= {“Попов”,
“Сатпаева, 20”,
1978}
Пример: (доступ к элементам структуры)
#include <stdio.h>
main()
{ struct
{ char fam[25];
char adr[20];
int gr;
} inf;
printf(“Введите фамилии : \n”);
gets(inf.fam); /*доступ к элементуfam*/
printf(“Введите адрес: \n”);
gets(inf.adr);
printf(“Введите год рождения : \n”);
scanf(“%d”,&inf.gr);
printf (“%s, %s , %d\n”, inf.fam, inf.adr, inf.gr); }
Массивы структур. При решении задач используются массивы структур, то есть структурная переменная является элементом массива. Описание массивов структур выполняется следующим образом:
struct sved inf[10];
Элементы массива inf[10] являются структурами типаsved.
При определении элементов массивов структур, как и в случае отдельных структур, имя структуры отделяется от имени элемента структуры символом “.”( операция получения элемента). Например :
inf[0].fam– первый элемент массива
inf[1].fam– второй элемент массива
…………………..
inf[9].fam– 10-й элемент массива
(inf[1] – имя структурной переменной)
#include <stdio.h>
#define num 10
struct cved
{ char fam[25];
char adr[20];
int gr; };
main()
{ struct sved inf[num];
int l=0, i;
while (l<num)
{ printf(“Ввод фамилии \n”);
gets (inf[l].fam);
printf(“Адрес: \n”);
gets (inf[l].adr);
printf(“год рождения \n”);
scanf(“%d”, &inf[l].gr);
l++; }
printf(“Сведения о студентах группы \n”);
for (i=0; i<l; i++)
printf(“%s, %s, %d\n”, inf[i].fam, inf[i].adr, inf[i].gr); }
Рассмотрим вложенные структуры
#include<stdio.h>
#define num 5
#define len 15
#define is “Наука”
struct isd
{ char namisd[len];
int godisd; }
struct knig
{ char author[len];
char title[len]
struct isd isdat; }
main()
{ static struct knig masking[num]={{“Петров В.”,
“Информатика”
{“Наука”, 1998}},
{“Савельев В.”,
“Физика”,
{“Наука”,1985}}};
inti;
for (i=0; i<num; i++)
if (masking[i].isdat.nanidd==IS)
printf (“%s %s \n”, masking[i].author, masking[i].title); }
Рассмотрим использование указателя на структуры. Ранее было отмечено, что структуры не могут использоваться в качестве аргумента функции, а использование указателей на структуры дает возможность осуществить доступ к элементам структуры при помощи указателей. Описание указателя приводится ниже ( рассматривается тот же массив структур):
Struct knig *ptrst;
Создан указатель ptrstдля ссылок на любые структуры типаknig.
Имеют место:
Ptrst==&masking[0];
*ptrst==masking[0];
ptrst->author – это эквивалентно masking[0].author.
Если ptrstявляется указателем на структуруmasking[0], то следующие обозначения эквивалентны
Masking[0].author==(*ptrst).author==ptrst->author
Ptrst+1 ссылается наmasking[1] .Необходимо отметить , что в данном примере 1 к указателюptrstприбавляет 47 к адресу, потому, что каждая структура типа ААА занимает 47 байт.
Рассмотрим пример, в котором адрес структуры используется в качестве аргумента функции:
struct ZP
{ char *name;
char *mec;
float nach;
float prem; } SOTR={ “Зуев П”,”январь” 1020.45, 250.15 };
main()
{ float s, fadd();
printf(“Зуеву П. за январь всего начислено %6.2а тенге \n“,fadd(&sotr)); }
float fadd (ptrst)
struct zp *ptrst;
{ float s=0;
s=ptrst->nach+ptrst->prem;
return(s); }
Заметим, что применяется операция & для получения адреса структуры. В отличие от имени массива имя структуры само по себе не является синонимом своего адреса. Рассмотрим массив структур. Имя массива является синонимом его адреса, потому его можно передавать функции.
Struct zp
{ char *name;
char *mec;
float nach;
float prem; } sort[6]={ {“Зуев П.”,”январь”, 8020.45, 1250.15},
……………
{“Потапов М.”,”январь”,6000.50, 1500.20} };
main()
{ float ITS, fadd ( );
printf(“Группе сотрудников за январь всего начислено %10.2fтенге \n”,fadd(sort)); }
float fadd (ptrst)
struct zp *ptrst;
{ float ITS;
int i;
for (i=0, ITS=0; i<6; i++; ptrst++)
ITS+=ptrst ->nach+ptrst->prem;
Return(ITS); }
Основная литература: 1осн[393-397],2осн[406-436],3осн[108-128]
Дополнительная литература:9доп[200-209],11доп[13-16]
Контрольные вопросы:
1. Что такое структуры данных?
2. В каких случаях целесообразно использовать вложенные структуры?
3. Какие преимущества дает использование оператора присоединения?
4. Каков структурный шаблон описания структуры данных?
5. Каким образом осуществляется доступ компонентам структуры данных?