- •Программирование
- •На языке высокого уровня
- •Часть 1. Основы языка Си
- •Методические указания
- •К выполнению лабораторных работ
- •Составитель: л.А. Прокушев
- •Подписано к печати Формат 60х84 1/16. Бумага тип. №3
- •Редакционно-издательский отдел
- •190000, Санкт-Петербург, ул. Б. Морская, 67 Общие методические указания
- •Алгоритмизация вычислительных процессов
- •Средства программирования вычислительных процессов Базовые элементы языка Си
- •Данные и их типы
- •Константы
- •Переменные
- •Ввод-вывод данных
- •Форматированный ввод
- •Форматированный вывод
- •Консольный ввод-вывод
- •Функция ввода символа (без отображения)
- •Функция очистки экрана результатов
- •Структура Си-программы
- •Директивы препроцессора
- •Выражения и операции
- •Логические выражения и операции
- •Работа с ветвящимися процессами Операторы
- •Оператор присваивания
- •Условный оператор (if)
- •Операторы передачи управления Пустой оператор
- •Оператор break (прервать) используется для прерывания работы текущего сложного оператора, в теле которого находится оператор break, и передачи управления на следующий по порядку оператор.
- •Оператор выбора (switch)
- •Действие оператора выбора состоит в следующем:
- •Введите 2 числа х, y : 3 8
- •Работа с циклическими вычислительными процессами
- •Циклы с фиксированным числом повторений Оператор цикла с предусловием (while)
- •Прерывание цикла
- •Циклы с неизвестным числом повторений Вычисление рекуррентных последовательностей
- •Оператор цикла с постусловием (do)
- •Вложенные циклы и организация диалога в программе
- •Оператор цикла с параметром (for)
- •Программа:
- •Программа:
- •Программа:
- •Работа с массивами
- •Описание массива
- •Доступ к элементам массива
- •Указатель
- •Занесение данных в массив
- •Многомерные массивы
- •Работа с функциями
- •Определение функции
- •Вызов функции
- •Передача параметров функции
- •Передача данных по значению
- •Передача данных по адресу
- •Пример. Составить функцию обмена значениями между переменными X и y. Верным решением является применение передачи данных по адресу.
- •Прототип (шаблон) функции
- •Блочная структура программы
- •Внешние описания переменных
- •Многомодульные программы Проект программы
- •Внешние ссылки
- •Создание проекта программы
- •Работа с указателями Объявления объектов со сложными описателями
- •Массивы указателей
- •Указатель на указатель
- •Указатель на функцию
- •Использование указателя на функцию как аргумента
- •Массивы указателей на функции
- •Часть 1. Основы языка Си 1
Пример. Составить функцию обмена значениями между переменными X и y. Верным решением является применение передачи данных по адресу.
Программа:
void Obmen (int *px, int *py) /* список указателей */
{ int r = *px; /* перестановка */
*px = *py; /* значений */
*py = r ; /* переменных */
}
void main ( ) /* главная функция */
{ int x=20; y=30; /* исходные данные */
Obmen (&x , &y); /* передача адресов аргументов */
printf (“x=%d y=%d” , x, y) /* вывод результатов */
}
Результат программы: x=30 y=20
Использование способа передачи значений при вызове функции Obmen не изменяет значений переменных x и y, поскольку функция при этом способе работает с копиями аргументов.
Вызов функции с передачей адресов аргументов позволяет разрабатывать функции, имеющие доступ к массивам и другим протяженным объектам данных. Если в список параметров включено имя массива, то в функцию передается только адрес начала массива.
Пример. Разработать функции копирования строки из одного места памяти в другое. Возможны разные варианты функций, решающих эту задачу на основе алгоритмов рассмотренных выше.
Использование массива:
void copystring (char st1[ ], char st2[ ]) /* параметры – массивы */
{ int i;
for (i=0 ; st2[i] = st1[i]; i++); } /* цикл по элементам массива */
2. Использование указателей:
void copystring (char *st1, char *st2) /* параметры – указатели */
{ while( *st2++ = *st1++); } /* цикл по указателям */
Использование указателей и элементов массива:
void copystring (char *st1; char *st2) /* параметры – указатели */
{ int i;
for (i=0; st2[i] = st1[i]; i++); } /* цикл по элементам массива */
Прототип (шаблон) функции
Порядок расположения функций в программе определяется следующим правилом: объект описывается или объявляется раньше, чем он используется.
Обычно главную функцию main ( ) стараются расположить в начале программы, поскольку она описывает общий алгоритм решаемой задачи и с нее начинается выполнение программы. Для того чтобы не нарушить общее правило использования функций, перед функцией main( ) располагают прототипы (шаблоны) функций, описание которых следует за функцией main( ).
Прототип повторяет заголовок функции, за которым ставится разделитель точка с запятой (;), то есть вводится пустой оператор вместо тела функции. Компилятор не требует задания имен параметров в прототипе, поскольку проверяет только соответствие типов данных прототипа и описания функции.
Пример. При использовании прототипа одной из функций копирования строки, рассмотренных выше, копирование символов из строки str1 в строку str2 может выполнить следующая программа:
#include<stdio.h>
#include<conio.h>
void copystring (char st1[ ], char st2[ ]); /* прототип функции */
void main ( ) /* главная функция */
{ char str1[80], str2[80]; /* массивы для строк */
clrscr( ); /*очистка экрана */
puts (“Введите строку (<80 символов)”);
gets (str1); /* ввод строки */
copystring (str1, str2); /* вызов функции */
puts (“Скопированная строка:” );
puts (str2); /* вывод строки */
}
void copystring (char st1[ ], char st2[ ]); /*описание функции */
{ int i;
for (i=0; st2[i]=st1[1]; i++); /* цикл копирования */
}