- •Тема 1. Основные этапы решения задач на эвм 5
- •Тема 2. Жизненный цикл программы. Критерии качества программы. 15
- •Тема 3. Схемы алгоритмов, данных, программ 29
- •Тема 1. Основные этапы решения задач на эвм Постановка задачи разработки программного обеспечения
- •Анализ формальной постановки задачи
- •Выбор или разработка математической модели и метода решения
- •Разработка алгоритма
- •Базовые структуры алгоритма
- •3.2. Цикл с постусловием.
- •Тема 2. Жизненный цикл программы. Критерии качества программы.
- •Техническое задание и спецификация программы
- •Разработка проекта программной системы
- •Программирование (кодирование) или программная реализация алгоритмов
- •Тестирование и отладка
- •Эксплуатация и сопровождение
- •Критерии качества программного обеспечения
- •Тема 3. Схемы алгоритмов, данных, программ
- •Символы данных
- •Отображает данные, вводимые в ручную, во время обработки с устройств любого типа (клавиатура, переключатели, кнопки, световое перо, полоски со штрих кодом и т.Д.).
- •Символы процесса
- •Символы линий
- •Специальные символы
- •Правила применения символов в схемах
- •Правила выполнения соединений
- •Специальные условные обозначения
- •Тема 4. Язык программирования высокого уровня Си Общие сведения о языке Си
- •Алфавит языка Си
- •Грамматика для описания языка, синтаксические диаграммы
- •Структура программы на языке Си
- •Void main() //функция main
- •Имена объектов в программе
- •Выражения, операции и приоритеты
- •Тема 5. Стандартные типы данных
- •Тема 6. Составные типы данных Данные регулярного типа (массивы)
- •Int b [n]; // вектор из 10 целых элементов
- •9 Strcpy(s1,&s2[k]); //копирует правую подстроку из s2 в s1
- •9 Strncpy(s1,&s[2],n); //копирует среднюю подстроку из s2 в s1
- •Void main() /*пример функции*/
- •If(strcmp(s, "пароль"))
- •If(!strсmp("quit", s)) break;
- •Данные комбинированного типа (структуры)
- •Int month;
- •Int year;
- •Перечисления
- •Объединения
- •Указатели
- •Void *addres;
- •Int arrey[25];
- •Тема 7. Представление основных управляющих структур программирования Оператор присваивания
- •Составной оператор
- •Оператор перехода Goto
- •Условный оператор If
- •Оператор выбора switch
- •Операторы цикла while, do – while, for
- •Int I,j,imax,jmax,imin,jmin;
- •Операторы прерывания циклов
- •If (!flag) printf("Отрицательных чисел нет"); Форматированный ввод данных
- •Форматированный вывод данных
- •Преобразование типов
- •Инициализация данных
- •Тема 8. Функции
- •Определение функций в языке Си
- •Int rus (unsigned char r)
- •Void change (int X, int y)
- •Void change (int *X, int *y)
- •Вызов функций в языке Си
- •Int *fun (intx,int *y);
- •Int main()
- •Рекурсивные функции
- •Int nodWhile (int m, int n)
- •Int nodWhile (int m, int n)
- •Int main()
- •Int fCalculated[nFib];
- •Int FibDinam (int n)
- •Int main()
- •Int Summa(int n, int a[100])
- •Int main()
- •Тема 9. Файлы
- •Int fseek(file *fp, long count, int access);
- •Int ferror(file *fp);
- •Int remove(char *file_name);
- •Void rewind(file *fp);
- •Int main()
- •Тема 10. Приемы программирования. Примеры алгоритмов Алгоритмы сортировки
- •Исходный массив
- •Void SortBubble (int count, int* pArr)
- •Исходный массив
- •Void SortSelect(int count, int* pArr)
- •Int i1,temp;
- •Int jmax;
- •Void SortInsert (int count, int* pArr)
- •Int temp, j;
- •Алгоритмы поиска
- •Int bfSearch(char *s, char *p)
- •Int bmtarr[255];
- •Int bmSearch(int startpos, char *s, char *p)
- •Int BinarySearch (int lb, int ub, int key, int* pArr)
- •Динамические структуры данных
- •Линейные списки
- •Int value; // значение элемента
- •Void PrintSearchList (list head, int val)
- •If (lfound) printf("Элемент в списке найден!");
- •Стек, очередь, дек
- •Int prior(char);
- •Void main(void)
- •Int k, point;
- •Int prior(char a)
- •Деревья
- •Int info; //информационное поле
- •Приложение 1. Стандартные библиотеки языка Си
- •Приложение 2. Примеры реализации алгоритмов
- •Int main()
- •Int arr[10]; // Массив arr из 10 целочисленных элементов
- •Int I; // Счетчик для циклов
- •Int main()
- •Int main()
- •Int main()
- •Int Temp;
- •Int CurrentYear, Diff, Day1, Day2, Month1, Month2, I, Visokos;
- •Int main()
- •InsertSort(d, max); // Сортируем массив b методом вставок
- •Int number;
- •Int main()
- •Не рекурсивный алгоритм решения задачи Ханойская башня.
- •Int main()
- •Рекурсивный алгоритм решения задачи Ханойская башня.
- •Void move(int I, int j, int d)
- •Void hanoy(int I, int j, int k, int d)
- •Int main()
- •Int Cubic(double *X,double a,double b,double c);
- •Int Cubic (double *X, double a, double b, double c)
- •Void lu_backsub (double **a, int n, int *indx, double *b)
- •Void lu_invert (double **a, int n, int *indx, double **inv, double *col)
- •Int BracketRoot (double x0, double *a, double *b, double d0, double di, double dmax, double (*fun)(double));
- •Int BracketRoot (double x0, double *a, double *b, double d0,
- •Int main()
- •Int expo, I;
- •If (expo & 1)
- •Int main()
- •Приложение 3. Лабораторные работы Лабораторная работа №1
- •Лабораторная работа №2
- •Лабораторная работа №3
- •Лабораторная работа №4
- •Лабораторная работа №5
- •Лабораторная работа №6
- •Лабораторная работа №7
- •Лабораторная работа №8
- •Лабораторная работа №9
- •Лабораторная работа №10
- •Лабораторная работа №11
- •Лабораторная работа №12
- •Список литературы
Void main() //функция main
{
<операторы> //выполняемые операторы
}
int <имя процедуры/функции> // раздел описания процедур и функций
{
<основная часть процедуры/функции >;
}
Как видно из приведенного примера, текст программы на языке Си состоит из строк. Символы в строке записываются на одном уровне без надстрочных и подстрочных индексов. Для разделения некоторых конструкций языка используются пробелы. Пробелы формируются с помощью клавиш «пробел» и «Tab» на клавиатуре компьютера. Пробелы нельзя использовать внутри имён, чисел, специальных символов и служебных слов. По крайней мере 1 пробел должен быть между двумя последовательными именами, числами и служебными словами. Во всех других случаях наличие или отсутствие пробела не влияет на смысл программы. В том месте, где можно использовать 1 пробел, можно использовать любое количество пробелов. Конец строки считается пробелом, поэтому текст программы можно прерывать и переносить на другую строку в любом месте, где можно использовать пробел. Пробелы позволяют выделять структурные блоки программы и делают ее более наглядной, программа без такого структурирования плохо читаема и не понятна. Поэтому существует правило табулирования текста программы – выделения с помощью пробелов, символов табуляции и переводов строк вложенных блоков, циклов, условий.
Операторы разделяются между собой символом точка с запятой («;»). Пустым оператором считается оператор, который не выполняет никаких действий. На языке Си это может быть пробел с последующей точкой запятой.
Для пояснения текста программы используется комментарии.
Комментарии имеют вид (//текст) или (/*текст*/). Комментарий может охватывать несколько строк (используется форма «/*текст*/»), либо помещаться в одной строке (точнее, до конца строки), тогда используется форма: «// комментарий до конца строки».
Внутри комментария можно располагать любые символы, в том числе символы, не входящие в алфавит языка. Комментарии можно использовать везде, где применяется пробел. Наличие или отсутствие комментария не влияет на работу программы. Комментарии к программе делают ее более наглядной и понятной, поэтому рекомендуется использовать комментарии как можно чаще. Существует негласное правило хорошего тона программирования: как минимум одна строка комментария на три строки кода программы.
Имена объектов в программе
Имена (идентификаторы) – условные обозначения для используемых в программе констант, типов, переменных, процедур и функций. Имя начинается с буквы и состоит из букв и цифр, т.е. в виде грамматики:
<имя> =:: <буква>{<буква> | <цифра>},
или в виде синтаксической диаграммы (рис.25):
Примечание:
1. Во многих реализациях языка количество символов в имени ограничено.
2. В качестве имен нельзя использовать служебные слова языка Си.
3. К буквам относится также символ «_» (подчёркивание).
4. В языке определены стандартные имена, которые можно использовать только в строго определенном смысле. Эти имена используются для обозначения стандартных констант, типов, файлов, процедур и функций.
Приведем перечень некоторых стандартных имён:
abs – абсолютное значение целого;
acos – арккосинус;
asctime – дать время;
atan, atan2 – арктангенс;
atof, atoi, atol – преобразовать в плавающее;
close – закрыть файл;
creat – создать файл;
difftime – определить отрезок времени;
div – делить;
ecvt – преобразовать число в строку;
exit, _exit – завершить выполнение программы;
exp – экспонента;
fclose – закрыть файл;
fcvt – преобразовать double в строку с фиксированной точкой;
feof – проверка признака конца файла;
fgetc – взять байт из файла;
fgets – взять строку из файла;
filesize – дать размер файла;
findfirst, findnext – поиск файлов по шаблону;
floor – целая часть;
fmod – остаток от деления двух чисел;
fopen – открыть файл;
fprintf – форматный вывод в файл;
fputc – запись байта в файл;
fputs – запись строки в файл;
fread – читать из файла;
free – освободить память;
freopen – открыть файл повторно;
frexp – экспоненциальное представление;
fscanf – форматный ввод из файла;
fseek – позиционировать файл;
ftell – дать позицию в файле;
fwrite – писать в файл;
getc, getchar, getche, getch – взять байт из файла;
getcwd – дать текущий каталог;
gets – ввод строки;
index – найти литеру в строке;
inp, inpw – ввод из порта;
itoa – представление целого;
kbhit – проверка ввода с клавиатуры;
labs – абсолютное значение длинного;
ldexp – экспонента;
ldiv – деление чисел типа long;
localtime – дать местное время;
log, log10 – логарифм;
lseek – изменить позицию в файле;
mkdir – создать каталог;
mktime – преобразовать время;
modf – дробная и целая часть числа;
open – открыть файл;
outp, outpw – вывод в порт;
pow – степень;
printf, fprintf, sprintf – форматный вывод;
puts – вывод строки в файл;
rand – случайная величина;
read – читать блок из файла;
rename – переименовать файл;
rewind – установить указатель файла в начало;
rmdir – удалить каталог;
scanf – форматный ввод;
sin, sinh – синус, синус гиперболический;
spawn – создать процесс;
sprintf – форматный вывод в буфер;
sqrt – квадратный корень;
srand – инициализация случайной величины;
sscanf – форматный вывод из буфера;
strlen – дать длину строки;
strlwr – привести к нижнему регистру;
strspn – дать длину совпадающей подстроки;
strstr – найти подстроку;
time – дать время;
vprintf, vfprintf, vsprintf – форматный вывод;
write – писать в файл.