- •Мова програмування с Навчальний посібник
- •І. Теоретична частина Структура програми на мові с
- •Базові типи даних
- •Арифметичні операції
- •Функції введення scanf() та виведення printf()
- •Оператори
- •Функції користувача
- •Функції із змінним числом аргументів
- •Функції стандартних бібліотек Функції для роботи із символами (ctype.H)
- •Функції для роботи з каталогами (dir.H)
- •Функції для роботи з ос (dos.H)
- •Функції для роботи з графічним режимом (graphics.H)
- •Математичні функції (math.H)
- •Функції для роботи з рядками (string.H)
- •Функції потокового вводу/виводу (stdio.H)
- •Функції вводу/виводу нижнього рівня (io.H)
- •Функції вводу/виводу консолі та порту (conio.H)
- •Int s[2][3];
- •Int b[2][3][4];
- •Структури
- •Об'єднання
- •Динамічний розподіл пам’яті
- •Void free(void*);
- •Іі. Практична частина Лабораторна робота №1 Тема: Основні конструкції мови с. Програмування простих алгоритмів
- •Лабораторна робота №2 Тема: Створення і використання функцій
- •Лабораторна робота №3 Тема: Використання структур
- •Лабораторна робота №4 Тема: Організація роботи з файлами
- •Рекомендована література
Функції вводу/виводу нижнього рівня (io.H)
Функція |
Опис |
Тип ре-зуль-тату |
access(char * filename, int amode) |
Перевірка атрибутів доступу файлу |
int |
open(const char *path, int access [,unsigned mode ] ); |
Відкриття файлу |
int |
create (char* path, int mode); |
Створення нового файлу |
int |
сlose(int handle); |
Закриття файлу |
int |
dup(int handle); |
Створення нового дескриптора для файлу |
int |
dup2(int oldhandle, int newhandle); |
Заміна дескриптора файлу |
int |
eof(int handle); |
Перевірка на кінець файлу |
int |
error(int handle); |
Перевірка прапорця помилок файлу |
int |
write(int handle, void *buffer, unsigned nbytes); |
Запис даних з буфера у файл |
int |
read(int handle, void* buf, unsigned nbytes); |
Читання даних з файлу в буфер |
int |
lseek(int handle, long offset, int whence); |
Зміна позиції покажчика файлу |
int |
tell(int handle); |
Повертає поточну позицію вказівника файлу |
long |
Приклад. Функція read_file читає nbytes байт з позиції pos із файлу, ім’я якого передається функції як аргумент. Функція зберігає прочитані байти в масиві save і повертає кількість прочитаних байтів.
#include <io.h> /* підключення бібліотеки функцій
вводу/виводу нижнього рівня */
#include <stdio.h> /* Потрібна для функцій lseek() i
printf() */
#include <fсntl.h> /* Потрібна для функції open */
#include <sys\stat.h> /* Потрібна для функції open */
#define ERROR -1
long read_file (char *filename, long nbytes, long pos, char *save)
{
int fh,n;
/* Відкрити файл */
if((fh=open(filename, O_RDONLY | O_BINARY)) == ERROR)
{
fprintf(stderr,”Помилка відкриття файлу”%s”\n”,filename);
return(ERROR);
}
/* встановити позицію для читання */
if (lseek(fh, pos, SEEK_SET)==ERROR)
{
printf(stderr,”Помилка встановлення позиції \n”);
return (ERROR);
}
/* Прочитати nbytes байт із файлу */
n=read(fh,save,nbytes);
if(eof(fh))
fprintf(stdeer,”Досягнуто кінець файлу \”%s\”\n”,filename);
close(fh);
return (n);
}
Функції вводу/виводу консолі та порту (conio.H)
Функція |
Опис |
Тип результату |
cgets(char *str); |
Читання рядка з консолі |
char * |
clreol(void); |
Знищує частину рядка від поточного положення курсору до правої границі вікна |
void |
clrscr(void); |
Очищає екран або вікно |
void |
cprintf (const char *format [ arg, ...]); . |
Виведення рядка в текстове вікно за форматом |
int |
cputs(const char *str); |
Виведення рядка в текстове вікно |
int |
cscanf (char *format [, address, ...]); |
Читання даних з консолі з виконанням форматного перетворення |
int |
delline(void); |
Знищення поточного рядка в текстовому вікні |
void |
getch(void); |
Читання символа з консолі без ехо-друку |
int |
getche(void); |
Читання символа з консолі з ехо-друком |
int |
getpass(const char *prompt); |
Читання 8 символів з консольного терміналу без ехо-друку |
char * |
gettext(int left, int top, int right, int bottom,void*dest); |
Копіює частину тексту з екрана в заданий буфер |
int |
gettextinfo(struct text_info*r); |
Дає інформацію про текстовий режим |
void |
gotoxy(int x, int y); |
Помістити курсор у вказане місце екрана або текстового вікна |
void |
highvideo(void); |
Встановлює високу яскравість символів |
void |
insline(void); |
Вставка порожнього рядка в текстове вікно |
void |
inp(unsigned portid); |
Читає байт з порту |
int |
inport(int portid); |
Читає 2 байти з порту |
int |
inportb(int portid); |
Читає байт з порту |
unsigned char |
inpw(unsigned portid); |
Читає з порту 2 байти |
unsigned |
kbhit(void); |
Перевірити натискання кнопки |
int |
lowvideo(void); |
Встановлює низьку яскравість символів |
void |
movetext(int left, int top, int right, int bottom, int destleft, int desttop); |
Копіює текст з однієї прямокутної частини екрана в іншу |
int |
normvideo(void); |
Встановлює стандартну яскравість символів |
void |
outp(unsigned portid, int value); |
Записати байт в порт |
int |
outport(int portid, int value); |
Записати 2 байти в порт |
void |
outportb(int portid, unsigned char value); |
Записати байт в порт |
void |
outpw(unsigned portid, unsigned value); |
Записати 2 байти в порт |
unsigned |
putch(int ch); |
Вивести символ в текстове вікно |
int |
puttext(int left, int top, int right, int bottom, void*source); |
Вивести текст із вказаного буферу на екран |
int |
_setcursortype(int cur_t); |
Встановити тип курсора |
void |
textattr(int newattr); |
Встановити колір тексту і тла |
void |
textbackground(int newcolor); |
Встановити колір тла тексту, що виводиться |
void |
textcolor(int newcolor); |
Встановити колір тексту, що виводиться |
void |
textmode(int newmode); |
Встановити текстовий режим |
void |
ungetch(int ch); |
Повертає символ, введений з клавіатури |
int |
wherex(void); wherey(void); |
Повертають відповідно поточну Х або Y-координату |
int int |
window(int left, int top, int right, int bottom); |
Встановити координати поточного текстового вікна |
void |
Приклади:
// Текстовий режим (символьна графіка):
#include <conio.h>
int main ()
{
clrscr ();
textmode(C40);
gotoxy (20,13);
cprintf (“Hello”);
return 0;
}
//Кольори в текстовому режимі:
#include <conio.h>
int main ()
{
textcolor (RED);
textbackground (GREEN);
cprintf (“Червоне на зеленому”);
return 0;
}
Масиви
Масив – це група елементів однакового типу (double, float, int і т.д.). З опису масиву компілятор повинен одержати інформацію про тип елементів масиву і їхню кількість.
Оголошення масиву має два формати:
<специфікатор типу> <назва>
[<вираз – константа>];
<специфікатор типу> <назва> [];
де
<назва> – ідентифікатор масиву;
<специфікатор типу>задає тип елементів масиву. Елементами масиву не можуть бути функції та елементи типуvoid.
<вираз – константа>у квадратних дужках задає кількість елементів масиву.<вираз – константа>при описі масиву може бути опущений в наступних випадках:
- при описі масив ініціалізується,
- масив описаний як формальний параметр функції,
- масив описаний як посилання на масив, явно визначений в іншому файлі.
У мові С визначені тільки одномірні масиви, але оскільки елементом масиву може бути масив, можна визначити і багатомірні масиви. Вони формалізуються списком виразів-констант, розміщених за ідентифікатором масиву, причому кожен вираз-константа береться у свої квадратні дужки.
Кожен вираз-константа у квадратних дужках визначає число елементів даного виміру масиву, так що опис двомірного масиву містить два вирази-константи, тривимірного – три і т.д. Відзначимо, що в мові С перший елемент масиву має індекс, що дорівнює 0.
Приклади:
int a[2][3]; /* зображається у вигляді
матриці
a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]
*/
double b[10]; /* вектор з 10 елементів типу
double */
int w[3][3] = { { 2, 3, 4 },
{ 3, 4, 8 },
{ 1, 0, 9 } };
В останньому прикладі ініціалізований масив w[3][3]. Списки, виділені у фігурні дужки, відповідають рядкам масиву. У випадку відсутності дужок ініціалізація буде виконана неправильно.
У мові С, як і в інших мовах високого рівня, можна використовувати перетини масиву. Однак на використання перетинів накладається ряд обмежень. Перетини формуються внаслідок опускання однієї або декількох пар квадратних дужок. Пари квадратних дужок можна відкидати тільки справа наліво і строго послідовно. Перетини масивів використовуються при організації обчислювального процесу у функціях мови С, що розробляються користувачем.
Приклад: