Распечатать на экране монитора таблицу символов, используя только циклы (без использования массивов и строк)
A | C | E | G | I |
I | A | C | E | G |
G | I | A | C | E |
E | G | I | A | C |
C | E | G | I | A |
Используя замеченные закономерности можно предложить следующий алгоритм решения:
§ надо организовать счет по строкам от первой до пятой (цикл по счетчику i), при каждом повторении этого цикла, т.е. внутри него будет выполняться три действия, объединенные в составном операторе:
I) распечатка строки символов (сначала A C E G I, а потом и других),
II) переход на следующую строку,
III) вычисление значения первого символа в следующей строке;
§ в каждой строке необходимо организовать счет (переменная j) по символам (с 1-ого до 5-ого); при каждом повторении цикла будет выполняться три действия (опять нужен составной оператор):
1) будет проверяться значение печатаемого символа (переменная C), и если окажется, что оно больше ‘I’, тогда переменной C присваивается значение ‘A’,
2) значение переменной C выводится на экран монитора,
|
|
3) переменной C присваивается новое значение (следующее за следующим, т.е. символы следуют через один).
Как при описании алгоритма, так и по тексту программы, действия внешнего цикла обозначены римскими цифрами, а внутреннего – арабскими. Решение записано в двух вариантах: подробном и сокращенном для демонстрации возможностей цикла for.
#include <conio.h>
#include <stdio.h>
int main() // ПОДРОБНЫЙ ВАРИАНТ ЗАПИСИ ПРОГРАММЫ
{
int i,j; /* Счетчики */
char c='A'; /* Переменная для хранения значения первого символа
в строке */
// Цикл по строкам
for (i=1; i<=5; i++)
{ /* Начало действий внутри цикла по строкам */
/**** I) Печать строки символов */
for (j=1; j<=5; j++)
{ /* Начало тела цикла печати строки */
if (c>'I') c='A'; /*** 1) Проверка значения символа */
printf ("%2c",c); /*** 2) Вывод символа на экран */
c++; c++; /*** 3) Новое значение символа */
} /* Конец тела цикла печати строки */
/**** II) Переход на следующую строку */
printf ("\n");
/**** III) Подготовка первого символа следующей строки */
c--;
c--;
} /* Конец действий внутри цикла по строкам */
getch();
return 0;
}
После подробно описанного алгоритма работы, особенностей, на которые можно было бы обратить внимание в первой программе, совсем немного. Это инициализация переменной C во время объявления и изменение значения литерной переменной C оператором декремента («минус-минус»), хотя С – переменная литерного типа.
Вторая программа (сокращенный вариант записи программы) также содержит особенности свойственные языку Си:
1) переменные i и j - литерного типа, но потом будут использованы как целочисленные;
2) в циклах for использован оператор запятая, позволяющий сделать программу более компактной.
|
|
Несмотря на перечисленные особенности, нетрудно заметить, что алгоритм решения задачи и в первом и во втором случае один и тот же.
#include <conio.h>
#include <stdio.h>
int main() // СОКРАЩЕННЫЙ ВАРИАНТ ЗАПИСИ ПРОГРАММЫ
{
char i, j, c;
for (i=1,c='A'; i<=5; printf ("\n"),c-=2,i++)
{
for (j=1; j<=5; c+=2,j++)
{
if (c>'I') c='A';
printf ("%2c",c);
}
}
return 0;
}
Блок-схема к программе
Вторая программа рисует ту же таблицу, но используется цикл while и другой алгоритм:
#include <stdio.h>
#include <conio.h>
char First; /* Первый символ в строке */
char C; /* Текущий символ в строке */
int main()
{
First='K'; /* Первый символ в первой строке */
while (First>='C')
{
/* Печать первой части строки символов */
C=First;
while (C<='I')
{
printf("%2c",C); // Печать очередного символа
C+=2; // Вычисление следующего значения
}
/* Печать второй части строки символов */
C='A';
while (C<First)
{
printf("%2c",C); // Печать символа
C+=2; // Вычисление следующего значения
}
/* Переход на другую строку */
printf("\n");
/* Вычисление значения первого символа */
First-=2;
}
getch();
return 0;
}
Варианты заданий
1. | 2. | 3. | 4. | ||||||||||||||||||||||||
A | D | G | J | M | A | B | C | D | E | A | B | C | D | E | F | A | |||||||||||
M | D | G | J | M | B | C | D | E | B | C | D | E | F | G | B | C | |||||||||||
M | J | G | J | M | C | D | E | C | D | E | F | G | H | D | E | F | |||||||||||
M | J | G | J | M | D | E | D | E | F | G | H | I | - | - | - | - | |||||||||||
M | J | G | D | M | E | E | F | G | H | I | J | F | E | D | |||||||||||||
M | J | G | D | A | F | G | H | I | J | K | C | B | |||||||||||||||
A | |||||||||||||||||||||||||||
5. | 6. | 7. | 8. | ||||||||||||||||||||||||
A | B | C | D | E | F | G | H | I | A | B | C | D | E | A | E | D | C | B | A | B | C | D | E | ||||
B | C | D | E | F | G | H | E | A | C | D | E | B | E | D | C | A | A | B | C | D | |||||||
C | D | E | F | G | E | D | A | D | E | C | E | D | B | A | A | B | C | ||||||||||
D | E | F | E | D | C | A | E | D | E | C | B | A | A | B | |||||||||||||
E | E | D | C | B | A | E | D | C | B | A | A | ||||||||||||||||
E | D | C | B | A | |||||||||||||||||||||||
9. | 10. | 11. | 12. | ||||||||||||||||||||||||
I | A | + | + | O | + | + | F | ||||||||||||||||||||
I | G | B | A | B | + | O | O | O | + | E | F | ||||||||||||||||
I | G | E | C | B | A | B | C | O | O | O | O | O | D | E | F | ||||||||||||
I | G | E | C | D | C | B | A | B | C | D | + | O | O | O | + | C | D | E | F | ||||||||
I | G | E | C | A | C | B | A | B | C | + | + | O | + | + | B | C | D | E | F | ||||||||
B | A | B | A | B | C | D | E | F | |||||||||||||||||||
A | |||||||||||||||||||||||||||
13. | 14. | 15. | 16. | ||||||||||||||||||||||||
A | A | D | B | E | C | A | E | D | C | B | A | C | E | G | I | ||||||||||||
B | C | C | A | D | B | E | B | A | E | D | C | B | D | F | H | J | |||||||||||
D | E | F | E | C | A | D | B | C | B | A | E | D | C | E | G | I | K | ||||||||||
G | H | I | J | B | E | C | A | D | D | C | B | A | E | D | F | H | J | L | |||||||||
K | L | M | N | O | D | B | E | C | A | E | D | C | B | A | E | G | I | K | M | ||||||||
17. | 18. | 19. | 20. | ||||||||||||||||||||||||
A | B | C | D | E | A | D | G | J | M | E | A | B | C | D | E | F | |||||||||||
Z | B | C | D | E | B | E | H | K | N | D | E | B | C | D | E | F | |||||||||||
Y | Z | C | D | E | C | F | I | L | O | C | D | E | C | D | E | F | |||||||||||
X | Y | Z | D | E | D | G | J | M | P | B | C | D | E | D | E | F | |||||||||||
W | X | Y | Z | E | E | H | K | N | Q | A | B | C | D | E | E | F | |||||||||||
F | |||||||||||||||||||||||||||
21. | 22. | 23. | 24. | ||||||||||||||||||||||||
I | H | G | F | E | N | M | L | K | J | A | A | ||||||||||||||||
H | G | F | E | M | L | K | J | B | C | A | * | B | |||||||||||||||
G | F | E | L | K | J | D | E | F | A | * | B | * | C | ||||||||||||||
F | E | K | J | G | H | I | J | A | * | B | * | C | * | D | |||||||||||||
E | J | K | L | M | N | O | A | * | B | * | C | * | D | * | E | ||||||||||||
Контрольные вопросы к теме № 3
|
|
|
|
1. Как использовать цикл for в языке Си?
2. Что означают операторы «++», «– –», «+=» и т.д.?
3. Назначение оператора break в языке Си?
4. К какому типу относится цикл for (с пред- или пост- условием)?
5. Как использовать цикл while?
6. Как использовать цикл do…while?
7. Чем отличаются циклы с пред-и пост-условиями?