Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Программирование -> C / C++ -> Книга по Си


Организация циклов с помощью оператора for

      Оператора for является самой популярной структурой для организации циклов. В общем случае его можно представить так :

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

В одной строке этот оператор определяет сразу три составляющие, отделяемые друг от друга точкой с запятой: а) начальное значение параметра цикла(выражение1), б) условие оканчания цикла (выражение2) , в) закон изменения параметра цикла(выражение3). Формально этот оператор эквиалентен последовательности операторов

выражение1;
while(выражение2)
{
  оператор;
  выражение3;
)

  В следующей программе (пример 4.4) оператор for служит для организации и печати последовательных чисел Фибоначчи, не превосходящих m. Проверка k<=m происходит перед каждым (в том числе и перед первым)   выполнением тела цикла. Тело цикла выполняется, если проверочное выражение истинно. Затем следует изменение параметра: k=k+1; этот оператор, кстати, формирует очередное число Фибоначчи, а оператор j=k-j; хранит предыдущее.

        Пример 4.4

/*числа Фибоначчи*/
#include <stdio.h>
main()
{
int m, k, j=1;
printf("введи m\n");
scanf("%d",&m);
for(k=1;k<=m;k=k+j)
{
     printf("%d",k);
    j=k-j;
}
}

    Как и в операторе while, тело цикла for может состоять из единственного оператора или из нескольких, заключенных в скобки. Следующяя программа (пример 4.5) предназначена для печати гистопрограммы длин читаемых слов (признак конца слова - пробел, запятая или "\n"). Оператор for управляет циклом, состоящим по сути из одного оператора if , так что скобки можно было бы опустить. Для построения гистопрограммы выбран символ, внутреннее представление которого в коде ASCII численно равно 220.
         В скобках после ключевого слова for можно размещать выражения. Однако выражение1 и выражение3 не обязаны присваивать начальное значение и изменять параметр цикла, а выражение2 не обязано быть проверкой условия. Но компилятор всегда интерпретирует выражение2 как истинну или ложь (ложь- двоичный нуль, истина - все остальное). Любое из трех может быть опущено, хотя точка с запятой должна остаться. Допускается даже такой вырожденный случай: for(;;);. Он означает бесконечный цикл, так как пропущенное выражение2 всегда трактуется как истина.

  Пример 4.5

#include <stdio.h>
main()
{
char str[24];
int i,n=0;
printf("введи строку:\n");
while((str[n++]=getchar())!='\n';
printf("%d\n",n);
for(i=0;i<n;i++)
{
if(str[i]!=' ' &&
str[i]!=',' && str[i]!= '\n')
printf("%c",220);
else
printf("\n");
}
}

   В Си есть еще операция ", " (запятая), которая чаще всего используется в операторе for. Пара выражений, разделенных запятой, вычисляются слева направо. В каждой из трех составляющих оператора for можно помещать несколько выражений, разделенных запятыми. Этот прием часто используют, например, для синхронного изменения двух индексов при обработке массивов. В качестве примера приведем функцию substr, которая позволяет из задонной строки s1 выделить подстроку s2 указанной длины L, начиная с k-го по порядку символа (нумерация символов начинается с нуля). Функция принимает также параметр m- общее кол-во символов в исходной строке, чтобы контролировать возможный выход за ее пределы(пример 4.6).

              Пример 4.6

/*выделение подстроки*/
substr(char s1, char s2, int l, int k, int m)
{
int j,i;
if(l+l>=m)k=m-l-1;
for(i=1,j=0;i<l+k;i++.j++)
s2[j]=s1[i];
}
#include <stdio.h>
main()
{
char str[80], str2[80];
int k,l,m=0;
printf("ведите строку");
while((str1[m++]=getchar())!='\n');
printf("\n");
/*m сохраняет свое значение*/
printf("введите l и k\n");
scanf("%d %d",&l, &k);
substr(str1,str2,l,k,m);
printf("%s\n",str2);
}

  Преимущество оператора for - компактность и объединение в одной строке трех операторов управления циклом - особенно заметно проявляется во вложенных циклах. Очередная прогрпмма(пример 4.6) предназначена для упорядочения целых чисел по возрастанию. Функция sor реализует один из наиболее простых алгоритмов сортировки - метод "пузырька".

Пример 4.6

/*СОРТИРОВКА */
#include <stdio.h>
main()
{
extern int sor();
int i,n;
static a[10]={10,1,9,2,8,3,7,4,6,5};
n=10;
sor(a,n);
for(i=0; i<n; i++)
  printf(" %d",a[i]);
}
/*________________*/
int sor(int x[], int n)
{
int i,j,z;
for(i=0;i<n-1;i++)
    for(j=i+1;j<n;j++)
if(x[i]>x[j])
{
z=x[i];
          x[i]=x[j];
          x[j]=z;
}
  return;
}

            Еще один пример со вложенными циклами демонстрирует программа (пример 4.7). Она использует одну полезную при обработке текстов функцию index. Функция index определяет , входит ли в некоторую строку s1 заданная подстрока s2 и выдает положение (индекс)  в строке s1 , начиная с которого строка s2 содержится в s1. Если s2 не входит в s1, то функция возращает '-1'. 

        Пример 4.7

/*индекс строки */
index(s1,s2)
char s1[],s2[];
{
int i,j,k;
for(i=0;s1[i]!='\0'; i++)
{
for(j=i,k=0;s2[k]!='\0'
&& s1[j]==s2[k]; j++,k++);
if(s2[k]=='\0')
return(i);
}
return(-1);
}
char str1[]="информатика"
chra str2[]="форма"
#include <stdio.h>
main()
{
printf("%d\n",index(str1,str2));
}

< Дальше >

 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.