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

Второй вариант – как на Паскале

#include <cstdio>

#include <math.h>

void main()

{ double a, b, e, x, c, fa, fc;

int n;

printf("Введите границы отрезка и точность: ");

scanf("%lf%lf%lf", &a, &b, &e);

n = 0;

while (fabs(a - b) > e)

{ c = (a + b) / 2;

fa = f(a);

fc = f(c);

if (fa * fc < 0)

b = c;

else

a = c;

n++;

}

x = (a + b) / 2;

printf("Корень уравнения = %lf\nЧисло итераций = %d\n", x, n);

}

Третий вариант – весь алгоритм помещен в заголовок цикла for

#include <cstdio>

#include <math.h>

void main()

{ double a, b, e, x, c, fa, fc;

int n;

printf("Введите границы отрезка и точность: ");

scanf("%lf%lf%lf", &a, &b, &e);

for (n = 0;

fabs(a - b) > e;

c = (a + b) / 2, fa = f(a), fc = f(c), fa * fc < 0 ? b = c : a = c, n++) ;

x = (a + b) / 2;

printf("Корень уравнения = %lf\nЧисло итераций = %d\n", x, n);

}

// Для объединения нескольких операторов

// в выражении приращения цикла for используется

// операция последовательного вычисления

3.2. Функция с переменным числом параметров, аналогичная функции printf

#include <cstdio>

#include <stdarg.h>

void print(char *format, ...);

void main()

{ int a = 45, b = 87;

double f = 2.75;

print("dfd", a, f, b);

}

void print(char * format, ...)

{ va_list list;

int n, i;

double f;

va_start(list, format);

for (i = 0; format[i]; i++)

switch(format[i])

{ case 'd':

n = va_arg(list, int);

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

break;

case 'f':

f = va_arg(list, double);

printf("%lf\n", f);

break;

}

va_end(list);

}

// Переменная для работы со списком аргументов

// Инициализация указателя на список аргументов

// Выбираем очередной параметр

// Выбираем очередной параметр

// Сброс указателя на список аргументов в NULL

1.1. Структура программы на языке С++

Любая программа на языке С++ представляет собой одну или несколько функций. В любой программе обязательно должна быть одна функций main(). C этой функции начинается выполнение программы. Правилом хорошего тона в программировании является разбиение задачи на подзадачи, и в главной функции чаще всего должны быть операторы вызова других функций. Общую структуру любой программы на языке Си можно записать следующим образом. Объявление глобальных переменных Тип_ результата main(Список_переменных) {  Операторы } Тип_результата f1(Список_переменных) {  Операторы  }  Тип_результата f2(Список_переменных)  {  Операторы }  ...  Тип_результата fn(Список_переменных) {  Операторы  } Здесь Тип_результата -  тип  возвращаемого функцией значения. В простейшем случае программа на языке Си состоит из одной функции main, в этом случае структура программы будет такой. int main() {  Операторы }

1.2. Пример простейшей программы на языке С++

Перед тем, как перейти к подробному изложению основ языка, рассмотрим пример программы на С++. Задача № 1.1. Известны длины двух катетов прямоугольного треугольника. Найти длину гипотенузы, площадь прямоугольника и величины его углов. #include <stdio.h> #include <math.h>  int main() { float a,b,c, alf,bet,s; printf("A="); scanf("%f",&a); printf("B="); scanf("%f",&b); s=a*b/2; c=pow(a*a+b*b,0.5); alf=atan(a/b); bet=3.14159/2-alf; printf("\n A=%5.2f \t B=%5.2f \t C=%5.2f \n",a,b,c); printf("\nS=%5.2f \t alf=%3.0f \t bet=%3.0f\n", s,alf*180/3.14159,bet*180/3.14159); } Листинг 1.1.  Рассмотрим подробно текст программы. Строки 1-2. Указывают компилятору (а точнее препроцессору), что надо использовать функции из библиотек, stdio.h и math.h. В данном случае они необходимы для выполнения операторов ввода scanf и вывода printf (stdio.h) и математических функций возведения в степень pow и вычисление арктангенса atan (math.h). Строка 5. Описание вещественных переменных a,b,c,alf,bet,s. Строка 6. Оператор вывода строки символов А=. Строка 7. Оператор ввода вещественного числа a. В этом операторе (а точнее в функции scanf) должны быть два параметра:

  • строка, в которой указывают типы вводимых переменных, перед кодом типа должен быть символ %; символ f используется для указания вещественного типа, d – для целого типа;

  • список адресов вводимых переменных, для вычисления адреса переменной используется символ &.

Строка 8. Оператор вывода строки символов B=. Строка 9. Оператор ввода вещественного числа b. Строка 10. Оператор присваивания для вычисления площади треугольника по формуле . В операторе присваивания могут использоваться знаки операций: +, -, *, /. Строка 11. Оператор присваивания для вычисления гипотенузы с использованием теоремы Пифагора. Функция pow(x,y) используется в Си для вычисления xy. Строка 12-13. Операторы присваивания для вычисления углов α и β по формулам . Строки 14-15. Функции вывода результатов на экран. В функции вывода printf должны быть два параметра:

  • строка вывода, в которой вместо выводимых переменных указываются их типы, между символом % и кодом формата можно указывать формат вывода, который в случае вывода вещественных чисел имеет вид m.n (m - количество позиций в числе, n – количество позиций в дробной части числа); в строке вывода могут использоваться можно поставить знаки: \n перевод строки, \t – табуляция.

  •  список выводимых переменных.

 Строка комментариев в Си начинается символами //. Мы рассмотрели простейшую программу на языке С++, состоящую из операторов ввода данных, операторов присваивания (в которых происходит расчет по формулам) и операторов вывода. Рассмотренные в первой программе операторы ввода-вывода являются операторами классического C, в дальнейшем мы рассмотрим и операторы С++. Рассмотрим основные этапы обработки программы на языке С++ и формирования машинного кода.

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

  2. Компилятор разбирает текст программ на составляющие элементы, проверяет синтаксические ошибки и в случае их отсутствия формирует объектный код (файл с расширением obj).

  3. Компоновщик подключает  к объектному коду программы объектные модули библиотек и других файлов (если программа состоит из нескольких файлов) и генерирует исполняемый код программы (файл с расширением exe), который уже можно запускать на выполнение.