ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 31.03.2021
Просмотров: 6821
Скачиваний: 51
321
#include<stdio.h>
main()
{
int x,y;
scanf("\n%d",&x); scanf("\n%d",&y) ;
while (x!=y)
{
if (x>y) x=x-y; else y=y-x;
)
printf("\n%d",x);
)
Пример
2.
Проверить, содержит ли квадрат натурального числа n цифру 3.
Программа 92
#include<stdio.h>
main()
{
int i,n,a;
scanf("%d",&n); n=n*n; i=10000;
while(i>=l)
{
a=n/i; /* если результат целочисленного деления n/i
меньше 1,то а=0 */
n=n-a*i;
if(a==3) goto abc; else i=i/10;
)
printf("цифры 3 в числе n^2 нет");
goto cd;
abc: printf("цифра 3 в числе n^2 есть");
cd: ;
}
Оператор цикла do/while
В языке Си имеется также конструкция цикла с постусловием (условие на выходе), где ис-
тинность условия проверяется после выполнения каждой итерации цикла. Этот подход реализует-
ся с помощью цикла do/while.
Тело цикла do/while всегда выполняется по крайней мере один раз, поскольку проверка ус-
ловия осуществляется только после его завершения.
Форма записи:
do <оператор>
while (<выражение>);
Оператор break
Оператор break дает возможность выйти из операторов цикла for, while, do/while, а также из
переключателя switch без проверки условия. Оператор break приводит к немедленному выходу из
самого внутреннего охватывающего его цикла или из переключателя.
Оператор break может использоваться для выхода из цикла в тех случаях, когда заданы два
разных условия прекращения его работы.
Программа 93
# include<stdio.h>
main()
{
int x=l,y,z;
322
printf("Мы будем вычислять значение функции y=2*x+z\n");
printf("Введите значение z:"); scant("%d",&z);
while(x<1000)
(
y=2*x+z;x++; if y=100 ( printf(= 100\n"); break; }
} if y=100
printf("Цикл закончен!!!") ;
else printf ("Цикл закопчен!!! Но y<>lOO.");
}
Наличие оператора break позволяет использовать «бесконечные циклы». В ряде случаев
весьма удобно записать заголовок цикла без всякого условия в виде
for(;;),
а выход из цикла оформить с помощью операторов break.
Оператор продолжения continue
Оператор continue вызывает преждевременное завершение выполнения тела цикла и пере-
ход к следующему шагу цикла. Оператор continue действует только на самый внутренний цикл,
частью которого он является.
Программа 94
#include<stdio.h>
main()
(
int x,y,z;
printf("Мы будем вычислять значение функции y=2*x+z\n");
printf("в промежутках [1;6] и [13;18].");
printf("Введите значение z
= "};
scant("%d",&z) ;
for(x=l;x<18;x++)
{
if ((x>6) and (x<13))
continue;
y=2*x+z; printf(= %d, у= %d",x,y);
}
}
Оператор безусловного перехода goto
Оператор перехода предназначен для безусловной передачи управления в заданную точку
программы. Его выполнение заключается в передаче управления оператору, помеченному задан-
ной меткой.
В качестве метки используется идентификатор. Метка отделяется от оператора, к которому
она относится, двоеточием. Помеченный оператор должен находиться в пределах той же функции,
что и оператор goto. Может быть помечен любой оператор, но никакие два разных оператора не
должны иметь одинаковые метки (внутри одной и той же функции). Кроме того, один оператор
может быть помечен несколькими метками.
Форма:
goto <метка>;...
<метка>: <оператор>
Составные операторы и блоки
Символы "{" и "}" используются для объединения описаний и операторов в составной опе-
323
ратор или блок, так что все конструкции, заключенные в фигурные скобки, оказываются синтак-
сически эквивалентными одному оператору. Точка с запятой никогда не ставится после первой
фигурной скобки, которая завершает блок.
Составной оператор - последовательность операторов, заключенная в фигурные скобки
(при необходимости его используют в качестве «внутреннего» оператора в операторах ветвления и
цикла). Он называется также «блоком». Блоки не могут быть вложенными.
Пример /*
I -й вариант */
Программа 95
#include<stdio.h>
main()
{
int sam,index=0;
/* В цикл включен только оператор присваивания. Печать данных */
/* будет произведена только один раз - после завершения цикла */
while(index++<10)
sam=10*index+2;
printf("sum= %d\n",sam) ;
)
Результат работы программы:
sam = 102
/* II -й вариант */
Программа 96
#include<stdio.h>
main ()
(
int sam,index=0;
/* Наличие фигурных скобок гарантирует, что оба оператора */
/* являются частью цикла while, и печать результатов будет */
/* производиться на каждом шаге работы цикла. Весь составной*/
/* оператор рассматривается как один оператор, являющийся */
/* составной частью оператора while. */
while(index++<10)
{
sam=10*index+2; printf("sum = %d\n",sam);
}
}
Результат работы программы:
sam = 12
sam = 22
sam = 32
sam = 42
sam = 52
sam = 62
sam = 72
sam = 82
sam = 92
sam = 102
324
Пустой оператор
состоит только из точки с запятой (;) и используется для обозначения
пустого тела управляющего оператора.
6.5. СТРУКТУРА ПРОГРАММЫ НА СИ. ПОНЯТИЕ О ФУНКЦИЯХ
Программа на языке Си представляет собой набор последовательно описанных функций
(процедуры и подпрограммы в языке Си считаются частным случаем функций). Каждая функция -
самостоятельная единица программы, предназначенная для решения определенной задачи (или
подзадачи). При описании она имеет следующий вид:
Тип_функцни Имя (<список аргументов>)
<описания аргументов>
{
<описания>
<операторы>
}
Отметим, что список аргументов может быть пустым (однако, скобки после имени функции
сохраняются). В этом случае, естественно, нет и их описаний.
Имеется одна главная функция (с именем main), с которой начинается выполнение про-
граммы. Функции могут обращаться к другим функциям посредством конструкций вызова. Вызов
функции используется при вычислении значения выражения. В результате вызова функция воз-
вращает вычисленное значение, которое и является значением вызова функции. Попутно функция
может преобразовывать значения своих аргументов. Такой результат вызова функции называется
побочным эффектом.
В модуле, вызывающем данную функцию, тип возвращаемого ею значения должен быть
описан (даже если это неопределенное значение) вместе с описанием переменных.
Пример.
Пусть необходимо вывести на экран словосочетание «Простая функция без аргу-
ментов» 15 раз, используя функции.
Программа 97
#include<stdio.h>
main ()
(
int i,print() ;
for (i=l;i<=15;i++) print();
{
print() /* вызываемая функция без аргументов */
)
printf ("Простая функция без аргументов\n»);
}
Аргументы передаются по значению путем копирования в соответствующие (по порядку)
параметры, указанные в определении функции. Соответствие аргументов и параметров по коли-
честв) и типу не контролируется в языке Си. Такой контроль может быть выполнен с помощью
дополнительных средств отладки.
Следует различать формальные аргументы, используемые при описании функций, и факти-
ческие, задаваемые при вызове функций. Формальный аргумент - переменная в вызываемой про-
грамме, а фактический аргумент - конкретное значение, присвоенное этой переменной вызываю-
щей программой. Фактический аргумент может быть константой, переменной или даже более
сложным выражением. Независимо от типа фактического аргумента он вначале вычисляется, а за-
тем его величина (в данном случае некоторое целое число) передается функции (см. программу
97). Можно задавать список аргументов, разделенных запятыми.
Пример:
программа 98, которая
находит числа х, у, z, принадлежащие отрезку [1;20] и удовлетворяющие условию x^2 = у^2 + z^2
.
325
Программа 98
#include<stdio.h>
main()
(
int х, у, z, zero() ;
char p, q, ch() ;
x=2; y=45; z=0;
q=’o’;
printf("х» "); zero(x);
printf("x+y+(x+y)^z= "); zero(x+y+(x+y)^z) ;
printf("q= "); ch(q);
}
int zero(u)
int u;
(
printf("%d\n",u);
)
char ch(u)
char u;
{
printf("%c\n",u);
)
Результат работы программы:
x=2
x+y+(x+y)^z= 94
q=0
Программа 99
#include<stdio.h>
main()
(
int x,y,z;
int zero();
printf("Следующие величины могут быть сторонами прямоугольного тре-
угольника:\n");
for (х=1;х<=20;х++)
for (у=1;у<=20;у++)
for (z=l;z<=20;z++)
if (y*y+z*z==x*x)
zero(x,у,z);
}
int zero(f,g,h)
int f,g,h;
(
printf ("x= %d, y= %d, 2=%d\n",f,g,h);
)
Результат работы программы:
следующие величины могут быть сторонами прямоугольного треугольника
х= 5, у= 3, z= 4
х= 5, у= 4,
z=
3 x= 10, y= 6, z= 8
x= 10, y=8, z=6 x= 13, y=5, z= 12
x= 13, y= 12, z= 5 x
=
15, y= 9, z= 12
x= 15, y= 12, z=9 x=17, y=8, z=15 x= 17, y= 15,
z=8 x=20, y=12, z=16
x=20, y= 16, z= 12