Скачать презентацию Задача 1 Вычислить число чётных нечётных кратных 3 Скачать презентацию Задача 1 Вычислить число чётных нечётных кратных 3

семинар 4_ Си 2013.ppt

  • Количество слайдов: 10

Задача 1. Вычислить число чётных, нечётных, кратных 3 -м и 4 -м среди первых Задача 1. Вычислить число чётных, нечётных, кратных 3 -м и 4 -м среди первых 1000 членов ряда Фибоначчи. Ряд Фибоначчи: 1, 1, 2, 3, 5. . . Каждый последующий член ряда равен сумме двух предыдущих. Обозначим: k 1 – количество нечётных; k 2 – количество чётных; k 3 – количество кратных 3; k 4 – количество кратных 4 чисел Фибоначчи.

Также можно использовать оператор continue, который передаёт управление на начало следующей итерации ближайшего цикла: Также можно использовать оператор continue, который передаёт управление на начало следующей итерации ближайшего цикла: if (!(f 3%3)) k 3++; //f 3%3==0 if (f 3%2)//нечетное { k 1++; continue; } k 2++; if (!(f 3%4)) k 4++;

Некоторые синтаксические особенности Си Функцией называется логически завершённый фрагмент кода программы, оформленный по специальным Некоторые синтаксические особенности Си Функцией называется логически завершённый фрагмент кода программы, оформленный по специальным правилам. Использование функций позволяет упростить отладку программ и избежать повторения однотипных фрагментов кода. Программа на Си представляет собой совокупность функций, одна из которых – функция main() – главная – всегда выполняется первой. Остальные функции могут находиться как до главной, так и после неё. При этом если вызываемая функция идёт после вызывающей, то предварительно должен быть указан прототип вызываемой функции – заголовок с добавлением точки с запятой. Си допускает вложенность функций и рекурсивный вызов (вызов функцией самой себя).

Описание функции [<тип результата>] <имя функции>([<список формальных параметров с указанием их типов>]) { <операторы> Описание функции [<тип результата>] <имя функции>([<список формальных параметров с указанием их типов>]) { <операторы> } Если тип функции не указан, то тип ее результата int. Если тип результата отличен от void, то в теле функции должен быть хотя бы один оператор return <выражение>; Вызов функции [<имя переменной>=]<имя функции>([<список фактических параметров без указания типов>]); Имя переменной не указывается, если тип функции void. Тип переменной должен соответствовать типу результата функции или быть приводимым к нему.

Пример 1. void hello() { printf(“Hello”); } //вызов hello(); void означает, что функция не Пример 1. void hello() { printf(“Hello”); } //вызов hello(); void означает, что функция не возвращает значения при помощи return. () означают, что у функции нет входных параметров.

Пример 2. Суммирование двух чисел int sum(int a, int b) { int s ; Пример 2. Суммирование двух чисел int sum(int a, int b) { int s ; s=a+b; return (s); } /* тело функции можно заменить на return a+b; */ Оператор return возвращает результат функции. Вызов функции int x, y, s; s=sum (x, y); x, y – фактические параметры. Вызов функции может осуществляться как из выражения, так и самостоятельно: y=2 -sum(x, y); s=sum (x+2, 3) ; sum(x, 10); /* правильно, но бессмысленно*/

Оператор return передаёт в вызывающую функцию только одну величину. Передача параметров в приведенном примере Оператор return передаёт в вызывающую функцию только одну величину. Передача параметров в приведенном примере осуществляется по значению. Это значит, что в вызываемой функции для каждого формального параметра выделяется область памяти, куда копируются значения фактических параметров при вызове. В подпрограмме все операции осуществляются только с копиями переменных. Для получения результатов из подпрограммы-функции следует использовать указатели в качестве формальных параметров. Рассмотрим пример – функцию, которая меняет местами два числа.

Вариант 1. до перестановки x=5, y=2 после перестановки x=5, y=2 void f 1(int a, Вариант 1. до перестановки x=5, y=2 после перестановки x=5, y=2 void f 1(int a, int b) {int t; //для перестановки a b 5 2 t=a; a=b; b=t; } int main() x y 2 5 {int x=5, y=2; printf(“до перестановки x=%d, y=%dn”, x, y); f 1(x, y); printf(“после перестановки x=%d, y=%dn”, x, y); return 0; } При передаче параметров по значению во временной памяти создаются копии параметров. После выхода из функции копии уничтожаются и память освобождается.

Вариант 2. Передача параметров по адресу. Этот вариант правильный – происходит перестановка значений. void Вариант 2. Передача параметров по адресу. Этот вариант правильный – происходит перестановка значений. void f 2(int *a, int *b) { int t; //перестановка значений t=*a; *a=*b; *b=t; } a b 0 x 22 ff 20 x y 5 0 x 22 ff 20 0 x 22 ff 1 c 2 0 x 22 ff 1 c //вызов int main() {int x=5, y=2; printf(“до перестановки x=%d, y=%dn”, x, y); f 2(&x, &y); printf(“после перестановки x=%d, y=%dn”, x, y); return 0; } до перестановки x=5, y=2 после перестановки x=2, y=5

По адресу необходимо передавать • переменные, значения которых изменяются в функции; • переменные, занимающие По адресу необходимо передавать • переменные, значения которых изменяются в функции; • переменные, занимающие большой объем памяти – массивы, структуры и т. п.