И математическое моделирование

Вид материалаМетодические указания

Содержание


Операция деления.
Операции «запятая».
Лабораторная работа № 3
4. Основы структурного программирования
2. Операторы языка Си
Составные операторы.
3. Программирование конструкций с ветвлением
Оператор выбора.
4. Программирование циклических конструкций
Цикл с параметром.
Лабораторная работа № 4
Индивидуальные задания
Подобный материал:
1   2   3   4   5

Операция деления. При использовании этой операции следует обратить внимание на следующий момент. Кроме привычного для нас деления, согласно которому, скажем, 5/2 = 2.5, существует ещё и так называемое целое деление, при котором 5/2 = 2 (учитывается только целая часть). При этом, «обычное» (традиционное) деление применяется, если хотя бы один из аргументов является действительным числом, а «целое» – если оба аргумента являются целыми. Рассмотрим следующий пример.


void main()

{

float a = 5/2; // вопреки ожиданиям, a равно не 2.5, а 2.

float b = 5.0f/2; // b = 2.5, поскольку один из

// аргументов типа float

int c = 4, d = 3;

float e = c/d; // e = 1

float f = (float)c/d; // f = 1.3333, т.к. перед делением к c

// применено преобразование типа к float

float g = 1.0f*c/d // g = 1.3333, т.к. 1.0f*c = 4.0f (float)

}

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


Операции «запятая». Используется в том случае, если необходимо произвести вычисление нескольких выражений, а по синтаксису предполагается только один. При этом, возвращаемое значение соответствует последнему выражению в списке. Например, после выполнения команды: a=(3+2,4,0), значение переменной a будет равняться 0.


2. Математические функции


При организации вычислений зачастую бывает недостаточно операций, перечисленных в таб.3.1, например, если на каком-то шаге необходимо организовать вычисление функций sin(x), ex, и т.д. Для подобных вычислений необходимо воспользоваться библиотечными математическими функциями. Для этого, прежде всего, необходимо подключить библиотечный файл math.h при помощи директивы #include.

Основные математические функции с их назначением приведены в таб.3.2


Таблица 3.2

Сигнатура функции

Назначение

int abs (int x)

long labs (long x)

double fabs (double x)

long double fabsl (long double x)



double cos (double x)

long double cosl (long double x)



double sin (double x)

long double sinl (long double x)



double tan (double x)

long double tanl (long double x)



double cosh (double x)

long double coshl (long double x)



double sinh (double x)

long double sinhl (long double x)



double tanh (double x)

long double tanhl (long double x)



double acos (double x)

long double acosl (long double x)



double asin (double x)

long double asinl (long double x)



double atan (double x)

long double atanl (long double x)



double sqrt (double x)

long double sqrtl (long double x)



double exp (double x)

long double expl (long double x)



double log (double x)

long double logl (long double x)



double log10 (double x)

long double log10l (long double x)



double pow (double x, double y)

long double powl (long double x, long double y)



double ceil (double x)

long double ceill (long double x)

Целое с избытком

double floor (double x)

long double floorl (long double x)

Целое с недостатком

double atof (const char *s)

long double _atold (const char *s)

Преобразует строку s в число соотв. типа



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

ОРГАНИЗАЦИЯ ВЫЧИСЛЕНИЙ


Цель:
  1. Изучение основных операций языка Си.
  2. Изучение библиотечных математических функций.

Контрольные вопросы:
  1. Чему равно значение переменных a, b и с после выполнения следующих фрагментов кода:

а) int a = 1, b = 1, c = 1;

a += b += c += 2;

б) int a = 1, b = 1, c = 1;

a = (b+=(c+=2, a++, 3), b++, c--);

в) int a=1, b=1, c=1

a*= a -= b += c++
  1. а=2. Как изменится значени переменной а, если его побитово сдвинуть влево а<<=a
  2. Чему будет равно значение переменно а после выполнения следующих операций над ним: a=5, (int)a/2 – (int)(a/2)
  3. Подсчитайте что больше int(a+b) или float(int(a)+int(b)) при a = 5.1f, b = 3.1f;

Задание:

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


Индивидуальные задания:

1. Посчитать значение функции ;

2. Посчитать значение функции ;

3. Посчитать значение функции ;

4. Посчитать значение функции ;

5. Посчитать значение функции ;

6. Посчитать значение функции ;

7. Посчитать значение функции ;

8. Посчитать значение функции ;

9. Посчитать значение функции ;

10. Посчитать значение функции ;

11. Посчитать значение функции ;

12. Посчитать значение функции ;

13. Посчитать значение функции ;

14. Посчитать значение функции ;

15. Посчитать значение функции ;


4. ОСНОВЫ СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ


1. Основные принципы структурного программирования


Структурное программирование – это методология разработки программного обеспечения, предложенная в 70-ех годы XX века Дейкстрой, и в последствии разработанная и дополненная Виртом.

В соответствии с данной методологией любая программа представляет собой структуру, построенную из трёх типов базовых конструкций:
  • последовательное исполнение – однократное выполнение операторов в том порядке, в котором они записаны в тексте программы;
  • ветвление – однократное выполнение одного из двух и более операторов в зависимости от выполнения или не выполнения некоторого заданного условия;
  • цикл – многократное исполнение одного и того же оператора до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).

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

Разработка программы ведётся пошагово, методом «сверху вниз». Сначала пишется текст основной программы, в котором вместо каждого связного логического фрагмента текста вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки», которые ничего не делают. Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (общая структура программы верна), подпрограммы-заглушки последовательно заменяются реально работающими, причём разработка каждой подпрограммы ведётся так же методом «сверху вниз». Разработка заканчивается тогда, когда не останется ни одной «заглушки», которая не была бы заменена работающей подпрограммой. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов и может быть уверен, что общая структура всех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая непосредственно не связанные с ними части программы. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.


2. Операторы языка Си


Элементарными структурными единицами, из которых строится любая программа на языке Си, являются операторы. Различают следующие виды операторов:
  • операторы-выражения;
  • составные операторы;
  • операторы выбора;
  • операторы циклов;
  • операторы перехода2.


Операторы-выражения. К выражениям относят языковые конструкции, составленные из переменных, констант и операций по правилам синтаксиса языка. Любое выражение, заканчивающееся точкой с запятой, в языке Си является оператором, направленным на вычисление данного выражения. Например:


a = b + c;

d = a + sin(a+b+c);

a+c;

a+d=c;


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


{

оператор1;

оператор2;

…..

операторN;

}


3. Программирование конструкций с ветвлением


Конструкции с ветвлением в языке Си представлены двумя видами условных операторов: оператором выбора и переключателем.


Оператор выбора. Данный оператор имеет полную и сокращенную форму:


if (выражение-условие) оператор1; // сокращенная форма

if (выражение-условие) оператор1; // полная форма

else оператор2;


В сокращённой форме – оператор1 выполняется только в том случае, если выражение-условие отлично от 0. В полной форме – если условие-выражение не равно 0, выполняется оператор1, иначе – оператор2.


Переключатель. Имеет следующий вид:


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

{

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

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

. . . . . . . . . . .

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

}


При выполнении оператора switch, вычисляется выражение, записанное после switch (оно должно быть целочисленным). Полученное значение последовательно сравнивается с константами, которые записаны следом за case. При первом же совпадении выполняются все операторы от двоеточия до окончания switch-оператора, т.е. до закрывающейся фигурной скобки. Поэтому если необходимо выполнить только действие между двумя ключевыми словами case, то набор операторов в соответствующей секции должен заканчиваться оператором break, выводящим управление за пределы оператора switch. Если выражение не равно ни одной из констант, выполняется секция, расположенная после default. Данная секция является необязательной и может отсутствовать.


#include


void main()

{

int k;

scanf(“%i”, &k);


switch(k)

{

case 1: printf(“1”);

case 2: printf(“2”);

case 3: printf(“3”); break;

case 4: printf(“4”);

default: printf(“other”);

}

}


В данной программе пользователю предлагается ввести число k с клавиатуры. В том случае, если введено число 1 – на экран выведется строка «123», число 2 – «23», число 3 – «3», число 4 – «4other», какое-либо другое число – «other».


4. Программирование циклических конструкций


Циклические конструкции реализуются при помощи операторов цикла. В Си используются:
  • цикл с предусловием;
  • цикл с постусловием;
  • цикл с параметром.


Цикл с предусловием. Имеет следующий вид:


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


Оператор выполняется до тех пор, пока выражение-условие не нулевое.


Алгоритм работы цикла:
  1. если выражение-условие == 0, выйти за пределы цикла;
  2. выполнить оператор;
  3. перейти к шагу 1.


Цикл с постусловием. Имеет вид:


do оператор; while (выражение-условие);


Тело цикла выполняется до тех пор, пока выражение-условие не станет нулевым.


Алгоритм работы цикла:
  1. выполнить оператор;
  2. если выражение-условие != 0, перейти к шагу 1;

Таким образом, в зависимости от выражения-условия, тело цикла с предусловием может не выполняться ни разу, выполняться один или несколько раз. Тело цикла с постусловием – всегда выполняется хотя бы один раз.


Цикл с параметром. Имеет вид:


for (выражение_1; выражение-условие; выражение_3)оператор;


Сначала выполняется выражение_1; далее, пока выражение-условие не нулевое, последовательно выполняются оператор и выражение_3.


Алгоритм работы цикла:
  1. выполнить выражение_1;
  2. если выражение-условие == 0, выйти из цикла;
  3. выполнить оператор;
  4. выполнить выражение_3;
  5. перейти к шагу 2.


Пример применения циклов.


// Вывод на экран чисел от 1 до N.


#include


void main()

{

int N;

printf(“N = ”); scanf(“%i”, &N);


// вариант решения при помощи цикла с параметром

for(int i=1; i<=N; i++)printf(“%i\n”, i);


// вариант решения при помощи цикла с предусловием

int j = 1;

while(j<=N)

{

printf(“%i\n”, j);

j++;

}


// вариант решения при помощи цикла с постусловием

int k = 1;

do printf(“%i\n”, k); while(++k<=N);

}

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

ПРОГРАММИРОВАНИЕ СТРУКТУР С ВЕТВЛЕНИЕМ


Цель:

Изучение условных операторов языка Си

Контрольные вопросы:
      1. Какие базовые алгоритмические конструкции Вы знаете? Опишите их.
      2. Что будет выведено на экран при выполнении следующего фрагмента:

int k=2

switch(k)

{

case 1: printf(“1”);

case 2: printf(“2”); k=4;

case 3: printf(“3”); break;

case 4: printf(“4”);

default: printf(“other”);

}
      1. Чему будет равно число а после выполнения кода:

int a;

int b=1,c=0,d=1;

if ((b==1)&&(c==1) || (d!=0)&&(c<1))

a = 1;

else

a = 0;


Задание:

Согласно вариантам реализовать программно решения задач A) и B) индивидуального задания. При решении для задачи A) использовать условный оператор, а для задачи B) – переключатель.


Индивидуальные задания:

1.

A) Даны три целых числа. Возвести в квадрат отрицательные числа и в третью степень — положительные (число 0 не изменять).

B) В восточном календаре принят 60-летний цикл, состоящий из 12 - летних подциклов, обозначаемых названиями цвета: зеленый, красный, желтый, белый и черный. В каждом подцикле годы носят названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. По номеру года вывести его название, если 1984 год был началом цикла – годом зеленой крысы.


2.

A) Из трех данных чисел выбрать наименьшее.

B) Дано целое число в диапазоне 100 – 999. Вывести строку – словесное описание данного числа, например: 256 – "двести пятьдесят шесть", 814 – "восемьсот четырнадцать".


3.

A) Из трех данных чисел выбрать наибольшее. 

B) Дано целое число в диапазоне 20 – 69, определяющее возраст (в годах). Вывести строку — словесное описание указанного возраста, обеспечив правильное согласование числа со словом "год", например: 20 — "двадцать лет", 32 — "тридцать два года", 41 — "сорок один год".


4.

A) Из трех данных чисел выбрать наименьшее и наибольшее.