Главная страница

Язык Си часть 1. Язык Си Часть Интегрированная среда, первая программа


Скачать 1.52 Mb.
НазваниеЯзык Си Часть Интегрированная среда, первая программа
Дата08.10.2019
Размер1.52 Mb.
Формат файлаpdf
Имя файлаЯзык Си часть 1.pdf
ТипПрограмма
#89146
страница2 из 3
1   2   3

Тема №2. Ветвление программы. Использование операторов
ветвления (if, else) и переключателя (switch)
Задание:
1) используя операторы ветвления (if и if … else), составить программу для определения номера отрезка аргумента составной (сложной) функции, имеющей различный вид на разных участках;
2) с помощью переключателя (switch) вычислить и вывести значение функции в данной точке;
3) значение аргумента вводить с клавиатуры;
4) начертить блок-схему алгоритма вычисления.
Варианты заданий
№ варианта
Функция
Участки аргумента
1 y
1
=x
3
–2<=x
1
<0 y
2
=x
2 0<=x
2
<1 y
3
=4*ln(x)
1<=x
3
<1.5 y
4
=-10*(x-1.6)
2 1.5<=x
4
<=2 2 y
1
=1/

x

–1<=x
1
< – 0.05 y
2
=19*e
(-x)
–0.05<=x
2
<1 y
3
=sin(10x)+7.6 1<=x
3
<2.05 y
4
=13+5*(x-3)
3 2.05<=x
4
<=3 3 y
1
=0.5*

(1+x
4
)
–3<=x
1
<–2 y
2
=cos(3x)+1
–2<=x
2
<2 y
3
=ln(10*x)+1.3 2<=x
3
<3 y
4
=2.2+5*sin(x-3)
3<=x
4
<= 4 4 y
1
=e
(-5*x)
+x
3
– 5<=x
1
< – 0.3 y
2
=-4*arcsin(3x)
– 0.3<=x
2
<0.25 y
3
=(x-2.5)/(x+0.4)
0.25<=x
3
<2.05 y
4
=5*(x-3)
3
+4 2.05<=x
4
<=3 5 y
1
=20*x
–1<=x
1
<– 0.5 y
2
=-160*x
4
– 0.5<=x
2
<0.5 y
3
=-20*sin(5*(x-0.5))-10 0.5<=x
3
<1.5 y
4
=(x-1.75)
2
*190-3 1.5<=x
4
<=2

24
№ варианта
Функция
Участки аргумента
6 y
1
=

(1+x
2
)
–2<=x
1
<0 y
2
=

(2-

(sin(1+x)))
0<=x
2
<1 y
3
=cos(4

(1+x)+1.1)
1<=x
3
<1.5 y
4
=-4*(x-1.5)+0.2 1.5<=x
4
<=2 7 y
1
=(-x)
3
+sin(x)
–1<=x
1
<– 0.05 y
2
=(x
2
+e x
)-1 0.05<=x
2
<2 y
3
=13-ln(x)*4 2<=x
3
<3 y
4
=8+10*sin(x-3)
3<=x
4
<=4 8 y
1
=arcsin(x)
– 1<=x
1
<1 y
2
=2*cos(10x)+

1<=x
2
<2 y
3
=-x
3
+x
2
+8 2<=x
3
<2.5 y
4
=(x-4)
4
-6.4 2.5<=x
4
<=3 9 y
1
= cos(x) +tg(x)
– 1<=x
1
<– 0.5 y
2
=2*arcsin(x)+1.4
– 0.5<=x
2
<0.5 y
3
=-x
6
*ln(1+x)+2.45 0.5<=x
3
<1 y
4
=-3*(x-1.6)
2
+2.8 1<=x
4
<=2 10 y
1
=e x
+x
– 4<=x
1
<– 3 y
2
=e
-x
*sin(x)
– 3<=x
2
<0 y
3
=0 0<=x
3
<1.5 y
4
=-4*(x-1.5)
1.5<=x
4
<=2 11 y
1
=3*cos(2*x)+4*sin(10*x)
– 1<=x
1
<– 0.05 y
2
=e x
– 0.05<=x
2
<1 y
3
=ln(x)+x e
+1.7 1<=x
3
<2.05 y
4
=13.8+5*(x-3)
3 2.05<=x
4
<=3 12 y
1
= 7
sin(x)
– 1<=x
1
<– 0.5 y
2
=(x+1)*(x
2
+1)
-1
– 0.5<=x
2
<0.5 y
3
=1.2sin(2
x
)
0.5<=x
3
<1 y
4
=-(x-0.6)
2
+1.25 1<=x
4
<=2 13 y
1
=arcsin(x)*ln(x+2)
– 4<=x
1
<– 3 y
2
=2*cos(10*x)+3
– 3<=x
2
<0 y
3
=30*(x-2.25)
2
+2.25 0<=x
3
<1.5 y
4
=15*(x-2.5)+4 1.5<=x
4
<=2

25
Краткая теоретическая справка и рекомендации по выполне-
нию
С помощью условных операторов и оператора переключения можно задать варианты выполнения (ветвления) программы. При вы- полнении условия программа будет идти по одной ветви, а при не вы- полнении по другой. Причем, при определенных условиях, может по- требоваться выполнение не одного, а нескольких действий (операто- ров), объединенных составным оператором.
По теме №2 в языке Си надо рассмотреть следующие вопросы:
1) деление операторов языка Си на группы (стр. 78-79), обратив вни- мание на составной оператор и блок программы;
2) условный оператор (стр. 80-81), обратив внимание на то, что ре- зультат «условия-выражения» – это число, нулевое значение которого принимается как «ложь», а остальные значения – истина;
3) операции отношения и логические выражения (стр. 52-53), с помо- щью которых можно реализовать сложное условие;
4) перечисляемый тип (стр. 12) и именованные константы в перечис- ляемом типе (стр. 20);
5) переключатель (стр. 126-130);
6) использование оператора break для выхода из переключателя
(стр. 129).
Пример выполнения лабораторного задания № 2
В данном примере программа будет последовательно выполнять следующие действия (выделены по тексту программы):
1) выводить информацию о назначении программы (информационный блок);
2) запрашивать значение аргумента функции (блок ввода данных);
3) определять отрезок, на котором оказалось введенное значение ар- гумента (блок условий);

26 4) вычислять значение функции и выводить вычисленное значение функции и номер отрезка на экран (блок выбора функции).
Весь текст программы можно условно разбить на несколько бло- ков. Первый из них – подготовительный блок. В данном примере этот блок содержит директивы препроцессору, объявления типов данных и переменных. Он не выполняет никаких действий в процессе работы программы и поэтому не будет включен в блок-схему алгоритма.
Далее за подготовительным блоком в программе будут следовать блоки, которые будут выполнять перечисленные ранее действия: ин- формационный блок, блок ввода данных, блок условий и блок выбора функции Блок-схема алгоритма такой последовательности действий представлена на рис. 14.
Рис. 14. Алгоритм вычисления составной функции
Каждый из перечисленных ранее блоков также содержит несколь- ко действий и будет реализован отдельным алгоритмом. Так инфор-

27 мационный блок и блок ввода данных также оказываются простыми линейными алгоритмами и не будут представлены в данном примере.
Блок условий проводит проверку введенного с клавиатуры значе- ния аргумента на принадлежность к одному из четырех отрезков чи- словой оси. Проверка на принадлежность проводится сравнением ар- гумента (x) с граничными значениями отрезка, например, для первого отрезка это будет сравнение с левой границей, то есть с числом -2,0
(x<=2.0) и сравнение с правой границей, то есть с числом 1.0 (x<1.0).
Алгоритмы этих сравнений будут иметь вид, изображенный на ри- сунке 15.
Рис. 15. Алгоритм блока сравнений.

28
При проведении сравнения с помощью операции отношения, на- пример, (x<=2.0) будет получен целочисленный результат (0 или 1).
Для проверки на принадлежность значения аргумента x к отрезку не- обходимо выполнение двух отношений (как для левой, так и для пра- вой границы), например, для того, чтобы попасть в первый отрезок должно выполняться два условия (x<=2.0) и (x<1.0).
Теперь, когда определен отрезок, на котором находится аргумент, можно вычислять значение функции по алгоритму вычисления функ- ции (Рис. 16). Ниже по тексту представлен пример программы.
Рис. 16. Алгоритм вычисления функции

29
// === Блок описания директив, типов данных и переменных ===
#include
#include
#include
// =============== Блок главной функции ================
int main ()
{
// Задаем тип и переменную перечисляемого типа
typedef // определение типа, см. стр. 12
enum // далее будет задан перечисляемый тип константами ...
{ // ниже представлены именованные константы
UNKNOWN, // неизвестный отрезок (имеет значение 0)
OTREZOK_1, // отрезок № 1 (имеет значение 1)
OTREZOK_2, // отрезок № 2 (имеет значение 2)
OTREZOK_3, // отрезок № 3 (имеет значение 3)
OTREZOK_4 // отрезок № 4 (имеет значение 4)
} TOtrezok; // Идентификатор (имя) перечисляемого типа
TOtrezok otrezok; /* переменная перечисляемого тип для хранения но-
мера отрезка */
float x, y; // переменные для задания аргумента и значения функции
//============= 1) Информационный блок ===============
system ("chcp 1251 > NUL");
printf (" Лабораторная работа N 2 вариант 27 \n\
Тема: Ветвление программы \n");
printf ("Задание: Используя оператор if, составить программу \n\
для вычисления составной функции вида: \n \
1> sqr(x) при x >= -2.0 и x< 1.0\n\
2> sqrt(x) при x >= 1.0 и x< 2.0\n\
3> y=sqrt(x-2)+sqrt(2) при x >= 2.0 и x< 3.0\n\
4> y=1+sqrt(x-1) при x >= 3.0 и x<=4.0\n\

30
указать отрезок, где находится аргумент \n\
и вывести значение функции в данной точке. \n");
printf (" Автор: Путилов Александр Петрович, гр. Пд-11 \n");
/* Обратите внимание на то, как формируется длинная констант-
ная строка с помощью знака «слеш» (см. стр.22 в книге).*/
//============== 2) Блок ввода данных ===================
printf ("Введите x=");
scanf ("%f",&x);
printf ("\n");
//============== 3) Блок условий ========================
/* Выбор отрезка */
otrezok=UNKNOWN; // сначала считаем, что отрезок неизвестен
if ((x>=-2.0) && (x<1.0)) // условие выбора первого отрезка
otrezok=OTREZOK_1;/* при выполнении условия выбран
отрезок №1 */
else
// иначе, если первый отрезок не выбран, то проверяем ...
if ((x>=1.0) && (x<2.0)) // условие выбора второго отрезка
otrezok=OTREZOK_2; /* при выполнении условия выбран
отрезок №2 */
if ((x>=2.0) && (x<3.0)) // условие выбора третьего отрезка
otrezok=OTREZOK_3; // при выполнении условия выбран
// отрезок №3
if ((x>=3.0) && (x<=4.0)) // условие выбора четвертого отрезка
otrezok=OTREZOK_4; // при выполнении условия выбран
// отрезок №4

31
//=============== 4) Блок выбора функции =================
/* Вычисление значения функции */
switch (otrezok)
{
case OTREZOK_1: y=pow(x,2);
break;
case OTREZOK_2: y=sqrt(x);
break;
case OTREZOK_3: y=sqrt(x-2)+sqrt(2); break;
case OTREZOK_4: y=1+sqrt(x-1);
break;
default : printf("Число вне диапазона. \n");
system ("pause");
exit (1);
// выход из любого места программы
}
printf (" Значение функции = %5.2f \
Аргумент находится на отрезке № %d \n", y, otrezok);
system ("pause");
return 0;
}
Новым в данном примере является использование перечисляемого типа данных (enum). Объявление перечисления задает тип перемен- ной перечисления и определяет список именованных констант, назы- ваемый списком перечисления. Значением каждого имени списка яв- ляется некоторое целое число. Переменная перечисляемого типа
(otrezok) может принимать значения одной из именованных констант списка (UNKNOWN, OTREZOK_1, OTREZOK_2, OTREZOK_3, OTREZOK_4).
Именованные константы списка имеют тип int. Поэтому переменной перечисляемого типа можно присвоить любое значение типа int. Фа- тальной ошибки при этом не будет, а только предупреждение (Assign
int to enum) о том, что переменной перечисляемого типа присвоено целое значение.

32
Последовательность выполнения программы после получения зна- чения аргумента функции (переменная x), можно проследить как по программе, так и по схеме алгоритма.
Сначала проверяется принадлежность аргумента 1-му отрезку и, если это так, то переменной otrezok присваивается значение
OTREZOK_1. Иначе, если это не так, идет проверка на принадлежность аргумента 2-му отрезку и, если это так, то переменной otrezok при- сваивается значение OTREZOK_2.
Далее (не зависимо от исхода предыдущих проверок) проверя- ется принадлежность аргумента сначала 3-му отрезку (и, если это так, то переменной otrezok присваивается значение OTREZOK_3), а по- том и четвертому отрезку.
Потом будет работать переключатель, который в зависимости от значения переменной otrezok, направит программу на вычисление функции по одной из четырех формул. При этом важную функцию будет выполнять оператор break, который сразу после вычисления функции направит программу на распечатку результата (оператор, следующий непосредственно за блоком switch).
Если ни один из отрезков не был выбран, то в переключателе бу- дет выполняться вариант default.
При использовании операторов ветвления программы (if, else) есть несколько существенных особенностей, отличающих синтаксис язы- ков Паскаль и Си и дающих наибольшее число ошибок: в языке Си результатом логической операции служит целое число, любое целое число, не равное 0, интерпретируется как истина; поразрядные (битовые) логические операторы:
& – оператор И,
| – оператор ИЛИ,
^ – оператор ИСКЛЮЧАЮЩЕЕ ИЛИ,

– оператор ПОРАЗРЯДНАЯ ИНВЕРСИЯ;

33 логические операторы:
&& –оператор логическое И,
|| –оператор логическое ИЛИ,
! –оператор логическое ОТРИЦАНИЕ; логическое выражение после слова if обязательно должно быть в круглых скобках; выражение перед альтернативной частью (else) должно заканчи- ваться точкой с запятой; оператор проверки на равенство обозначается двойным знаком
«равно», а проверка на неравенство – «восклицательный знак равно».
Для того чтобы начертить блок-схему алгоритма вычисления со- ставной функции и прочих алгоритмов в курсе АЯиОП, познакомь- тесь с
ГОСТ 19.003-80
«СХЕМЫ АЛГОРИТМОВ И ПРОГРАММ.
ОБОЗНАЧЕНИЯ УСЛОВНЫЕ ГРАФИЧЕСКИЕ».
Примерный перечень контрольных вопросов по теме № 2
1. Как используются операторы логических битовых операций
(«и», «или», «исключающее или») в условных выражениях?
2. Какого типа результат операции сравнения в языке Си?
3. Начертите таблицы истинности логических операций «И»,
«ИЛИ».
4. Укажите тип переменной оператора switch, по значению ко- торой выполняется переключение.
5. Какое действие может быть выполнено в операторе switch по умолчанию?
6. Какой синтаксис записи метки в операторе switch?
7. Какое число будет выведено на экран после выполнения сле- дующего фрагмента программы?
int x = (5>2);
printf("%d", x);

34
Тема №3. Циклы, символьный (литерный) тип данных
Задания:
1) написать программу при помощи оператора цикла for для рас- печатки на экране монитора указанного в варианте набора символов
(без применения массивов и прямой адресации курсора);
2) написать программу, выполняющую те же действия, но только при помощи оператора цикла while;
3) написать программу, выполняющую те же действия, но только при помощи оператора цикла do…while;
4) начертить блок-схемы алгоритмов к программам.
Краткая теоретическая справка и рекомендации по выполне-
нию
При выполнении заданий в первую очередь обратите внимание на то, что в языке Си литерный тип данных (char, стр. 24, 26) – это число размером в один байт. Поэтому с ним можно выполнять все операции, предусмотренные для работы с числами. Причем – это число со зна- ком (диапазон изменения от -128 до +127).
Заметьте, что в таблице кодов символов (стр. 553-558), коды сим- волов только положительные. Поэтому для работы с символами нуж- но использовать тип данных unsigned char, то есть символ без знака.
Второе – цикл for (стр. 90-93). Формат использования цикла for
имеет следующий вид:
for ([действие до цикла]; [предусловие цикла]; [действие после те-
ла цикла]) [{// действие в цикле (тело цикла)}];
В прямоугольных скобках может присутствовать или отсутство- вать любой оператор (любое действие) правильный с точки зрения синтаксиса языка Си. Предусловие (условие выполнения цикла) – это любое действие, результат которого будет интерпретироваться как целое число (int). Если результат равен нулю, то условие ложно (и те-

35 ло цикла не будет выполняться), в противном случае истинно (и тело цикла будет выполняться). Заметьте, что обязательными являются: слово for, круглые скобки и знаки «точка с запятой».
Третье – цикл while (стр. 90-93) – это цикл с предварительной про- веркой условия, как и цикл for.
Четвертое, на что надо обратить внимание это цикл do…while (стр.
90-93). В этом цикле сначала выполняется тело цикла, а потом прово- дится проверка (нужно ли делать повторение еще раз). Причем цикл будет повторяться, если условие в конструкции while – истинно.
Тема №3 предполагает не только использование циклов, но и по- лучить небольшой практический опыт в поиске закономерностей. В чем это проявляется можно рассмотреть на примере выполнения ин- дивидуального задания.
Примеры выполнения задания по теме №3.
Распечатать на экране монитора таблицу символов, используя только циклы (без использования массивов, строк или других типов данных кроме литерного типа)
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
Практически все варианты заданий, как и этот пример, содержат следующие закономерности:
1) каждая строка состоит нескольких частей, например, если по- ставить пустую ячейку между частями строки, получим (первая часть строки – это подстрока, всегда заканчивающаяся символом 'I', причем в первой строке она отсутствует, вторая часть – это единственный

36 символ 'A', третья часть – всегда начинается с символа 'C', причем в последней строке она отсутствует):
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
2) количество символов в первой и третьей частях зависит от но- мера строки, например, если номер строки задан в переменной n, и он изменяется от 1 до 5, то количество символов может быть вычислено простыми формулами:
Номер строки
Количество символов в первой части строки
Количество символов в третьей части строки
n
формула (n-1)
формула (5-n)
1 0
4 2
1 3
3 2
2 4
3 1
5 4
0 3) символы в первой и третьей частях изменяются с шагом +2, то есть следуют через один по отношению к алфавитному порядку;
4) первый символ первой части строки может быть вычислен в за- висимости от номера строки по формуле (опять считаем, что номер строки в переменной n):

37 первый_символ_в_строке = 'I' - (n-2)*2
Исходя из найденных закономерностей, можем сформировать программу для решения задачи с помощью цикла for(мы будем при- водить только решение, пропуская условие задачи и прочее).
#include
#include
int main()
{ unsigned char // все переменные будут литерного типа
n, // переменная определяющая номер строки
k, // переменная для подсчета букв в подстроке
symbol; // переменная - символ для печати
for (n = 1; n<=5; n++) // номер строки изменяется от 1 до 5
{ // начало тела цикла по переменной n
// ===== Печать первой части =====
symbol = 'I' - (n-2)*2; // 1-е значение символа в 1-ой части
for (k = 1; k<=n-1; k++) // номер символа в подстроке
{ // начало тела цикла по переменной k
printf ("%2c", symbol); // печать очередного символа
symbol = symbol + 2; // значение следующего символа
} // конец тела цикла по переменной k
// ===== Печать второй части =====
printf (" A");
// ===== Печать третьей части =====
symbol = 'C'; // 1-ое значение символа в третьей подстроке
for (k = 1; k<=5-n; k++) // номер символа в подстроке
{ // начало тела цикла по переменной k
printf("%2c", symbol); // печать очередного символа
symbol += 2; // вычисление значения следующего символа
} // конец тела цикла по переменной k

38
// ===== Переход на следующую строку =====
printf("\n");
} // конец тела цикла по переменной n
system("pause");
return 0;
}
Схема алгоритма для программы с циклом for реализуется очень просто, если сделать заготовки схем «стандартных» алгоритмов и вы- полнять схему алгоритма по частям, так как, все циклы for имеют одинаковую структуру (см. Рис. 17).
Рис. 17. Схема алгоритма цикла
for
в языке Си
На этом рисунке: 1 – действие до цикла, 2 – предусловие цикла,
3 – действие в цикле (тело цикла), 4 – действие после тела цикла.
Таким образом, блок-схема алгоритма программы, реализующей вывод на экран таблицы символов, выполненной с помощью цикла
for, будет иметь вид, показанный на рисунке 18. Обратите внимание на то, что подробности реализации тела цикла не представлены, что делает блок-схему алгоритма более компактной и понятной. Более то- го, разбиение алгоритма на части позволяет делать меньше ошибок.

39
Рис. 18. Алгоритм программы с циклом
for
Тело цикла по переменной n само является составным алгоритмом, содержащим несколько действий, а именно: печать первой части строки, печать второй части строки, печать третьей части строки и переход на новую строку (Рис. 19). Печать каждой части также может быть представлена отдельным алгоритмом.
Рис. 19. Алгоритм распечатки тела цикла по переменной
n

40
Рис. 20. Алгоритм распечатки первой части
Заметим также, что алгоритм распечатки третьей части будет от- личаться от алгоритма распечатки первой части (см. Рис. 20) тем, как будет задано начальное значение переменной symbol и условием вы- полнения цикла.
Для перехода от цикла for к циклу while, достаточно вспомнить, что в цикле for есть действия, выполняемые до цикла, есть проверка предусловия, есть тело цикла, есть действие после тела цикла. Эти же действия легко реализуются с помощью цикла while (сравните две за- писи):
n = 1;
for ( n = 1; n<=5; n++)
while ( n<=5 )
{
{
// тело цикла
// тело цикла
}
n++;
}

41
При этом можно заметить, что последовательности действий (ал- горитмы работы) обоих фрагментов программ совершенно совпадают.
Таким образом, предыдущая программа легко трансформируется к виду с использованием только цикла while.
#include
#include
int main()
{ unsigned char n, k, symbol;
n = 1;
while ( n<=5 )
{ symbol = 'I' - (n-2)*2;
k = 1;
while ( k<=n-1 )
{ printf ("%2c", symbol);
symbol = symbol + 2;
k++;
}
printf(" A");
symbol = 'C';
k = 1;
while ( k<=5-n )
{ printf ("%2c", symbol);
symbol += 2; k++;
}
n++; printf("\n");
}
system("pause");
return 0;
}

42
Цикл do ... while значительно отличается от двух предыдущих цик- лов тем, что тело цикла выполняется хотя бы один раз, так как про- верка условия проводится после тела цикла. Поэтому, при замене цикла while на цикл do ... while, может потребоваться условие, прове- ряющее необходимость входа в цикл. В приводимом примере это бу- дет при печати в первой строке первой части и при печати третьей части в пятой строке.
Рис. 21. Алгоритм программы
Рис. 22. Алгоритм тела цикла n с циклом do while
Реализация остальных частей алгоритмов труда не составит, по- этому рассмотрим схему перехода от цикла while к циклу do ... while.
Представим это в виде таблицы для сравнения двух циклов.
n = 1;
n = 1;
while ( n<=5 )
do
{
{
// тело цикла
// тело цикла
n++;
n++;
}
} while ( n<=5 );

43
Легко заметить, что преобразования в большей степени составля- ют действия типа «копировать – вставить», то есть проверку условия
(while) надо переметить после тела функции, а на ее прежнее место поставить слово do. Главное при этом не забыть, что тело будет вы- полнено хотя бы один раз. Если это не соответствует алгоритму рабо- ты, тогда необходимо использовать цикл только при выполнении ус- ловия (см. Рис. 22).
#include
#include
int main()
{ unsigned char n, k, symbol;
n = 1;
do
{ if (n>1)
{ // печать первой части
symbol = 'I' - (n-2)*2; k = 1;
do
{ printf ("%2c", symbol); symbol = symbol + 2; k++; }
while ( k<=n-1 );
}
// печать второй части
printf(" A");
if (n<5)
{ // печать третьей части
symbol = 'C'; k = 1;
do
{ printf ("%2c", symbol); symbol += 2; k++; }
while ( k<=5-n );
}
n++;

44
// переход на новую строку
printf("\n");
} while ( n<=5 );
system("pause");
return 0;
}
Напоследок хотим заметить, что варианты индивидуальных зада- ний №14 и №15 немного отличаются. Поэтому приведем еще один пример. Пусть требуется вывести таблицу символов вида:
Эта таблица очень похожа на указанные варианты 14 и 15 и имеет закономерности:
1) символы в строке не «разбиты» на отдельные части;
2) расположены символы и не в прямом, и не в обратном алфавит- ном порядке;
3) прослеживается следующая периодичность расположения сим- волов в строке, например, для первой строки: первый символ D, сле- дующий за ним по алфавиту символ E находится на пятой позиции
(1+4); следующий за символом E символ A расположен в позиции 4, что можно вычислить по формуле:
(5+4) % 5, где, цифра 5 в скобках – это позиция символа E, 4 – смещение
(шаг) по строке, % – оператор для определения остатка от целочис- ленного деления, последняя цифра 5 – количество символов в строке;
4) таким образом, значение символа, который будет напечатан, за- висит от номера строки и номера столбца.
#include
#include

45
int main()
{ unsigned char row, column, k, symbol;
for (row=1;row<=5;row++)
{ for (column=1; column<=5; column++)
{ k = (row + column)*4 % 5;
symbol = 'A' + k;
printf ("%2c", symbol);}
printf ("\n");
} system ("pause"); 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

46 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
Контрольные вопросы к теме № 3
1. Как использовать цикл for в языке Си?
2. Что означают операторы «++», «– –», «+=» и т.д.?
3. Назначение оператора break в языке Си?
4. К какому типу относится цикл for (с пред- или пост- услови- ем)?
5. Как использовать цикл while?
6. Как использовать цикл do…while?
7. Чем отличаются циклы с пред- и пост- условиями?
8. Чем отличаются типы данных char и unsigned char?
9. Как выделить для вывода символа 4 знакоместа?
10. Можно ли в цикле for использовать в качестве переменной счетчика переменную с плавающей точкой?
11. Как распечатать код символа?
12. Как с помощью одного цикла for и одной переменной счетчика распечатать на экране последовательность чисел
1 2 3 4 5 6 7 6 5 4 3 2 1

47
1   2   3


написать администратору сайта