Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Программирование алгоритма линейной структуры на языке Си
Чаще всего линейные алгоритмы используются для программирования вычислений по формулам. В этом случае удобно использовать набор стандартных функций Си, содержащихся в библиотеке и доступных при подключении заголовочного файла math.h: sin (x) - sin x; cos (x) – cos x; tan(x) - tg х; log (x) - ln x; log10(x) – lg x; exp(x) - показательная функция ex; sqrt (x)- корень квадратный от х; роw(x, y) – x в степени y; abs(x)- модуль x.; acos(x) – arccos x; asin(x) – arcsin x; atan(x)- arctg x; sinh(x)- sh x; cosh (x) – ch x; tanh(x)-th x. Для тригонометрических функций аргумент х измеряется в радианах и имеет тип double, как и значения функций. Пример программы линейной структуры: Вычислить площадь и стороны прямоугольного треугольника, если известны гипотенуза c и угол x. Для вычислений воспользуемся формулами: a=c• sin x; b=c• cos x; S=ab; Программа вычислений имеет вид: // вычисление сторон и площади треугольника #include < stdio.h> //заголовочный файл для организации ввода-вывода #include < math.h> //заголовочный файл математических функций main() //главная функция {float a, b, c, x, S; //описание переменных вещественного типа printf (“\n Введите гипотенузу и угол треугольника ”); scanf (“%f%f “, & c, & x); // ввод значений вещественного типа a=c*sin(x); b=c*cos(x); S=a*b; printf (“\n Результаты: a=%7.2f b=%7.2f S=%7.2f “, a, b, S); return 0; }
Комментарий в программе не влияет на компиляцию программы, а служит для разъяснения действий основных блоков текста и программы в целом. Однострочный комментарий действует от двух символов // до конца строки. Многострочный комментарий заключается в пары символов /* и */. Вторая строка программы #include < stdio.h> является директивой компилятора для включения заголовочного файла stdio.h для доступа к средствам ввода-вывода (связи с внешними устройствами), отсутствующими в самом языке Си. Третья строка - #include< math.h> является директивой компилятора для включения заголовочного файла math.h, обеспечивающего выполнение математических функций. Программа на языке Си состоит из ряда функций, из которых функция main (главная) является обязательной и служит точкой входа в программу. В круглые скобки заключаются параметры функции, причем наличие круглых скобок обязательно, если даже список параметров пуст. В фигурные скобки заключаются составной оператор (несколько операторов). Для придания тексту программы наглядности открывающая и соответствующая ей закрывающая фигурные скобки печатаются на одном уровне, а заключенный между ними текст сдвигается на 1-2 символа вправо, вложенный блок также сдвигается вправо и т.д. Образуется иерархия вложенных блоков, придающая программе на Си характерный вид. В программе описаны переменные a, b, c, х, S вещественного типа (float). В отличие от других языков в Си учитывается регистр при определении имени переменной, т.е. s и S – разные переменные. Функции printf и scanf доступны при подключении заголовочного файла stdio.h и служат для вывода на экран и ввода с клавиатуры соответственно. Управляющие символы \n в функции printf служат для перевода на новую строку. Символ & в функции scanf указывает на адрес вводимой переменной. Ввод и вывод переменных вещественного типа производится в формате f. Признаком форматного вывода в функции printf является %. При выводе между знаком процента и форматной переменной f можно включить общую ширину поля вывода и число позиций после десятичной точки. Оператор return 0; служит для выхода из функции main, 0 является признаком успешного окончания программы. Завершает текст программы закрывающая фигурная скобка, означающая конец функции main. Понятие о препроцессоре языка Си Препроцессором называется составная часть компилятора, которая производит обработку исходного текста программы перед ее трансляцией. Управление работой препроцессора осуществляется с помощью специальных директив. Все директивы препроцессора начинаются со знака #. Ранее была рассмотрена директива include. Вместо нее в исходный текст программы препроцессор вставляет содержимое файла, указанного в директиве. Так, по директиве #include < stdio.h> в текст программы вставляет содержимое файла stdio.h, находящегося в специальном системном каталоге, а только потом происходит трансляция. Если в директиве #include имя файла заключено в кавычки, то вставляемый файл вначале ищется по правилам, предусмотренным MSDOS, а только потом в специальном системном каталоге. Например, по директиве препроцессора #include " func.h" будет осуществлена вставка текста из файла func.h, находящегося в текущем каталоге текущего диска. Директива #define используется для назначения символических имен различным строкам текста. Например, директива:
#define PI 3.14159
осуществляет назначение имени PI строки 3.14159. В дальнейшем, вместо 3.14159 в программе можно использовать имя PI. Вместо него перед трансляцией программы препроцессор подставит соответствующую строку. В принципе строка может быть сколь угодно сложной, например:
#define TITLE printf(" -------sin(x)-------cos(x)-------" );
Однако использовать такие конструкции не рекомендуется ввиду сложности отыскания ошибок. Операторы языка Си и приемы программирования Оператор (statement - предложение) - блок, используемый при создании программы. Программа всегда представляет собой последовательность операторов ( предложений ). Признаком конца оператора в простейшем случае является "; ". Одиночная "; " является пустым оператором. Как было отмечено выше, точка с запятой поставленная в конце выражения превращает его в оператор. Кроме простого оператора в языке Си вводится понятие составного оператора, который представляет собой несколько операторов, заключенных в фигурные скобки:
составной_оператор = " {" оператор { оператор } " }"
Пример: { a = b + c; scanf( " %lf", & t ); }
Составной оператор рассматриваются компилятором как одиночный оператор и может быть использован в любом месте, где допускается использование одиночного оператора. Все операторы языка Си, кроме оператора-выражения начинаются с ключевых слов. Например, описания начинаются с int, double и т.д. Ключевые слова являются зарезервированными, т.е. их нельзя использовать для обозначения объектов программ. Имена стандартных функций не являются зарезервированными. Оператор цикла while Оператор цикла while предназначен для реализации циклических алгоритмов и имеет следующую форму записи
" while" " (" выражение " )" оператор
Пример: while( a < 18 ) a = a+2;
При выполнении оператора цикла while вначале вычисляется выражение. Если оно не равно 0, то выполняется оператор. Далее снова вычисляется выражение и если оно не равно 0, то снова выполняется оператор. Такие циклические действия продолжаются до тех пор, пока выражение отлично от 0. Отсюда и название цикла while ( пока ). Как только выражение станет равным 0 цикл прекращает выполнятся и управление передается на следующий за циклом оператор. Циклически выполняемый оператор обычно называют телом цикла. Если в теле цикла необходимо разместить не один, а несколько операторов, то в этом случае используют составной оператор. Все операторы тела цикла должны быть записаны с отступом, обычно в три пробела. Рассмотрим пример программы, которая выводит на экран таблицу функций sin(x) и cos(x):
#include < math.h> #include < stdio.h>
void main( void ) { double x = 0; while( x < 3.0 ) { printf( " %6.3lf %9.6lf %9.6lf\n", x, sin(x), cos(x) ); x += 0.2; } }
Если после while( x < 3.0 ) ошибочно поставить точку с запятой, то никаких сообщений об ошибках выдано не будет, но цикл станет бесконечным. Действительно, в этом случае тело цикла будет пустым оператором "; ", переменная x не будет меняться, следовательно, результат выражения x < 3.0 всегда будет отличен от нуля. В теле правильно организованного цикла обязательно должны содержатся операции, влияющие на выражение в заголовке цикла так, чтобы цикл рано или поздно завершился. Популярное:
|
Последнее изменение этой страницы: 2016-03-17; Просмотров: 748; Нарушение авторского права страницы