- •Кафедра ”Информационных систем управления”
- •Основные типы данных, операции и выражения, форматный ввод-вывод данных. Линейные и разветвляющиеся алгоритмы Методические указания
- •Пример программы
- •Контрольные вопросы
- •Решение задач с использованием циклических алгоритмов. Обработка числовых и символьных массивов Методические указания
- •Примеры программ
- •Контрольные вопросы
- •Работа с файлами. Использование процедур и функций Методические указания
- •Пример задания
- •Контрольные вопросы
- •Динамическое управление памятью. Методические указания
- •Примеры программ
- •Контрольные вопросы
Примеры программ
Дан целочисленный двухмерный массив размером до nm элементов. Выполнить “зеркальное отображение” элементов матрицы относительно вертикальной оси симметрии (поменять местами элементы первого столбца с элементами последнего, второго с элементами предпоследнего и т.д.).
#include <stdio.h>
#include <conio.h>
#define line 50
#define kol 60
void printmatr(int mas[line][kol],int,int);
void main()
{
int matr[line][kol];
FILE *fil_matr;
int x,y,n,m,i,j;
char myfile[30];
clrscr();
printf("Введите имя файла исходных данных: ");
scanf("%s",myfile);
fil_matr=fopen(myfile,"r"); //открытие файла для чтения
fscanf(fil_matr,"%d%d",&n,&m); //чтение из файла фактического //размера массива
for(i=0;i<n;i++)
for(j=0;j<m;j++) fscanf(fil_matr,"%d",&matr[i][j]);
printf("Введена матрица:\n");
printmatr(matr,n,m);
for(i=0;i<(n/2);i++)
for(j=0;j<m;j++)
{ x=matr[i][j];
matr[i][j]=matr[i][n-j+1];
matr[i][n-j+1]=x;
}
printf("Преобразованная матрица:\n");
printmatr(matr,n,m);
fcloseall();
return;
}
// вывод матрицы на экран
void printmatr(int mas[line][kol],int n1,int m1)
{
int i,j;
for(i=0;i<n1;i++)
{
for(j=0;j<m1;j++)
printf("%5d",*(*(mas+i)+j));
printf("\n");
}
return;
}
В данном примере ввод исходных данных в массив matr и в переменные для хранения фактического размера массива n и m организован из файла исходных данных, подготовленного заранее программным путем или с помощью программы редактора.
Пользователь с клавиатуры вводит имя файла исходных данных, которое читается в переменную MyFile. Функция fopen открывает существующий физический файл для чтения и помещает указатель на файл в переменную fil_matr. Функция fscanf последовательно считывает из файла данные, преобразовывает их в соответствии с управляющей строкой и помещает по указанным адресам.
Упорядочивание массива по возрастанию методом быстрой сортировки:
#include<stdio.h>
#include<conio.h>
#define n 100
int mas[n];
void sort(int,int,int*);
void main()
{ int k;
clrscr();
printf("Введите размерность массива и его элементы \n");
scanf(“%d”,&k);
for (int i=0;i<k;i++) scanf("%d",&mas[i]);
sort(0,k-1,mas);
for (i=0;i<k;i++)printf("%d ",mas[i]);
}
void sort(int l,int r,int *a)
{ int b,tmp,i,j;
b=a[(l+r)/2];
i=l; j=r;
while (i<=j)
{ while (a[i]<b) i+=1;
while (a[j]>b) j-=1;
if (i<=j)
{ tmp=a[i];
a[i]=a[j];
a[j]=tmp;
i+=1;
j-=1;
}
}
if (l<j) sort(l,i,a);
if (i<r) sort(i,r,a);
}
Контрольные вопросы
Приведите примеры объявления массивов. Инициализация массивов. Классы памяти.
Какие существуют отличия и особенности при работе операторов for, while и do while?
Что представляет собой массив как структура данных?
Что представляет собой имя массива?
Использование указателей при работе с массивами.
Строки в Си, функции работы со строками.
В чем отличие ввода числовой и текстовой информации в массив?
Какие методы сортировки массивов вы знаете?
ЛАБОРАТОРНАЯ РАБОТА № 3