558.60K
Категория: ПрограммированиеПрограммирование

Программирование на языке высокого уровня. Лекция 1. Условный оператор. Типы данных

1.

Богатов Р.Н.
Программирование
на языке высокого уровня
C++ ► Лекция 1 ► Условный оператор. Типы данных
Кафедра АСОИУ ОмГТУ, 2022

2.

К делу! Пример программы на C++
// исходные данные
// исходные данные
// исходные данные
float a, b, alpha;
float a, b, alpha;
float a, b, alpha;
a = 10.5;
scanf("%g%g%g", &a, &b, &alpha);
cin >> a >> b >> alpha;
b = 9.78;
alpha = 3.14/3;
// вычисления
// вычисления
float c;
float c;
// вычисления
c = sqrt(a*a + b*b - 2*a*b*cos(alpha));
c = sqrt(a*a + b*b - 2*a*b*cos(alpha));
float c;
c = sqrt(a*a + b*b - 2*a*b*cos(alpha));
// вывод результата
// вывод результата
printf("%g", c);
cout << c;
getch();
cin.get();

3.

Сравнение потомков языка Си
Язык C++
(1 семестр)
for( int i=0; i<N-1; i++ )
for( int j=i+1; j<N; j++ )
if( a[i]<a[j] ) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
Язык C#
(2 семестр)
for( int i=0; i<N-1; i++ )
for( int j=i+1; j<N; j++ )
if( a[i]<a[j] ) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
Язык Java
(3-4 семестры)
for( int i=0; i<N-1; i++ )
for( int j=i+1; j<N; j++ )
if( a[i]<a[j] ) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}

4.

Бросающиеся в глаза особенности языка Си
(например, для тех, кто программирует на Паскале)
– границы вложенного блока кода
;
– разделитель языковых конструкций
//
– комментирование строки
/* */ – комментирование блока кода
"текст" – строки в двойных кавычках
=
– оператор присвоения
==
– оператор логического равенства
!
– оператор логического отрицания (НЕ)
!=
– оператор неравенства (≠)
if (x<0) y=0; else y=x;
– условие после if всегда в скобках, зато then не требуется
rand() – любая подпрограмма называется функцией;
при вызове функции (даже без аргументов) – всегда скобки
main() – сама программа является функцией операционной системы
{
}
+ новые переменные можно заводить по ходу программы (ура!!!)

5.

Условный оператор if
if (x < 0)
сделать-то-то;
if (x < 0)
сделать-то-то;
else
сделать-другое;
if (x < 0)
{
сделать-одно;
сделать-второе;
сделать-что-то-ещё;
}
if (x < 0)
{
сделать-одно;
сделать-второе;
}
else
{
сделать-другое;
и-ещё-кое-что;
}

6.

Сколько тебе лет?
if (age > myage)
const
int myage=18;
printf("Ты
старше!");
else
printf("Сколько
тебе лет? ");
printf("Ты младше!");
int age;
scanf("%d", &age);
if (age > myage)
printf("Ты старше!");
printf("А мне %d. ", myage);
else
if (age == myage)
if (age > myage)
printf("О, ровесник!!!");
printf("Ты старше!");
else
else
printf("Ты младше!");
if (age < myage)
printf("Ты младше!");
else
printf("О, ровесник!!!");
getch();
if (age > myage)
printf("Ты старше!");
else
if (age < myage)
printf("Ты младше!");
else
printf("О, ровесник!!!");

7.

Решение квадратного уравнения
printf("Решение f(x)=0, f(x) = a*x*x + b*x + c\n");
printf("Введите a, b, c: ");
float a, b, c;
scanf("%g%g%g", &a, &b, &c);
float D = b*b - 4*a*c;
if (D < 0)
printf("Действительных корней нет, т.к. D < 0!");
else
{
float x1, x2;
x1 = (-b-sqrt(D))/2/a;
x2 = (-b+sqrt(D))/2/a;
printf("x1 = %g, x2 = %g\n", x1, x2);
printf("Проверка:\n");
printf("f(x1) = %g\n", a*x1*x1+b*x1+c);
printf("f(x2) = %g\n", a*x2*x2+b*x2+c);
}
getch();

8.

ASCII-графика
#include <stdio.h>
#include <conio.h>
int main()
{
printf("This is ASCII art.\n");
printf("1 - tolpa kitayzev\n");
printf("2 - samolet\n");
printf("3 - kafedra\n");
printf("\nVvedite 1, 2 ili 3: ");
int x;
scanf("%d", &x);
printf("\n");
(\___/)
if (x==1)
(='.'=)
printf("(-(-_(-_-)_-)-)\n");
else
if (x==2)
(")_(")
printf("
__|__\n-----oo(_)oo-----\n");
else
{
printf(" /__\\ / __)( _ )(_ _)( )( )\n");
См. ru.wikipedia.org/wiki/ASCII-графика
printf(" /(__)\\ \\__ \\ )(_)( _)(_ )(__)( \n");
printf("(__)(__)(___/(_____)(____)(______)\n");
}
getch();
}

9.

Программа, анализирующая число
#include <stdio.h>
#include <conio.h>
int main()
{
printf("Vvedite N: ");
int N;
scanf("%d", &N);
printf("Vashe chislo ");
if (N < 0)
printf("otrizatelnoe");
else
printf("ne otrizatelnoe");
if (N % 2 == 0)
printf(", chetnoe");
else
printf(", ne chetnoe");
if (N % 10 == 0)
Самостоятельные задания:
printf(", krugloe");
1) доделать программу, чтобы в случае ввода нуля выводилось, что это
else
printf(", ne krugloe"); «неотрицательное целое», и больше ничего;
printf(".");
_getch();
}
2) доделать программу, чтобы для чисел из интервала (100; 1000]
говорилось «больше ста», из интервала (1000; 1000000] говорилось
«больше тысячи», для чисел больше 1000000 – «больше миллиона»
(для больших чисел должно выводиться только одно из утверждений).

10.

Количество цифр в десятичной записи натурального числа
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main()
{
printf("Vvedite naturalnoe N: ");
float x;
scanf("%g", &x);
printf("\nlog10(%g) = %g\n", x, log10(x) );
int z = log10(x);
z = z + 1;
printf("=> v vashem chisle %d zifr.", z );
getch();
}
Компилятор выдаст предупреждение
о том, что теряется дробная часть
Самостоятельные задания:
1) выводить ошибку, если введено не натуральное число;
2) просклонять слово «zifr»: выводить «zifra», «zifry» или «zifr»
в зависимости от вычисленного количества цифр.

11.

Как ладье съесть пешку?
#include <stdio.h>
#include <conio.h>
int main()
{
printf("Vvedite (x,y) peshki: ");
int x, y;
scanf("%d%d", &x, &y);
printf("Vvedite (x,y) ladyi: ");
int a, b;
scanf("%d%d", &a, &b);
|| – оператор логического «ИЛИ»
&& – оператор логического «И»
Самостоятельное задание: по заданным
координатам пешки и ферзя ответить на
вопрос, угрожает ли ферзь пешке.
if (x == a || y == b)
printf("Ladya EST peshku!");
else
{
printf("Ladya NE EST peshku!\n");
printf("Dvigay na (%d, %d) ili (%d, %d)!", a, y, x, b);
}
getch();
}

12.

«Ходовые» типы данных
Тип
Размер
int
4
-2 млрд … 2 млрд
float
4
±10±38, точность – 7 разрядов
double
8
±10±308, точность – 15 разрядов
bool
1
true или false
char
1
-128 … 127 (код символа)
(байт)
Диапазон значений

13.

Формат вывода. Разница между float и double
float x = acos(-1.0);
printf("1000*pi
=\n\n");
double y = acos(-1.0);
float
x = 1000*acos(-1.0);
printf("float
= %.8f\n", x );
printf("%%f
= %f\n",
x );
printf("double
= %.16lf\n",
y );
printf("%%e
%e\n",
x );
printf("real= pi
= 3.141592653589793238462..."
);
printf("%%g = %g\n\n", x );
double y = 1000*acos(-1.0);
printf("%%lf = %lf\n", y );
printf("%%le = %le\n", y );
printf("%%lg = %lg\n", y );
float – 7 точных знаков после запятой
double – 15 точных знаков после запятой
x = acos(-1.0);
printf("x = %f\n", x );
printf("x = %.3f\n", x );
printf("x = %.0f\n", x );
x = 1;
printf("x = %f\n", x );
printf("x = %.3f\n", x );
printf("x = %.0f\n", x );

14.

Кириллические кодировки 866 и 1251
#include <stdio.h>
#include <conio.h>
#include
int <stdio.h>
main()
#include
<conio.h>
{
#includeprintf("ЏаЁўҐв!\n");
<locale.h>
printf("Привет!\n");
_getch();
int main()
Консоль работает
}
{
в кодировке 866
setlocale(0, ".1251");
printf("Файнэлли Ай кэн спик Рашн!\n\n");
Файл с исходным
printf("Введите натуральное
N: "); кодом
написан в кодировке 1251
int N;
scanf("%d", &N);
...
Консоль работает
в кодировке 1251

15.

Задачи на программирование без циклов
Вычислить периметр и площадь треугольника по длинам его сторон.
Определить число значимых разрядов в M-ичной записи данного
натурального числа.
Перевести точку в декартовых координатах в полярную систему
координат и наоборот.
Найти интервал времени в секундах, когда начальное и конечное
время задано в часах, минутах и секундах.
Даны числа N и k. Определить число, которое получится в результате
исключения из числа N цифры в k-м разряде.
На шахматной доске на клетке с координатами (k, l) расположен конь.
Угрожает ли он клетке (m, n)?
Два треугольника заданы координатами своих вершин. Определите,
какой из треугольников имеет бóльшую площадь.
Остров Манхэттен был приобретен поселенцами за $24 в 1826 г.
Каково было бы в настоящее время состояние их счета, если бы эти
24 доллара были помещены тогда в банк под 6% годового дохода?

16.

Домашнее задание
1.
Установить Microsoft Visual Studio (любой версии).
2.
Написать и прислать на проверку основной код для решения
варианта №11 лаб. работы №2 из методички О.П. Шафеевой.
Вычислить:

17.

Рейтинговая система
100 баллов = 60 за работу в семестре + 40 за ответ на экзамене
≥ 90 – «отлично»
≥ 75 – «хорошо»
≥ 60 – «удовлетворительно»
Работа в семестре групп ПИН:
• конспект лекций, тесты на лекциях – до 6 баллов, Шафеева О.П.
• расчётно-графическая работа (РГР) – до 9 баллов, Шафеева О.П.
• лабораторные работы, письменные тесты, домашние задания
– до 45 баллов, Богатов Р.Н.
• бонусы – до 15 баллов (сверх 60 семестровых), Богатов Р.Н.
Работа в семестре групп ПЭ: все 60+15 баллов за Богатовым Р.Н.
Экзамен ПИН и ПЭ: 20-40 баллов, Богатов Р.Н.

18.

Сентябрьский бонус
Самостоятельно написать на C++ какую-нибудь программу и
выслать её исходный текст на адрес [email protected]
Программа должна 1) отличаться от задач, разбираемых на
лекциях или практических занятиях и заданных на дом, и
2) сообщать пользователю ФИО и группу своего автора.
Пример студенческого креатива. Ваша программа может быть
такой же несложной, но, пожалуйста, пусть она будет хотя бы
чуток поинтересней:
printf("Введите число: ");
int x;
scanf("%d", &x);
printf("Не угадали!");
getch();

19.

«Автоматы» для передовиков
Контрольное самостоятельное задание для условно-досрочного
освобождения от практикума по программированию:
Реализовать программу для работы с собственной базой
данных, содержащей записи со смешанными типами данных
(например, название товара (текст), количество (целое), цена
(дробное), дата поступления и т.п.). В программе должны
быть реализованы функции добавления, удаления,
просмотра, поиска по фильтру и сортировки базы данных по
выбранному ключу. База данных должна храниться в одном
файле в двоичном виде. Дополнительное задание:
обеспечить хоть какое-нибудь шифрование данных.
Сроки разработки и сдачи: до 29 сентября включительно.
English     Русский Правила