Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Индивидуальное задание к лабораторной работе




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

Таблица 21 - Индивидуальные задания

вариант арифметическая операция арифметическая операция логическая операция битовая операция преобразование: явное
  (a + b)*с (c/ab) чётное a << = b int®short
  (a*b)-с a|=b-c нечётное a >> = b long®int
  (a / b)+++b a<<=b/c (a==c)&& (b<a) a^=b signed®unsigned
  ++b-(~a) a%=b a > b a%=b+c double®float
  (a+b)* sizeof(c) (a+b)1/c a < b a>>=5 int®char
  --c*(*&a+b) (a+b)/5 a>=b a&=abs(c) long double ®double
  A2+b2+c2 15ab-(1/4c) a!=b a<<=6 float ®long
  5b3-2a+c c2+8b+10a a||b a&=b+c float®char
  4a2+5b2 3a2+4b-8 a&&b a^=b double®int
  3ab-4c A3+b2-8c !a a%=(c+10) double®unsigned long int
  c2+5a3-b A2+b2-6c (a<b)|| (c>5) a|=20   float®unsigned
  2a+4c-b4 A+2b+3c a>=b a&=(b+c) int®char
  A2+b2 2(a+b)-c4 (a>=b)|| (b<c) a^=abs(b-c) long double ®double
  (a+b)2 c2-b3 кратное а (a&b)^c double®float
  2ac-3cb 3a-4cb (c!=b)|| (a==10) (a|b)>>c double®unsigned long int
  5c+2a4 c5-2ab (c<=a)&&(b!=a) (b&&c)|(a--) signed®unsigned
  A+b+c 6a+3b3+c (b==0)|| (c<=a) a|=b+c int®short
  2a+3b+4c 4abc (a==1)|| (b<c) a|= (c+10) double®int
  A2+b3+c4 A2+(b-c)5/3 (a<b)&& (a>c) a|=20   double®float
  A+2b+3c (a+4b)1/3-c2 (a>=b)|| (a<=10) (a&b)^c int®char
  2(a+b)-c4 A1/3+(b3-c) (b<c)&& (b!=a) a|=b+c long double ®double
  c2-b3 B3+(a-4c)1/5 (b<c)|| (a<b) a&=b+c double®float
  3a-4cb A+2b+3c (a==1)&&(c!=0) a&=abs(c-b) int®char
  c5-2ab 2(a+b)-c4 (c==0)|| (b!=100) a%=b+c long double ®double
  6a+3b3+c c2-b3 (b!=0)&& (b<c) (a&b)^c int®char
  4abc 3a-4cb (b!=a)|| (b<=c) a%=b+c long double ®double
  A2+(b-c)5/3 c5-2ab (c<=12)&&(c>=24) (b|c)|(a--) double®unsigned long int
  (a+4b)1/3-c2 6a+3b3+c ((a-b)<c)|| ((a*c) <100) a<<=6 float®unsigned
  A1/3+(b3-c) 4abc (a<10)? (b):(b-c) (b&c)|(a--) int®char
  B3+(a-4c)1/5 A2+(b-c)5/3 (b<=10)|| ((a+b)< (b-c)) a^=abs(b-c) long double ®double

 

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

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

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

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

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

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

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

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

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

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

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

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

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

 

Лабораторная работа №10

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

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

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

Массивы и переменные с индексами. Математическим понятием, которое привело к появлению в языках программирования понятия "массив", являются матрица и ее частные случаи: вектор-столбец или вектор-строка. Элементы матриц в математике принято обозначать с использованием индексов. Существенно, что все элементы матриц либо вещественные, либо целые и т.п. Такая "однородность" элементов свойственна и массиву, определение которого описывает тип элементов, имя массива и его размерность, т.е. число индексов, необходимое для обозначения конкретного элемента. Кроме того, в определении указывается количество значений, принимаемых каждым индексом. Например, int a[10]; определяет массив из 10 элементов а[0], а[1],..., а[9]. float Z[13][[6]; определяет двумерный массив, первый индекс которого принимает 13 значений от 0 до 12, второй индекс принимает 6 значений от 0 до 5. Таким образом, элементы двумерного массива Z можно перечислить так:

Z[0][0], Z[0] [1], Z[0][2],...,Z[12][4], Z[12][5]

В соответствии с синтаксисом Си в языке существуют только одномерные массивы, однако элементами одномерного массива, в свою очередь, могут быть массивы. Поэтому двумерный массив определяется как массив массивов. Таким образом, в примере определен массив Z из 13 элементов-массивов, каждый из которых, в свою очередь, состоит из 6 элементов типа float. Нумерация элементов любого массива всегда начинается с 0, т.е. индекс изменяется от 0 до N-1, где N -количество значений индекса.

Ограничений на размерность массивов, т.е. на число индексов у его элементов, в языке Си теоретически нет. Стандарт языка Си требует, чтобы транслятор мог обрабатывать определения массивов с размерностью до 31. Однако чаще всего используются одномерные и двумерные массивы. Рассмотрим на простых вычислительных задачах некоторые приемы работы с массивами.

Вычисление среднего. Введя значение n из диапазона (0<n<=100) и значения n первых элементов массива х[0], х[1],...,х[n-1], вычислить среднее и оценку дисперсии значений введенных элементов массива. Задачу решает следующая программа:

/* Вычисление среднего */

#include <stdio.h>

void main ()

{ /*n - количество элементов */

int i,n;/*b-среднее */

float b,x[100];

while (1)

{

printf("\n Введите Значение n=");

scanf("%d", &n);

if (n > 0 && n <= 100) break;

printf("\n Ошибка! Необходимо 0<n<101 ");

} /* Конец цикла ввода значения n */

printf ( "\n Введите Значения элементов:\n");

for(b=0.0,i=0; i<n; i++)

{

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

scanf("%f", &x[i]);

b+=x[i]; /* Вычисление суммы элементов */

}

b/=n;/* Вычисление среднего */

printf("\n Среднее =%f, b);

}

В программе определен массив х со 100 элементами, хотя в каждом конкретном случае используются только первые n из них. Ввод значения п сопровождается проверкой допустимости вводимого значения. В качестве условия после while записано заведомо истинное выражение 1, поэтому выход из цикла (оператор break) возможен только при вводе правильного значения n, удовлетворяющего неравенству 0<n<101. Следующий цикл обеспечивает ввод n элементов массива и получение их суммы (b).

Инициализация массивов. Инициализация - это объединение определения объекта с одновременным присваиванием ему конкретного значения. Использование инициализации позволяет изменить формат определения массива. Например, можно явно не указывать количество элементов одномерного массива, а только перечислить их начальные значения в списке инициализации:

double d[ ]={1.0, 2.0, 3.0, 4.0, 5.0};

В данном примере длину массива компилятор вычисляет по количеству начальных значений, перечисленных в фигурных скобках. После такого определения элемент d[0] равен 1.0, d[l] равен 2.0 и т.д. до d[4], который равен 5.0.

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

int M[8]={8,4,2};

В данном примере определены значения только переменных М[0], М[1] и М[2], равные соответственно 8, 4 и 2. Элементы М[3],..., М[7] не инициализируются.

Правила инициализации многомерных массивов соответствуют определению многомерного массива как одномерного, элементами которого служат массивы, размерность которых на единицу меньше, чем у исходного массива. Одномерный массив инициализируется заключенным в фигурные скобки списком начальных значений. В свою очередь, начальное значение, если оно относится к массиву, также представляет собой заключенный в фигурные скобки список начальных значений. Например, присвоить начальные значения вещественным элементам двумерного массива А, состоящего из трех "строк" и двух "столбцов", можно следующим образом:

double А[3][2]={{10,20}, (30,40), {50,60}};

Эта запись эквивалентна последовательности операторов присваивания: А[0][0]=10; А[0][1]=20; А[1][0]=30; А[1][1]=40; А[2][0]=50; А[2][1]=60;. Тот же результат можно получить с одним списком инициализации:

double A[3][2]={10,20,30,40,50,60};

С помощью инициализаций можно присваивать значения не всем элементам многомерного массива. Например, чтобы инициализировать только элементы первого столбца матрицы, ее можно описать так:

double Z[4][6]={{1}, {2}, (3), {4}};

Следующее описание формирует "треугольную" матрицу в целочисленном массиве из 5 строк и 4 столбцов:

int х[5][4]={{1), {2,3}, {4,5,6}, {7,8,9,10} };

В данном примере последняя пятая строка х[4] остается незаполненной. Первые три строки заполнены не до конца.

Ход работы

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

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

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

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

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

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

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...