Структура программы на языке Си 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Структура программы на языке Си



Программа на языке Си состоит из директив препроцессора, объявлений глобальных переменных, одной или нескольких функций, cреди которых одна главная (main) функция первой получает управление и руководит дальнейшей работой программы. Комментарий в программе – любая последовательность символов, заключенная между парой символов /* */ (многострочный комментарий) или после пары символов // и до конца строки (однострочный комментарий)

Общая структура программы на языке Си имеет вид:

<директивы препроцессора>

<определение типов пользователя – typedef>

<прототипы функций>

<определение глобальных объектов>

<функции>

Функции, в свою очередь, имеют структуру:

<класс_памяти> <тип> <имя функции> (<объявление параметров>)

{ – начало функции

<определение локальных объектов>

<инструкции (команды)>

} – конец функции

 

Перед компиляцией программы на языке Си автоматически выполняется предварительная (препроцессорная) обработка текста программы перед компиляцией.

Директивы препроцессора записываются по следующим правилам:

- все препроцессорные директивы должны начинаться с символа #, расположенного в первой позиции

- сразу за символом # должно следовать наименование директивы, указывающее текущую операцию препроцессора.

Наиболее распространены директивы #include и #define.

Директива #include используется для подключения к программе заголовочных файлов (обычных текстов) с декларацией стандартных библиотечных функций.

#include <stdio.h> – подключение разделов библиотек, осуществляющих ввод-вывод данных;

#include <conio.h> – функции работы с консолью;

#include <graphics.h>– графические функции;

#include <math.h> – раздел библиотеки с математическими функциями.

Директива #define создает макроконстанту, ее действие – весь файл.

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


Задания и методические указания

2.1. Программирование линейных вычислительных процессов. Разветвляющиеся алгоритмы.

Минимально возможная программа на языке Си выглядит таким образом:

Листинг 1.

main()

{

return 0; /* комментарий заключен в двухсимвольные ограничители */

}

 

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

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

  • Полная форма: имя_переменной =выражение;

Например: y=(x+2)/(3*x)-5;

С помощью одного оператора можнo присвоить одно значение нескольким переменным

x=y=z=0; /*т.е. x=0, y=0, z=0*/

z=(x=y)*5; /*сначала переменной x присваивается значение переменной y, далее вычисляется выражение x*5, результат присваивается переменной z */.

  • Сокращенная форма: имя_переменной операция=выражениe;

Например: x*=5; /* x=x*5; */

s+=7; /* s=s+7; */

y/=x+3; /* y=y/(x+3); */

В языке Си существует операции уменьшения (--) и увеличения (++) значения переменной на 1. Операции могут быть префиксные (++i, --i) и постфиксные (i++, i--). В случае префиксной операции сначала выполняется сама операция (изменяется значение i), потом вычисляется выражение. В случае постфиксной операции сначала вычисляется выражение, затем изменяется значение.

Например: b=7;

n=1;

если c=b*++n; /* n=n+1; c=b*n; т.е. c=14 */

если c=b*n++; /* c=b*n; n=n+1; т.е. c=7 */

 

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

¨ Операторы перехода

Оператор условного перехода if применяется для выбора одной из ветвей вычислений.

Общая форма записи:

if (условие) оператор1;

else оператор2;

Например: if(x>y) max=x;

else max=y;

Если оператор1 или оператор2 содержат два и более операторов, то они заключаются в фигурные скобки { } (составной оператор). В сокращенной форме записи вторая часть оператора (else оператор2;) может отсутствовать, и в случае ложности условия управление передается на следующий за if оператор. Если оператор1 и оператор2 в свою очередь являются операторами if, то такой оператор называют вложенным. При этом ключевое слово else принадлежит ближайшему предшествующему if.

Общий вид вложенного оператора: if (условие1) оператор1;

else if(условие2) оператор2;

else оператор3;

Например: найти наибольшее значение из трех чисел x,y,z.

if (x>y)

if (x>z) max=x;

else max=z;

else if(y>z) max=y;

else max=z;

В качестве условий используют следующие операции отношений: < (меньше), <= (меньше или равно), > (больше), >= (больше или равно), != (не равно), = = (равно).

Общий вид условия:

<выражение_1> <знак_операции> <выражение_2>

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

! (отрицание или логическое НЕТ), && (конъюнкция или логическое И), || (дизъюнкция или логическое ИЛИ) (перечислены в порядке убывания приоритетов).

Например: (0<x)&&(x<=100)

((!x)&&(y>0)||((z==1)&&(k>0))

Выражения вычисляются слева направо, пары символов не разделяются.

 

¨ Триадный оператор (оператор условного перехода ?:). Его форма:

имя_переменной =условие? выражение_1: выражение_2;

Если условие истинно, то переменной присваивается результат выражения_1, иначе – выражения_2.

Например: найти наибольшее из двух чисел: max=a>b? a: b;

 

Оператор ?: можно использовать для замены конструкции

if (условие) выражение_1; else выражение_2

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

Общая форма оператора выбора:

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

{ case const1: операторы; break;

case constN: операторы; break;

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

}

где const1…constN - целые или символьные константы; default - выполняется, если результат выражения не совпал ни с одной константой (может отсутствовать); break -oператор завершения работы switch. После выполнения одной из ветвей case все остальные ветви будут опущены. Оператор switch проверяет, совпадает ли значение выражения с одной из приведенных ниже констант. При совпадении выполняются операторы, стоящие после совпавшей константы.

Например:

switсh(i)

{ case 1: f=pow(x,2); break;

case 2: f=fabs(x); break;

case 3: f=sqrt(x); break;

default: printf(“Ошибка!”);

exit(1); }

 

 

Рассмотрим пример реализации линейного алгоритма средствами языка Си.

Листинг 2. Вычислить

 

#include <stdio.h> /* подключение заголовочных файлов, содержащих функции ввода-вывода */

#include <conio.h> /* подключение заголовочных файлов, содержащих функции работы с консолью */

#include <math.h> /* подключение заголовочных файлов, содержащих математические функции */

#define x 2.444 /* x=2.444 */

#define y 0.00869 /* y=0.00869 */

#define z -130.0 /* z=-130 */

void main(void) /* Заголовок главной функции */

{ /* Начало функции */

double rez,dop,a,b,c; /* Декларирование переменных */

clrscr(); /* Очистка экрана */

puts(" ЛАБОРАТОРНАЯ РАБОТА N1 - ЛИНЕЙНАЯ ПРОГРАММА ");

dop=fabs(y-x);

a=pow(x,y+1)+exp(y-1);

b=1+x*fabs(y-tan(z));

c=0.5*pow(dop,2)-pow(dop,3)/3;

rez=a/b*(1+dop)+c;

printf("\a\n ОТВЕТ: %lf, Press any key...", rez);

getch(); /* ЗАДЕРЖКА ДО НАЖАТИЯ ЛЮБОЙ КЛАВИШИ */

} /* Конец функции */

 

Выполните приведенную программу и убедитесь в правильности работы:

ОТВЕТ:-0.49871

 

Листинг 3. Вычислить значение функции F. Вывести сообщение о том, по какой ветви

происходило вычисления функции.

/*__________________________________*/

#include <conio.h>

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

#define A 1

#define C 3

double max(double m,double n) /* функция max с параметрами m и n */

{ /* для поиска максимального */

if (m>n) return m /* значения */

else return n;

}

double min(double m, double n) /* функция min с параметрами m и n */

{ /* для поиска минимального */

if (m<n) return m; /* значения */

else return n;

}

 

void main()

{

double x,y,f; /* декларирование переменных x,y,f */

clrscr();

puts("Введите значения x и y");

scanf("%lf %lf",&x,&y); /* ввод значений х и у */

if ((x>0)&&(y<0))

{ f=(A*x+tan(C*y))/(5-2*x);

puts("F=(а*x+tg(c*y))/(5-2*x)"); }

else if ((x<0)&&(y>0))

{

f=max(pow(x,2.0/3.0),cos(y*y)); /* вызов функции max */

puts("F=max(pow(x,2/3),cos(y*y))");

}

else if ((x>0)&&(y>0))

{

f=min(0.5*x-2*pow(sin(y),2),exp(y)); /* вызов функции min */

puts("F=min(0.5*x-2*pow(sin(y),2),exp(y))");

}

else

{ puts("Функция F не определена\n Press any key...");

getch();

exit(1); /* ПРИНУДИТЕЛЬНОЕ ЗАВЕРШЕНИЕ ПРОГРАММЫ */

}

printf("ОТВЕТ: F=%lf,\n Press any key...\n",f); /* ВЫВОД РЕЗУЛЬТАТА */

getch();

}

Задача1. Варианты

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

1.1. , где

1.2. где

1.3. где

1.4. где

1.5. где

1.6. где

1.7. где

1.8. , где

1.9. , где

1.10.

Определить значение функции F. Предусмотреть вывод сообщения о том, по какой ветви происходило вычисление.

1.11. ,

1.12. ,

1.13. ,

1.14. Ввести три числа x,y,z. Вычислить

a)r=max(min(x,y),z); b)r=max(x,0)+min(y,z); c)r=min(x,y,0)+max(y,z);

d) произведение двух наименьших из 3 чисел

1.15. Ввести четыре числа a,b,c,d. Расположить их по возрастанию

1.16. Даны длины 3 отрезков A,B,C. Определить возможность построения треугольника и его вид (разносторонний, равнобедренный, равносторонний)

1.17. Ввести целое число, представляющее оценку по пятибалльной системе. Вывести «не явился», «неуд.», «удовл.», «хорошо», «отлично» в зависимости от оценки

1.18. Ввести целое число, представляющее оценку по 10-балльной системе. Вывести «не явился», «неуд.», «удовл.», «хорошо», «отлично» в зависимости от оценки и получить аналог оценки в 5-бальной системе

1.19. Даны 2 вещественных числа x,y. Вывести “Y” или “N” в зависимости от того, принадлежит ли точка плоскости с координатами (x,y) кольцу, ограниченному окружностями с радиусами r и R (r<R) с общим центром в точке с координатами (a, b)

1.20. Даны два вещественных числа x,y. Если точка плоскости с координатами (x,y) принадлежит треугольнику с вершинами в точках (-2,0), (0,2), (2,0), то обе координаты увеличить в 10 раз, в противном случае x=x-10, y=y-10.



Поделиться:


Последнее изменение этой страницы: 2016-12-17; просмотров: 275; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.12.172 (0.065 с.)