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



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

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

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

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

РЕВМАТИЧЕСКИЕ БОЛЕЗНИ Ревматические болезни(или диффузные болезни соединительно ткани(ДБСТ))— это группа заболеваний, характеризующихся первичным системным поражением соединительной ткани в связи с нарушением иммунного гомеостаза...

Решение Постоянные издержки (FC) не зависят от изменения объёма производства, существуют постоянно...

ТРАНСПОРТНАЯ ИММОБИЛИЗАЦИЯ   Под транспортной иммобилизацией понимают мероприятия, направленные на обеспечение покоя в поврежденном участке тела и близлежащих к нему суставах на период перевозки пострадавшего в лечебное учреждение...

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

Педагогическая структура процесса социализации Характеризуя социализацию как педагогический процессе, следует рассмотреть ее основные компоненты: цель, содержание, средства, функции субъекта и объекта...

Типовые ситуационные задачи. Задача 1. Больной К., 38 лет, шахтер по профессии, во время планового медицинского осмотра предъявил жалобы на появление одышки при значительной физической   Задача 1. Больной К., 38 лет, шахтер по профессии, во время планового медицинского осмотра предъявил жалобы на появление одышки при значительной физической нагрузке. Из медицинской книжки установлено, что он страдает врожденным пороком сердца....

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