- •О.Ф.Власенко, и.В.Беляева изучение си после паскаля: циклы, развилки, функции, обработка одномерных массивов
- •Оглавление
- •Вывод в языке си Простейшая программа «Привет, мир!»
- •Функция printf – форматированный вывод
- •Циклы в языке си «Привет, мир!» 100 раз
- •Цикл с предусловием в Паскале и Си
- •Цикл с постусловием в Паскале и Си
- •Цикл for в Паскале и Си
- •Задачи простые
- •Задачи средней сложности
- •Задачи сложные
- •Функции в языке си Локальные и глобальные переменные
- •Функции без параметров в Си
- •Функции с параметрами
- •Способы передачи параметров в подпрограммы
- •Работа с указателями: операции взятия адреса и разыменования адреса
- •Ввод в языке си Функция getch – ввод символа
- •Функция scanf - форматированный ввод
- •Развилки Пример задачи: размер файла в байтах
- •Усеченные развилки
- •Полные развилки
- •Варианты для простых заданий и для заданий средней сложности
- •Задания среднего уровня сложности
- •Рекуррентные соотношения для вычисления корней
- •Разложение в ряд некоторых функций
- •Пример выполнения лабораторной работы по заданиям среднего уровня сложности
- •Сложные задания
- •Пример выполнения лабораторной работы по сложным заданиям
- •Варианты для сложных заданий
- •Организация меню. Управляющая структура Выбор (switch) Организация простейшего меню
- •Массивы в си Объявление и инициализация одномерных массивов в Си
- •Вычисление адреса элемента массива
- •Адресная арифметика
- •Имя массива является указателем на нулевой элемент массива
- •Передача массива в функцию через параметр
- •Примеры обработки массивов в Си
- •Задание для лабораторной работы по теме «Обработка одномернЫх массивОв» Цель работы
- •Общее задание
- •Пример выполнения лабораторной работы
- •Задачи простые
- •Задачи средней сложности
- •Задачи сложные
- •Список литературы
- •Изучение си после паскаля: циклы, развилки, функции, обработка одномерных массивов
- •432027, Г. Ульяновск, Сев. Венец, 32.
Функции в языке си Локальные и глобальные переменные
В Си, так же, как в Паскале, переменные можно объявлять внутри функции (тогда это будут локальные переменные) либо вне функций (глобальные переменные). В Си глобальные переменные используются лишь тогда, когда без них программа чувствительно усложняется. В остальных случаях используют локальные переменные.
Пример с глобальными переменными:
/*
Вычисление факториала числа N.
Все переменные глобальные.
ПРЕДУПРЕЖДЕНИЕ: не делайте так!
*/
// Определение константы N равной 5
#define N 5
// Глобальные переменные i и f
int i;
long f;
int main()
{
f = 1;
for (i = 1; i <= N; i++)
f *= i;
printf(“%ld”, f)
return 0;
}
Пример с локальными переменными:
/*
Вычисление факториала числа N.
Все переменные локальные.
*/
#define N 5
int main()
{
// Локальные переменные i и f
int i;
long f = 1;
for (i = 1; i <= N; i++)
f *= i;
printf(“%ld”, f)
return 0;
}
В этом примере внимания заслуживает определение константы:
#define N 5
Все инструкции, начинающиеся с символа #, являются директивами компилятору. В Турбо Паскале директивы компилятору записываются в комментариях особого типа (пример {$I-}). Директивы компилятору в Си называются директивами препроцессора.
В нашем случае используется директива #define, которая определяет подстановку. Действие ее состоит в том, что перед компиляцией программы все N в программе будут заменены на 5.
Подстановку можно использовать не только для определения констант, но и для более сложных действий. Например, если в программе объявить:
#define begin {
#define end }
то в Си-программе вместо символов { и } можно использовать begin и end.
Пример:
/*
Вычисление факториала числа N.
Вместо { и } используются begin и end.
ПРЕДУПРЕЖДЕНИЕ: не делайте так!
*/
#define N 5
#define begin {
#define end }
int main()
begin // перед компиляцией вместо begin будет подставлено {
// Локальные переменные i и f
int i;
long f = 1;
for (i = 1; i <= N; i++)
f *= i;
printf(“%ld”, f)
return 0;
end // перед компиляцией вместо end будет подставлено }
Функции без параметров в Си
В Си есть только функции, процедур нет. Но в Си есть возможность объявить тип возвращаемого функцией значения как void (пусто). Такая функция Си является эквивалентом процедуры в Паскале.
Пример выполнения лабораторной работы по циклам, с использованием процедур без параметров:
/*
Задание: На экран нужно вывести набор символов:
A B C D E
B C D E F
C D E F G
D E F G H
E F G H I
*/
#include <stdio.h>
#include <conio.h>
// printLetters - процедура (функция без возвращаемого значения)
// Выводит на экран указанную в задании последовательность символов
void printLetters()
{
int i, j, c;
// Внешний цикл обеспечивает вывод 5 строк
// с начальными символами строки ‘A’, ‘B’, ‘C’, ‘D’ и ‘E’
for (i = ‘A’; i <= ‘E’; i++)
{
// Внутренний цикл обеспечивает вывод ровно 5 символов,
// начиная с символа i
for (c = i, j = 0; j < 5; c++, j++)
printf(“%c ”, c);
printf(“\n\n”);
}
}
int main()
{
clrscr(); // Вызов процедуры clrscr
printfLetters(); // Вызов процедуры printLetters
return 0;
}
Синтаксис определения процедуры (функции, не возвращающей значений) без параметров в Си:
void ИМЯ_ФУНКЦИИ()
{
ТЕЛО_ФУНКЦИИ
}
Синтаксис вызова процедуры без параметров в Си:
ИМЯ_ФУНКЦИИ();
Вы знаете, что функции в Паскале отличаются от процедур только тем, что из функций возвращаются значения, а из процедур нет. В Си синтаксис определения функции без параметров следующий:
ТИП_ВОЗВРАЩАЕМОГО_ЗНАЧЕНИЯ ИМЯ_ФУНКЦИИ()
{
ТЕЛО_ФУНКЦИИ
}
Внутри тела функции ОБЯЗАТЕЛЬНО должен быть предусмотрен возврат значения. Синтаксис выхода из функции с одновременным возвращением значения:
return ВОЗВРАЩАЕМОЕ_ЗНАЧЕНИЕ;
В Паскале аналогичные действия выполняются за 2 шага:
Присвоение имени функции возвращаемого значения.
Exit.
Пример функции без параметров:
int main()
{
int i, j, c;
clrscr();
printfLetters();
return 0; // выход из функции с возвращением значения 0
}
