Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

лекция 3. программирование циклов

  • Login to see the comments

  • Be the first to like this

лекция 3. программирование циклов

  1. 1. Лекция 3. Программирование циклов. Оператор цикла while Составной оператор Составной оператор состоит из одного или большего числа операторов любого типа, заключенных в фигурные скобки. Пример: { x=1; y=2; z=3; } Он необходим при программировании циклов и ветвлений. Оператор цикла while Оператор цикла служит для многократного выполнения одних и тех же действий. Оператор while используется при программировании циклов с предусловием: нет услов ие да оператор Формат оператора while: while ( условие) оператор Оператор while выполняется так, как изображено на схеме. Проверяется условие; если оно истинно, то выполняется оператор, входящий в состав while (так называемое "тело цикла"). Затем снова проверяется условие... Тело цикла будет выполняться до тех пор, пока условие не станет ложным. Затем управление передается следующему оператору программы. 27
  2. 2. Условие - это выражение, которое кроме арифметических операций и операции присваивания может содержать операции отношения и логические операции. Операции отношения: > >= < больше, больше или равно, меньше, <= меньше или равно, == равно, != не равно. Логические операции: && (и) | | (или) ! (не) Условия в циклах задаются в виде целочисленного выражения языка С в скобках. Условие истинно, если значение выражения ≠ 0, ложно в противном случае. Примеры условий: while ( a>0 ) истинно, если а>0 while ( a ) истинно, если а ≠ 0 while ( a!=0 ) истинно, если а ≠ 0 while ( !a ) истинно, если а = 0 while ( a+b ) истинно, если а+b ≠ 0 while ( a && b ) истинно, если а ≠ 0 и b ≠0 while (a > 0 || b >0) истинно, если a > 0 или b > 0 Обратите внимание, что тело цикла - это один оператор: либо простой, либо составной. Если в цикле должны выполняться несколько операторов, заключите их в фигурные скобки. 28
  3. 3. Пример оператора цикла: while (i<=n) { s=s+i/(i+1); i++; } Пример решения задачи Задача. Дано действительное число x. Вычислить значение sinx с помощью ряда x3 x5 x2n+1 y = sinx = x - — + — - ... + (-1) n ——— + ... 3! с точностью 10 -5 5! (2n+1)! (т.е. учитывая только те члены ряда, которые по абсолютной величине больше либо равны 10-5). Для проверки результата вычислить sinx с помощью стандартной функции. Если при вычислении очередного члена ряда отдельно вычислять числитель и знаменатель, где значения могут быть очень большие, то получится слишком большая погрешность. Поэтому выведем рекуррентную формулу вычисления очередного члена ряда через предыдущий член. Обозначим очередной член данного ряда через an . a0 = x x3 x2 a1= - — = -a0* —— 3! 2*3 x5 x2 a2= + — = -a1 * —— 5! 4*5 29
  4. 4. ... an = -an-1 x2 * ———— 2n(2n+1) Поскольку для вычисления очередного члена ряда нужно знать только значение предыдущего члена, а все суммируемые значения хранить нет необходимости, то массив не нужен. Достаточно одной простой переменной для вычисления очередного члена ряда. Назовем ее a. начало Ввод x y=0, a=x, n=0 нет |a| ≥10-5 да y=y+a n=n+1 a=-a x2 /(2n(2n+1)) Вывод y, sin(x) конец Рис. 2.1. Схема алгоритма вычисления y=sinx 30
  5. 5. Программа: /* Приближенное вычисление y=sin x */ #include <stdio.h> #include <math.h> #define E 1e-5 /* точность вычисления */ main() { float x, y; float a; int n; /* аргумент функции */ /* сумма ряда */ /* очередной член ряда */ /* номер итерации */ printf ("x="); scanf ("%f",&x); y=0; a=x; n=0; while ( fabs(a) >= E ) { y=y+a; n++; /* n=n+1; */ a=-a*x*x/(2*n*(2*n+1)); /* вычисление очередного члена ряда через предыдущий */ } printf ("y=%fn",y); printf ("sinx=%fn",sin(x)); return 0; } Примеры результатов выполнения программы: x=3.14159 y=0.000002 sinx=0.000003 x=0 y=0.000000 sinx=0.000000 x=1.5708 y=1.000004 sinx=1.000000 x=-1.5708 y=-1.000004 sinx=-1.000000 31
  6. 6. Отладка программы в TURBO C или Borland C++ 1. Запустите систему (см. часть 3, приложение 1 или приложение 2) и введите текст своей программы, соблюдая ступенчатую запись. 2. Выполните компиляцию программы. При компиляции могут быть обнаружены синтаксические ошибки в программе. В таком случае в окне Message появятся сообщения об ошибках с указанием номеров строк программы, где обнаружены ошибки. В программе будет выделена первая неверная строка, а курсор укажет на предполагаемое местоположение ошибки в программе. Исправьте ошибки и повторите компиляцию. 3. После исправления всех синтаксических ошибок сохраните программу в файле на диске, указав какое-либо имя с расширением .с . 4. Запустите программу на выполнение. По запросу программы введите тестовые исходные данные. Проверьте результат. Если результаты оказались неверными, проверьте программу. После редактирования программы повторите действия с пункта 2. Если программа зациклилась, попытайтесь прервать ее выполнение с помощью одновременного нажатия клавиш [Ctrl] и [Break]. Если это сделать не удалось, снимите задачу, снова запустите систему и откройте файл со своей программой. Если причина ошибки не понятна, выполните трассировку программы на компьютере с помощью команд меню Run и Trace into (F7) или Steep over (F8). Эти команды вызывают выполнение одной выделенной строки программы. При этом можно проследить, как меняются значения поременных программы. Для этого служит окно Watch. Чтобы добавить в окно Watch интересующую вас переменную, нажмите 32 одновременно
  7. 7. клавиши [Ctrl] и [F7] и введите имя переменной, затем нажмите [Enter]. Прервать выполнение программы при трассировке можно нажатием клавиш [Ctrl] - [F2] или выполнив команды меню Run и Program reset. Контрольные вопросы и упражнения. 1. В каких случаях используется составной оператор? 2. Какие из перечисленных условий будут ложными при заданных значениях a = 10; b = -5; a) while (a) б) while (a>0 || b>0) в) while (a>0 && b>0) г) while (!a || b) д) while (!a && b) е) while (a && b) 3. Напишите программу вычисления произведения двух натуральных чисел А и В, не используя операцию умножения: A*B = A+A+ … +A (число слагаемых равно B). Выполнение контрольных заданий 1. Получите у преподавателя индивидуальное задание. 2. Составьте блок-схему и программу на языке С и подберите тесты для проверки программы на компьютере. 3. Отладьте программу на компьютере. 5. Оформите и сдайте отчет. Контрольные задания 1. Дано действительное число x. Вычислить значение y с помощью стандартной функции и с помощью ряда с точностью 0,0001: 33
  8. 8. x2 x4 x2n а) y = cos(x) = 1 - — + — - ... + (-1)n ——— + ... 2! 4! (2n)! x2 x3 xn б) y = ex = 1+ x + — + — + ... + — + ... 2! 3! n! x2 x3 xn в) y = e-x = 1- x + — - — + ... + (-1)n — + ... 2! 3! n! x2 x3 xn г) y = ln(1+x) = x - — + — - ... + (-1)n-1 —— + ... 2 3 n x-1 (x-1)3 (x-1) 5 д) y = ln (x) = 2 ( —— + ——— + ——— + … ) , x+1 3(x+1)3 5(x+1)5 x+1 , где |x|<1. где x>0 x2 x3 xn е) y = ln(1-x) = - ( x + — + — + ... + —— + ... ) , 2 3 n x3 x5 x7 ж) y = arctg(x) = x - — + — - —— + ... 3 5 7 , где |x|<1. где |x|≤1. 1 1 1 з) y = ln ——— = 2 ( —— + —— + —— + … ) , x–1 x 3x3 5x5 где |x|>1 (x-1)2 (x-1)3 и) y = ln x = ( x-1) - —— + —— 2 3 … , где 0 < x ≤2 (x-1)2 (x-1)3 к) y = ln x = —— + —— + —— + x 2x2 3x3 … , где x > 0.5 x-1 34
  9. 9. 2. Дано натуральное число n. Проверить справедливость равенства: n(n+1) а) 1 + 2 + 3 +...+ n = ——— 2 n(n+1)(2n+1) б) 12 + 22+ 32 +...+ n2 = —————— 6 в) 1 + 2 + 22 +...+2n-1 = 2n - 1 г) 13 + 23+ 33 +...+ n3 = (1 + 2+ 3 + … + n)2 3. Дано натуральное число n. а) Определить количество цифр в числе n. б) Определить сумму его цифр. в) Определить первую цифру числа n. 35
  10. 10. 2. Дано натуральное число n. Проверить справедливость равенства: n(n+1) а) 1 + 2 + 3 +...+ n = ——— 2 n(n+1)(2n+1) б) 12 + 22+ 32 +...+ n2 = —————— 6 в) 1 + 2 + 22 +...+2n-1 = 2n - 1 г) 13 + 23+ 33 +...+ n3 = (1 + 2+ 3 + … + n)2 3. Дано натуральное число n. а) Определить количество цифр в числе n. б) Определить сумму его цифр. в) Определить первую цифру числа n. 35

×