Студопедия — Организация циклов с помощью оператора for
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Организация циклов с помощью оператора 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)); }






Дата добавления: 2015-08-12; просмотров: 359. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

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

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

Приготовление дезинфицирующего рабочего раствора хлорамина Задача: рассчитать необходимое количество порошка хлорамина для приготовления 5-ти литров 3% раствора...

Дезинфекция предметов ухода, инструментов однократного и многократного использования   Дезинфекция изделий медицинского назначения проводится с целью уничтожения патогенных и условно-патогенных микроорганизмов - вирусов (в т...

Машины и механизмы для нарезки овощей В зависимости от назначения овощерезательные машины подразделяются на две группы: машины для нарезки сырых и вареных овощей...

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

Закон Гука при растяжении и сжатии   Напряжения и деформации при растяжении и сжатии связаны между собой зависимостью, которая называется законом Гука, по имени установившего этот закон английского физика Роберта Гука в 1678 году...

Характерные черты официально-делового стиля Наиболее характерными чертами официально-делового стиля являются: • лаконичность...

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия