ТОР 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; } }
Не нашли, что искали? Воспользуйтесь поиском:
|