Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на ЯВУ. Мет.ук. к лаб. работам...doc
Скачиваний:
14
Добавлен:
22.08.2019
Размер:
126.98 Кб
Скачать

Примеры программ

Дан целочисленный двухмерный массив размером до nm элементов. Выполнить “зеркальное отображение” элементов матрицы относительно вертикальной оси симметрии (поменять местами элементы первого столбца с элементами последнего, второго с элементами предпоследнего и т.д.).

#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);

}

Контрольные вопросы

  1. Приведите примеры объявления массивов. Инициализация массивов. Классы памяти.

  2. Какие существуют отличия и особенности при работе операторов for, while и do while?

  3. Что представляет собой массив как структура данных?

  4. Что представляет собой имя массива?

  5. Использование указателей при работе с массивами.

  6. Строки в Си, функции работы со строками.

  7. В чем отличие ввода числовой и текстовой информации в массив?

  8. Какие методы сортировки массивов вы знаете?

ЛАБОРАТОРНАЯ РАБОТА № 3