- •Программирование
- •На языке высокого уровня
- •Часть 1. Основы языка Си
- •Методические указания
- •К выполнению лабораторных работ
- •Составитель: л.А. Прокушев
- •Подписано к печати Формат 60х84 1/16. Бумага тип. №3
- •Редакционно-издательский отдел
- •190000, Санкт-Петербург, ул. Б. Морская, 67 Общие методические указания
- •Алгоритмизация вычислительных процессов
- •Средства программирования вычислительных процессов Базовые элементы языка Си
- •Данные и их типы
- •Константы
- •Переменные
- •Ввод-вывод данных
- •Форматированный ввод
- •Форматированный вывод
- •Консольный ввод-вывод
- •Функция ввода символа (без отображения)
- •Функция очистки экрана результатов
- •Структура Си-программы
- •Директивы препроцессора
- •Выражения и операции
- •Логические выражения и операции
- •Работа с ветвящимися процессами Операторы
- •Оператор присваивания
- •Условный оператор (if)
- •Операторы передачи управления Пустой оператор
- •Оператор break (прервать) используется для прерывания работы текущего сложного оператора, в теле которого находится оператор break, и передачи управления на следующий по порядку оператор.
- •Оператор выбора (switch)
- •Действие оператора выбора состоит в следующем:
- •Введите 2 числа х, y : 3 8
- •Работа с циклическими вычислительными процессами
- •Циклы с фиксированным числом повторений Оператор цикла с предусловием (while)
- •Прерывание цикла
- •Циклы с неизвестным числом повторений Вычисление рекуррентных последовательностей
- •Оператор цикла с постусловием (do)
- •Вложенные циклы и организация диалога в программе
- •Оператор цикла с параметром (for)
- •Программа:
- •Программа:
- •Программа:
- •Работа с массивами
- •Описание массива
- •Доступ к элементам массива
- •Указатель
- •Занесение данных в массив
- •Многомерные массивы
- •Работа с функциями
- •Определение функции
- •Вызов функции
- •Передача параметров функции
- •Передача данных по значению
- •Передача данных по адресу
- •Пример. Составить функцию обмена значениями между переменными X и y. Верным решением является применение передачи данных по адресу.
- •Прототип (шаблон) функции
- •Блочная структура программы
- •Внешние описания переменных
- •Многомодульные программы Проект программы
- •Внешние ссылки
- •Создание проекта программы
- •Работа с указателями Объявления объектов со сложными описателями
- •Массивы указателей
- •Указатель на указатель
- •Указатель на функцию
- •Использование указателя на функцию как аргумента
- •Массивы указателей на функции
- •Часть 1. Основы языка Си 1
Программа:
# include <math.h>
void main( )
{ int k, N; float S, x; /* описание переменных */
clrscr ( ); /* очистка экрана */
printf (“ Введите x, N: ”);
scanf (“ %f%d”, &x, &N); /* ввод данных ряда */
for (k=1, S=0; k<=N; k++ ) /* заголовок цикла */
S += sin(k * x); /* вычисленние суммы ряда */
printf (“Сумма = %f ”, S); /* вывод результата */
}
Пример. Программа вывода четных чисел меньше 100.
void main ( )
{ int n ;
for ( n = 0; n < 100; n++)
{ if (n % 2) /* если нечетные (≠0) – продолжить */
continue;
printf(“%3d ”, n); /* печать четных чисел */
}
}
Пример. Ввести натуральное число N и определить, является ли оно простым.
Простое число делится без остатка только на 1 и N, а не простое число может делиться без остатка и на другие числа в диапазоне от 2 до N/2.
Программа:
void main( )
{ int N, i, p=1; /* р=1 – признак простого числа */
clrscr ( );
printf (“ Введите натуральное число N>1: ”);
sсanf (“ %d”, &N); /* ввод числа */
for (i=2; i <= N / 2; i++) /* цикл по делителям */
if (!(p = N % i)) break ; /* деление без остатка (р=0) */
if (p) printf (“Число %d простое .”, N);
else printf (“Число %d не простое.”, N);
}
Рассмотрим пример применения всех трех операторов цикла с вложенными циклами.
Пример. Ввести натуральное число N и найти его разложение на простые множители, произведение которых дает N. Организовать диалог с пользователем (интерактивный режим) по вводу любого числа N и контроль его ввода.
Программа:
void main( )
{ int N, n, i, p; /* описание переменных */
clrscr( ); /* очистка экрана */
puts (“ Разложение числа на простые множители ”);
do /* цикл диалога */
{ do /* цикл проверки числа */
{ printf(“\nВведите натуральное число >1:”);
scanf (“ %d”, &N); /* ввод числа */
} while (N<=1); /* условие продолжения ввода */
n=N; /* текущее значение N */
p=1; /* признак простого числа */
printf(“\n %d =”, N); /* вывод числа N */
for ( i=2; i<=N/2; i++) /* цикл по множителям */
{ if (n % i == 0) /* если число не простое */
{ p=0; /* признак не простого числа */
while (n % i == 0) /* цикл по одинаковым множителям */
{ printf (“%d*”, i); /* вывод множителя */
n /= i; /* число делится на множитель */
}
}
} /* конец цикла по множителям */
if (p) printf(“ простое число ”);
printf (“\nПродолжить? Да – нажмите 1, Нет – любую клавишу”);
i=getche( ); /* ввод видимого символа */
} while (i == ’1’); /* условие продолжения диалога */
} /* конец программы */
Работа с массивами
Массив – это последовательность данных одинакового типа, имеющих общее имя массива. Элементы (компоненты) массива расположены в памяти друг за другом и различаются номерами (индексами). Причем индексация в Си начинается с нуля. Количество индексов, необходимых для описания массива и организации доступа к элементам массива, определяют размерность массива – одномерный (в математике – вектор), двумерный (в математике – матрица, таблица) и т.д.