Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмизация и программирование решения задач на языке СИ (90

..pdf
Скачиваний:
17
Добавлен:
15.11.2022
Размер:
271.01 Кб
Скачать

3 Построение программ разветвленной структуры

Цель работы: приобретение практических навыков организации ветвлений в алгоритме, использования в программе оператора условия, условной операции.

3.1 Методические указания к выполнению работы

При написании программ постоянно приходится сталкиваться с ситуацией, в которой некое действие должно быть выполнено только при определённом условии, то есть необходимо выбрать тот или иной вариант действий в зависимости от некоторых условий: если условие верно, поступать одним способом, а если неверно — другим. Для этого используют разветвляющиеся алгоритмы, которые в языках программирования представлены в виде условных операторов. В языке Си существует два вида условных операторов:

оператор if — else для выбора из двух вариантов;

оператор множественного выбора switch для выбора из нескольких ва-

риантов.

3.1.1 Оператор if — else

Условный оператор имеет следующий вид:

if ( условие ) // заголовок с условием {Группа операторов 1;}

else

{Группа операторов 2;}

Функционирование этого оператора происходит следующим образом:

1)программа вычисляет условие в заголовке;

2)если условие истинно, то выполняется группа операторов 1, если ложно – группа операторов 2.

После слова else никогда не ставится условие — блок «иначе» выполняется тогда, когда основное условие, указанное в скобках после if, ложно. Если в блоке «если» или в блоке «иначе» только один оператор, то фигурные скобки можно не ставить.

Вусловии можно использовать следующие знаки логических отношений, представленные в таблице 1:

11

Таблица 1 – Логические отношения

Обозначение

Название

<

Меньше

>

больше

<=

Меньше или равно

>=

больше или равно

==

Равно

!=

Не равно

&&

И

||

ИЛИ

Если в блоке «иначе» не надо ничего делать, то весь блок «иначе» можно опустить и использовать сокращенную форму условного оператора:

if( условие )

{ Группа операторов // что делать, если условие истинно }

В блоки «если» и «иначе» могут входить любые другие операторы, в том числе и другие вложенные условные операторы, при этом оператор else относится к ближайшему предыдущему if.

3.1.2 Оператор множественного выбора switch

Язык С имеет встроенный оператор множественного выбора, называемый

switch.

Основная форма оператора имеет следующий вид:

switch( выражение )

{

case метка 1: последовательность операторов; break; case метка 2: последовательность операторов; break;

case метка N: последовательность операторов; break; default последовательность операторов по умолчанию;

}

Сначала вычисляется выражение в скобках за ключевым словом switch. Затем просматривается список меток (case метка1 и т. д. ) до тех пор, пока не найдется метка, соответствующая значению вычисленного выражения. Далее происходит выполнение последовательности операторов, следующих за двоеточием. Если же значение выражения не соответствует ни одной из меток оператора switch, то выполняется последовательность операторов, следующих за ключевым словом default. До-

12

пускается конструкция оператора switch, когда слово default и соответствующая последовательность операторов может отсутствовать.

Оператор break приводит к выходу из оператора switch и переходу к следующему оператору программы. Наличие оператора break в операторе switch необязательно. Оператор break заканчивает последовательность операторов, относящихся к каждой метке. Если же оператор break отсутствует, то выполнение switch продолжается до первого встретившегося break, либо до конца самого оператора switch.

3.2 Пример выполнения алгоритма разветвленной структуры

Задача 3.Вычислить значение функции y по одной из заданных формул

(sin(x))a , x > 0

 

 

y =

 

 

 

 

 

 

 

 

 

x + a

 

 

, x

≤ 0

2 +

 

 

 

 

 

 

 

 

 

 

 

 

 

#include<stdio.h>

//подключение библиотеки ввода-вывода

#include<math.h>

//подключение математической библиотеки

main()

 

{

 

 

 

 

 

 

 

double x, y;

//объявление вещественных переменных х и у

long int a;

//объявление целых переменных х и у

printf("\n введите x и a \n ");

//подсказка для ввода переменных х и а

scanf("%lf%ld",&x,&a);

//ввод переменных

if (x>0)

 

 

y=pow(sin(x),a);

//значение у, если условие истинно

else

 

 

y=2+sqrt(fabs(x+a));

//значение у, если условие ложь

printf("\n y=%lf\n",y);

 

 

getch();

 

 

}

 

 

Задача 4. Выполнить арифметическую операцию двух вещественных чисел x

и y по заданному знаку.

 

 

#include<stdio.h>

//подключение библиотеки ввода-вывода

#include<math.h>

//подключение математической библиотеки

main()

 

 

{

 

 

double x, y,z;

//объявление вещественных переменных х,y и z

 

 

13

char c;

//объявление символьной переменной с

printf(" Введите c\n"); //подсказка для ввода

scanf("%c",&c);

//ввод символа знака операции

printf("\nвведите xи y ");

//подсказка для ввода

scanf("%lf%lf",&x,&y);

//ввод переменных

switch(c)

{

case '-': {z=x-y; break; }

case '+': {z=x+y; break; }

case '*': {z=x*y; break; }

case '/': {z=x/y; break;}

default: printf("неизвестная операция \n");

}

printf("Результат операции = %lf\n",z); getch();

}

3.3 Варианты индивидуальных заданий

3.3.1 Решение задач с применением ветвления

1.Определить среди чисел a, b, c количество одинаковых чисел.

2.Известно, что из четырех чисел xl,x2,x3,x4 три равны между собой, а одно отлично от них. Найти это число.

3.Для целого числа К от 1 до 9 вывести фразу «мне К лет», учитывая при этом, что при некоторых значениях К слово «лет» надо заменить на слово «год» или «года».

4.Для натурального числа К напечатать фразу «мы нашли К грибов в лесу», согласовав окончание слова «гриб» с целым числом К.

14

5.Дано число х. Напечатать в порядке возрастания числа cos(x), 1+|х|, (1+ х-

х)*(1+ х-х).

6.Даны числа а, b, с. Если нельзя построить треугольник с такими длинами

сторон, то вывести 0, если треугольник равносторонний — 1, если равнобедренный

— 2, если прямоугольный — 3.

 

7. Определить среди чисел a,

b, c количество чисел, не больших числа d.

8. Определить среди чисел

a, b, c сумму максимального и минимального

чисел.

 

9.Заданы координаты вершин треугольника. Выяснить является ли заданный треугольник тупоугольным или нет.

10.Среди трех чисел А, В, С найти четные числа.

11.Ввести положительное число А>=1. Найти наибольшее из выражений ви-

да 1/А и sin(A).

12.Ввести два числа. Меньшее число заменить их полусуммой, а большее — удвоенным произведением.

13.Ввести три числа А, В, С. Удвоить каждое из них, если А>=В>=С, иначе найти сумму этих чисел.

14.Определить среди чисел a, b количество чисел, меньших числа с.

15.Определить среди чисел a, b, с количество положительных чисел.

16.Определить среди чисел a, b, c количество отрицательных чисел.

17.Определить среди чисел a, b, c максимальное число.

18.Определить среди чисел a, b, c минимальное число.

19.Определить среди чисел a, b, c количество чисел, равных нулю.

20 . Определить среди разных чисел a, b, c сумму среднего по величине и минимального чисел.

21.Определить среди разных чисел a, b, c среднее по величине число.

22.Определить среди чисел a, b количество чисел, равных числу с.

23.Определить среди чисел a, b, c количество чисел, не равных числу d.

24.Определить среди чисел a, b, c количество максимальных чисел.

3.3.2 Вычисление значений функции y по одной из заданных формул

 

 

 

 

2

+ 67, если x < 5

1.

5x

 

 

Y =

 

 

 

 

 

 

 

 

 

3

+ 7, если x ³ 5

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

x

3

+ 5, если x ³ 0

2.

 

 

 

Y =

 

 

 

 

 

 

 

 

 

 

 

4

+ 9,

если x < 0

 

3x

 

 

 

 

 

 

 

 

 

 

 

 

 

x

2

+ 3

+ 6x, если x < 4

3.

 

 

 

Y =

 

 

 

 

 

 

 

 

 

 

3

 

+ 7, если x ³ 4

 

x

 

 

15

4.

x cos x, если x < 1,22

Y =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5x 2 +1,7, если x ³ 1,22

 

xtgx, если x ≤ 0,5

 

5.

 

3 + sin x, если 0,5 < x < 1,5

Y = x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0, если x ³ 1,22

 

 

 

 

sin x, если x < 0

 

6.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Y = cos x, если 0 £ x £ 1

 

 

 

 

если x > 1

 

 

 

 

 

1,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x 2 + 4x - 2, если x > 2

7.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Y = 2x, если x £ -2

 

 

 

 

 

3

 

- x

 

2

, если - 2 < x

£ 2

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

2

+ | x |,

если -1 £ x < 5

 

 

 

 

 

8.

 

 

 

 

2

+ 4x

- 7,

если x

³ 5

Y = 5x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- 3 x 4 , если x < -1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0, если x < 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9.

cos x 2 + sin x, если 0 £ x £ 1

Y =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x + ln x , если1 £ x < 2

 

 

3

 

+ 7, если x ³ 2

 

 

x

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sin x +

 

 

 

x , если x < 0

10.

x

 

 

 

 

 

 

 

Y =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

x + 7,

если x ³ 0

 

 

tg

 

 

 

 

 

 

 

 

sin x + 5

 

 

 

, если x < 0

 

 

x 2

+ 6

11.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Y =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln x +

3x + 7

, если x > 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

sin x +

 

 

 

x

2

+1,2,

если x > 0

12.

x

 

 

 

 

 

 

 

 

Y =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

x + cos x,

если 2 < x £ 6

 

tg

 

 

 

 

 

 

x - sin(x) + cos x, если x > 6

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13.

х + х

2

 

+ 2,

если 6

£ x £ 0

Y =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3x, если х < 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

| x | + x

, если -1 < x £ 1

14.

 

 

 

 

Y =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

+ ln 5x, если1

< x £ 4

 

tg

 

3x

 

 

 

 

 

 

16

15.Y

16.Y

17.Y

18.Y

19.Y

20.Y

21.Y

22.Y

23.Y

24.Y

 

 

 

 

2

 

(x - a), если x > 0

 

sin

 

 

 

 

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

 

 

7x , если x £ 0

 

2a

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

3

+ sin px + ln x , если1 > x

 

 

 

 

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

2x

 

 

 

 

 

 

3

 

 

 

 

3

15x

- e

 

+ ln

x , если 3

<

 

 

 

 

 

 

(2x + 5)2 + 3

 

 

 

, если x < 5

 

x

 

 

 

 

 

 

 

 

2 - 7

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

5x

 

 

 

, если x ³ 5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

 

 

 

 

 

 

 

 

x 3

 

2x 2 +1

 

 

 

 

 

sin x + 2, если x > 0

 

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sin(x + 2), если x £ 0

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x +

 

x - 4, если x ³ 2

 

2x

 

 

 

 

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

x + 12 -

5x

, если x < 2

 

 

 

1 - x, если x > 7

 

 

 

 

 

=

+ x, если x £ 7

 

 

 

 

 

1

 

 

 

 

 

sin x + 2, если x > 0

 

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sin(x + 2), если x £ 0

 

7x 2 + 6x -1, если x = 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

= 3 7x 2 + 6x -1, если x < 3

 

 

 

 

2 + 6x -1, если x > 3

 

7x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(5x + x 3 ) + 3, если x ³ 1

 

 

 

 

 

 

=

| 12x

- 2x 2 | +4

4x

, если 0 £ x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- 5 + x 2 , если x < 0

 

4x

 

 

 

 

 

 

sin x, если x = 0

= >

cos x, если| x | 0

<

x , если| x | 0

>0

x£ 7

< 1

17

4 Программирование алгоритмов циклической структуры

Цель работы: изучение операторов цикла и особенностей их применения.

4.1 Методические указания к выполнению работы

Цикл - это последовательность команд, которая выполняется несколько раз. В языке Си существует несколько видов циклов:

-цикл с известным числом шагов (for);

-цикл с условием (while);

-цикл с постусловием (do — while).

4.1.1 Оператор цикла for

Часто можно рассчитать, сколько раз надо выполнить какую-то операцию. В таких случаях в языке Си используется оператор цикла for.

Данный оператор цикла имеет вид:

for (выражение1; выражение2; выражение3) { группа операторов;}

«Выражение1» задает начальные условия. Оно выполняется всего один раз при начале цикла.

«Выражение2» задает проверку условия. Проверка производится перед каждым возможным выполнением цикла. Когда «выражение2» становится ложным, цикл заканчивается и управление передается оператору следующему за правой фигурной скобкой.

«Выражение 3» вычисляется в конце выполнения каждого тела цикла, модифицирует проверяемое выражение.

Тело цикла заключается в фигурные скобки; если в теле цикла стоит всего один оператор, скобки можно не ставить.

В тело цикла могут входить любые другие операторы, в том числе и другие циклы (такой прием называется «вложенные циклы»).

Для того, чтобы легче разобраться в программе, все тело цикла и ограничивающие его скобки сдвигаются вправо на 2-3 символа (запись «лесенкой»).

При использовании оператора цикла for параметра цикла можно считать в порядке убывания и возрастания значений. Шаг изменения параметра цикла может быть любым, например, for(n=2;n<60;n=n+13) оператор.

18

4.1.2 Оператор цикла while

Очень часто заранее невозможно сказать, сколько раз надо выполнить ка- кую-то операцию, но можно определить условие, при котором она должна заканчиваться. Такое задание на русском языке может выглядеть так: делай эту работу до тех пор, пока она не будет закончена

Данный оператор цикла имеет вид:

while ( условие) { группа операторов; }

Сначала проверяется условие. Если значение выражения условия «истина», то выполняется группа операторов.

Если значение выражения –« ложь», то управление в программе будет передано оператору, следующему за правой фигурной скобкой.

Оператор может быть пустым, простым и составным. Пустой оператор состоит только из «;». При выполнении оператора ничего не происходит. Используется, когда тела цикла не требуется, хотя по синтаксису нужен хотя бы один оператор.

Если условие неверно в самом начале, то цикл не выполняется ни разу (это цикл с предусловием).

Если условие никогда не становится ложным (неверным), то цикл никогда не заканчивается; в таком случае говорят, что программа «зациклилась» — это серьезная логическая ошибка.

Тело цикла заключается в фигурные скобки; если в теле цикла стоит всего один оператор, скобки можно не ставить.

В тело цикла могут входить любые другие операторы, в том числе и другие циклы (такой прием называется «вложенные циклы»).

Для того чтобы легче разобраться в программе, все тело цикла и ограничивающие его скобки сдвигаются вправо на 2-3 символа (запись «лесенкой»).

4.1.3 Оператор цикла do — while

Существуют также случаи, когда надо выполнить цикл хотя бы один раз, затем на каждом шагу делать проверку некоторого условия и закончить цикл, когда это условие станет ложным. Для этого используется цикл с постусловием (то есть условие проверяется не в начале, а в конце цикла). Данный оператор имеет вид:

do

{ последовательность операторов } while( условие );

Фигурные скобки необязательны, если внутри них находится один оператор. Тем не менее их лучше ставить для удобства чтения программы. Оператор do-while называется оператором цикла с постусловием. Какое бы условие ни стояло в конце

19

оператора, набор операторов в фигурных скобках (тело цикла do-while) один (первый) раз выполнится обязательно. В циклах for и while тело цикла может не выполниться ни разу.

4.2 Пример выполнения алгоритма циклической структуры

Пример 1. Составить программу вычисления квадратов целых чисел от 0до 9.

#include<stdio.h>

//подключение библиотеки ввода-вывода

main()

 

 

{

 

 

inti;

//объявление переменной i– переменная цикла

for (i=0;i<10;i++)

//цикл: для всех i от 1 до 10

printf("Квадрат числа %d=%d\n", i, i*i);

//вывод квадрата числа

}

 

 

Пример 2. Вычислить сумму S=1+2+3+…+n,

где n – натуральное число.

#include<stdio.h>

//подключение библиотеки ввода-вывода

main ()

 

 

{

 

 

ints,i,n;

//объявление переменных

printf ("Введите n:");

 

 

scanf ("%d", &n);

//ввод числа n

 

s=0;

//начальное значение сумматора

i=1;

//начальное значение цикла i

while(i<=n)

//условие цикла пока iменьше или равно n

{

 

 

s=s+i;

// увеличение сумматора

i=i+1;

//увеличение счетчика i

}

 

 

printf ("сумма s=%d", s);

 

 

getch();

 

 

}

 

 

4.3 Варианты индивидуальных заданий

По заданной перечислением элементов в таблице 2 последовательности получить соответствующую рекуррентную формулу, разработать алгоритм вычисления суммы n первых элементов этой последовательности.

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]