
- •Основы программирования язык “с” Минск – 2005
- •§1 Введение в программирование
- •Void main()
- •Void main()
- •Void main()
- •2 Распечатать свою фамилию следующим образом
- •3. Распечатать прямоугольник следующим образом
- •1.1 Простые программы: печать стоки текста Понятие переменной.
- •Volatile while
- •1.2 Целый тип данных
- •1.3 Числа с плавающей точкой
- •Void main({
- •1.4 Символьный тип
- •Void main()
- •§2 Управляющий структуры
- •2.1 Структура выбора if (если) и if/else(если - иначе)
- •Void main()
- •Void main()
- •2.2 Структуры повторенийfor(цикл)
- •Void main()
- •Void main()
- •2.3 Структура повторения while (пока)
- •Void main()
- •Void main()
- •Void main(){
- •Void main()
- •Void main()
- •2.4 Структура многомерного выбора switch
- •Void main()
- •Void main()
- •2.5 Операторы continue и break
- •Void main()
- •Void main()
- •2.6 Контрольные вопросы:
- •§3 Функция
- •Int printf(“const char * string”,…); %[флаг][ширина][точность][модификатор типа] тип_формата
- •Int scanf(const char * format, ……); возвращаемое значение – число считанных полей
- •3.1 Определение функции:
- •3.2 Классы памяти.
- •3.3 Указатели
- •Void main()
- •Void fff(int,int,int*,int*,int*,double*);
- •Void main()
- •Void fff(int a,int b,int*p1,int*p2,int*p3,double*p4)
- •Генерация случайных чисел.
- •Void main()
- •Void main()
- •Void main()
- •Void main(){
- •Void main()
- •3.6 Переменные перечисляемого типа
- •Int rollDice();
- •Void main()
- •Int sum,myPoint;
- •Int rollDice(){
- •Int die1,die2,workSum;
- •Void main()
- •§4 Массивы
- •4.1 Одномерные массивы
- •Int array[10];
- •4.2 Примеры использования массивов
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •4.3 Сортировки массивов
- •Void main()
- •Void main()
- •Void main()
- •Void main(){
- •Int arr1[maxsize],arr2[maxsize],buf;
- •Void main()
- •4.4 Передача массивов функции
- •4.5 Двумерные массивы
- •Void main()
- •Int I,j,temp;
- •Void main()
- •4.6 Контрольные вопросы:
- •§5 Символьная строка
- •5.1 Объявление символьной строки
- •Void main()
- •Void main()
- •Int srav(char *,char *);
- •Void main()
- •Int srav(char *X,char *y)
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •5.3 Массив строк
- •Void main()
- •Void main()
- •Void main()
- •§6 Динамическое распределение памяти
- •6.1 Функция malloc()
- •Void * malloc(unsigned size)
- •Void free(free *ptr)
- •Void main(){
- •Void main(){
- •Void vvod_mas(int*,int);
- •Void sort_vozr(int*,int);
- •Void main()
- •Vvod_mas(ptr1,n1);
- •Vvod_mas(ptr2,n2);
- •Void sort_vozr(int*X,int n)
- •Void vvod_mas(int*X,int n)
- •6.2 Функция сalloc()
- •Void * сalloc(unsigned num ,unsigned size)
- •6.3 Функция realloc()
- •Void * realloc(void *ptr ,unsigned size)
- •§7 Структура
- •7.1 Объявление структуры
- •Void main()
- •7.2 Объединения
- •§8 Файлы и потоки
- •8.1 Объявления файла
- •Int feof(file *);
- •8.2 Работа с текстовым файлом
- •Int fprintf(file *, const char format, …);
- •Void main()
- •Int account;
- •Int fputs(const char *, file *);
- •Int fscanf( file *, const char *format, …..);
- •Void main()
- •Void main()
- •Int account;
- •Void main()
- •Int fseek(file *,long ,int );
- •Void main()
- •Void main()
- •Void main()
- •Void show_file(file *k1)
- •Void dobav_file(file *k1)
- •Void fill_file(file *k1)
- •Создание файла произвольного доступа.
- •8.3 Работа с бинарным файлом
- •Void main()
- •Void main()
- •Void print_file(file *);
- •Void main(){
- •If(feof(k1)){
- •If(feof(k2)){
- •Void print_file(file *k){
- •8.4 Kонтрольные вопросы
- •Какие операции определены со строками?
7.2 Объединения
Объединение – произвольный тип данных, подобный структуре, элементы которого разделяют одну и ту же область памяти. На различных этапах выполнение программы одни переменные могут оказаться невостребованными, в то время как другие, наоборот, используются только в этой части программы, поэтому объединения экономят пространство вместо того, чтобы впустую тратить память на не использующиеся в данный момент переменные. Элементы объединения могут принадлежать любому типу. Число байтов, используемая для хранения объединения, должно быть, по крайней мере, достаточным для хранения наибольшего из элементов. Ссылаться в данный момент времени можно только на один элемент и, соответственно, только один тип данных. Объединение объявляется с помощью ключевого слова union. Формат объединения тот же, что и в случае структуры.
#include<stdio.h>
union number{
int x;
float y;
};
void main()
{
union number value;
value.x=100;
printf("Put a value in the integer member\nand printf both members.\nint: %d\nfloat: %f",value.x,value.y);
value.y=100.0;
printf("\n\nPut a value in the floating member\nand printf both members.\nint: %d\nfloat: %f",value.x,value.y);
}
Допускается определение неименованного битого поля; такое поле используется как заполнитель структуры и служит для выравнивания следующего битого поля по границе новой ячейки памяти. Например:
struct example
{
unsigned a : 13;
unsigned : 0;
unsigned b : 4;
};
объявление битовое поле без имени длиной 0 бит для того, чтобы перескочить через оставшиеся биты (столько, сколько их будет) ячейки памяти, в которой хранится а, и выровнять b по границе следующей ячейки.
Пример моделирование высокоэффективной тасовки и раздачи карт с разъясняющий тип объединения:
#include<stdio.h>
struct bitCard{
unsigned face : 4;
unsigned suit : 2;
unsigned color : 1;
};
typedef struct bitCard Card;
void fillDeck(Card *);
void deal(Card *);
void main(){
Card deck[52];
fillDeck(deck);
deal(deck);
}
void fillDeck(Card *wDeck){
int i;
for(i=0;i<52;i++)
{
wDeck[i].face = i%13;
wDeck[i].suit = i/13;
wDeck[i].color= i/26;
}
}
void deal(Card *wDeck){
int k1,k2;
for(k1=0,k2=k1+26;k1<26;k1++,k2++)
{
printf("Card:%3d Suit:%2d Color:%2d ",wDeck[k1].face,wDeck[k1].suit, wDeck[k1].color);
printf("Card:%3d Suit:%2d Color:%2d\n",wDeck[k2].face,wDeck[k2].suit, wDeck[k2].color);
}
}
§8 Файлы и потоки
8.1 Объявления файла
В языке С любой файл рассматривается как последовательный поток байтов. Каждый файл оканчивается или маркером конца файла, или особым байтом, определенным в работающей файлами программе. В начале исполнения программы автоматически открываются три файла и связанные с ними потоки – стандартный ввод (указатель файла stdin), стандартный вывод (указатель файла stdout), и стандартный ошибка(указатель файла stderr).
Если хотим вывести строку на экран результатов, то можно написать следующим образом:
fputs(const char*, stdout); - это тоже, что написать puts(const char*);
Если хотим с клавиатуры ввести строку, то можно написать следующим образом:
fgets(char *, int, stdin); - это тоже, что написать gets(const char*);
fprintf(stdout, const char*,…); - это тоже, что printf(const char*,…);
fscan(stdin, const char*,…); - это тоже, что scan(const char*,…);
Файл – это именованный объект, хранящий данные, на каком либо носителе (дискета, винчестер, CD). В переменных и массивах данные хранятся временно. Файлы предназначены для постоянного хранения больших объемов данных Файлы, в отличии от массивов, могут располагаться не только в оперативной памяти (электронном диске), но и на жестких или на внешних носителях. Файлы не имеют фиксированной длины, т.е. могут увеличиваться или уменьшаться. Перед работой с файлом его необходимо открыть, а после работы закрыть.
Файловая система – это совокупность программных средств для доступа к файлам, т.е. имя файла. В файловой системе MS-DOS имена файлов состоят из двух частей, разделенные точкой: имя файла и расширение. Поле имени файла может содержать не более восьми символов, а поле расширения не более трех символов.
Различаются два вида файлов: текстовые и бинарные. Текстовый файл может быть просмотрен и отредактирован с клавиатуры любым текстовым редактором и имеет простую структуру, которая состоит из последовательности символов. Эта последовательность символов можно разбить на строки, каждая строка заканчивается двумя кодами: 10 (0хD) и 13 (0xA). Бинарный файл – это файл, который не имеет структуру текстового файла. Каждая программа для своего бинарного файла определяет свою структуру. Существуют функции для работы как с текстовыми, так и с бинарными файлами.
Для работы с файлами необходимо включить библиотеку <stdio.h>, где находятся прототипы функций работы с файлами. Для открытия файла используют функцию fopen().
FILE * fopen(char *filename, char * mode);
Возвращаемое значение (FILE *) – это указатель на структуру типа FILE, который называется указатель на файл. Возвращаемое значение нужно хранить: во-первых, для проверки открытия файла, т.е. если возвращаемое значение равно NULL, то произошла ошибка при открытии и следовательно нужно остановить работу программы; во-вторых для работы с файлом в программе.
char *filename задает путь, т.е. местонахождение файла и имя открываемого файла.
char *mode – это тип доступа к файлу, который может принимать следующие значения:
-
“rt”
Открыть текстовый файл для чтения
“wt”
Открыть текстовый файл для записи, если файл существует, то его содержание теряется
“at”
Открыть текстовый файл для записи в конец файла, если файл существует. Если файл не существует, то он создается
“rt+”
Открыть текстовый файл для записи и чтения. Файл должен существовать.
“wt+”
Открыть текстовый файл для записи и чтения. Если файл существует, то его содержание теряется
“at+”
Открыть текстовый файл для записи в конец файла и для чтения, если файл существует. Если файл не существует, то он создается
“rb”
Открыть бинарного файл для чтения
“wb”
Открыть бинарного файл для записи, если файл существует, то его содержание теряется
“ab”
Открыть бинарного файл для записи в конец файла, если файл существует. Если файл не существует, то он создается
“rb+”
Открыть бинарного файл для записи и чтения. Файл должен существовать.
“wb+”
Открыть бинарного файл для записи и чтения. Если файл существует, то его содержание теряется
“ab+”
Открыть бинарного файл для записи в конец файла, если файл существует. Если файл не существует, то он создается
Т.е. “t” для текстового режима, а “b” для бинарного. Если режим не указан, то автоматически берется текстовый.
После работы с файлом его необходимо обязательно закрыть с помощью функции fclose(FILE *), параметром функции является указатель на файл, который был получен при открытии файла.
Например:
FILE *k;
k=fopen(“aaa.bbb”,”w”);
if(!k)
{
printf(“Открытие файла невозможно!!!!\n”);
return;
}
………..
………..
fclose(k);