Программа должна после запуска на исполнение выводить информацию об авторе, назначении программы (приводится лабораторное задание полностью), перед запросом ввода данных с клавиатуры обязательно должно быть сообщение о типе и количестве вводимых данных
Вид материала | Программа |
СодержаниеТема №3. Циклы, символьный (литерный) тип данных. |
- Задание для вариантов 1-11, 100.34kb.
- 11. 09. 2008 Практическая работа №1 ms access. Основные приемы работы с данным Задание, 795.97kb.
- Инструкция по эксплуатации и меры предосторожности, 148.38kb.
- Инструкция по эксплуатации и меры предосторожности, 251.98kb.
- Инструкция по эксплуатации и меры предосторожности, 277.51kb.
- Инструкция по эксплуатации и меры предосторожности, 825.93kb.
- Разработка реляционной структуры данных, 255.43kb.
- Р. С. Енгалычев Научный руководитель А. А. Малюк, к т. н., профессор, 26.91kb.
- Любая программа для обработки данных должна выполнять три основных функции: ввод новых, 298.05kb.
- Базы данных, 55.38kb.
Тема №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), при каждом повторении этого цикла, т.е. внутри него будет выполняться три действия, объединенные в составном операторе:
- распечатка строки символов (сначала A C E G I, а потом и других),
- переход на следующую строку,
- вычисление значения первого символа в следующей строке;
- в каждой строке необходимо организовать счет (переменная j) по символам (с 1-ого до 5-ого); при каждом повторении цикла будет выполняться три действия (опять нужен составной оператор):
- будет проверяться значение печатаемого символа (переменная C), и если окажется, что оно больше ‘I’, тогда переменной C присваивается значение ‘A’,
- значение переменной C выводится на экран монитора,
- переменной 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 оператором декремента («минус-минус»), хотя С – переменная литерного типа.
Вторая программа (сокращенный вариант записи программы) также содержит особенности свойственные языку Си:
- переменные i и j - литерного типа, но потом будут использованы как целочисленные;
- в циклах 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
- Как использовать цикл for в языке Си?
- Что означают операторы «++», «– –», «+=» и т.д.?
- Назначение оператора break в языке Си?
- К какому типу относится цикл for (с пред- или пост- условием)?
- В чем отличие цикла for в языках Паскаль и Си?
- Как использовать цикл while?
- Как использовать цикл do…while?
- Чем отличаются циклы с пред-и пост-условиями?