Другие функции форматного ввода и вывода

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

Ниже перечислены другие функции форматного вывода с указанием заголовочного файла и выходного потока.

cprintf CONIO.H Консоль
fprintf STDIO.H Поток
printf STDIO.H stdout
sprintf STDIO.H Строка

То же для форматного ввода.

cscanf CONIO.H Консоль
fscanf STDIO.H Поток
scanf STDIO.H stdin
sscanf STDIO.H Строка

Примеры

Пример.Вводить строки с клавиатуры и сохранять их в текстовом файле.

?

char buf[100];

FILE *F;

F = fopen(111.txt, w);

for (;;) {

gets(buf);

if (strlen(buf)40)

break;

fputs(buf, F);

fputs(\n, F);

}

fclose(F);

Замечания. Функция gets вводит строки из стандартного входного потока stdin. При вводе с клавиатуры символ ‘\n’ не попадает в строку. Если вводить при помощи функции

fgets(buf, 100, F), то специального вывода fputs(\n, F) не понадобится.

Пример.Имеется текстовый файл. Напечать его самую длинную строку.

?

char buf[100], maxbuf[100];

FILE *F;

maxbuf[0] = 0;

F = fopen(111.txt, r);

while (!feof(F)) {

fgets(buf, 100, F);

if (strlen(buf)strlen(maxbuf) )

strcpy(maxbuf, buf);

}

fclose(F);

fputs(maxbuf, stdout);

Замечания.Вывод строки в поток stdout можно выполнить функцией

puts(maxbuf);

Пример.Вводить целые числа с клавиатуры и сохранять их в двоичном файле.

?

int buf;

FILE *F;

F = fopen(111.dat, w);

for (;;) {

scanf(%d, buf);

if (!buf)

break;

fwrite(buf, sizeof(int), 1, F);

}

fclose(F);

Замечания.Для ввода целых чисел из входного потока необходимо использовать только форматный ввод (scanf или fscanf.).

Полученный файл не является текстовым и может быть правильно прочитан только функцией fread.

Порядок виконання роботи

3.4 Контрольні запитання та завдання

1. На какие группы можно разделить библиотечные функции ввода-вывода?

2. Что такое поток?

3. Можно ли открыть поток, не открывая файла?

4. Как открыть поток в двоичном режиме?

5. Что возвращает функция fopen?

6. Какая функция выводит символ в стандартный выводной поток?

7. Какие функции читают и записывают строку в поток?

8. Как установить указатель на конец потока, открытого для чтения?

9. Как проверить, достиг ли указатель потока конца файла?

10. Как проверить, нет ли ошибки при работе с потоком?

11. Можно ли сбросить индикатор ошибки, не закрывая потока?

12. Какая функция выполняет форматированный вывод в поток?

13. Чем отличается функция printf от функции fprintf?

14. Что такое поле ввода для функции fscanf?

15. Как устроена строка формата функции fscanf?

Завдання

Выполнить варианты заданий лабораторной работы при условии что исходные данные хранятся в текстовом файле и первые числа соответствуют указывают размер массива. Необходимо считать исходные данные вывести их на экран и в файл.

Исходные данные необходимо записать также в бинарный файл. Результаты обработки исходных данных необходимо сохранить в текстовый, бинарный файл, а также вывести на экран в удобном для пользователя виде.

3.6 Варіанти завдань

Вариант 1

Дана целочисленная прямоугольная матрица. Определить:

1) количество строк, не содержащих ни одного нулевого элемента;

2) максимальное из чисел, встречающихся в заданной матрице более одного раза.

Вариант 2

Дана целочисленная прямоугольная матрица. Определить количество столбцов, не содержащих ни одного нулевого элемента.

Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик.

Вариант 3

Дана целочисленная прямоугольная матрица. Определить:

1) количество столбцов, содержащих хотя бы один нулевой элемент;

2) номер строки, в которой находится самая длинная серия одинаковых элементов.

Вариант 4

Дана целочисленная квадратная матрица. Определить:

1) произведение элементов в тех строках, которые не содержат отрицательных элементов;

2) максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы.

Вариант 5

Дана целочисленная квадратная матрица. Определить:

1) сумму элементов в тех столбцах, которые не содержат отрицательных элементов;

2) минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы.

Вариант 6

Дана целочисленная прямоугольная матрица. Определить:

1) сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент;

2) номера строк и столбцов всех седловых точек матрицы.

Вариант 7

Для заданной матрицы размером 8 на 8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом.

Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.

Вариант 8

Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик.

Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент.

Вариант 9

Соседями элемента — в матрице назовем элементы с i-1 к i+1, j-1 j+1, (к, ) (i, j). Операция сглаживания матрицы дает новую матрицу того же размера, каждый элемент которой получается как среднее арифметическое имеющихся соседей соответствующего элемента исходной матрицы. Построить результат сглаживания заданной вещественной матрицы размером 10 на 10. В сглаженной матрице найти сумму модулей элементов, расположенных ниже главной диагонали.

Вариант 10

Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов заданной матрицы размером 10 на 10.

Найти сумму модулей элементов, расположенных выше главной диагонали.

Вариант 11

Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых преобразований привести систему к треугольному виду.

Найти количество строк, среднее арифметическое элементов которых меньше заданной величины.

Вариант 12

Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями. Найти номер первой из строк, содержащих хотя бы один положительный элемент.

Вариант 13

Осуществить циклический сдвиг элементов прямоугольной матрицы на п элементов вправо или вниз (в зависимости от введенного режима), п может быть больше количества элементов в строке или столбце.

Вариант 14

Осуществить циклический сдвиг элементов квадратной матрицы размерности MxN вправо на k элементов таким образом: элементы 1-й строки сдвигаются в последний столбец сверху вниз, из него — в последнюю строку справа налево, из нее — в первый столбец снизу вверх, из него — в первую строку; для остальных элементов — аналогично.

Вариант 15

Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент.

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

Вариант 16

Упорядочить строки целочисленной прямоугольной матрицы по возрастанию количества одинаковых элементов в каждой строке.

Найти номер первого из столбцов, не содержащих ни одного отрицательного элемента.

Вариант 17

Путем перестановки элементов квадратной вещественной матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине — в позиции (2,2), следующий по величине — в позиции (3,3) и т. д., заполнив таким образом всю главную диагональ.

Найти номер первой из строк, не содержащих ни одного положительного элемента.

Вариант 18

Дана целочисленная прямоугольная матрица. Определить:

1) количество строк, содержащих хотя бы один нулевой элемент;

2) номер столбца, в которой находится самая длинная серия одинаковых элементов.

Вариант 19

Дана целочисленная квадратная матрица. Определить:

1) сумму элементов в тех строках, которые не содержат отрицательных элементов;

2) минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы.

Вариант 20

Дана целочисленная прямоугольная матрица. Определить:

1) количество отрицательных элементов в тех строках, которые содержат хотя бы один нулевой элемент;

2) номера строк и столбцов всех седловых точек матрицы.

Контрольний приклад

/*

Исходные данные для двумерного массива хранятся в текстовом файле, причем

первые числа соответствуют количеству строк и столбцов. Необходимо считать

информацию сохранить ее в тесктовый файл f2.txt и бинарный файл f3.txt,

а также вывести на экран в форматированном виде.

Считать данные из бинарного файла и поместить их в новый массив

подсчитать количество отрацательных элементов в массиве и дописать

результат в конец файла f2.txt. Для ввода и вывода использовать только

средства языка С.

Пример исходного файла f1.txt

3 4

5 4 7 4

-8 9 -9 -3

4 -5 6 5

*/

#include

#include

int main()

{

printf(%s,Nachalo program\n);

FILE *fin(NULL),*fout(NULL);

char namef[40];

puts(Vvedite imja file\n);

gets(namef);//считываем строку с клавиатуры

fin=fopen(namef,r);//открываем текстовый файл для чтения

if (!fin)

{

printf(Can not open file\n);

return 1;

}

fout=fopen(f2.txt,w);//открываем текстовый файл для записи

int n,m;//резмер массива n на m

fscanf(fin,%d%d,n,m);//считываем два числа которые

int **mas=new int*[n];

int i,a;

for(i=0;i

mas[i]=new int[m];

//считываем данные из файла

for(i=0;i

for(int j=0;j

fscanf(fin,%d,mas[i][j]);

//выводим информацию на экран в форматированном виде

for(i=0;i

{

for(int j=0;j

{

printf(%5d,mas[i][j]);//ширина поля вывода занимает 5 знакомест

}

printf(%c,’\n’);

}

fclose(fin);

//выводим информацию в текстовый файл

for(i=0;i

{

for(int j=0;j

{

fprintf(fout,%5d,mas[i][j]);//ширина поля вывода занимает 5 знакомест

}

fprintf(fout,%c,’\n’);

}

fclose(fout);

//выводим информацию в бинарный файл

for(i=0;i

{

for(int j=0;j

{

fprintf(fout,%5d,mas[i][j]);//ширина поля вывода занимает 5 знакомест

}

fprintf(fout,%c,’\n’);

}

fout=fopen(f3.txt,wb);//открываем бинарный файл для записи

//записываем информацию в бинарный файл построчно

for(i=0;i

{

fwrite(mas[i],sizeof(int)*m,1, fout);

}

fclose(fout);

int **mas2=new int*[n];

for(i=0;i

{

mas2[i]=new int[m];

}

fin=fopen(f3.txt,rb);//открываем бинарный файл для чтения

//считываем информацию из бинарного файла построчно

for(i=0;i

{

fread(mas2[i],sizeof(int)*m,1, fin);

}

printf(%c,’\n’);

//выводим информацию на экран в форматированном виде для

//проверки правильности полученной информации

for(i=0;i

{

for(int j=0;j

{

printf(%5d,mas2[i][j]);//ширина поля вывода занимает 5 знакомест

}

printf(%c,’\n’);

}

fclose(fout);

//подсчитаем количество отрицательных элементов

int otr(0);

for(i=0;i

for(int j=0;j

if(mas[i][j]

fout=fopen(f2.txt,a+);

printf(%s%d,\nkoli4estvo otricat elementov= ,otr);

fprintf(fout,%s%d,\nkoli4estvo otricat elementov= ,otr);

puts(\nKonec\n);

getchar();

return 0;

}

//—————————————————————————

/*

Содержимое файла после выполнения программы f2.txt

5 4 7 4

-8 9 -9 -3

4 -5 6 5

koli4estvo otricat elementov= 4

*/

4 Перегрузка операцій

Мета роботи

4.2 Вказівки щодо організації самостійної роботи студентів

Перегрузка операций

C++ позволяет переопределить действие большинства операций так, чтобы при использовании с объектами конкретного класса они выполняли заданные функции. Эта дает возможность использовать собственные типы данных точно так же, как стандартные. Обозначения собственных операций вводить нельзя. Можно перегружать любые операции, существующие в C++, за исключением:

?: :: # # sizeof

Перегрузка операций осуществляется с помощью методов специального вида (функций-операций) и подчиняется следующим правилам:

— при перегрузке операций сохраняются количество аргументов, приоритеты операций и правила ассоциации (справа налево или слева направо), используемые в стандартных типах данных;

— для стандартных типов данных переопределять операции нельзя;

— функции-операции не могут иметь аргументов по умолчанию;

— функции-операции наследуются (за исключением =);

— функции-операции не могут определяться как static.

Функция-операция содержит ключевое слово operator, за которым следует знак переопределяемой операции:

тип operator операция ( список параметров) { тело функции }

Проиллюстрируем перегрузку некоторых операторов для следующих типов созданных пользователем:

struct Tstud

{

char FIO[20];

int bal;

};

struct TAB

{

float A;

int B;

};

Статьи к прочтению:

C. Урок 7. Команды ввода и вывода


Похожие статьи:

  • Функции устройств ввода/вывода

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

  • Форматный ввод-вывод данных

    2.32.1. Форматные преобразования (sprintf, sscanf). Идеологию форматного ввода-вывода данных MATLAB заимствовал у языка программирования C, практически…