Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Текстовые и двоичные потоки




Так сложилось, что файлы делятся на текстовые и нетекстовые (последние иногда называют двоичными, или бинарными Текстовые файлы отличаются от двоичных двумя особенностями: во-первых, они делятся на строки, каждая из которых заканчивается "переводом строки", состоящим из двух символов с кодами 0x0D 0x0A; во-вторых, текстовые файлы заканчиваются "признаком конца файла"? символом с кодом 0х1А (точнее, должны заканчиваться, это условие соблюдается не всегда).

При чтении текстового файла (потока) функции Си преобразуют "признак конца строки", т.е. последовательность символов 0x0D 0x0A, в один символ 0x0A (' \п'), а "признак конца файла (потока)"? в значение EOF (End Of File). Константа EOF определена в заголовочном файле stdio.h и обычно равна?1.

При чтении двоичных потоков никаких преобразований не производится.

файловая переменная описывается как указатель на тип FILE (на самом деле это структура, описанная в stdio.h). Связывание файловой переменной с дисковым файлом и открытие файла выполняется функцией fopen. Первым параметром этой функции является имя файла, а вторым строка формата, в которой могут использоваться следующие символы:

г - открыть для чтения;

w - открыть для записи;

а - открыть для дозаписи;

t - текстовый поток;

b - двоичный (бинарный) поток.

Если тип потока явно не указан, то поток считается текстовым. После r, w и a можно добавить " + ", в этом случае файл открывается для произвольного доступа (чтения и записи).

Пример работы с текстовым фйлом


# include <stdio.h>

main()

{

int i;

char s[10];

FILE *f;

f=fopen("1.txt", "rt");

for (i=0;i<3;i++){ fscanf(f,"%s",s);

printf("%s\n",s);}

 

}


# include <stdio.h>

main()

{

int i;

char s[10];

FILE *f;

f=fopen("1.txt", "wt");

for (i=0;i<3;i++){

gets(s);

fprintf(f,"%s\n",s);}

fclose(f);}


 

задание

1. Записать в текстовый файл fam 5 фамилий. В текстовый файл ocenka записать 5 оценок

Вывести оценки и фамилии в виде таблицы.

2. Записать в текстовый файл temp величину среднемесячных температур воздуха.

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

3. Записать в текстовый файл old 10 оценок по 12 балльной шкале. Пересчитать эти оценки по пятибалльной шкале и записать полученные результаты в файл new

4. Записать в текстовый файл full данные: фамилия, имя, отчество (5 записей). Пепеписать в новыц файл fio только начальные буквы: например: Иванов Петр Семенович: ИПС

5. Ввести произвольную строку < 30 символов.Записать в текстовый файл vibor все гласные буквы, встречающиеся в этой строке.

6. Cлучайным образом выбрать 10 чисел от 0 до 100. Запистаь эти числа в файл random1

Вычислить среднее арифметическое этих чисел

7. Заполнить таблицу чисел 3x3. Подсчитать сумму элементов главной диагонали этой таблицы и записать результат в файл glav

8. Из файла glav взять число и вывести его в центре экрана

9. В файл fams записать фамилии, в файл adress –адреса, а в файл telefon телефоны 5 человек.

Вывести в виде таблицы телефонный справочник

10. Записать в файл rand2 10 случайных чисел. Прочитать их из файла rand2 и записать в rand3 квадраты этих чисел.

 


Ввод-вывод в поток

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

Операции ввода- вывода выполняются, начиная с текущей позиции потока, определяемой положением указателя потока. Указатель устанавливается при открытии на начало или конец файла (в соответствии с режимом открытия) и изменяется автоматически при выполнении каждой операции ввода-вывода. Текущее положения указателя можно получить с помощью функций ftell и fgetpos и задать явным образом с помощью функций ftell и fgetpos. Эти функции нельзя использовать для стандартных потоков.

Основные функции ввода-вывода потока:

- чтение и запись потока байтов fread,fwrite

- чтение символа из потока getc,fgets, из стандартного потока stdin –getchar

- запись символов в поток – puts,fputs, в стандартный поток stdout- putchar

- чтение строки из потока – fgetsБ из стандартного потока stdin – gets

- запись строки в поток – fputs, в стандартный поток stdout – puts

- форматированный ввод из потока – fscanf, из стандартного потока stdin –scanf, из строки sscanf

- форматированный вывод в поток – fprintf, в стандартный поток stdout –printf, в строку sprintf

 

Закрытие потока

Потом закрывается либо при завершении программы либо явным образом с помощью фунции fclose

 

Обработка ошибок

Функции работы с потоком возвращают значения, которые рекомендуется анализировать в программе и обрабатывать ошибочные ситуации, возникающие. Например, при открытии файлов или чтении из потока.. при работе с файлами используют функции

Int feof(FILE*) – возвращает не равное 0 значение, если достигнут конец файла, в противном случае 0

Int ferror(FILE*) – возвращает не равное 0 значение, если обнаружена ошибка вводы- вывода, в противном случае 0.

 

 


Функции

Функция- это именованная последовательность описаний и операторов, выполняющая какое-либо законченное действие.

Функция может принимать параметры и возвращать значение.

Любая программа на С состоит из функций, одна из которых должна иметь имя main (с не начинается выполнение программы). Функция начинает выполняться в момент вызова и должна быть объявлена и определена. Объявлений должна быть несколько, а определение только одно.

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

Объявление функции (прототип, заголовок) задает ее имя, тип возвращаемого значения и список передаваемых параметров.

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

[класс] тип имя ([список параметров]) [(throw (исключения)]

{тело функции}

- класс- необязательный модификатор класса. С помощью которого можно задать область видимости функции, используя ключевое слово extern (глобальная видимость во всех модулях программы) или static(видимость в прелелах определенной функции)

- Тип возвращаемого значения может быть любым, кроме массива и функции (но может быть указателем на массив или функцию). Если функция не должна возвращать значения, указывается тип Void

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

- Существует список исключений функции

 

В определении, объявлении и вызове функции типы и порядок следования параметров должны совпадать.

Тип возвращаемого значения и типы параметров совместно определяют тип функции

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

Примеры:


for (i=1;i<=a);i++) f= Вычисление суммы#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

int sum (int a,int b);ё

main()

{

int x,y,s;

scanf("%d %d",&x,&y);

s=sum(x,y);

printf("%d",s);

}

int sum(int a,int b)

{

return(a+b);

}

 

Вычисление факториала

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

int fact(int a);

main()

{

long x,y,s;

scanf("%d",&x);

s=fact(x);

printf("%ld",s);

}

int fact(int a)

{long f=1; int i;

f*i;

return(f);

}


 


Поразрядные операции (bitwize)

Для разработки операционных систем или программного обеспечения для тестирования или работы в сети, необходимо непосредственное взаимодействие с аппаратными средствами компьютеров. Все данные реализуются во внутреннем машинном представлении как последовательности битов. (0 или 1). Поразрядные операции используются обычно для манипуляций с битами целочисленных операндов (char, Short, Int, long), но обычно применяются к целым без знака (unsigned) Поразрядные операции являются машинно-зависимыми.

Поразрядные операции:

Поразрядное И (&-), поразрядное ИЛИ (|), поразрядное исключающее или (^), сдвиг влево (<<), сдвиг вправо (>>), поразрядное НЕ (~).

Операции поразрядное И Или и исключающее ИЛИ выполняют поразрядное сранвение двух своих операндов. В результате проведения операции

Поразрядное И- бит станавливается в 1, если соответствующий бит в обоих операндах равен 1

Поразрядное ИЛИ- бит устанавливается в 1, если хотя бы в одном из операндов он равен 1

Поразрядное Исключающее ИЛИ- бит уст. В 1, если соответствующий бит равен 1 в одном и только одном операнде.

 

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

Операция поразрядное НЕ устанавливает в своем операнде все биты со значениями 0 в 1, а 1 в 0.


#include <stdio.h>

#include <stdlib.h>

main()

{int n,m, dn;

char s1[20],s2[20], s3[20];

//scanf("%d%d", &n,&m);

for (dn=1;dn<15;dn++)

{for(m=1;m<15;m++)

{itoa(dn,s2,2);

itoa(m,s3,2);

n=dn;

n^=m;

itoa(n,s1,2);

printf("n=%d: %s m=%d:%s рез=%s\n", dn,s2,m,s3,s1);

}}

}


#include <stdio.h>

#include <stdlib.h>

main()

{int n,m, dn;

FILE *f;

char s1[20],s2[20], s3[20];

//scanf("%d%d", &n,&m);

f=fopen("vasya4", "wt");

fprintf(f,"сдвиг влево\n");

for (dn=1;dn<15;dn++)

{for(m=1;m<15;m++)

{itoa(dn,s2,2);

itoa(m,s3,2);

n=dn;

n<<m;

itoa(n,s1,2);

fprintf(f,"n=%d: %s m=%d:%s рез=%s\n", dn,s2,m,s3,s1);

}}

}


#include <stdio.h>

#include <stdlib.h>

main()

{int n,i;

char s1[20];

scanf("%d", &n);

i=1;

while (i<=256)

{n^=i;

itoa(n,s1,2);

printf("%d %s\n", i,s1);

i<<=1;

}

}

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных