Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SHPORRI_SPASIBO_POCANAM.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
93.31 Кб
Скачать

6. Операции языка си

Любое выражение языка состоит из операндов (переменных, констант и др.), соединенных знаками операций. Знак операции - это символ или группа символов, которые сообщают компилятору о необходимости выполнения определенных арифметических, логических или других действий.

Операции выполняются в строгой последовательности. Величина, определяющая преимущественное право на выполнение той или иной операции, называется приоритетом. В табл. 2 перечислены различные операции языка Си. Их приоритеты для каждой группы одинаковы (группы выделены цветом). Чем большим преимуществом пользуется соответствующая группа операций, тем выше она расположена в таблице. Порядок выполнения операций может регулироваться с помощью круглых скобок.

Таблица 2

Знак операции Назначение операции

( ) Вызов функции

[ ] Выделение элемента массива

. Выделение элемента записи

-> Выделение элемента записи

! Логическое отрицание

~ Поразрядное отрицание

- Изменение знака

++ Увеличение на единицу

-- Уменьшение на единицу

& Взятие адреса

* Обращение по адресу

(тип) Преобразование типа (т.е. (float) a)

sizeof( ) Определение размера в байтах

* Умножение

/ Деление

% Определение остатка от деления

+ Сложение

- Вычитание

<< Сдвиг влево

>> Сдвиг вправо

< Меньше, чем

<= Меньше или равно

> Больше, чем

>= Больше или равно

= = Равно

!= Не равно

& Поразрядное логическое "И"

^ Поразрядное исключающее "ИЛИ"

| Поразрядное логическое "ИЛИ"

&& Логическое "И"

|| Логическое "ИЛИ"

?: Условная (тернарная) операция

= Присваивание

+=, - =, *=, /=, %=, <<=,

>>=, &=, |=, ^= Составные операции присваивания (например, а *= b

(т.е. a = a * b) и т.д.)

Операция запятая

Для исключения путаницы в понятиях "операция" и "оператор", отметим, что оператор - это наименьшая исполняемая единица программы. Различают операторы выражения, действие которых состоит в вычислении заданных выражений (например: a = sin(b)+c; j++;), операторы объявления, составные операторы, пустые операторы, операторы метки, цикла и т.д. Для обозначения конца оператора в языке Си используется точка с запятой. Что касается составного оператора (или блока), представляющего собой набор логически связанных операторов, помещенных между открывающей ({) и закрывающей (}) фигурными скобками ("операторными скобками"), то за ним точка с запятой не ставится. Отметим, что блок отличается от составного оператора наличием определений в теле блока.

Охарактеризуем основные операции языка Си. Сначала рассмотрим одну из них - операцию присваивания (=). Выражение вида

х = у;

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

x = y = z = 100;

Различают унарные и бинарные операции. У первых из них один операнд, а у вторых - два. Начнем их рассмотрение с операций, отнесенных к первой из следующих традиционных групп:

1. Арифметические операции.

2. Логические операции и операции отношения.

3. Операции с битами.

Арифметические операции задаются следующими символами (табл. 2): +, -, *, /, %. Последнюю из них нельзя применять к переменным вещественного типа. Например:

a = b + c;

x = y - z;

r = t * v;

s = k / l;

p = q % w;

Логические операции отношения задаются следующими символами (см. табл. 2): && ("И"), || ("ИЛИ"), ! ("НЕ"), >, >=, <, <= , = = (равно), != (не равно). Традиционно эти операции должны давать одно из двух значений: истину или ложь. В языке Си принято следующее правило: истина - это любое ненулевое значение; ложь - это нулевое значение. Выражения, использующие логические операции и операции отношения, возвращают 0 для ложного значения и 1 для истинного. Ниже приводится таблица истинности для логических операций.

Таблица 3

Битовые операции можно применять к переменным, имеющим типы int, char, а также их вариантам (например, long int). Их нельзя применять к переменным типов float, double, void (или более сложных типов). Эти операции задаются следующими символами: ~ (поразрядное отрицание), << (сдвиг влево), >> (сдвиг вправо), & (поразрядное "И"), ^ (поразрядное исключающее "ИЛИ"), | (поразрядное "ИЛИ").

В языке предусмотрены две нетрадиционные операции инкремента (++) и декремента (--). Они предназначены для увеличения и уменьшения на единицу значения операнда. Операции ++ и -- можно записывать как перед операндом, так и после него. В первом случае (++n или --n) значение операнда (n) изменяется перед его использованием в соответствующем выражении, а во втором (n++ или n--) - после его использования. Рассмотрим две следующие строки программы:

a = b + c++;

a1 = b1 + ++c1;

Предположим, что b = b1 = 2, c = c1 = 4. Тогда после выполнения операций: a = 6, b = 2, c = 5, a1 = 7, b1 = 2, c1 = 5.

Широкое распространение находят также выражения с еще одной нетрадиционной тернарной или условной операцией ?:. В формуле

y = x ? a: b;

y = a, если x не равно нулю (т.е. истинно), и y = b, если х равно нулю (ложно). Следующее выражение

y = (a>b) ? a: b;

позволяет присвоить переменной у значение большей переменной (а или b), т.е. y = max(a, b).

Еще одним отличием языка является то, что выражение вида а = а + 5; можно записать в другой форме: a += 5;. Вместо знака + можно использовать и символы других бинарных операций (см. табл. 2).

Другие операции из табл. 2 будут описаны в последующих параграфах.

Преобразование типов

Если в выражении появляются операнды различных типов, то они преобразуются к некоторому общему типу, при этом к каждому арифметическому операнду применяется такая последовательность правил:

1. Если один из операндов в выражении имеет тип long double, то остальные тоже преобразуются к типу long double.

2. В противном случае, если один из операндов в выражении имеет тип double, то остальные тоже преобразуются к типу double.

3. В противном случае, если один из операндов в выражении имеет тип float, то остальные тоже преобразуются к типу float.

4. В противном случае, если один из операндов в выражении имеет тип unsigned long, то остальные тоже преобразуются к типу unsigned long.

5. В противном случае, если один из операндов в выражении имеет тип long, то остальные тоже преобразуются к типу long.

6. В противном случае, если один из операндов в выражении имеет тип unsigned, то остальные тоже преобразуются. к типу unsigned.

7. В противном случае все операнды преобразуются к типу int. При этом тип char преобразуется в int со знаком; тип unsigned char в int, у которого старший байт всегда нулевой; тип signed char в int, у которого в знаковый разряд передается знак из сhar; тип short в int (знаковый или беззнаковый).

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

В языке Си можно явно указать тип любого выражения. Для этого используется операция преобразования ("приведения") типа. Она применяется следующим образом:

(тип) выражение

(здесь можно указать любой допустимый в языке Си тип).

Рассмотрим пример:

int a = 30000;

float b;

........

b = (float) a * 12;

(переменная a целого типа явно преобразована к типу float; если этого не сделать, то результат будет потерян, т.к. a * 12 > 32767).

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

7.Операции присваивания и операторы присваивания.

Рассматриваемая операция в языке С обозначается как "=". Оператор присваивания может использоваться в выражениях, которые включают в себя оператры сравнения или логические операторы. Например:

if ((f=x-y)>0) printf ("Число x больше, чем y");

Здесь вначале вычисляется величина x-y, которая присваивается переменной f. Далее ее значение сравнивается с нулем.

Важнейшей особенностью языка С является возможность записать в операторе присваивания несколько переменных величин для присваивания им одного и того же значения. Например:

a=b=c=d=x*y;

Здесь Вы видите многократное использование знака присвоения "=". Как выполняется такой оператор? Сначала вычисляется значение правой части выражения: x*y. Далее полученное число записывается в память, отведенную под переменную "d". После этого это же значение записывается в память, отведенную под величину "с" и так далее под величины: "b" и "a". В левой части оператора присвоения должно стоять выражение, которому можно присваивать значение. Такие выражения в языке С, например, просто переменная, называются величиной lvalue. Например, выражение 2=2 ошибочно, так как константе нельзя присвоить никакое значение. Поэтому константа не является величиной lvalue.

В языке С имеются еще дополнительные операции со знаком присвоения. Это +=, -=, /=, %=. Поясним немного данные операции. Так, например, вместо выражения a=a+5 можно написать a += 5. Здесь операция "+=" это аддитивная операция присвоения. В результате ее выполнения величина, стоящая справа от знака "=", то есть число 5, прибавляется к значению переменной, указанной слева от знака "=".

Отметим, что аналогично выполняются и такие операции, как:

m-=20, что означает то же самое, что и m=m+20;

m*=20, что означает то же самое, что и m=m820;

m/=10, что означает то же самое, что и m=m/10;

m%=10, что означает то же самое, что и m=m%10.

Указанные операции имеют тот же приоритет, что и операция "=". То есть приоритет этих операций ниже, чем приоритет арифметических операций. Отметим, что операция x+=5 выполняется значительно быстрее, чем операция x=x+5.

8.Математические функции. Правила их использования в выражениях.Abs(a)=│а│, sqrt(a)=корень из а, pow(a,b) возв  а в степb, ceil( a ) округл а до наименьш целого, но не меньш чем а, floor(a) округл а до наибольш цел, но не больш чем а, exp(a) вычисл экспоненты еа , log10(а) десятичнлогарифм а, asin(a) арксинус a, где  -1.0 < а < 1.0. необходимо подключзаголовочный файл #include <cmath>. операнды данных функций всегда должны быть вещественными. А и a для него различные переменные

9.Поразрядные логические операции. Операторы сдвига.В С++ существуют три поразрядные логические операции: 1 поразрядное И, обозначение: & 2поразрядное исключающее ИЛИ, обозначение:  ^ поразрядное включающее ИЛИ, обозначение:  |. ~Дополнение >>вправо, <<сдвиг влево.

10.Логические операции и операции отношения. В С++ существует три логические операции:Логическая операция И && a == 3 && b > 4 Составное условие истинно, если истинны оба простых условия, Логическая операция ИЛИ || a == 3 || b > 4 Составное условие истинно, если истинно, хотя бы одно из простых условий ;Логическая операция НЕ !  !( a == 3) Условие истинно, если a не равно 3. "<" - меньше."<=" - меньше или равно.">" - больше.">=" - больше или равно."==" - равно."!=" - не равно.

11. Консольный ввод-вывод. Функции ввода-вывода символов. Чтение и запись файлов с именами stdin, stdout и stderr связаны со стандартным вводом, стандартным выводом и со стандартным потоком ошибок называется консольным вводом-выводом. Для вывода числа getchar putchar,

12.Консольный ввод-вывод. Функции ввода-вывода строк. Чтение и запись файлов с именами stdin, stdout и stderr связаны со стандартным вводом, стандартным выводом и со стандартным потоком ошибок называется консольным вводом-выводом. Для вывода строки gets() и puts() printf("a=%d, b=%d, c=%d",a,b,c); Результат работы программы: a=5, b=6, c=9

13.Консольный форматированный ввод данных. Оператор ввода. Форматная строка. Спецификации преобразования. Стандартная библиотека С содержит две функции, выполняющие форматированный ввод и вывод стандартных типов данных: printf() и scanf(). Термин форматированный подразумевает, что этифункции могут, читать или писать данные в различных форматах, которыми можно управлять, Функция printf() используется для вывода данных на консоль, scanf() - для ввода. Как printf(), так и scanf() могут работать с любыми стандартными типами, включая символы, строки и числа.

14.Консольный форматированный вывод данных. Оператор вывода. Форматная строка. Спецификации преобразования. Термин форматированный подразумевает, что этифункции могут, читать или писать данные в различных форматах, которыми можно управлять, Функция printf() используется для вывода данных на консоль, scanf() - для ввода. Как printf(), так и scanf() могут работать с любыми стандартными типами, включая символы, строки и числа.

15 Программирование Линейный алгоритм (на основе структуры следование); характеризуется тем, что все действия, определяемые символами, входящими в схему, выполняются последовательно, в порядке их написания;

16Логические выражения и правила их составления. Логическое выражение в программировании — конструкция языка программирования, результатом вычисления которой является «истина» или «ложь». В большинстве языков программирования низкого и высокого уровня определён набор встроенных операций сравнения позволяющих строить «простые» логические выражения. В свою очередь, над логическими выражениями возможны операции, результатом которых так же являются «истина» и «ложь» (см. логическая операция). Логические выражения, построенные при помощи этих операций и содержащие несколько операций сравнения называются «сложными».Оператор if. Две его формы.

17Оператор ifРабота оператора if в Java во многом аналогична работе оператора IF любого другого языка. Более того, его синтаксис полностью идентичен синтаксису операторов if в языках С, С++ и С#. Простейшая форма этого оператора выглядит следующим образом:if{условие) оператор;Здесь, условие — булевское выражение. Если условие истинно, оператор выполняется. Если условие ложно, оператор пропускается. Рассмотрим следующий пример:if(num < 100) System.out.println("num меньше 100");В данном случае, если переменная num содержит значение, которое меньше 100, условное выражение истинно, и программа выполнит метод println (). Если переменная num содержит значение, которое больше или равно 100, программа пропустит метод println().Как будет показано в главе 4, в Java определен полный набор операций сравнения, которые могут быть использованы в условном выражении.

Операция

Значение

<

Меньше

>

Больше

==

Равно

применение оператора if./* Демонстрирует применение оператора if. Назовите этот файл "IfSample.java". */ class IfSample (  public static void main(String args[]) { int x, y; x = 10; У = 20;  if (x < y) System.out.println ("x меньше у"); x = x * 2;  if (x == y) System.out.println ("x теперь равна у"); x = x * 2;  if (x > y) System.out.println ("x теперь больше у");  // этот оператор не будет ничего отображать  if (х == у) System.out.println("вы не увидите это");  )  }

Эта программа генерирует следующий вывод:

х меньше у х теперь равна у х теперь больше у

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

18Команда выбора. Операторы switсh и break.Переключатель switch является наиболее удобным средством для организации мультиветвления. Управляющая структура switch передает управление тому из помеченных case операторов, для которого значение константного выражения совпадает со значением переключающего выражения. Если значение переключающего выражения не совпадает ни с одним из константных выражений, то выполняется переход к оператору, помеченному меткой default. В каждом переключателе может быть не более одной метки default, однако она может отсутствовать вообще. Приведем пример программы с переключателем. В этой программе выводятся названия нечетных целых десятичных цифр от 1 до 9 не меньше заданной, в зависимости от числа, указанного в форме test.html. Так же, как и в случае условного оператора для переключателей допустимы любые степени вложенности, однако злоупотреблять этим без особой на то необходимости также не следует.Кроме уже сказанного о переключателе, приведенная программа демонстрирует действие оператора break, с помощью которого происходит выход из переключателя. Если поместить операторы break после вывода каждой из цифр, то в окне браузера мы увидим название только одной нечетной цифры.Как видим, после конструкции switch приведен составной оператор, однако это совершенно не обязательно – после switch может находиться любой оператор, помеченный служебным словом case.

Напомним, что составной оператор, это заключенная в фигурные скобки последовательность операторов.Заметим также, что в PHP в качестве меток case могут использоваться не только литералы, но и сами метки могут быть переменными. В качестве меток case в PHP не могут выступать только массивы и объекты.

19Понятие цикла. Типы циклов. Цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность инструкций, организованная любым способом (например, с помощью условного перехода).Типы цикловБезусловные циклыИногда в программах используются циклы, выход из которых не предусмотрен логикой программы. Такие циклы называются безусловными, или бесконечными. Специальных синтаксических средств для создания бесконечных циклов, ввиду их нетипичности, языки программирования не предусматривают, поэтому такие циклы создаются с помощью конструкций, предназначенных для создания обычных (или условных) циклов. Для обеспечения бесконечного повторения проверка условия в таком цикле либо отсутствует (если позволяет синтаксис, как, например, в цикле LOOP…END LOOP языка Ада), либо заменяется константным значением (while true do … в Паскале). В языке С используется цикл for(;;) с незаполненными секциями.

Цикл с предусловиемЦикл с предусловием — цикл, который выполняется пока истинно некоторое условие, указанное перед его началом. Это условие проверяется до выполнения тела цикла, поэтому тело может быть не выполнено ни разу (если условие с самого начала ложно). В большинстве процедурных языков программирования реализуется оператором while, отсюда его второе название — while-цикл.

Цикл с постусловием — цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что тело всегда выполняется хотя бы один раз. В языке Паскаль этот цикл реализует оператор repeat..until; в Си — do…while. В трактовке условия цикла с постусловием в разных языках есть различия. В Паскале и языках, произошедших от него, условие такого цикла трактуется как условие выхода (цикл завершается, когда условие истинно, в русской терминологии такие циклы называют ещё «цикл до»), а в Си и его потомках — как условие продолжения (цикл завершается, когда условие ложно, такие циклы иногда называют «цикл пока»).

Цикл с выходом из серединыЦикл с выходом из середины — наиболее общая форма условного цикла. Синтаксически такой цикл оформляется с помощью трёх конструкций: начала цикла, конца цикла и команды выхода из цикла. Конструкция начала маркирует точку программы, в которой начинается тело цикла, конструкция конца — точку, где тело заканчивается. Внутри тела должна присутствовать команда выхода из цикла, при выполнении которой цикл заканчивается и управление передаётся на оператор, следующий за конструкцией конца цикла. Естественно, чтобы цикл выполнился более одного раза, команда выхода должна вызываться не безусловно, а только при выполнении условия выхода из цикла.Принципиальным отличием такого вида цикла от рассмотренных выше является то, что часть тела цикла, расположенная после начала цикла и до команды выхода, выполняется всегда (даже если условие выхода из цикла истинно при первой итерации), а часть тела цикла, находящаяся после команды выхода, не выполняется при последней итерации.

Цикл со счётчикомЦикл со счётчиком — цикл, в котором некоторая переменная изменяет своё значение от заданного начального значения до конечного значения с некоторым шагом, и для каждого значения этой переменной тело цикла выполняется один раз. В большинстве процедурных языков программирования реализуется оператором for, в котором указывается счётчик (так называемая «переменная цикла»), требуемое количество проходов (или граничное значение счётчика) и, возможно, шаг, с которым изменяется счётчик. Например, в языке Оберон-2 такой цикл имеет вид:Цикл со счётчиком всегда можно записать как условный цикл, перед началом которого счётчику присваивается начальное значение, а условием выхода является достижение счётчиком конечного значения; к телу цикла при этом добавляется оператор изменения счётчика на заданный шаг. Однако специальные операторы цикла со счётчиком могут эффективнее транслироваться, так как формализованный вид такого цикла позволяет использовать специальные процессорные команды организации циклов.

20Операторы циклов. Оператор for.Операторы цикла задают многократное исполнение операторов в теле цикла. В PHP определены 4 разных оператора цикла:цикл с предусловием:цикл с постусловием: итерационный цикл: итерационный цикл foreach.

Если 3 первых оператора цикла берут свое начало от С-подобных языков, то последний оператор позаимствован у языка Perl (кстати, цикл foreach мы разберем попозже – в главе 4, посвященной массивам).Формат оператора цикла for: for ( выражение1; выражение2; выражение3 ) оператор;Выполнение оператора цикла for начинается с вычисления "выражения1". Это своего рода инициализация цикла, которая выполняется только один раз и предшествует последующим действиям.После этого вычисляется "выражение2". Если оно истинно, то выполняется "оператор". Далее вычисляется "выражение3". Первая итерация цикла закончена. Вторая итерация начинается опять с вычисления "выражения2". Если оно истинно, то выполняется "оператор". Далее опять вычисляется "выражение3" и так продолжается до тех пор, пока "выражение2" будет истинным. Если же уже на первой итерации "выражение2" будет ложным, то цикл не исполнится ни разу.Если вникнуть в логику работы оператора цикла for, то можно заметить, что она полностью соответствует следующему фрагменту кода с использование оператора цикла while.

21Оператор цикла while.Оператор while называется оператором цикла с предусловием. При входе в цикл вычисляется выражение условие, и, если его значение отлично от нуля, выполняется тело цикла. Затем вычисления выражения условия и операторов тела цикла выполняется до тех пор, пока значение выражения условия не станет равным нулю. Оператором while удобно пользоваться для просмотра всевозможных последовательностей, если в конце них находится заранее известный символ. (Это очень удобно в C++, к примеру для определения длины строки, поскольку в С++, по определению, строка есть последовательность символов типа char, заканчивающаяся нулевым символом). Для выхода из цикла применяется оператор break. При обнаружении этого оператора текущая итерация цикла прекращается, и последующие итерации не происходят. При выполнении следующего примере, несмотря на то, что переменная $var = 7, в окне браузера появятся цифры от 1 до 3. Иногда бывает нужно прервать только текущую итерацию, и перейти сразу к следующей. Для этого применяется оператор continue. Заметим, что если Вы условный оператор поставите после операторов echo, код будет ошибочным, и выведутся все цифры от 1 до 7, поскольку проверка условия выхода из цикла на данной итерации, будет происходить уже после выполнения этой итерации.

22 Задача о табулировании функции в равноотстоящих точках.Задача табулирования функции предполагает получение таблицы значений функции при изменении аргумента с фиксированным шагом. В качестве исходной информации должны быть заданы: Х0, Хn – начало и конец промежутка табулирования, при этом (Х0< Хn); n – число шагов разбиения промежутка [Х0, Xn]; F(X) – описание табулируемой функции.При составлении алгоритма предполагается, что X – текущее значение аргумента; h – шаг изменения аргумента (иногда его называют шагом табуляции функции); i – текущий номер точки, в которой вычисляются функция (i = 0 .. n). Количество интервалов n, шаг табуляции h и величины Х0, Хn связаны между собой фор-мулой: Интерпретация переменных (т. е. их обозначение в математической постановке задачи, смысл и тип, обозначения в блок-схеме и программе) приведена в таблице имен.

int a,b;

double h,x,y;

printf("Vvedite a \n");

scanf("%d", &a);

printf("Vvedite b \n");

scanf("%d",&b);

h=(b-a)/1000.;

for(x=a; x<b; x=x+h)

{

y=sin(x);

printf("x= %lf ,y= %lf \n",y,x);

}

return 0;

23Оператор цикла do-while.Оператор цикла do-while является оператором цикла с постусловием, так как в нем анализ конца цикла производится после операторов тела цикла. Он используется, как и оператор while, когда количество итераций цикла заранее неизвестно и определяется в процессе выполнения цикла. Особенностью оператора является выполнение тела цикла хотя бы один раз.Общий вид оператора:do S while (b );Здесь S – простой или составной оператор – тело цикла. Он должен включать рабочую часть цикла и операторы изменения операндов выражения b (подготовки данных для очередного шага цикла); b – выражение любого типа, например, логическое, приводимое к арифметическому типу, определяющее условие повторения цикла.Оператор цикла do-while выполняется по схеме цикла с постусловием.Пример. Найти сумму первых N членов ряда .Решение. Введем обозначения: – сумма ряда, – произвольный член ряда. Сумму вычислим в цикле как нарастающую сумму: . Для вычисления значения очередного члена ряда достаточно значение предыдущего члена ряда умножить на , т.е. . Полученная формула называется рекуррентной. Она позволяет вычислить любой член ряда, если известен первый член ряда.К моменту исполнения первой итерации цикла значения C иU должны быть определены: . Параметром цикла пусть будет переменная k. Параметр k должен изменяться от 1 до N с шагом 1. Выражение должно быть выполнено хотя бы один раз (для N=1 – один раз; для N=2 – два раза и т. д.), поэтому для вычисления суммы следует использовать цикл с постусловием.

24Понятие массива. Размерность, размер массива. Синтаксис описания массивов.Массив – это совокупность элементов одного типа, имеющих одно имя и расположенных в памяти ПК вплотную друг к другу. Массивы могут состоять из арифметических данных, символов, строк, структур, указателей. Доступ к отдельным элементам массива осуществляется по имени массива и индексу (порядковому номеру) элемента.При объявлении массива в программе определяется имя массива, тип его элементов, размерность и размер. Размерность или количество измерений массива определяется количеством индексов при обращении к элементам массива. Массивы бывают одномерные, двухмерные, трехмерные и т.д. . Размер массива – это количество его элементов по соответствующим размерностям. Общий вид объявления массива:

<имя_типа> <имя_массива> [k1] [k2] … [kn];где k1, k2, …, kn – количество элементов массива – константы или константные выражения по 1, 2, …, n измерениям. Причем значения индексов могут изменяться от 0 до ki – 1.Такое объявление массива называют статическим, поскольку предельное количество его элементов известно заранее и оно уже не может быть изменено в ходе выполнения программы.

25.Ввод-вывод одномерного массива.

#include <windows.h>

#include <locale.h>

#include <stdio.h>

#include <conio.h>

#include <math.h>

int main(void)

{

setlocale(LC_ALL, "Russian");

int n,i;

puts("Введите число элементов массива M"); //начало ввода

scanf("%d",&n);

float *M=new float [n];

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

{

printf("Введите число M[%d]=",i);

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

} //конец ввода

puts("Массив M");

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

printf("%.3f ",M[i]);

printf("\n");

system("pause");

return 0;

}

26.Вычисление суммы элементов одномерного массива.

int n,i;

float s;

ВВОД МАССИВА ИЗ 25

s=0;

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

s=s+M[i];

printf("Сумма: %.3f\n",s);

27.Подсчет количества элементов одномерного массива, удовлетворяющих заданным условиям.

int n,i,z;

ВВОД МАССИВА ИЗ 25

z=0;

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

if (УСЛОВИЕ)

z=z+1;

28.Вычисление произведения элементов одномерного массива.

int n,i;

float s;

ВВОД МАССИВА ИЗ 25

s=1;

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

s=s*M[i];

printf("Произведение: %.3f\n",s);

29.Поиск элементов одномерного массива, обладающих заданным свойством.

int n,i;

ВВОД МАССИВА ИЗ 25

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

if (СВОЙСТВО)

printf("%.3f ",M[i]);

printf("\n");

30.Поиск максимального (минимального) элемента одномерного массива и его местоположения.

int n,i,x,y;

float min,max;

ВВОД МАССИВА ИЗ 25

min=M[0];

max=M[0];

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

{

if (M[i]<min)

{

min=M[i];

x=i;

}

if (M[i]>max)

{

max=M[i];

y=i;

}

}

printf("Минимальное число: M[%d]=%.3f, максимальное число: M[%d]=%.3f\n",x,min,y,max);

31.Формирование нового одномерного массива из элементов удовлетворяющих заданным условиям.

int n,i;

puts("Введите число элементов массива M");

scanf("%d",&n);

float *M=new float [n];

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

{

go:

printf("Введите число M[%d]=",i);

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

if (!(УСЛОВИЕ))

{

puts("Недопустимое значение");

goto go;

}

}

33.Ввод-вывод двумерного массива.

int n,i,m,k,j;

puts("Введите число строк массива M"); //начало ввода

scanf("%d",&n);

puts("Введите число столбцев массива M");

scanf("%d",&m);

float **M = new float*[n];

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

M[k] = new float[m];

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

for(j=0;j<m;j++)

{

printf("Введите число M[%d,%d]=",i,j);

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

} //конец ввода

puts("Массив M:");

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

{

for(j=0;j<m;j++)

{

printf("%.3f ",M[i][j]);

}

printf("\n");

}

34.Вычисление суммы элементов двумерного массива.

int n,i,m,k,j;

float s;

ВВОД МАССИВА ИЗ 33

s=0;

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

for(j=0;j<m;j++)

s=s+M[i][j];

printf("Сумма: %.3f\n",s);

35.Подсчет количества элементов двумерного массива, удовлетворяющих заданным условиям.

int n,i,m,k,j,z;

ВВОД МАССИВА ИЗ 33

z=0;

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

for(j=0;j<m;j++)

if (УСЛОВИЕ)

z=z+1;

36.Вычисление произведения элементов двумерного массива.

int n,i,m,k,j;

float s;

ВВОД МАССИВА ИЗ 33

s=1;

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

for(j=0;j<m;j++)

s=s*M[i][j];

printf("Произведение: %.3f\n",s);

37.Поиск элементов одномерного массива, двумерного заданным свойством.

int n,i,m,k,j;

ВВОД МАССИВА ИЗ 33

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

for(j=0;j<m;j++)

if (СВОЙСТВО)

printf("%.3f ",M[i][j]);

printf("\n");

38.Поиск максимального (минимального) элемента двумерного массива и его местоположения.

int n,i,m,k,j,x1,y1,x2,y2;

float min,max;

ВВОД МАССИВА ИЗ 33

min=M[0][0];

max=M[0][0];

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

for(j=0;j<m;j++)

{

if (M[i][j]<min)

{

min=M[i][j];

x1=i;

y1=j;

}

if (M[i][j]>max)

{

max=M[i][j];

x2=i;

y2=j;

}

}

printf("Минимальное число: M[%d,%d]=%.3f, максимальное число: M[%d,%d]=%.3f\n",x1,y1,min,x2,y2,max);

39.Понятие и описание строки. Ввод-вывод строк.

Для обработки символов и удобства хранения, им присвоены коды – целые числа.

Таким образом, все символы могут быть представлены в одном байте (максимальное число символов в одном байте – 255 ). Т.е. символьная переменная это фактически – числовая (байтовая) переменная, с диапазоном 0…255.

В языке Си отсутствует специальный строковый тип. Строка в Си – это массив символов.

В памяти ЭВМ строка представляется как массив элементов типа char, в конце которого помещается символ '\0' - завершающий нуль-символ. Нулевой байт – это байт, каждый бит которого равен нулю, при этом для нулевого байта определена символьная константа ´\0´ (признак окончания строки, или «нуль-символ»). Поэтому если строка должна содержать k символов, то в описании массива размер должен быть k+1.

Чтобы объявить переменную символьного типа, нужно записать:

char c;

Для ввода – вывода строк используются функции (объявлены в заголовочном файле stdio.h): gets и puts, scanf и printf.

Функции gets и puts используются, если работа производится только со строками. Функции scanf и printf удобнее использовать в том случае, если в одном операторе требуется ввести или вывести данные разных типов или использовать форматирование.

Функция gets предназначена для ввода строки из стандартного потока ввода stdin: gets(name), где name – указатель на начало строки.

Функция puts предназначена для вывода строки в стандарный поток вывода stdout. puts(name), где name – указатель на начало строки или строка символов, заключенная в кавычки.

Операции присваивания и копирования

Присваивание можно выполнить посимвольно, т.е. "вручную", или с помощью стандартных функций strcpy и strncpy.

Первый способ:

char s1[25], s2[25];

for (int i = 0; i <= strlen(s1); i++) s2[i] = s1[i];

Рассмотрим второй способ. Для использования функций strcpy и strncpy к программе следует подключить заголовочный файл <string.h> .

strcpy(s1,s2) – Функция копирует все символы строки s2, включая завершающий нуль-символ, в строку s1 и возвращает s1.

Пример 1.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]