Программа должна после запуска на исполнение выводить информацию об авторе, назначении программы (приводится лабораторное задание полностью), перед запросом ввода данных с клавиатуры обязательно должно быть сообщение о типе и количестве вводимых данных

Вид материалаПрограмма

Содержание


Тема №3. Циклы, символьный (литерный) тип данных.
Подобный материал:
1   2   3   4   5   6   7

Тема №3. Циклы, символьный (литерный) тип данных.


Задание: написать программу при помощи оператора цикла for (без применения массивов и прямой адресации курсора) для распечатки на экране монитора указанного в варианте набора символов. Начертить блок-схему к программе.

При выполнении заданий в первую очередь обратите внимание на то, что в языке Си литерный тип данных – это число (один байт). Поэтому с ним можно выполнять все операции, предусмотренные для работы с числами.

Второе – цикл for. Формат использования цикла for имеет следующий вид:

for ( [действие до цикла]; [предусловие цикла]; [последнее действие]).

Любое действие в прямоугольных скобках может отсутствовать. Предусловие (условие выполнения цикла) – это любое действие, результат которого будет интерпретироваться как int. Если результат равен нулю, то условие ложно, в противном случае истинно.

Третье, на что надо обратить внимание – цикл do…while будет повторяться, если условие в конструкции while – истинно.

Примеры выполнения задания по теме №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


Используя замеченные закономерности можно предложить следующий алгоритм решения:
  • надо организовать счет по строкам от первой до пятой (цикл по счетчику i), при каждом повторении этого цикла, т.е. внутри него будет выполняться три действия, объединенные в составном операторе:
  1. распечатка строки символов (сначала A C E G I, а потом и других),
  2. переход на следующую строку,
  3. вычисление значения первого символа в следующей строке;
  • в каждой строке необходимо организовать счет (переменная j) по символам (с 1-ого до 5-ого); при каждом повторении цикла будет выполняться три действия (опять нужен составной оператор):
  1. будет проверяться значение печатаемого символа (переменная C), и если окажется, что оно больше ‘I’, тогда переменной C присваивается значение ‘A’,
  2. значение переменной C выводится на экран монитора,
  3. переменной C присваивается новое значение (следующее за следующим, т.е. символы следуют через один).

Как при описании алгоритма, так и по тексту программы, действия внешнего цикла обозначены римскими цифрами, а внутреннего – арабскими. Решение записано в двух вариантах: подробном и сокращенном для демонстрации возможностей цикла for.

#include

#include

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

#include

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

#include

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

{

printf("%2c",C); // Печать символа

C+=2; // Вычисление следующего значения

}

/* Переход на другую строку */

printf("\n");

/* Вычисление значения первого символа */

First-=2;

}

getch();

return 0;

}

Контрольные вопросы к теме № 3
  1. Как использовать цикл for в языке Си?
  2. Что означают операторы «++», «– –», «+=» и т.д.?
  3. Назначение оператора break в языке Си?
  4. К какому типу относится цикл for (с пред- или пост- условием)?
  5. В чем отличие цикла for в языках Паскаль и Си?
  6. Как использовать цикл while?
  7. Как использовать цикл do…while?
  8. Чем отличаются циклы с пред-и пост-условиями?