Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Условный оператор в языке Си. Примеры. Оператор выбора. Примеры.




Ответ:

Большинство управляющих конструкций являются «условными» в том смысле, что принятие решение о том, какая ветвь программы должна дальше выполняться, принимается на основе некоторого условного выражения, которое может принимать значение FALSE (0) или TRUE (не 0)

Ветвления:if, if – else, switch.

Полный «if» Неполный «if»
a = (t-2) * 8; if ( (0<=a) && (a<=MAX) ) { x = x + 2; } else { x = x – 2; } a = a + x; a = (t-2) * 8; if ( (0<=a) && (a<=MAX) ) { x = x + 2; } a = a + x;

Синтаксис:

if (выражение)

оператор-1

else

оператор-2

Оператор ветвления

Под «вложенным if» подразумевается оператор if, имеющий еще один if или else.

Вложенный if if-else-if-...
if (0<=a) { if (a<=MAX) { x = x + 2; }   } a = a + x; if (0<=a) x = x + 2; else if (a>-2) a = a + x; else x = x - 1;  

Оператор ветвления vs тернарныйоператор:

if (a>b) x = x+2; else x = x-2;   x = (a>b) ? x+2 : x-2;   if (a>b) a = a+2; else x = x-2; нельзя заменить на тернарный оператор

Оператор выбора (переключатель)

switch (выражение)

{

[ case константа1 ]: [ операторы ];

[ case константа2 ]: [ операторы ];

...

[ default: [ операторы ]];

}

Оператор выбора

Оператор switch обычно используется вместо нескольких вложенных операторов ветвлений ("лесенки").

if (выр == конст-1) { <операторы-1> } else { if (выр == конст-2) { <операторы-2> } else { <операторы-3> } } switch (выр) { case конст-1: <операторы-1> break; caseконст-2: <операторы-2> break; default: <операторы-3> }

Особенности использования и ограничения:

· Может быть использован только в случае, если выбор того или иного оператора (блока операторов) однозначно определяется значением одного и того же выражения

switch (choice) { case 1 : x = 1; break; case 2 : x = x+1; break; case 3 : x = x-1; break; default : x = 0; }   if (choice == 1) x = 1; else if (choice == 2) x = x+1; else if (choice == 3) x = x – 1; else x = 0; // нельзя заменить на switch if (choice< 1) x = 0; else if (choice > 10) x = 2; else x = 1;

· Не обеспечивает (в отличие от ряда других языков программирования) исключительное выполнение блока операторов для выбранного case, а выполняет все операторы до конца switch или до оператора break. Во избежание этого, в конце блока операторов, соответствующих каждому case, ставится оператор break.

 

 

Программный код Выполнение
switch (choice) { case 1 : x = 1; case 2 : x = x+1; case 3 : x = x-1; default : x = 0; }   choice = 2; x = 44;     x = 44+1; // x=45 x = 45-1; // x=44 x = 0;   Итого: x = 0
switch (choice) { case 1 : x = 1; break; case 2 : x = x+1; break; case 3 : x = x-1; break; default : x = 0; }   choice = 2; x = 44;   x = 44 + 1; // x=45 break;     Итого: x = 45

· За счет пропуска операторов для отдельных case обеспечивает некоторое расширение возможностей.

switch (choice) { case 1 : case 2 : case 3 : x = x-1; break; default : x = 0; }   if ((1 <= choice) && (choice <= 3)) x = x-1; else x = 0;  

Switch

· Однократное вычисление условного выражения.

· Адрес каждого case помещается в таблицу, выбор из таблицы – по значению выражения.

· Скорость выполнения не зависит от количества вариантов case.

If – else – if - ...

· Последовательное вычисление условного выражения в каждом if.

· Скорость выполнения зависит от числа выполненных проверок (существенное замедление при большой вложенности).

Цикл с параметром в языке Си. Преобразование цикла с параметром к циклу с пред- или постусловием. Примеры.

Ответ:

Цикл – многократно исполняемый набор инструкций

Количество повторов (итераций):

· Может быть известно заранее.

· Может зависеть от действий, выполняемых в теле цикла.

Варианты проверки условия выхода из цикла:

· До начала выполнения каждой итерации (цикл с предусловием);

· После завершения выполнения каждой итерации (цикл с постусловием) – как минимум одна итерация такогоцикла всегда будет выполнена.

Цикл с предусловием while

while (условное_выражение)

оператор;

Где:

· условное_выражение – выражение, в случае истинности которого выполняется очередная итерация цикла.

· оператор – простой или составной оператор.

Важно:

· Если первая же проверка условия возвращает FALSE, то цикл ни разу не выполняется.

· Чтобы избежать «зацикливания» необходимо обеспечить модификацию в теле цикла переменных, входящих в условное выражение.

Программный код Результат выполнения
int n = 5; while (n < 7) { printf(“n = %d\n”, n); n++; } n = 5   n = 6  
index = 1; while (index < 5) printf(“Дoбpoe утро !\n”); ???  
index = 10; while (index++ < 5) printf(“Дoбpoe утро !\n”); ???  
index = 3; while (index < 5); { printf(“Дoбpoe утро, %d !\n”, index); } ???  

Цикл с постусловием do-while

do

оператор;

while (условное_выражение);

Где:

· условное_выражение – выражение, в случае истинности которого выполняется очередная итерация цикла.

· оператор – простой или составной оператор.

 

Важно:

· Тело цикла всегда выполняется как минимум один раз.

Программный код Результат выполнения
do scanf(%d", &number); while (number!=20); 3 45 6 20  
const int secret_code 13; int code_entered; do { printf("\nEnter code:"); scanf("%d", &code_entered); } while (code_entered != secret_code); рrintf("\nAccepted!\n"); Enter code: 14   Enter code: 10   Enter code: 13   Accepted!
do scanf("%d", &n); while(1); ???  

Цикл for

for ([выраж1]; [выраж2]; [выраж3])

оператор;

Где:

· выраж1 – необязательное выражение, выполняемое один раз перед первой итерацией цикла (как правило, оператор присваивания).

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

· выраж3 – необязательное выражение, выполняемое после каждой итерации цикла (как правило, оператор присваивания).

· оператор – простой или составной оператор.

Важно:

· for – цикл с предусловием (если первая же проверка условия в выраж2 возвращает FALSE, то цикл ни разу не выполняется).

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

· Если выраж2 опущено, то считается, что условие продолжения цикла всегда истинно (бесконечный цикл).

Цикл for – частный случай цикла while.

выраж1; while (выраж2) { оператор; выраж3; } for (выраж1; выраж2; выраж3) оператор;  
while (выраж) оператор; for ( ; выраж; ) оператор

Цикл for часто называют "циклом по счетчику"или "циклом с параметром" и записывают ввиде следующей "шаблонной" конструкций:

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

оператор;

 

 

Где:

· i – "счетчик цикла".

· i=0 – начальное значение счетчика.

· i<n – условие продолжения цикла (проверяется перед каждой итерацией).

· i++ - модификация счетчика в конце каждой итерации.

Варианты реализации цикла for:

· Цикл for без тела цикла:

for(t=0; t<SOME_VALUE; t++) ;

· Вечныйцикл for:

for ( ; ; ) printf("Loopforever\n");

· Цикл for с несколькими параметрами:

for (i=0, j=M-1; i<=j; i++, j--)

printf("%d %d\n", i, j);

Организация хранения и работы с одномерными массивами в языке Си. Примеры задач.

Ответ:

Массивы используются для группировки нескольких однотипных объектов.

Массив представляет собой компьютерный эквивалент таблицы или матрицы.

Массив – это упорядоченная совокупность переменных, которые имеют общее имя и одинаковый тип.

Все элементы массива хранятся в памяти последовательно, друг за другом, без пропусков.

Имя массива – это общее имя переменных, входящих в массив.

Тип массива – тип переменных, входящих в массив.

Длина массива – общее количество элементов в массиве.

Размер массива в памяти (в байтах) определяется как Длина массива х Размер типа массива (в байтах).

Положение элемента в массиве однозначно определяется его индексом.

Каждый индекс изменяется в некотором диапазоне [a,b]. Где a - нижняя граница, b - верхняя граница индекса.

В языке C нижняя граница значения каждого индекса равна "0" (т.е. элементы массивы нумеруются с "0").

Размерность массива – это количество индексов у каждого элемента массива (у одномерного массива – один индекс).

Описание массива.

Тип_массива Идентификатор_массива[n]

Где:

· n – количество элементов массива по соответствующей размерности (т.е. общее количество элементов массива равно n)

Примеры описания массивов:

inta[10];

double b[20];

floatc[12];

chardsd[4];

Примеры доступа к элементам массива:

a[4] = a[i] + a[1];

b[k] = b[3] + a[2];

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

РеалАдрес (С[i]) = БазАдрес (С) + i * РазмерЭлемента

Хранение массива в памяти:

· Описание массива в виде многомерной структуры делается лишь из соображений удобства программирования как результат стремления наиболее точно воспроизвести в программе объективно существующие связи между элементами данных решаемой задачи.

· Одномерные массивы хранятся в виде линейной последовательности своих компонент.

· Реальный адрес элемента массива в памяти можно вычислить, зная базовый адрес массива (адрес начала массива), тип элементов массива и номер нужного элемента, например, для одномерного массива:

РеалАдрес (С[i]) = БазАдрес (С) + i * РазмерЭлемента

Инициализация элементов массива:

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

Вариант инициализации массива № 1 (при описании):

Перечисление начальных значений элементов массива без указания размера массива (вычисляется автоматически):

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

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

int M[10] = {1, 2, 3}

Вариант инициализации массива № 2 (при вводе значений в цикле, например, с клавиатуры):

int i;

int a[CONST];

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

{

scanf("%d", &a[i]);

}

Вариант инициализации массива№ 3 (в процессе вычислений) :

a[2] = b[2] + c[k];










Последнее изменение этой страницы: 2018-04-12; просмотров: 507.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...