Студопедия — Организация циклов с помощью оператора 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; просмотров: 368. Нарушение авторских прав; Мы поможем в написании вашей работы!



Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

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

Понятие метода в психологии. Классификация методов психологии и их характеристика Метод – это путь, способ познания, посредством которого познается предмет науки (С...

ЛЕКАРСТВЕННЫЕ ФОРМЫ ДЛЯ ИНЪЕКЦИЙ К лекарственным формам для инъекций относятся водные, спиртовые и масляные растворы, суспензии, эмульсии, ново­галеновые препараты, жидкие органопрепараты и жидкие экс­тракты, а также порошки и таблетки для имплантации...

Тема 5. Организационная структура управления гостиницей 1. Виды организационно – управленческих структур. 2. Организационно – управленческая структура современного ТГК...

ТЕРМОДИНАМИКА БИОЛОГИЧЕСКИХ СИСТЕМ. 1. Особенности термодинамического метода изучения биологических систем. Основные понятия термодинамики. Термодинамикой называется раздел физики...

Травматическая окклюзия и ее клинические признаки При пародонтите и парадонтозе резистентность тканей пародонта падает...

Подкожное введение сывороток по методу Безредки. С целью предупреждения развития анафилактического шока и других аллергических реак­ций при введении иммунных сывороток используют метод Безредки для определения реакции больного на введение сыворотки...

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