Операторы и конструкции организации циклов — КиберПедия 

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Операторы и конструкции организации циклов

2017-05-23 406
Операторы и конструкции организации циклов 0.00 из 5.00 0 оценок
Заказать работу

Для программирования вычислительных процессов с известным числом повторений обычно используют оператор цикла. Циклы необходимы, когда повторяются одни и те же вычисления до тех пор, пока выполняется некоторое условие. В языке Си известно три вида операторов цикла: for, while, do- while.

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

 

for(инициализация; проверка условия; изменение) оператор;

На самом деле в общем виде:

 

for(выражение_1; выражение_2; выражение_3) оператор;

В простейшем виде инициализация используется для присвоения начального значения параметру цикла. Проверка условия - обычное условное выражение, определяющее, когда цикл будет завершен. Изменение (приращение) обычно используется для изменения параметра цикла каждый раз при повторении цикла. Как только условие становится ложным, начинает выполняться следующий за циклом оператор.

Простейший примеры оператора for:

1) for(i=0; i<10; i++) printf (“%d \ n”, i);

В результате выполнения этого оператора будут напечатаны цифры от 0 до 9 в столбик.

2) for(i=9; i>=0; i--) printf(“%d \n”,i);

Будут напечатаны цифры от 9 до 0.

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

unsignet char ch;

for(ch=‘A’; ch<= ‘Я’; ch++) printf(“%c”, ch);

Cледующий фрагмент программы

for(ch=‘o’; ch!=‘ N‘; ch++) scanf (“%c”, &ch);

будет вводить символы до тех пор, пока с клавиатуры не будет введен символ ‘N’.

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

Приведем три примера таких циклов.

for(;;) printf(“ Бесконечный цикл\n“);

for(i=1; 1; i++) printf(“ Бесконечный цикл \n”);

for(i=10; i>6; i++) printf(“ Бесконечный цикл \n”);

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

Пример 1.

for(;;)

{ ch=getchar(); /* Прочитать символ */

if (ch==’Q’) break; /* Проверка символа */

printf(“%c”, ch); /* Печатать символ */ }

В этом цикле будут печататься введенные символы до тех пор, пока не будет введен символ ‘Q’.

Следующий оператор цикла - это цикл while. Основная его форма

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

где оператор может быть простым, составным или пустым оператором. Условие, как и во всех других операторах, является просто выражением. Цикл выполняется до тех пор, пока условие принимает значение истинно. Когда же условие принимает значение ложно, программа передает управление следующему оператору программы. Так же как и в цикле for в цикле while сначала проверяется условие, а затем выполняется оператор. Это так называемый цикл с предусловием.

В отличие от двух предыдущих циклов в операторе цикла do - while условие проверяется в конце оператора цикла. Форма этого оператора следующая

do{

последовательность операторов

} while(условие);

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

Оператор цикла do-while называется оператором цикла с постусловием.

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

Вложенные циклы. Когда один цикл находится внутри другого, то говорят, что это вложенные циклы. Часто такие циклы встречаются при заполнении таблиц, перемножении матриц и т.д.

 

Пример 2. Составить программу печати таблицы умножения целых чисел.

# include <stdio.h>

/* Пример перемножения чисел от 1 до 10*/

main()

{

int i,j;

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

{for(j=1; j<5; j++)

printf(“% d*%d=%2d”, i, j, i*j);

printf(‘\n’);

}

}

Прерывание выполнения циклов может быть выполнено также с помощью двух следующих операторов: continue и goto. Если оператор continue встретился в операторе цикла, то он передает управление на начало следующей итерации цикла. В циклах while и do-while - на проверку условия, в цикле for- на приращение.

Для использования оператора goto надо ввести метку (label). Метка- это идентификатор, за которым следует двоеточие.

Пример 3. Использование оператора continue.

#include<stdio.h>

main()

{ int i;

for (i=1; i<100; i++)

{ if(i%7) continue;

printf(“%8d”, i);

}}

Эта программа печатает натуральные числа, кратные семи.

Пример 4. Использование оператора goto.

for()

{while() {

for() {

..................................

goto exit; } } }

exit: printf (“Быстрый выход из вложенных циклов”);

Пример 5. Вычислить конечную сумму

Общее слагаемое суммы выражается формулой

ak = ln (kx)/k*k.

Программа имеет следующий вид:

#include <stdio.h>

#include<math.h> /*Подключение математической библиотеки */

/*Вычисление суммы */

main()

{

float x, sum; /*Описание типов переменных */

int k, n, k1;

printf (“Введите число x\n”);

scanf(“%f”,&x);

printf(“Введите число n\n”);

scanf(“%d”,&n);

sum=0;

for(k=1; k<=n; k++)

{ k1=k*k;

sum+=log(k*x)/k1;

printf(“k=%d сумма=%f\n”,k,sum;

}

}

Задание на выполнение работы

1. Ввести программу примера 5, осуществить ее отладку и работу.

2. Составить программу и произвести вычисления для одного из следующих вариантов:

 

1) S = S (x +1) k *cos(x / k)/(k +1)!, x =p/2

k =1

 

2) S = S (sin x) k / k!, x =p/4

k =1

3) S = S(cos x) k / k!, x =p/4

k =2

 

4) S = S (sin x)i/ i!, x =p/4

i =1

 

5) S = S (ex - i)/(i +1)!, x =1.0

i =2

 

6) S = S (ex/i + e-x/i)/(i +2)4, x =1.0

i =1

 

7) S= Sln (x*i)/(i +2), x =2.0

i=1

8) S = S xi +5/ (i+7)!, x =2.0

i =-5

9) П xi/i!, x =5.0

i =5

 

10) П(x + i) i +1/(i -2)!, x =4.0

i=5

 

11) ), x –вещественное число

 

12) , N <=5

 

13) , N>m

 

14) , а= 2, b =3,5

 

15)

 

16) N =4; S =6,212;

 

17) ,

 

18) S = ,

 

19) при xi = (1+i), y = 1/i;

 

20) / ;

 

21) , где ,

N – натуральное, а x - вещественное число.

 

22) N – натуральное; f – вещественное;

 

23) ; N >2;

 

24) ,

 

25) ; N - натуральное; x - вещественное;

 

26) ; N >5

 

27) ; N – натуральное; f – вещественное;

 

28) ;

 

29) ;

 

30) ; N – натуральное; x - вещественное;

 

Примечание: При вычислении факториалов необходимо помнить о максимально возможном целом числе, которое можно поместить в разрядной сетке.

 

Содержание отчета

1. Краткое содержание цели и задачи применения циклических процессов вычислений.

2. Алгоритм вычисления заданного преподавателем математического уравнения.

3. Программу вычислений.

4. Распечатку результатов.

 

Контрольные вопросы

1.Назовите основные операторы циклических процессов.

2. Назовите основные параметры цикла.

3. Как образуется бесконечный цикл и как выйти из него?

 

Работа №3

Условные операторы и операторы выбора

 

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

1) выполнение последовательности операторов;

2) выполнение определенной последовательности операторов до тех пор, пока некоторое условие истинно;

3) использование проверки истинности условия для выбора между различными, возможными способами действия.

 

Основное задание:

 

1. Составить программу решения квадратного уравнения вида:

 

AX2 + BX + C = 0 (1)

 

с полным анализом возможных решений (дискриминант D <0, D =0, D >0) на основе конструкций if и if-else.

2. Разработать диалоговую программу, позволяющую получать решения квадратного уравнения (1) при различных значениях коэффициентов A, B, C, а также выхода из программы по запросу, используя конструкции while или do-while (по выбору).

3. Разработать диалоговую программу, позволяющую в зависимости от значений коэффициентов получать то или иное решение, используя оператор выбора:

а) если A =0; B и C не равны нулю;

б) если B =0; A и C не равны нулю;

в) если C =0; B и A не равны нулю;

г) другие возможные сочетания коэффициентов A, B, C.

Программа должна вычислять как действительные, так и комплексные корни.

4. Вывести на экран сведения об авторе, исходные значения коэффициентов, значение дискриминанта и результаты решения.

 

Рекомендации по программированию

1. При выполнении п.1 основного задания необходимо использовать:

- файл заголовка math.h, который позволит Вам вычислить корень квадратный из дискриминанта (sqrt (D));

- конструкцию вида:

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

оператор, используемый, если выражение истинно.

Пример:

// подразумевается, что комплексных корней нет

if(D >0)

printf(“Решение есть \n”);

При необходимости в комбинации с if можно использовать ключевое слово else, позволяющее выполнить альтернативный оператор, или блок операторов, если условие неистинно.

Пример:

if (D <0)

printf (“Решения нет \n”)

else

printf (“Решение есть \n”);

Операторы if и else могут быть вложенными.

2. При выполнении п. 2 основного задания необходимо использовать:

дополнительно к предыдущей программе конструкцию вида:

while (выражение) оператор.

Ключевое слово while позволяет выполнять оператор или блок до тех пор, пока условие не перестанет быть истинным. Оператор или тело блока, связанного с while, не будет выполнять, если выражение изначально ложно.

Пример:

сhar vych='d';

:

:

while(vych= ='d')

{

:

: // группа операторов

printf(''Продолжать решение? (d/n)\n");

cscanf("%c",&vych);

}

В этом фрагменте программы блок команд будет выполняться до тех пор, пока символьной переменной не будет присвоено значение 'd'.

3. При выполнении п. 3 основного задания необходимо использовать дополнительно к предыдущей программе конструкцию вида:

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

{

case константа 1: оператор или группа операторов блока 1;

break;

:

:

case константа I: оператор или группа операторов блока I;

break;

default: оператор или группа операторов;

}

При выполнении оператора switch сначала вычисляется значение выражения_1, стоящего в скобках оператора switch. Тип значения должен быть одним из целых: char, int, unsigned int, long int и long unsigned. Вычисленное значение сравнивается со значениями констант операторов case.

При совпадении значения выражения_1 с i -й константой выполняется оператор или группа операторов i -го блока. Затем управление передается на следующий (после switch) оператор, если в i -й ветви присутствует оператор break.

Если значение выражения_1 не совпало ни с одной из констант, выполняется оператор или группа операторов, помеченных default. При ее отсутствии выполняется следующий после switch оператор.

Пример:

int var;

:

:

if (A1=0)

 

var=1;

 

else

var=2;

:

:

switch(var)

 

{

case 1: {printf (“Решение уравнения \n”);

x1 = …………;

x2 = …………;

:

break;

case 2: {printf (“Решение уравнения \n”);

:

:

break;

default: puts (“ Ошибка \а \n”);

}

Если значение D <0 (корни комплексные), то предусмотрите изменение знака D перед вычислением квадратного корня, иначе будет зафиксирована ошибка.

4. Выведите результаты расчетов и распечатайте программу.

 

Содержание отчета

 

1. Постановка задачи.

2. Формализация задачи.

3. Структурные схемы алгоритмов решения задачи.

4. Распечатки текстов программ с комментариями.

5. Ответы на контрольные вопросы.

6. Выводы по работе.

 

 

Контрольные вопросы

 

1. Какие управляющие средства выполнения программ существуют в языке Си? Объясните их синтаксис.

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

3. Какие операции используются в управляющих средствах выполнения программ.

4. Объясните различия между циклами while и do … while.

5. Для каких целей используется оператор switch?

 

 

Работа №4

 

Обработка одномерных массивов

 

Цель работы: Изучить принципы ввода, инициализации и обработки одномерных массивов с использованием различных управляющих структур (if, while, do… while, for) при работе с массивами данных.

 

Основное задание

 

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

#define RND((float)rand()/32768.0)

…………………………………………

x[i][j]=RND*(целое число);

В случае, если автоматически вводимые числа не удовлетворяют требованиям задания, следует их откорректировать или ввести вручную.

Рекомендации по программированию

 

В начале программы предусмотрите объявление массива, например mas [ N ], где N не более 20 и не менее 10.

Затем определите характер заполнения массива: автоматическое или ручное. Это можно сделать с помощью операторов:

printf (“ Определите характер заполнения: 1- ручное, 2- автоматическое”);

cscanf ("%d", &w);

Далее используйте конструкцию if else:

if(w==1)

{

for(j=0; j<N; j++)

{

printf (“ Введите элемент массива mas[j]”);

scanf("%f",&mas[j]);

}

}

else if(w==2)

x[j]=RND*(целое число);

или switch(w), где w равно 1 или 2.

Воспользуйтесь указаниями работы №3.

Таблица 4.1

№ варианта Задание
1. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) сумму элементов массива; 2) произведение элементов массива, расположенных между максимальным и минимальными элементами.
2. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) сумму положительных элементов массива; 2) произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами.
3. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) произведение элементов массива с четными номерами; 2) сумму элементов массива, расположенных между первым и последним нулевыми элементами.
4. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) сумму элементов массива с нечетными номерами; 2) сумму элементов массива, расположенных между первым и последним отрицательными элементами.
5. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) максимальный элемент массива; 2) сумму элементов массива, расположенных до последнего положительного элемента.
6. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) минимальный элемент массива; 2) сумму элементов массива, расположенных между первым и последним положительными элементами.
7. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) номер максимального элемента массива; 2) произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
8. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) номер минимального элемента массива; 2) сумму элементов массива, расположенных между первым и вторым отрицательными элементами.
9. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) максимальный по модулю элемент массива. 2) сумму элементов массива, расположенных между первым и вторым положительными элементами.
10. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) максимальный по модулю элемент массива; 2) сумму элементов массива, расположенных между первым и вторым положительными элементами.
11. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) номер минимального по модулю элемента массива; 2) сумму модулей элементов массива, расположенных после первого отрицательного элемента.  
12. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) номер максимального по модулю элемента массива; 2) сумму элементов массива, расположенных после первого положительного элемента.
13. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) количество элементов массива, лежащих в диапазоне от А до В; 2) сумму элементов массива, расположенных после максимального элемента.
14. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) количество элементов массива, равных 0; 2) сумму элементов массива, расположенных после минимального элемента.
15. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) количество элементов массива, больших С; 2) произведение элементов массива расположенных после максимального по мо дулю элемента.
16. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) количество отрицательных элементов массива; 2) сумму модулей элементов массива, расположенных после минимального по модулю элемента.
17. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) количество положительных элементов массива; 2) сумму элементов массива, расположенных после последнего элемента, равного нулю.
18. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) количество элементов массива, меньших С; 2) сумму целых частей элементов массива, расположенных после последнего отрицательного элемента.
19. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) произведение отрицательных элементов массива; 2) сумму положительных элементов массива, расположенных до максимального элемента.
20. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) произведение положительных элементов массива; 2) сумму элементов массива, расположенных после минимального элемента.

 

Содержание отчета

1.Постановка задачи.

2.Схема алгоритмов.

3.Распечатки текстов программы с комментариями.

Контрольные вопросы

 

1. С какой целью используется индексация массивов?

2. С какой целью используется тип данных?

3. Опишите примененный Вами алгоритм обработки массива.

4. Как определить адрес (i,j) – того элемента в памяти машины?

Работа № 5


Поделиться с друзьями:

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

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

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.12 с.