Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
а и п СИ.doc
Скачиваний:
57
Добавлен:
07.06.2015
Размер:
2.32 Mб
Скачать

Контрольные вопросы для подготовки и самостоятельной работы

  1. Какие операции называются унарными, бинарными, тернарными?

  2. Сколько групп приоритетов принято в С?

  3. В какой последовательности выполняются операции с одинаковым приоритетом?

  4. Что означает свойство коммутативности?

  5. Какие операции гарантируют порядок вычисления своих операндов?

  6. Для чего применяют первичные операции?

  7. Какой тип операндов допустим для различных операций?

  8. Все ли операнды вычисляются в выражениях, содержащих логические операции?

  9. Для чего применяют преобразование типов?

  10. Назовите правила неявного преобразования типов. В каких случаях возможна потеря информации при преобразовании типов?

  11. В каком порядке будет выполняться конструкция f(x)&&g(y) и как будет интерпретироваться результат вызова функций, результат выражения в целом?

  12. Объясните примеры, приведенные в теоретической части.

Лабораторная работа №10 Массивы. Селективная обработка массивов

(2 часа)

Цель работы: изучить работу с массивом как с составным типом данных, приёмы ввода и вывода данных, обработку одномерных массивов.

Теоретические сведения

Массив - это набор объектов (элементов) одинакового типа, доступ к которым осуществляется прямо по индексу в массиве. Обращение к массивам в С реализовано с помощью указателей (pointers).

Массив в С можно объявить следующим образом:

[Класс_памяти] Тип_данных Имя_массива> [<Размер_массива>];

Размер_массива может быть задан константным выражением.

Доступ к элементам массива происходит следующим образом:

<Имя_массива>[<Значение_индекса>], т.е., используя имя массива и индекс от 0 до (Размер_массива -1), т.е. на единицу меньше, чем <Размер_массива>.

Пример объявления массива:

char name[20];

int grad[125];

float b[30];

Массив имеет имя (name), которое является указателем на тип элементов массива и адресует первый элемент с индексом (). Имя массива фактически является константным указателем, ссылающимся на начальный адрес данных, с которого расположен сам массив и может быть использовано как указатель. Обращение к элементам может осуществляться следующим образом name[0] -1-ый элемент массива, name[1]- 2-ой элемент, name[19] – последний 20-ый элемент.

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

(sizeof(тип)*Размер_массива) байтов.

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

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

for(i=0; i<rasm; i++) mas2[i] = mas1[i];

где rasm - размер массивов, соответствующий указанному в их объявлении

# define rasm 20

int mas2[rasm], mas1[rasm];

                1. Пример

/* ЗАНЯТИЕ N 9

Выполнил студент группы ......... Петров Ю.В.

Применение массивов при работе с переменными

различных типов (int,float), изменение значений

переменных. Примеры приемов работы с массивами */

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#define N 15

#define M 10

int p[N], x[N], i, j, j1, count=0;

int y[N*2], z[N]={15,37,10,-20,-10,25,27,30,89,67,\

24,-6,22};

int *pi=y; //Два последних элемента z[N] равны 0

float *pf, mf[N];

void main()

{ clrscr(); randomize();

pf=mf;

printf("Исходный массив p[]: \n");

for (i=0;i<N;i++)

{ p[i]=random(81)-40; //Инициализация с помощью функции

printf("%4d",p[i]); //random() в интервале +40...-40

if (p[i]>0) //Выбор элементов >0 в массив х[]

{ x[count]=p[i];

mf[count]=x[count]/5.5;

count++;

}

}

printf("\n");

printf("Исходный массив z[j]: \n");

for (i=0;i<N;i++) printf("%4d",z[i]);

printf("\nРабочий массив x[count]>0 из p[i]: \n");

for (i=0;i<count;i++) printf("%4d",x[i]);

j=0;//Выбор элементов в массив у[] из z[] и р[] по условиям

for (i=0;i<N;i++)

{if (z[i]>=-M && z[i]<=(M+N) && (z[i]%2==0))

{ *pi = z[i]; pi++; j++;}

if (p[i]>=-M && p[i]<=(M+N) && (p[i]%2==0))

{ *(y+j)=p[i]; pi++; j++;}

}

j1=j;

printf("\nРабочий массив y[j] из z[i] и р[i] по условиям \n");

printf(" -M<y[j]<(M+N) и четное:\n");

for (i=0;i<j1;i++) printf("%4d",y[i]);

printf("\nРабочий массив mf[j]=x[j]/5.5 \n");

for (i=0;i<count;i++) printf("%6.4f ",*(pf+i));

//Сортировка массива x[]

for (i=0;i<count;i++)

for (j=i;j<count;j++)

if (x[i]<x[j])

{int c=x[i];x[i]=x[j];x[j]=c;

}

else continue;

//Сортировка массива у[]

for (i=0;i<j1;i++)

for (j=i;j<j1;j++)

if (y[i]<y[j])

{int c=y[i];y[i]=y[j];y[j]=c;

}

else continue;

printf("\nСортированный массив x[]: \n");

for (i=0;i<count;i++)

printf("%4d",x[i]);

printf("\nСортированный массив y[]: \n");

for (i=0;i<j1;i++)

printf("%4d",y[i]);

getch();

}

/*

Исходный массив p[]:

32 37 -34 11 30 8 -11 -38 6 -21 -27 -23 -30 -19 -29

Исходный массив z[j]:

15 37 10 -20 -10 25 27 30 89 67 24 -6 22 0 0

Рабочий массив x[count]>0 из p[i]:

32 37 11 30 8 6

Рабочий массив y[j] из z[i] и р[i] по условиям

-M<y[j]<(M+N) и четное:

10 -10 8 6 24 -6 22 0 0

Рабочий массив mf[j]=x[j]/5.5

5.8182 6.7273 2.0000 5.4545 1.4545 1.0909

Сортированный массив x[]:

37 32 30 11 8 6

Сортированный массив y[]:

24 22 10 8 6 0 0 -6 -10 */

                1. Ход работы

  1. Изучить теоретические сведения.

  2. В соответствии с индивидуальным заданием разработать алгоритм инициализации массива, селективной обработки массива.

  3. Разработать и набрать программу, отладить её на компьютере, изучить работу операторов.

  4. Получить результаты.

  5. Оформить отчет.

  6. Подготовиться к защите лабораторной работы, изучив контрольные вопросы по данной теме.

Соседние файлы в предмете Алгоритмизация и программирование