ТОП 10:

Работа подготовлена на кафедре Автоматики



© Новосибирский государственный технический университет, 2009 г.


Лабораторная работа № 1

ТЕХНОЛОГИЯ РАБОТЫ С ПРОГРАММАМИ НА ЯЗЫКЕ СИ В СИСТЕМЕ ПРОГРАММИРОВАНИЯ BORLAND C++ BUILDER. ЭЛЕМЕНТАРНЫЕ ОПЕРАЦИИ.

1. Цель работы

Изучить процесс прохождения программы на языке СИ в среде программирования BORLAND C++ BUILDER. Ознакомиться с технологией от­ладки программ. Изучить основные конструкции операторов при­сваивания и директивы препроцессора.

2. Краткие теоретические сведения

2.1. Среда программирования C++Builder Borland (далее BC) представляет собой современный программный комплекс, включающий в себя редактор проектов, текстовый редактор, компиляторы с языков С, С++, Ассемблер, компоновщик, средства отладки программ и библиотеки функций, программных и графических компонентов. Вход в среду выполняется через меню «Программы»-«Borland Developer Studio 2006»-«C++Builder», после чего для выполнения лабораторных работ данного курса создается новый консольный проект командами «File»-«New»-«Other». В открывшемся окне «New Items» выбирается приложение «Console Application», язык (С, С++) и, при необходимости, указывается путь к файлам проекта (Specify project source). После нажатия кнопки «OK» в текстовом редакторе открывается файл c именем unit1.c, содержащий пустую функцию main, внутрь которой вводится текст программы.

2.2. Компиляция, сборка и запуск программы на выполнение производится командой меню «Run»-«Run» или нажатием клавиши <F9> на клавиатуре. Пошаговая отладка (при отсутствии других функций в программе) производится командами меню «Run»-«Step over» или нажатием клавиши <F8> на клавиатуре. Контроль значений переменных производится в окне, вызываемом командами меню «Run»-«Add watch», или нажатием клавиш <Ctrl+F5> на клавиатуре. Справочная информация о среде программирования, библиотечных функциях и операторах языка может быть получена через команду меню «Help» или нажатием клавиши клавиатуры <F1> при нахождении курсора в операторе языка или имени библиотечной функции.

2.3. В процессе работы для ввода-вывода следует исполь­зовать функции printf и scanf. Основные форматы, используемые в этих функциях:

%d - ввод/вывод чисел типа int;

%o - то же, но в восьмеричном виде;

%f - ввод/вывод чисел типа float и double;

- ввод/вывод одного символа (char);

%s - ввод/вывод строки (массив char);

Дополнительно при выводе данных после знака % можно ука­зывать длину поля вывода и количество знаков после запятой (только для %f). Например:

%5d - вывод целого числа в поле длиной 5 позиции;

%7.3f - вывод числа float в поле 7 позиций, 3 знака после запятой;

%20s - вывод строки в поле 20 позиций.

Данные при выводе выравниваются по правой границе. Для выравнивания по левой границе после «%» дополнительно указы­вается знак "-", например «%-7.3f».

В форматной строке можно использовать управляющие константы:

\n - новая строка;

\t - табуляция;

- звуковой сигнал;

\b - возврат на шаг.

3. Методические указания

3.1. При выполнении работы следует стремиться максималь­но упростить выражения в операциях присваивания. Для этого следует использовать операции инкремента и декремента, а так­же операторы «+=», «*=» и т. п.

3.2. Все константы, используемые в программе, должны быть описаны директивами препроцессора #define.

3.3. Для использования функций ввода/вывода printf() и scanf() необходимо включить в программу файл stdio.h директивой

#include <stdio.h>

3.4. Все программы должны быть отлажены в пошаговом режиме с выводом информации о значениях переменных в окно отладки

4. Порядок выполнения работы

4.1. Написать программу, выполнявшую арифметические и логические операции над целыми переменными А, В, С, D по вариантам (табл.1.1). Использовать глобальные статические пере­менные и инициализацию при компиляции. Вывести значения пере­менных с помощью функции printf() в заданном формате (рис.1.1). Переменные С и D печатать в восьмеричном виде.

4.2. Модифицировать программу, описав переменные как локальные и задав их значения с помощью прямого присваивания. Сравнить результаты с п. 4.1.

4.3. Изменить программу, применив для ввода значений переменных функцию scanf(). Сравнить результаты.

4.4. Описать переменные как автоматические. Вывести их значения до присваивания. Объяснить полученные результаты.

4.5. Повторить п.4.1, разместив все описания в отдельном файле.

4.6. Повторить п.4.1, использовав вместо переменных А, В, С, D статический массив.

 

Таблица 1.1

Вариант Задание
  А - сложить с В, С и D, увеличенными на 1. Результат умножить на 5. В - разделить по модулю 5. С - сложить с А, увеличенным на 1, и с В. В уменьшить на 1. D - выполнить поразрядное «и» 0-3 разрядов В и 2-го разряда С, сдвинутого вправо на 2 разряда.
    А - сложить с В, С и D, уменьшенными на 1.Результат разделить на 2. B - умножить на 3. С - уменьшить на величину А, деленной по модулю В. D - выполнить поразрядное «и» 2-8 разрядов В и 1-3 разрядов С, сдвинутых вправо на 2 разряда.
    А - сложить с В и С, увеличенными на 1 и разделить по модулю D. В - разделить на 6. С - сложить с В, уменьшенным на 1 и прибавить А. А увеличить на 1. D - выполнить поразрядное «и» 1-6 разрядов В и 0-2 разрядов С, сдвинутых вправо на 1 разряд.
    А - умножить на С, сложить с В и разделить по модулю D. В - уменьшить на 4. С - сложить с В, уменьшенным на 1, и прибавить А. А увеличить на 1. D - выполнить поразрядное «или» 6-7 разрядов В и 0-3 разрядов С, сдвинутых влево на 3 разряда.
    А - сложить с произведением B и С, деленным по модулю D. В - увеличить на 3. С - вычесть А и В, уменьшенные на 1. В не изменять. D - выполнить поразрядное «и» 0-3 разрядов B и 1-5 разрядов С, сдвинутых вправо на 1 разряд.
  А -умножить на В, разделить по модулю С и вычесть D. С и D уменьшить на 1. В - разделить по модулю 7. С - сложить с А и В и разделить на 3. А увеличить на 1, В уменьшить на 1. D - выполнить поразрядное «и» 1 или 5 разрядов В и 3-7 разрядов С, сдвинутых влево на 1 разряд.
  А - умножить на сумму В и С, деленную по модулю 6, затем прибавить D. D увеличить на 1. B - разделить на 7. С - вычесть А и В. А увеличить на 1, В уменьшить на 1. Результат разделить на 3. D - выполнить поразрядное «или» 0-5 разрядов В и 0-3 разрядов С, сдвинутых вправо на 2 разряда.
  А - разделить по модулю В, прибавить сумму С, увеличенного на 1, и D. D увеличить на 1. В - увеличить на 5. C - сложить с А, увеличенным на 1, и В. В уменьшить на 1. Результат разделить на 5. D - выполнить поразрядное «и» 2 или 6 разряда В и 4-8 разрядов С, сдвинутых влево на 2 разряда.
A – сложить с произведением В и С, деленным по модулю 5. В и С уменьшить на 1. B - уменьшить на 8. C - умножить на В, разделить на сумму А и С, С увеличить на 2. D - выполнить поразрядное «и» 4-7 разрядов B, сдвинутых вправо на 2 разряда и 0-1 разрядов С, сдвинутых влево на 1 разряд.
A - разделить по модулю В, прибавить произведение С и D, С увеличить на 1, D уменьшить на 1. B - разделить по модулю 3. C - сложить с А и B, разделить по модулю 2, результат умножить на 3. D - выполнить поразрядное «или» 0-2 разрядов В и 0-3 разрядов С, сдвинутых влево на 3 разряда.
А - сложить с В, С и D, уменьшенными на 1. Результат разделить по модулю 4. В - увеличить на 4. С - сложить с А, уменьшенным на 1, и с В. Результат разделить на 2. D - выполнить поразрядное «или» 1-2 разрядов В и 4-го разряда С, сдвинутого вправо на 1 разряд.
А - умножить на С, уменьшенное на 1 и сложить с D, увеличенным на 1 Результат разделить по модулю 5. В - разделить по модулю 2. С - сложить с А, уменьшенным на 1 и прибавить В. Результат разделить на 2. D - выполнить поразрядное «и» 2 или 6 разрядов В и 5-го разряда С, сдвинутого влево на 2 разряда.
А - разделить по модулю С и сложить с В, уменьшенным на 1. Результат разделить по модулю D. В - уменьшить на 5. С - сложить с А, уменьшенным на 1 и прибавить В. В увеличить на 1. D - выполнить поразрядное «или» 2-5 разрядов В и 5 или 6 разрядов С, сдвинутых влево на 4 разряда.
А - умножить на B, прибавить сумму C и D, уменьшенных на 1 Результат разделить на 3. В - разделить на 7. С - вычесть с А и B, увеличенные на 1. A не изменять. D - выполнить поразрядное «и» 5 разряда В и 6-7 разрядов С, сдвинутых вправо на 1 разряд.
А - умножить на С, разделить на D и прибавить B, уменьшенное на 1. Результат разделить на 4. В - уменьшить на 6. С - сложить с суммой А и B, увеличенных на 1. Результат умножить на 2. D - выполнить поразрядное «или» 7 разряда В и 3 разряда С, сдвинутого вправо на 1 разряд.
А - умножить на сумму B и C и разделить по модулю D. А и B уменьшить на 1. В - умножить на 2. С - сложить с А и В, уменьшенным на 1. Результат умножить на 4. D - выполнить поразрядное «или» 2 или 4 разрядов В и 1-2 разрядов С, сдвинутых вправо на 3 разряда.
А - сложить с B и С, уменьшенными на 1, и с D, увеличенным на 1. Результат разделить на 3. В - разделить на 4. С - вычесть А, уменьшенное на 1 и прибавить В. B увеличить на 1. D - выполнить поразрядное «или» 1 разряда В и 4-5 разрядов С, сдвинутых влево на 1 разряд.
А - сложить с В, С и D. Результат разделить на 2. В и С увеличить на 1, D уменьшить на 1. B - разделить на 9. С - увеличить на величину А, деленной по модулю 5. D - выполнить поразрядное «или» 3-6 разрядов В и 8 разряда С, сдвинутого вправо на 2 разряда.
А - вычесть с В, С и D. Результат умножить на 3. В и С уменьшить на 1. B – умножить на 8. С – сложить с суммой А и В, деленной на 3. Результат уменьшить на 4. D - выполнить поразрядное «и» 7 или 8 разрядов В и 0-1 разрядов С, сдвинутых вправо на 3 разряда.
А - сложить с В, умножить на С разделить на D. В увеличить на 1, С уменьшить на 1. B - разделить по модулю 4. С – вычесть A и прибавить произведение C и D, уменьшенных на 1. D - выполнить поразрядное «или» 4 разряда В и 7 разряда С, сдвинутого влево на 1 разряд.

 

Исходные данные:

A = 12 B = 8 C = 34 D = 123

 

Результат:

A = 23 B = 334 C = 45 D = 177

 

Рис.1.1 Пример вывода результатов

5. Содержание отчета.

 

5.1. Цель работы.

5.2. Задание.

5.3. Тексты программ.

5.4. Полученные результаты.

5.5. Выводы.

 

6. Контрольные вопросы

 

6.1. Какие классы памяти существуют в языке СИ?

6.2. Можно ли инициализировать автоматическую переменную?

6.3. Какая операция имеет больший приоритет: «+» или «++»?

6.4. Какая операция имеет больший приоритет: «&&» или «&»?

6.5. В каком случае размерность массива при его описании можно не указывать?

6.6. Какая логическая операция используется для обнуления группы двоичных разрядов?

6.7. Особенности выполнения операции арифметического сдвига вправо.

6.8. Чем определяется область видимости и время жизни переменной?

6.9. Когда при описании переменной надо явно указывать, что она static? auto?

Лабораторная работа №2.

ОПЕРАТОРЫ IF, IF-ELSE, SWITCH, УСЛОВНАЯ ОПЕРАЦИЯ.

1.Цель работы.

 

Ознакомиться с основными конструкциями условных операторов языка СИ.

 

2. Краткие теоретические сведения.

 

В общем случае условный оператор if в языке СИ записывается в виде

 

if (выражение) оператор1;

else оператор2;

или

if (выражение) оператор1;

Проверяется значение выражения. Если оно не равно 0, выполняется оператор1, в противном случае оператор2. Далее в любом случае выполняется следующий оператор.

 

Оператор switch имеет вид:

 

switch (выражение)

{

case конст1: оператор1;

case конст2: оператор2;

case констЗ: оператор3;

default: оператор4;

}

Значение выражения в switch поочередно сравнивается с константами конст1, конст2, конст3. В случае равенства выполняется соответствующий оператор (группа операторов) до конца switch или до оператора break. Если ни одна из констант не равна значению выражения, выполняются операторы, начиная с метки default. Если default отсутствует, не выполняется никаких действий.

Условная операция совмещает в себе операций проверки ус­ловия и присваивания. Она записывается в виде

(выражение)? выражение1 : выражение2;

Если выражение не равно 0, операция возвращает значение выражения1, иначе выражения2.

3. Методические указания

3.1. Для ввода текстовой строки используйте функцию gets():

char str[50];

gets(str);

3.2. При написании программы цикл следует организовать с помощью операторов if и goto. Операторы циклов применять не следует. Признаком конца строки является символ ‘\0’.

4. Порядок выполнения работы

4.1. Написать программу, выполняющую действия со строкой символов по вариантам (табл.2.1). Для модификации символов использовать условную операцию. Вывести исходную и модифицированную строки.

4.2. Повторить п. 4.1., использовав для реализации п.1 задания оператор if, а для п.2 - конструкцию if-else. Сравнить результаты.

4.3. Повторить п.4.1., применив для выполнения п.2 задания оператор switch. Сравнить результаты.

 

 

Таблица 2.1

Вари ант Задание
  1. Преобразовать все латинские буквы нижнего регистра в латинские буквы верхнего регистра. 2. Заменить буквы A, M, P, R на цифры 0, 1, 2, 3 соответственно.
  1. Преобразовать все латинские буквы верхнего регистра в латинские буквы нижнего регистра. 2. Заменить буквы a, b, x, z на буквы e, k, m, p соответственно.
1. Все буквы в диапазоне от А до F заменить цифрами от 1 до 6. 2. Заменить все круглые и фигурные скобки на квадратные.
  1. Преобразовать все цифры от 0 до 9 соответственно в буквы от Е до N. 2. Заменить знаки арифметических операций (+, -, *, /) на буквы р, m, u, r.
  1. Заменить все латинские буквы верхнего регистра на соседние в таблице ASCII (А на В, В на С и т.д.). 2. Заменить цифры 2, 4, 6, 3 на 9, 7, 5, 8 соответственно.
1. Заменить все русские буквы верхнего регистра на соседние в таблице ASCII (А на Б, Б на В и т.д.). 2. Заменить все квадратные и фигурные скобки на круглые.
1. Заменить все буквы от А до М на буквы от N до Z соответственно. 2. Заменить знаки $, %, &, # на U, R, L, X соответственно.
  1. Преобразовать буквы от А до М верхнего регистра в соответствующие нижнего регистра. 2. Заменить буквы a, r, h, w на соответствующие верхнего регистра A, R, H, W.
1. Преобразовать буквы от k до х нижнего регистра в соответствующие верхнего регистра. 2. Заменить цифры 1, 3, 6, 7 на буквы A, R, N, E соответственно.
1. Цифры от 0 до 7 заменить на буквы от а до ж. 2. Заменить буквы а, б, л, н на f, g, u, k соответственно.
1. Заменить буквы от a до f нижнего регистра на соответствующие верхнего регистра. 2. Заменить цифры 1, 6, 4, 7 на знаки @, #, &, + соответственно.
1. Преобразовать буквы от N до U верхнего регистра в соответствующие нижнего регистра. 2. Заменить знаки <, >, !, ? на буквы f, t, x, z соответственно.
1. Заменить буквы от Б до К верхнего регистра на соответствующие нижнего регистра. 2. Заменить символы \, _, ^, ~ на буквы q, w, e, r.
1. Все цифры от 0 до 9 преобразовать в буквы от A до J. 2. Заменить буквы q, s, x, v на буквы A, F, K, N соответственно.
1. Все буквы от n до w преобразовать в цифры от 0 до 9. 2. Заменить буквы D, L, G, S на буквы k, f, t, r соответственно.
1. Преобразовать буквы от Q до Z верхнего регистра в соответствующие нижнего регистра. 2. Заменить буквы s, y, j, k на цифры 4, 8, 1, 6 соответственно.
1. Преобразовать буквы от g до o нижнего регистра в соответствующие верхнего регистра. 2. Заменить символы :, ;, -, + на буквы S, F, V, N соответственно.
1. Заменить все латинские буквы нижнего регистра на соседние в таблице ASCII (a на b, b на c и т.д.). 2. Заменить цифры 5, 2, 0, 4 на буквы X, P, Y, D соответственно.
1. Заменить все цифры на соседние в таблице ASCII (0 на 1, 1 на 2 и т. д.). 2. Заменить все открывающиеся круглые и фигурные скобки на символ +, закрывающиеся круглые и фигурные скобки на символ - .
1. Все цифры от 0 до 9 преобразовать в буквы от a до j. 2. Заменить буквы Ш, Ы, Д, Ц на буквы й, у, т, г соответственно.

 

5. Содержание отчета

5.1. Задание.

5.2. Листинги программ по пп.4.1, 4.2 и 4.3.

5.3. Тестовый пример (исходная и модифицированная строки).

 

6. Контрольные вопросы

6.1. Пояснить логику работы оператора if – else.

6.2. Какой оператор используется для выхода из оператора switch?

6.3. Для чего используется метка default в операторе switch?

6.4. Реализовать с помощью условной операции функцию x = max(a,b)

6.5. Возможны ли вложенные операторы if?

6.6. Можно ли использовать выражения для задания констант в операторе switch?

6.7. Можно ли в теле оператора switch использовать вложенные операторы switch?

6.8. В каких случаях целесообразно использовать оператор goto?

6.9. Какова структура таблицы ASCII?

 

Лабораторная работа №3

ЦИКЛИЧЕСКИЕ СТРУКТУРЫ В ЯЗЫКЕ СИ. ОПЕРАТОРЫ FOR, WHIIE, DO-WHILE

1. Цель работы

Ознакомиться с правилами оформления и использования операторов цикла в языке СИ

 

2. Краткие теоретические сведения

В языке СИ возможны три основных конструкции операторов цикла.

Оператор for имеет вид:

for (оператор1; выражение; оператор2) оператор;

например:

for (i=0; i<=100; i++) a[i]=0;

Оператор1 выполняется перед началом цикла (инициализация). Выражение является условием продолжения цикла. Если оно не равно 0, выполняется оператор (тело цикла). Затем выполняется оператор2 (модификация). Процесс повторяется до тех пор, пока выражение не станет равным 0.

Оператор whilе имеет вид:

while (выражение) оператор;

например:

while (x > 0) s += a[x];

В этом случае оператор повторяется до тех пор, пока выражение не равно 0 (ус­ловие истинно). Проверка условия производится до выполнения оператора.

Цикл do-while имеет вид:

do оператор;

while (выражение);

например:

do

{

s[i]=0; i++;

}

while (i < 5);

Такая конструкция отличается от вышеописанной только тем, что значение выражения проверяется после выполнения оператора (тела цикла).

Во всех трех конструкциях циклов операторы могут быть составными.

Для выхода из цикла до его нормального завершения ис­пользуется оператор break. Он передает управление опера­тору, следующему за циклом. Оператор continue вызывает переход к началу цикла, т.е. к следующей итерации.

3. Методические указания

В лабораторной работе используются все вышеописанные конструкции циклов. В табл. 3.1. указано, какие из них вы должны использовать при выполнении тех или иных пунктов задания.

При написании программы с циклическими алгоритмами рекомендуется использовать фигурные скобки для явного указания тела цикла. Это уменьшает вероятность ошибок и делает понятной структуру программы.

При вводе строк используйте функцию gets(), так как функция scanf() воспринимает пробелы в строке как разделители.

Вывод строки на экран удобно выполнять функцией puts().

4. Порядок выполнения работы

Написать программу, выполняющую следующие действия:

4.1. Ввести две строки текста с подсказками при вводе;

4.2. Определить и вывести на экран длины строк (без конечного нулевого байта);

4.3. Объединить две строки в одну, удалив все пробелы;

4.4. Выполнить обработку строки (см. табл. 3.1). Обработку прекратить, если количество изменений будет больше четырех;

4.5. Вывести результирующую строку на экран.

 

Таблица 3.1

Варианты циклов   Задание п. 4.4
вар п. 4.2 п. 4.3 п. 4.4  
Во всех парах одинаковых символов второй заменить на пробел.
Во всех парах одинаковых символов первый заменить на «+».
Заменить все пары букв «XY» на цифры «12».
Заменить в строке все цифры пробелами.
Заменить на пробел все символы, совпадающие с последним символом в строке.
Заменить все символы с кодами меньше 48 на пробелы.
Заменить все символы с кодами больше 48 на пробелы.
Заменить каждый третий символ на пробел.
Заменить все пары цифр «89» на буквы «AB».
Заменить все пары одинаковых символов на пробелы.
Заменить все четные символы в строке на пробелы.
№ вар Варианты циклов Задание п. 4.4  
п. 4.2 п. 4.3 п. 4.4
Заменить все нечетные символы в строке на пробелы.
Заменить на пробелы все символы, совпадающие с первым символом в строке.
Заменить каждый третий символ в строке первым символом.
Удалить из текстовой строки все четные символы.
Удалить из текстовой строки все нечетные символы.
Удалить из текстовой строки все символы «,».
Удалить из текстовой строки все пары одинаковых символов.
Все символы, совпадающие с последним символом строки заменить цифрой «0».
Все символы, совпадающие с первым символом строки заменить цифрой «1».
           

ПРИМЕЧАНИЕ: в таблице обозначены:

1 - оператор for;

2 - оператор while;

3 - оператор do-while.

5. Содержание отчета

5.1. Задание.

5.2. Листинг программы.

5.3. Тестовый пример (исходная и измененная строки).

 

6. Контрольные вопросы

6.1. Написать цикл while, эквивалентный циклу for.

6.2. Изобразить алгоритм работы цикла do-while.

6.3. В какой из трех конструкций циклов гарантируется хотя бы однократное выполнение тела цикла?

6.4. Какой оператор прерывает выполнение цикла?

6.5. Назначение оператора continue.

6.6. Как записать цикл с бесконечным числом повторений (бесконечный цикл) для каждого из операторов цикла?

6.7. Нарисовать блок-схему цикла while.

6.8. Привести пример вложенного цикла.

6.9. Чему равно значение переменной цикла при его нормальном завершении? Прерывании?

6.10. Можно ли в теле цикла менять переменную цикла?

 

Лабораторная работа № 4

 

УКАЗАТЕЛИ, ФУНКЦИИ

 

1. Цель работы

Освоить правила написания и использования функций в языке СИ. Научиться использовать указатели при обработке массивов данных.

 

2. Краткие теоретические сведения

 

Функции в языке СИ оформляются следующим образом:

 

/* прототип функции */

long func(int, int, int*);

 

/ * описание функции * /







Последнее изменение этой страницы: 2016-04-08; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.231.167.166 (0.031 с.)