ТОП 10:

Методические указания к лабораторным работам



НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

№____

ПРОГРАММИРОВАНИЕ

Часть 1. Язык СИ

Методические указания к лабораторным работам

для студентов I курса АВТФ

(направления 220200 и 230100)

Дневной формы обучения

НОВОСИБИРСК

Составители: Г.П.Голодных, канд. техн. наук, доцент

А.В. Гунько, канд. техн. наук, доцент

Г.В. Саблина, канд. техн. наук, доцент

Рецензент: Л.В. Тюнина, к.т.н., доцент каф. Автоматики

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

© Новосибирский государственный технический университет, 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*);

 

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

Тело функции

*с=3; // возврат результата по ссылке

Main()

{

. . .

r = func (i, j, &k); // вызов

}

 

Указатель в СИ – переменная, содержащая адрес другой переменной. Указатели должны быть описаны в виде:

int *ip; // указатель на int

float *fp; // указатель на float

При работе с указателями используются унарные операции

* - обращение по адресу;

& - получение адреса;

 

Таким образом, можно записать

 

int x, *ip; // описания переменных

ip=&x; // присвоение адреса

*ip=3; // обращение по адресу

 

Если указателю присвоен адрес элемента массива, его можно использовать так же, как и имя массива. Следующие обращения к третьему элементу массива s полностью эквивалентны:

 

int s[10], *p;

p=s;

s[3]=0; // вариант 1

p[3]=0; // вариант 2

*(p+3)=0; // вариант 3

Операции инкремента (++) и декремента (--) изменяют указатель так, что он будет указывать на соседний элемент данных такого же типа. Например, если fp – указатель на float, операция fp++ увеличит fp на 4, т. е. на количество байт, занимаемых элементом типа float.

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

В ходе выполнения лабораторной работы потребуется выполнить сортировку массива строк. Для ускорения этой операции обычно используется дополнительный массив указателей. В этом случае вместо перестановки двух строк с помощью функции strcpy() используется перестановка указателей обычным присваиванием.

Формирование массива указателей можно совместить с вводом строк.

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

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

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

 

Таблица 4.1

Прототип функции для ввода строк
length = inp_str(char* string, int maxlen); // length - длина строки // string - введенная строка // maxlen - максимально возможная длина строки (размерность массива string)
Прототип функции для вывода строк
void out_str(char* string, int length, int number); // string - выводимая строка // length - длина строки // number - номер строки

 

Таблица 4.2

Вари ант Задание Входные параметры Выходные Параметры
Расположить строки по возрастанию длины 1. Массив 2. Размерность массива 1. Количество перестановок 2. Длина меньшей строки
Расположить строки по убыванию длины 1. Массив 2. Размерность массива 1. Количество перестановок 2. Длина большей строки
Расположить строки в алфавитном порядке 1. Массив 2. Размерность массива 1. Количество перестановок 2. Первая буква первой строки
Расположить строки в обратном алфавитном порядке 1. Массив 2. Размерность массива 1. Количество перестановок 2. Длина первой строки
Расположить строки по возрастанию количества слов 1. Массив 2. Размерность массива 1. Количество перестановок 2. Первый символ последней строки
Расположить строки по убыванию количества слов 1. Массив 2. Размерность массива 1. Количество перестановок 2. Максимальное количество слов
Расположить строки по возрастанию количества цифр 1. Массив 2. Размерность массива. 1. Количество цифр 2. Вторая цифра строки
Расположить строки по убыванию количества цифр 1. Массив 2. Размерность массива 1. Количество перестановок 2. Количество цифр
Расположить строки по возрастанию длины первого слова 1. Массив 2. Размерность массива. 1. Максимальная длина слова 2. Количество перестановок
Расположить строки по убыванию длины первого слова 1. Массив 2. Размерность массива. 1. Минимальная длина слова 2. Количество слов в первой строке
Расположить строки в алфавитном порядке по последней букве строки 1. Массив 2. Размерность массива 1. Количество перестановок 2. Последняя буква первой строки
Расположить строки в обратном алфавитном порядке по последней букве строки 1. Массив 2. Размерность массива 1. Количество перестановок 2. Последняя буква последней строки
Расположить строки по возрастанию количества пробелов в строке 1. Массив 2. Размерность массива 1. Количество перестановок 2. Максимальное количество пробелов в строке
Расположить строки по убыванию количества пробелов в строке 1. Массив 2. Размерность массива 1. Количество перестановок 2. Максимальное количество пробелов подряд в строке
Расположить строки по возрастанию длины последнего слова 1. Массив 2. Размерность массива 1. Количество перестановок 2. Максимальная длина последнего слова
Расположить строки по убыванию длины последнего слова 1. Массив 2. Размерность массива 1. Количество перестановок 2. Минимальная длина последнего слова
Расположить строки по возрастанию длины самого длинного слова 1. Массив 2. Размерность массива 1. Количество перестановок 2. Максимальная длина самого длинного слова
Расположить строки по убыванию длины самого длинного слова 1. Массив 2. Размерность массива 1. Количество перестановок 2. Минимальная длина самого длинного слова
Расположить строки по возрастанию длины самого короткого слова 1. Массив 2. Размерность массива 1. Количество перестановок 2. Максимальная длина самого короткого слова
Расположить строки по убыванию длины самого короткого слова 1. Массив 2. Размерность массива 1. Количество перестановок 2. Минимальная длина самого короткого слова

 

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

5.1. Задание.

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

5.3. Тестовый пример.

 

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

6.1. Правила описания указателей.

6.2. Как связаны указатели и массивы?

6.3. Назначение прототипа функции.

6.4. Структура описания функции.

6.5. Какие операции допустимы с адресами?

6.6. Массивы указателей – описание и использование.

6.7. Привести пример описания двумерного массива.

6.8. Привести пример доступа к элементу двумерного массива через указатель на него.

 

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

 

СТРУКТУРЫ В ЯЗЫКЕ СИ

 

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

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

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

Структура в языке СИ объединяет логически связанные данные разных типов. Состав структуры определяется описанием шаблона:

Struct ELEM // имя шаблона

{

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

 

ИНТЕРФЕЙС С ОПЕРАЦИОННОЙ СИСТЕМОЙ.

ФАЙЛОВЫЕ ОПЕРАЦИИ

 

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

Ознакомиться со стандартными функциями языка СИ, используемыми для организации доступа к файлам.

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

Для каждого из одновременно открытых файлов в программе на языке СИ должны быть описаны указатели на структуру FILE, содержащую информацию о соответствующем файле. Эта структура заполняется операционной системой при открытии файла и используется затем при вызо­ве функций, выполняющих операции чтения - записи.

Типовая последовательность действий при файловых опера­циях может быть следующей:

FILE *fp;

. . .

fp=fopen(……); // открыли файл

. . .

fprintf(fp,……); // запись в файл

fputs(fp,……); // аналогично

. . .

Fclose(fp); // закрыли файл

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

Примеры использования стандартных функций, оперирующих с файлами, приведены ниже.

FILE *fp; int x; char buf[30], b;

fp=fopen(«ABC.TXT», «rt»); //открыли файл для чтения

// fp=NULL – ошибка

fscanf(fp, «%d», &x); //считали значение переменной х

n=fgets(buf, 30, fp); // считали строку из файла

// n=0 – конец файла

b=getc(fp); // считали символ

//b=EOF – конец файла

fprintf(fp, «x=%d», x); // записали значение переменной

Fclose(fp); // закрыли файл

При написании программ на языке СИ часто используют передачу параметров в программу непосредственно при ее запуске, например:

Name input.txt output.txt

где name - имя исполняемого файла задачи (name.exe). При этом функция main() должна быть оформлена в виде:

main(int argc,char* argv[])

{

При запуске программы с командной строкой параметр argc получает значение, равное количеству параметров в строке (включая имя задачи), а элементы масси­ва argv – адреса строк - параметров. Например, для вышеприведенного примера

argс = 3;

argv[0] = "name";

argv[1] = "input.txt";

argv[2] = "output.txt";

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

В лабораторной работе требуется написать две программы для обработки текстовых файлов. Одна из них выполняет построчную, другая посимвольную обработку. Ввод параметров должен быть организован в командной строке запуска программы.

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

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

4.1. Написать программу, обрабатывающую текстовый файл и записывающую обработанные данные в файл с таким же именем, но с другим типом (табл. 6.1)







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

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