- •Основные управляющие конструкции
- •1.3. Общая структура программ
- •1.4. Комментарии
- •1.5. Константы и переменные
- •1.6. Оператор простого присваивания
- •1.7. Операторы ввода и вывода данных
- •2. Базовые стандартные типы
- •2.1. Целый тип данных
- •2.2. Вещественный тип
- •2.3. Стандартные математические функции
- •3. Программы линейной структуры
- •3.1. Арифметические выражения
- •3.2. Примеры программ линейной структуры
- •4. Программы с ветвлением
- •4.1. Логический тип данных
- •4.2. Логическое выражение
- •4.3. Условный оператор
- •4.4. Оператор выбора
- •5. Программы циклической структуры
- •5.1. Оператор цикла с предусловием while
- •5.2. Оператор цикла с постусловием do .. While
- •5.3. Оператор цикла с параметром for
- •4.4. Оператор перехода
- •5.4. Операторы передачи управления
- •5.5. Вложенные циклы
- •5.6. Вычисление сумм
- •Практикум на эвм Линейные алгоритмы
- •1. Задания для решения на компьютере
- •2. Задания для самостоятельной работы
- •Алгоритмы с ветвлением
- •1. Задания для решения на компьютере
- •2. _____________________________________________________________________________________________________________________________Задания для самостоятельной работы
- •Программы с циклами
- •1. Задания для решения на компьютере
- •2. _____________________________________________________________________________________________________________________________Задания для самостоятельной работы
- •Приложение
3. Программы линейной структуры
3.1. Арифметические выражения
Арифметические выражения строятся из имен переменных, констант, знаков операций и круглых скобок так, как это принято в математике. При вычислении их значений раньше выполняются операции *,/,%, а затем + и –. Операции одинакового старшинства выполняются слева направо.
Упражнения
Вычислить
6*2-7 / 3*7 % 2;
7/2*3-24%10;
(24/8/2+9/4%3)/(2008/1000+3/3/2/2).
Наряду с переменными и константами в арифметические выражения можно включать функции.
При определении значения выражения, прежде всего, вычисляются значения входящих в него функций.
3.2. Примеры программ линейной структуры
1. Для заданного x вычислить значение выражения
Обсуждение. Во всех алгоритмических языках программирования арифмети-ческие выражения записываются в одну строку, используя правила расстановки скобок.
#include <math.h>
#include <stdio.h>
void main()
{
float x, y;
printf("x="); scanf("%f",&x);
y=(1+1/(1+pow(x,4)))/(12.5+sqrt(1+x*x));
printf("y=%.4f\n",y);
}
2. Дано трехзначное положительное целое число N. Найти сумму цифр.
Обсуждение. Обозначим первую цифру трехзначного числа переменной a, вторую – b, третью - c.
Первую цифру трехзначного числа получим, разделив заданное число на 100 (a=N/100). Вторую цифру получить сложнее. Сначала нужно отбросить первую цифру числа, затем оставшееся двухзначное число поделить на 10 (b=N% 100/10).
Можно сделать иначе – сначала отбросить третью цифру, затем – первую (b=N/10%10). Третья цифра равна остатку, полученному при делении числа на 10 (c=N%10).
#include <math.h>
#include <stdio.h>
void main()
{
int n,a,b,c,s;
printf("n="); scanf("%i",&n);
a=n/100; b=n/10%10; c=n%10;
s=a+b+c;
printf("s=%i\n",s);
}
3. На числовой прямой заданы две точки A и B с координатами x1, x2. Найти расстояние между ними.
Обсуждение. Расстояние между двумя точками на числовой прямой определяется по формуле d=|x2-x1|.
#include <math.h>
#include <stdio.h>
void main()
{
float x1,x2,d;
printf("x1 x2="); scanf("%f%f",&x1,&x2);
d=fabs(x2-x1);
printf("d=%.3f\n",d);
}
Вопросы
Почему при вычислении расстояния d используется абсолютная величина числа?
Почему координаты точек x1, x2 и расстояние между ними d описаны как вещественные числа?
4. На плоскости заданы две точки A и B с координатами (x1,y1), (x2,y2). Найти расстояние между ними.
Обсуждение. Расстояние между двумя точками на плоскости определяется по формуле .
#include <math.h>
#include <stdio.h>
void main()
{ float x1,y1,x2,y2,d;
printf("x1 y1="); scanf("%f%f",&x1,&y1);
printf("x2 y2="); scanf("%f%f",&x2,&y2);
d=sqrt(pow(x2-x1,2)+pow(y2-y1,2));
printf("d=%.3f\n",d);
}
5. Составить программу вычисления площади S треугольника по заданным длинам его сторон a, b, c.
Обсуждение. Расчет площади треугольника по его трем сторонам проводится по формуле Герона.
где p – полупериметр.
#include <math.h>
#include <stdio.h>
void main()
{
float a,b,c,p,s;
printf("a b c="); scanf("%f%f%f",&a,&b,&c);
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf("S=%.3f",s);
}
6. Даны координаты концов отрезка (x1,y1) и (x2,y2). Найти координаты середины заданного отрезка.
Обсуждение. Нетрудно доказать, что координаты середины отрезка определяются по формулам
#include <math.h>
#include <stdio.h>
void main()
{
float x1,y1,x2,y2,x,y;
printf("x1 y1="); scanf("%f%f",&x1,&y1);
printf("x2 y2="); scanf("%f%f",&x2,&y2);
x=(x1+x2)/2; y=(y1+y2)/2;
printf("x=%.3f y=%.3f",x,y);
}
7. На плоскости даны координаты трех вершин параллелограмма (x1,y1), (x2,y2), (x3,y3). Составить программу определения координат его четвертой вершины (x4,y4), расположенной напротив вершины (x2,y2).
Обсуждение. Известно, что диагонали параллелограмма в точке пересечения (x,y) делятся пополам. Тогда, используя знания предыдущего примера:
x=(x1+x3)/2, y=(y1+y3)/2, x=(x2+x4)/2, y=(y2+y4)/2.
Из последних двух равенств имеем
x4=2x-x2, y4=2y-y2,
где x и y вычисляются по первым двум формулам.
#include <math.h>
#include <stdio.h>
void main()
{
float x1,y1,x2,y2,x3,y3,x4,y4,x,y;
printf("x1 y1="); scanf("%f%f",&x1,&y1);
printf("x2 y2="); scanf("%f%f",&x2,&y2);
printf("x3 y3="); scanf("%f%f",&x3,&y3);
x=(x1+x3)/2; y=(y1+y3)/2;
x4=2*x-x2; y4=2*y-y2;
printf("x4=%.3f y4=%.3f\n",x4,y4);
}
8. В некоторый момент времени часы показывают h часов, m минут, s секунд. Составить программу определения показания часов через k секунд.
Обсуждение. Чтобы определить, сколько прошло часов необходимо получить целую часть деления числа k на 3600 (k/3600). Тогда количество оставшихся секунд будет k=k%3600. Теперь можно определить сколько прошло минут. Для этого разделим нацело k на 60 (k/60). Количество оставшихся секунд будет k=k%60. Теперь вычислим s=s+k. Далее будем учитывать переход секунд на минуты (например, 45+37=82=1 мин 22 сек.), минут на часы и, что 24 часа записывается как 0 часов.
#include <math.h>
#include <stdio.h>
void main()
{
long int h,m,s,k;
printf("h m s="); scanf("%li%li%li",&h,&m,&s);
printf("k="); scanf("%li",&k);
h=h+k/3600; k=k%3600;
m=m+k/60; k=k%60;
s=s+k; m=m+s/60; h=h+m/60;
s=s%60; m=m%60; h=h%24;
printf("h=%li m=%li s=%li\n",h,m,s);
}