Программирование на языке Си/§4

Материал из Викиверситета

В языке Си используются два оператора цикла:

  • while
  • for

Оба цикла построены по схеме:

  • Заголовок цикла
  • Тело цикла

Цикл while - это цикл с предусловием имеющий вид: while(условие) тело цикла; Цикл while с постусловием do имеет вид: do тело цикла while (условие);

Разница между циклом предусловием и постусловием состоит в том, что:

  • в цикле с предусловием сначала проверяется условие и если оно выполняется, выполняется тело цикла.
  • в цикле с постусловием сначала выполняется тело цикла и лишь потом условие.

Цикл for - параметрический цикл имеет вид: for(выражение1;условие;выражение2) тело цикла;

  • Выражение 1 определяет действия до начала цикла.
  • Условие - условие окончание или продолжения цикла.
  • Выражение 2определяет действия после каждого выполнения тела цикла.

Программа 3.1[править]

Модифицируем программу "Hello, World!" с помощью операторов цикла, распечатаем 5 строк "Hello, World!".

  • оператор while
 
#include <stdio.h>             
int main()                     
{   int i=0; // объявим целочисленный идентификатор и присваиваем ему значение ноль
    while(i<5) // выполняем цикл while до тех пор пока i<5
    {
       printf("Hello, World!\n"); 
       i++;  //увеличиваем значение идентификатора i на единицу.                
    }
}
  • оператор for
 
#include <stdio.h>             
int main()                     
{   int i; // объявим целочисленный идентификатор
    for(i=0;i<5;i++)/*присваиваем идентификатору i значение ноль. Выполняем цикл for до тех пор пока i<5, каждый раз увеличивая значение i на единицу. */
    {
       printf("Hello, World!\n");                 
    }
}
  • оператор do while
 
#include <stdio.h>             
int main()                     
{   int i=0; // объявим целочисленный идентификатор и присвоим ему значение ноль
    do // до тех пор пока
    {
       printf("Hello, World!\n");
       i++;   //увеличиваем значение i на единицу              
    }
    while(i<=5); // i<=5 выполняется условие - выполняется цикл
}

Программа 3.2[править]

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

 
#include <stdio.h>            
int main()                    
{
  int i;
  printf("введите целое число  менее 1000\n");
  scanf("%d",&i); //получаем число и присваиваем его идентификатору
    while(i==0 || i<10) // проверяем, чтобы введённое число было равно нулю или меньше девяти для выполнения цикла
     {
       printf("Единицы\n"); 
       return 0; 
     }
    while(i==10 || i<100) // проверяем, чтобы введённое число было равно десяти или меньше ста для выполнения цикла
     {
       printf("Десятки\n"); 
       return 0;
     }
    while(i==100 || i<1000)
     {
       printf("Сотни\n"); 
       return 0;
     }
                  
}

Обратите внимание на нововведение - это операторы логики. В языке Си используются следующие логические операторы:

  • ! - не
  • || - или
  • && - и
  • != - исключение или
  • == - эквивалентно

ВАЖНО, не путайте эквивалентность и присвоение!

Операторы условий работают по очень простому принципу:

  • если условие выполняется, то оно равно 1
  • если условие не выполняется, то оно равно 0

Программа 3.3[править]

Напишем программу работающую со степенями:

 
#include <stdio.h>            
int main()                    
{
  int i, k, z=1, l=2, s=5;
  
    for(i=0;i<5;i++)
     {
       k=l*z;
       z=k;
     }
     printf(" %d в степени %d = %d\n", l,s,z );  
                  
}

Вышеприведённая программа возводит 2 (l) в степень 5 (s). Она работает по следующему принципу:

  • шаг 1. объявляем идентификаторы i, k, z=1, l=2, s=5.
  • шаг 2. i=0
  • шаг 3. до тех пор пока i меньше или равно s, выполняем цикл
  • шаг 4. i=1
  • шаг 5. k=2*1
  • шаг 6. z=2
  • шаг 7. 1<5 продолжаем выполнение
  • шаг 8. i=2
  • шаг 9. k=2*2
  • шаг 10. z=4
  • шаг 11. 2<5 продолжаем выполнение
  • шаг 12. i=3
  • шаг 13. k=2*4
  • шаг 14. z=8
  • шаг 15. 3<5 продолжаем выполнение
  • шаг 16. i=4
  • шаг 17. k=2*8
  • шаг 18. z=16
  • шаг 19. 4<5 продолжаем выполнение
  • шаг 20. i=5
  • шаг 21. k=2*16
  • шаг 22. z=32
  • шаг 23. 5==5 условие не выполняется, выходим из цикла
  • шаг 24. производим вывод сообщения 2 в степени 5 = 32.

Усложним предыдущую программу, сделаем возможным ввод как значения степени так и значение возводимого числа:

 
#include <stdio.h>            
int main()                    
{
  int i, k, z=1, l, s;
    printf ("введите целое число");
    scanf("%d",&l);
    printf ("введите степень");
    scanf("%d",&s);
    for(i=0;i<s;i++)
     {
       k=l*z;
       z=k;
     }
     printf(" %d в степени %d = %d\n", l,s,z );  
                  
}

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

Практикум[править]

Напишите на компиляторе Си все приведённые выше примеры. Напишем программу которая считает сумму определённой числовой последовательности:

 
#include <stdio.h>            
int main()                    
{ int k, i;
  double s,j;
  printf ("введите количество чисел ряда");
  scanf ("%d",&k);
  printf("введите числовую последовательность");
    for(i=0;i<k;i++)
     {
       scanf("%lf",&j);
       s+=j;
     }
     printf(" сумма = %f\n", s);  
                  
}

проанализируйте пошагово работу программы.

Усовершенствуем предыдущую программу так, чтобы нам не требовалось вводить количество чисел ряда, а программа сама считала как сумму так и их количество. Знаком окончания последовательности будет число "0"

#include <stdio.h>            
int main()                    
{ int k;
  double s,j;
  printf("введите числовую последовательность");
    for(j=1.0, s=0.0, k=0;j!=0;)
     {
       scanf("%lf",&j);
       if(j<=0.0) continue;
       k++; s+=j;
     }
     printf(" сумма = %f, количество = %d\n", s, k);  
                  
}

Оператор continue выполняет функцию прерывания работы оператора и возвращения к началу прерванного оператора. Проанализируйте пошагово работу программы, уберите оператор continue и повторно проанализируйте работу программы.

Домашняя работа[править]

  1. Напишите программу на языке Си для перевода 100 бальной оценки в 5 бальную. При условии: 30 и менее 1, 31-50 - 2, 51-72 -3, 73-86 -4 , 87-100 - 5.
  2. Усовершенствуйте программу 3.3 так, чтобы в целую степень могли возводиться не целые числа (например 2.24 в степени 4).
  3. Усовершенствовать программу 3.3 так, чтобы она могла возводит в отрицательную степень. (например 4 в степени -2)