- •Кафедра автоматики и электроники в машиностроении
- •Введение
- •Лабораторная работа № 1
- •Контрольные вопросы
- •Методические указания к работе
- •Основные назначения командного интерпретатора в ос unix
- •Синтаксис языка Bourne Shell
- •Общий синтаксис скрипта
- •Переменные
- •Встроенные переменные
- •Перенаправление ввода-вывода
- •Логические операции в контексте test
- •Условный оператор "if"
- •Оператор выбора case
- •Оператор цикла с перечислением for
- •Оператор цикла с истинным условием while
- •Задание 4.
- •5. Команда cat.
- •Задание 5.
- •6. Простейшие команды работы с файлами: cp, rm, mkdir, mv
- •Задание 6.
- •Задание 7.
- •Системные вызовы getuid и getpid
- •Задание 8.
- •Контрольные вопросы
- •Лабораторная работа № 3.
- •Методические указания к работе Иерархия процессов
- •Прототипы системных вызовов
- •Создание процесса в unix
- •Прототип системного вызова
- •Завершение процесса. Функция exit() Прототип функции
- •Описание функции
- •Параметры функции main() в языке с Переменные среды и аргументы командной строки
- •Задание 3.
- •Прототипы функции
- •Описание функций
- •Системный вызов wait():
- •Задание 4.
- •Варианты:
- •Контрольные вопросы
- •Лабораторная работа № 4
- •Методические указания Понятие о потоке ввода-вывода
- •Понятие о работе с файлами через системные вызовы и стандартную библиотеку ввода-вывода для языка с
- •Файловый дескриптор
- •Открытие файла
- •Системный вызов open Прототип системного вызова
- •Описание системного вызова
- •Возвращаемое значение
- •Системные вызовы read(), write().
- •Прототипы системных вызовов:
- •Описание системных вызовов
- •Возвращаемые значения
- •Особенности поведения при работе с файлами
- •Описание системного вызова
- •Возвращаемые значения
- •Пример программы для записи информации в файл
- •Понятие неименованного канала. Системный вызов pipe()
- •Важное отличие pip'a от файла заключается в том, что прочитанная информация немедленно удаляется из него и не может быть прочитана повторно.
- •Описание системного вызова
- •Возвращаемые значения
- •Организация связи через pipe между процессом-родителем и процессом-потомком.Наследование файловых дескрипторов при вызовах fork() и ехес().
- •Пример программы для организации однонаправленной связи между родственными процессами через pipe
- •Манипуляция таблицей дескрипторов
- •Описание системного вызова
- •Возвращаемые значения
- •Описание функции
- •Возвращаемые значения
- •Особенности поведения вызова ореn() при открытии fifo
- •Пример программы с fifo в родственных процессах
- •Контрольные вопросы
- •Филоненко Ирина Николаевна
Лабораторная работа № 1
Введение в язык С
Цель работы
Освоить на практике организацию программ на языке С, применение основных функций ввода/вывода, управляющих структур, структур данных типа массив, а так же отладку и выполнение программ в ОС UNIX (Free BSD).
Домашнее задание
Изучить структуру программ на С.
изучить синтаксис объявления величин в программе на С.
Освоить синтаксис и выполнение управляющих структур языка С: присвоение, разветвление, цикл.
изучить организацию ввода/вывода с помощью библиотечных функций С (Scanf, printf, getchar, putchar).
изучить команды компиляции программы на С в ОС UNIX (gcc) и запуск исполняемого файла (a.out) .
Выполнение работы
Загрузить версию ОС UNIX – PC BSD 4.0.
Открыть терминальное окно для организации режима командной строки.
Организовать собственную папку в домашней директории /Home/Student.
Войти в редактор Kwrite и файл Noname сохранить в своей папке под собственным именем с расширением .с.
Набрать текст простой программы на С для вывода на экран сообщения:
«Hello, world»:
# include <stdio.h>
Main()
{
Printf(“Hello, world”);
}
и сохранить текст в файле с расширением .с .
Откомпилируйте программу с помощью команды:
>gcc firle1.c
Если компиляция прошла без ошибок, должен быть сформирован файл исполняемый a.out.
Примените ключ (-о) для получения откомпилированного файла с собственным именем file1.out.
Запустите file1.out на выполнение и проверьте полученный на экране вывод.
Измените программу так, чтобы каждое из слов фразы «Hello, world» выводилось с новой строки (ключ (\n)).
Наберите в файле file2.c программу для вывода таблицы температур по Фаренгейту и их соответствие по шкале Цельсия (формула 0С=(5/9)(0F-32));
#include <stdio.h>
main()
{
Int far,cels, lo, up, step;
lo=0;
up=300;
step=20;
far=lo;
while (far<=up){
cels=5*(far-32)/9;
printf(“%d\t %d\n”, far, cels);
far=far+step;}
}
Измените выражение для вычисления след.обр.:cels=5/9*(far-32);
Объясните полученный результат. Измените программу так, чтобы выводились результаты как вещественные числа с фиксированной точкой, и организуйте вывод заголовка над таблицей.
Измените программу следующим образом:
а) чтобы вывод таблицы был прежним, но вместо оператора цикла while
используйте оператор:
for (<пар.ц.>=<нач. знач.>; <пар. ц.> <=<кон. знач.>;
<пар.ц.> = <пар.ц.> + <шаг>) {операторы тела цикла};
убедитесь в идентичности выводимой таблицы прежнему варианту;
б) вместо задания значений параметрам с помощью присваиваний
используйте функцию scanf, которая считывает данные из потока ввода.
Например, для ввода даты:
Int day,year;
char month[20];
scanf(“%d %s %d”,&day, month,& year);
Внимание: аргументы функции scanf должны быть указателями.
Наберите в редакторе kwrite программу для подсчета символов во входном потоке, который заканчивается специальной константой EOF (это целое число):
#include <stdio.h>
main()
{
Int nc;
Nc=0;
While (getchar() != EOF)
++nc;
Printf(“%d\n”,nc);
}
Напишите и отладьте программу на С для подсчета числа строк во входном потоке (каждая строка заканчивается символом (\n)).
Составьте программу на языке С в соответствии с вариантом задания табл. 1, отладьте ее и включите в отчет по лаб. раб.
Таблица 1
№ вар. |
Текст задания |
1 |
Написать программу для подсчета количества каждой из цифр (от 0 до 9) во входном потоке. Результаты сохранить в статическом массиве Ndigit[10] Замечание: значение символа – цифры равно значению ее кода минус код ноля |
2 |
Ввести массив целых чисел из 10 элементов. Найти среднее арифметическое элементов массива и выяснить есть ли такое значение среди элементов массива |
3 |
Дан массив N вещественных чисел. Найти max элемент и его номер. |
4 |
Написать программу для подсчета количества чисел во входном потоке. Числа сохранить в массиве. |
5 |
Дан массив N целых чисел. Отсортировать его в порядке возрастания методом «пузырька» (прямой обмен) |
6 |
Дан массив N целых чисел, отсортированных в порядке возрастания. Методом бинарного поиска найти в массиве номер заданного целого х или вывести сообщение о его отсутствии. |
7 |
Ввести массив N вещественных чисел. Определить сколько раз в массиве происходит смена знака. |