Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Изучение Си после Паскаля.rtf
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.01 Mб
Скачать

Циклы в языке си «Привет, мир!» 100 раз

Напишем программу, 100 раз выводящую на экран фразу «Привет, мир!!!». Ясно, что лучшим решением будет использование цикла. Решим эту задачу с использованием всех трех циклов по очереди – while, do … while (repeat ... until), for.

Цикл с предусловием в Паскале и Си

Пример на Паскале:

var

I: integer;

Begin

I := 1;

while I <= 100 do

begin

Write(‘Привет, мир! ’);

inc(I);

end;

End.

Пример на Си:

#include <stdio.h>

int main()

{

int i;

i = 1;

while (i <= 100)

{

printf(“Привет, мир! ”);

i++;

}

return 0;

}

Сравним цикл на Паскале и на Си:

Паскаль

Си

I := 1;

while I <= 100 do

begin

Write(‘Привет, мир! ’);

inc(I);

end;

i = 1;

while (i <= 100)

{

printf(“Привет, мир! ”);

i++;

}

Отличие цикла while в Паскале и Си видно из примера и из формального описания синтаксиса:

Паскаль:

while УСЛОВИЕ_ПРОДОЛЖЕНИЯ_ЦИКЛА do ОПЕРАТОР

Си:

while (УСЛОВИЕ_ПРОДОЛЖЕНИЯ_ЦИКЛА) ОПЕРАТОР

Цикл с постусловием в Паскале и Си

Пример на Паскале:

var

I: integer;

Begin

I := 1;

Repeat

Write(‘Привет, мир! ’);

inc(I);

Until I > 100;

End.

Пример на Си:

#include <stdio.h>

int main()

{

int i;

i = 1;

do

{

printf(“Привет, мир! ”);

i++;

} while (i <= 100);

return 0;

}

Сравним цикл на Паскале и на Си:

Паскаль

Си

I := 1;

Repeat

Write(‘Привет, мир! ’);

inc(I);

Until I > 100;

i = 1;

do

{

printf(“Привет, мир! ”);

i++;

} while (i <= 100);

Отличие цикла с постусловием в Паскале и Си видно из примера и из формального описания синтаксиса:

Паскаль:

Repeat ОПЕРАТОРЫ Until УСЛОВИЕ_ВЫХОДА_ИЗ_ЦИКЛА

Си:

do ОПЕРАТОР while (УСЛОВИЕ_ПРОДОЛЖЕНИЯ_ЦИКЛА);

Обратите внимание:

  1. В Си в теле цикла do while стоит только один оператор. Если требуется, чтобы в цикле выполнялись несколько операторов, то их нужно заключить в { }.

  2. В Паскале цикл с постусловием выполняется до тех пор, пока не выполняется условие, записанное после UNTIL. В Си цикл с постусловием выполняется до тех пор, пока выполняется условие записанное после WHILE.

Цикл for в Паскале и Си

Пример на Паскале:

var

I: integer;

Begin

for I := 1 to 100 do

Write(‘Привет, мир! ’);

End.

Пример на Си:

#include <stdio.h>

int main()

{

int i;

for (i = 1; i <= 100; i++)

printf(“Привет, мир! ”);

return 0;

}

Сравним цикл на Паскале и на Си:

Паскаль

Си

for I := 1 to 100 do

Write(‘Привет, мир! ’);

for (i = 1; i <= 100; i++)

printf(“Привет, мир! ”);

Отличие цикла for в Паскале и Си видно из примера и из формального описания синтаксиса:

Паскаль:

For СЧЕТЧИК := НАЧАЛЬНОЕ_ЗНАЧЕНИЕ

To КОНЕЧНОЕ_ЗНАЧЕНИЕ

Do ОПЕРАТОР

Или

For СЧЕТЧИК := НАЧАЛЬНОЕ_ЗНАЧЕНИЕ

Downto КОНЕЧНОЕ_ЗНАЧЕНИЕ

Do ОПЕРАТОР

Си:

for (ИНИЦИАЛИЗАЦИЯ_ПАРАМЕТРОВ_ЦИКЛА; УСЛОВИЕ_ПРОДОЛЖЕНИЯ_ЦИКЛА;

ИЗМЕНЕНИЕ_ПАРАМЕТРОВ_ЦИКЛА)

ОПЕРАТОР;

Обратите внимание: в Паскале две формы цикла For. Одна для прямого подсчета – счетчик изменяется от НАЧАЛЬНОГО_ЗНАЧЕНИЯ до КОНЕЧНОГО_ЗНАЧЕНИЯ с шагом +1 (for i := 1 to 100 do). Вторая форма считает с шагом –1 (for i := 100 downto 1 do).

В Си цикл FOR значительно более универсален. В разделе ИНИЦИАЛИЗАЦИЯ_ПАРАМЕТРОВ_ЦИКЛА может быть записано через запятую любое количество любых выражений. То же самое относится к разделу ИЗМЕНЕНИЕ_ПАРАМЕТРОВ_ЦИКЛА. В УСЛОВИИ_ПРОДОЛЖЕНИЯ_ЦИКЛА может быть записано любое логическое выражение.

Пример использования цикла FOR:

Задача: вывести на экран таблицу степеней 2.

В результате работы программы должна получиться следующая таблица:

N

2^N

0

1

1

2

2

4

3

8

4

16

5

32

6

64

7

128

8

256

9

512

10

1024

Напишем реализацию на Паскале:

var

n, y: integer;

Begin

Writeln(‘+----+------+’);

Writeln(‘| N | 2^N |’);

Writeln(‘+----+------+’);

y := 1;

for n := 0 to 10 do

begin

writeln(‘| ’, n:2, ‘ | ’, y:4, ‘ |’);

y := y * 2;

end;

Writeln(‘+----+------+’);

End.

Реализация на Си:

#include <stdio.h>

int main()

{

int n, y;

printf(“+----+------+\n”);

printf(“| N | 2^N |\n”);

printf(“+----+------+\n”);

for (y = 1, n = 0; n <= 10; y *= 2, n++)

printf(“| %2d | %4d |\n”, n, y);

printf(“+----+------+\n”);

return 0;

}

В этом примере в цикле FOR одновременно используются два счетчика – N и Y. В Паскале этого сделать нельзя, поэтому программа на Паскале получается длиннее, чем на Си.

задание для Лабораторной работы по теме «ЦИКЛЫ и вывод в Си»

Цель работы

Изучить использование различных циклов и процедуры вывода PRINTF.

Общее задание

Необходимо разработать 3 программы, каждая из которых выполняет одни и те же действия: вывод на экран набора символов, указанных в варианте. В программе №1 требуется использовать цикл с постусловием do .. while. В программе №2 требуется использовать цикл с предусловием while. В программе №3 требуется использовать цикл for. Массивы и файлы в программе использовать нельзя.

Пример выполнения лабораторной работы

Задание: На экран нужно вывести набор символов:

A B C D E

B C D E F

C D E F G

D E F G H

E F G H I

Программа №1 (с циклом do … while):

#include <stdio.h>

#include <conio.h>

int main()

{

int i, j, c;

clrscr();

// Внешний цикл обеспечивает вывод 5 строк

// с начальными символами строки ‘A’, ‘B’, ‘C’, ‘D’ и ‘E’

i = ‘A’;

do

{

// Внутренний цикл обеспечивает вывод ровно 5 символов,

// начиная с символа i

c = i;

j = 0;

do

{

printf(“%c ”, c);

c++;

j++;

} while (j < 5);

printf(“\n\n”);

i++

} while (i <= ‘E’);

return 0;

}

Программа №2 (с циклом while):

#include <stdio.h>

#include <conio.h>

int main()

{

int i, j, c;

clrscr();

// Внешний цикл обеспечивает вывод 5 строк

// с начальными символами строки ‘A’, ‘B’, ‘C’, ‘D’ и ‘E’

i = ‘A’;

while (i <= ‘E’)

{

// Внутренний цикл обеспечивает вывод ровно 5 символов,

// начиная с символа i

c = i;

j = 0;

while (j < 5)

{

printf(“%c ”, c);

c++;

j++;

}

printf(“\n\n”);

i++

}

return 0;

}

Программа №3 (с циклом for):

#include <stdio.h>

#include <conio.h>

int main()

{

int i, j, c;

clrscr();

// Внешний цикл обеспечивает вывод 5 строк

// с начальными символами строки ‘A’, ‘B’, ‘C’, ‘D’ и ‘E’

for (i = ‘A’; i <= ‘E’; i++)

{

// Внутренний цикл обеспечивает вывод ровно 5 символов,

// начиная с символа i

for (c = i, j = 0; j < 5; c++, j++)

printf(“%c ”, c);

printf(“\n\n”);

}

return 0;

}