Проверь себя (циклические конструкции Си While, For, Do while)

В этом разделе на закрепление материала разбираются решенные задачи с использованием циклических конструкций языка Си While, For, Do while

Цикл языка Си while

си while 1: Дано целое число N>0. Если оно является степенью числа 3, то вывести True, если не является — вывести False.

* Из задачника М. Э. Абрамян (While4)

Проверить:

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main(void)
{
   int a;
   printf("A:");
   scanf ("%i", &a);
 
    while (a>0) a -=3;
 
   printf("%s\n",a==0?"True":"False");
   return 0;
}
Показать аналог в Pascal:

1
2
3
4
5
6
7
8
9
10
var
  A,temp:Integer;
begin
  Write('Введите A: ');
  Readln(A);
  temp:=A;
  while temp<A do //ищем максимальное 3 в степени
    temp:=temp*3;   //которое не больше А
  Write(temp=A);
end.
си while 2: Дано целое число N>0, являющееся некоторой степенью числа 2: N=2K. Найти целое число K — показатель этой степени.

* Из задачника М. Э. Абрамян (While5)

Проверить:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main(void)
{
   int n;
   printf("N:");
   scanf ("%i", &n);
    int k=0;
    while (n>=2){
        ++k;
        n/=2;
    }
   printf("K: %i\n",k);
   return 0;
}
Показать аналог в Pascal:

1
2
3
4
5
6
7
8
9
10
11
12
13
var
  N, K :Integer;
begin
  Write('Введите N: ');
  Readln(N);
  K:=0;
  while n>1 do
   begin
    n:= n div 2;
    inc(K);
   end;
  Writeln('Результат деления на цело: ',K);
end.

Цикл языка Си for

си for 1: Даны два целых числа A и B (A). Вывести в порядке убывания все целые числа, расположенные между A и B (не включая числа A и B), а также количество N этих чисел.

* Из задачника М. Э. Абрамян (For3)

Проверить:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main(void)
{
   int a, b;
 
   printf("A:");
   scanf ("%i", &a);
 
   printf("B:");
   scanf ("%i", &b);
 
   int i;
    for  (i = b-1; i>a;  --i)
        printf("%i\n",i);
    printf("N: %i\n", b-a-1);
 
    return 0;
}
Показать аналог в Pascal:

1
2
3
4
5
6
7
8
9
10
11
var
A,B, i:Integer;
begin
Write('Введите A: ');
Readln(A);
Write('Введите B: ');
Readln(B);
For i:=B-1 downto A+1 do Writeln(i);
Writeln(' ',B-A-1);
readln;
end.
си for 2: Дано целое число N>0. Найти произведение 1.1∗1.2∗1.3∗… (N сомножителей)

* Из задачника М. Э. Абрамян (For12)

Проверить:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main(void)
{
   int n;
   printf("N:");
   scanf ("%i", &n);
 
   float result=1;
   int i;
   for  (i =0; i<=n; ++i)
      result *= 1.0+(float)i/10;
 
   printf("resul t= %f \n ", result);
   return 0;
}
Показать аналог в Pascal:

1
2
3
4
5
6
7
8
9
10
11
var
  n, i :Integer;
  result:Real;
begin
  Write('Введите n: ');
  Readln(n);
  result:=1;
  For i:=1 to n do 
     result:=result*(1+0.1*i);
  Writeln(result);
end.