Новые информационные технологии в науке и образовании Программирование на языке С/С++
Программирование на языке С
Программирование на языке Си
1.24M
Категория: ПрограммированиеПрограммирование

Программирование на языке С/С++ (лекция 1)

1. Новые информационные технологии в науке и образовании Программирование на языке С/С++

Введение

2.

2
Литература

3.

3
Программа
Программа – это
• алгоритм, записанный на каком-либо языке
программирования
• набор команд для компьютера
Команда – это описание действий, которые
должен выполнить компьютер.
• откуда взять исходные данные?
• что нужно с ними сделать?
• куда поместить результат?

4.

4
Языки программирования
• Машинно-ориентированные (низкого уровня) каждая команда соответствует одной команде
процессора (ассемблер)
• Языки высокого уровня – приближены к
естественному (английскому) языку, легче
воспринимаются человеком, не зависят от
конкретного компьютера
• для обучения: Бейсик, ЛОГО, Паскаль
• профессиональные: С/С++, Фортран, Паскаль
• для задач искусственного интеллекта:
Пролог, ЛИСП
• для Интернета: JavaScript, Java, Perl, PHP,
ASP

5.

5
Язык С
1972-1974 – Брайан Керниган, Дэнис Ритчи
Язык, разработанный программистами для
программистов
• высокая скорость работы программ
• много возможностей
• стал основой многих современных
языков (С++, С#, Javascript, Java,
ActionScript, PHP)
• много шансов сделать ошибку, которая
не обнаруживается автоматически

6.

6
Язык С++
1979 – Бьёрн Страуструп, С with Classes
• С++ можно назвать расширенной и
улучшенной версией языка С,
предназначенной для поддержки
объектно-ориентированного
программирования, имеет
расширенный набор библиотечных
функций
Программист, а не язык программирования несет
ответственность за результаты работы своей программы

7.

7
Язык С++
• Помимо С++ существуют два других языка
программирования – Java и C#
• C++ - родительский язык
• Синтаксис идентичен, подобная объектная
модель
• Отличие
• Тип вычислительной среды, в которой разрабатывался
каждый из этих языков
• C++ разрабатывался для написания программ под
управлением определенной ОС и в расчете на ЦП
конкретного типа
• Java и C# разработаны в ответ на потребности Internet,
который связывает множество различных ЦП и ОС.

8.

Программа
Объединенная единым алгоритмом
совокупность описаний операторов
Этапы создания исполняемой программы
Текстовые файлы, в
которых содержатся
описания
используемых в
программе элементов
Выполняет директивы,
содержащиеся в
тексте #
Распознает выражения и
операторы, выявляет
ошибки
Редактор связей –
формирует
исполняемый модуль
программы, подключая
объектные модули и
функции библиотек
8

9.

9
Состав языка
Естественный язык
Язык программирования
символы
символы
слова
лексемы
словосочетания
выражения
предложения
операторы

10.

10
Алфавит языка

11.

11
Идентификаторы
- Имя программного объекта.
В идентификаторе могут использоваться
латинские буквы, цифры и знак подчеркивания.
Прописные и строчные буквы различаются
•Идентификатор не должен совпадать с
ключевыми словами
•Не рекомендуется начинать идентификаторы
с символа подчеркивания

12.

12
Имена переменных
Могут включать
• латинские буквы (A-Z, a-z)
• знак подчеркивания _
• цифры 0-9
!
Имя не может начинаться с цифры!
НЕ могут включать
• русские буквы
• пробелы
• скобки, знаки +, =, !, ? и др.
Какие имена правильные?
AXby R&B 4Wheel Вася “PesBarbos”
TU154 [QuQu] _ABBA A+B

13.

13
Ключевые слова
- Зарезервированные идентификаторы, которые имеют специальное
значение для компилятора. Их можно использовать только в том
смысле, в котором они определены.

14.

14
Знаки операций
- Один или более символов, определяющих действие над операндами

15.

15

16.

16

17.

17
Константы

18.

18
Комментарии

19.

19
Простейшая программа
главная (основная) программа
всегда имеет имя main
main()
{
«тело»
программы
(основная
часть)
начало
программы
}
конец
программы
? Что делает эта программа?

20.

20
Вывод текста на экран
include = включить
#include <stdio.h>
main()
{
printf("Привет!");
}
вызов стандартной
функции
printf = print format
(форматный вывод)
файл stdio.h:
описание
стандартных
функций ввода
и вывода
этот текст
будет на
экране

21.

21
Что такое переменная?
Переменная – это ячейка в памяти компьютера,
которая имеет имя и хранит некоторое значение.
• Значение переменной может меняться во время
выполнения программы.
• При записи в ячейку нового значения старое
стирается
Тип данных определяет
• Внутреннее предтавление данных в памяти
компьютера
• Множество значений, которые могут принимать
величины этого типа
• Операции и функции, которые можно применять к
величинам этого типа

22.

22
Основные типы
•int – целое число (4 байта)
•float – вещественное число, floating point (4 байта)
•double – вещественное число
•char – символ, character (1 байт)
•wchar_t – расширенный символьный
•bool - логический тип (true – 1, false - 0)
Спецификаторы типа
Составные типы типы
•Массивы
•Перечисления
•Функции
•Структуры
•Ссылки
•Указатели
•Объединения
•Классы
•short
•long
•signed
•unsigned

23.

23

24.

24
Объявление переменных
Объявить переменную = определить ее имя, тип,
начальное значение, и выделить ей место в памяти.
main()
целая переменная a
{
вещественные
переменные
b и c переменные
целые
intцелая
a; и дробная
части отделяются
float точкой
b, c;
Tu104, Il86 и Yak42
Il86 = 23
вещественные
int Tu104, Il86=23, Yak42; переменные x, y и z
x = 4,56
float x=4.56,
y, z;
·
char c, c2='A', m;
}
!
символьные
переменные c, c2 и m
c2 = 'A'
Если начальное значение не задано, в этой
ячейке находится «мусор»!

25.

25
Оператор присваивания
Оператор – это команда языка программирования
высокого уровня.
Оператор присваивания служит для изменения
значения переменной.
Пример
a = 5;
x = a + 20;
a
5
?
5
x
25
?
y = (a + x) * (x – a);
5+20
y
600
?
30*20

26.

26
Оператор присваивания
Общая структура:
куда записать
что
имя переменной = выражение;
Арифметическое выражение может включать
• константы (постоянные)
• имена переменных
• знаки арифметических операций:
+ *
/
%
умножение
деление
• вызовы функций
• круглые скобки ( )
остаток от
деления
? Для чего служат
круглые скобки?

27.

27
Какие операторы неправильные?
main()
{
имя переменной
int a, b;
должно быть слева
float x, y;
от знака =
a = 5;
целая и дробная часть
10 = x;
отделяются точкой
y = 7,8;
при записи вещественного
b = 2.5;
значения в целую
x = 2*(a + y);
переменную дробная
часть будет отброшена
a = b + x;
}

28.

28
Особенность деления в Си
! При делении целых чисел остаток отбрасывается!
main()
{
int a = 7;
float x;
1
0
x = a / 4;
x = 4 / a;
1.75
x = float(a) / 4;
x = 1.*a / 4;
}
1.75

29.

29
Сокращенная запись операций в С/C++
полная запись
a = a + 1; инкремент
сокращенная запись
a++;
a = a + b;
a += b;
a = a - 1;
декремент
a--;
a = a – b;
a -= b;
a = a * b;
a *= b;
a = a / b;
a /= b;
a = a % b;
a %= b;

30.

30
Порядок выполнения операций
• вычисление выражений в скобках
• умножение, деление, % слева направо
• сложение и вычитание слева направо
2 3 5 4 1
7 8 6 9
z = (5*a*c+3*(c-d))/a*(b-c)/ b;
a 2 5c 2 d (a b)
x
(c d )( d 2a )
5ac 3(c d )
z
(b c)
ab
2 6 3 4 7 5 1
12 8 11 10 9
x =(a*a+5*c*c-d*(a+b))/((c+d)*(d-2*a));

31.

31
Сложение двух чисел
Задача. Ввести два целых числа и вывести на
экран их сумму.
Простейшее решение:
#include <stdio.h>
#include <conio.h> подсказка для
main()
ввода
{
int a, b, c;
printf("Введите два целых числа\n");
ввод двух
scanf ("%d%d", &a, &b);
чисел с
c = a + b;
клавиатуры
printf("%d", c);
getch();
вывод результата
}

32.

32
Ввод чисел с клавиатуры
scanf –
форматный ввод
формат ввода
адреса ячеек, куда
записать введенные
числа
scanf ("%d%d", &a, &b);
Формат – символьная строка, которая показывает, какие
числа вводятся (выводятся).
%d – целое число
&a – адрес
%f – вещественное число
переменной a
%c – 1 символ
7652
%s – символьная строка
ждать ввода с клавиатуры двух
целых чисел (через пробел или
Enter), первое из них записать в
переменную a, второе – в b
12
a – значение
переменной a

33.

33
Что неправильно?
&a
int a, b;
%d%d
scanf ("%d", a);
scanf ("%d", &a, &b);
&a, &b
scanf ("%d%d", &a);
убрать пробел
scanf ("%d %d", &a, &b);
scanf ("%f%f", &a, &b);
%d%d

34.

34
Вывод чисел на экран
здесь вывести
целое число
это число взять
из ячейки c
printf ("%d", c);
printf ("Результат: %d", c);
printf ("%d+%d=%d", a, b, c );
формат вывода
список значений
printf ("%d+%d=%d", a, b, a+b );
арифметическое
выражение

35.

35
Вывод целых чисел
int x = 1234;
printf ("%d", x);
1234
или "%i"
минимальное
число позиций
или "%9i"
printf ("%9d", x);
1234
5
4
всего 9 позиций

36.

36
Вывод вещественных чисел
float x = 123.4567;
printf ("%f", x);
123.456700
printf ("%9.3f", x);
123.456
минимальное число
позиций, 6 цифр в
дробной части
всего 9 позиций,
3 цифры в дробной
части
printf ("%e", x);
1.234560e+02
printf ("%10.2e", x);
1.23e+02
стандартный вид:
1,23456·102
всего 10 позиций,
2 цифры в дробной
части мантиссы

37.

37
Полное решение
#include <stdio.h>
#include <conio.h>
int main()
{
int a, b, c;
printf("Введите два целых числа\n");
scanf("%d%d", &a, &b);
c = a + b;
printf("%d+%d=%d", a, b, c);
getch();
return 0;
}
это выводит
компьютер
Протокол:
Введите два целых числа
25 30
25+30=55
это вводит пользователь

38.

Ввод/вывод с использованием библиотеки
классов С++
Задача. Ввести два целых числа и вывести на
экран их сумму.
Простейшее решение:
#include <iostream>
int main()
{
Операция помещения в поток
int a, b, c;
cout<<"Введите два целых числа“<<endl;
Операция чтения
cin>>a>>b;
из потока
c = a + b;
cout<<“c=”<<c;
return 0;
вывод результата
}
38

39.

39
Базовые конструкции структурного
программирования

40. Программирование на языке С

Ветвления

41.

41
Разветвляющиеся алгоритмы
Задача. Ввести два целых числа и вывести на экран
наибольшее из них.
Идея решения: надо вывести на экран первое число,
если оно больше второго, или второе, если оно больше
первого.
Особенность: действия исполнителя зависят от
некоторых условий (если … иначе …).
Алгоритмы, в которых последовательность шагов
зависит от выполнения некоторых условий, называются
разветвляющимися.

42.

42
Вариант 1. Блок-схема
начало
ввод a,b
да
a > b?
max = a;
блок «решение»
нет
полная форма
ветвления
max = b;
вывод max
конец
? Если a = b?

43.

43
Вариант 1. Программа
main()
{
int a, b, max;
printf("Введите два целых числа\n");
scanf("%d%d", &a, &b );
if (a > b) {
полная форма
max = a;
условного
}
оператора
else {
max = b;
}
printf("Наибольшее число %d", max);
}

44.

44
Условный оператор
if ( условие )
{
// что делать, если условие верно
}
else
{
// что делать, если условие неверно
}
Особенности:
• вторая часть (else …) может отсутствовать
(неполная форма)
• если в блоке один оператор, можно убрать { }

45.

45
Что неправильно?
if ( a > b ) {
a = b;
}
else
b = a;
if ( a > b ) {
a = b; }
else
b = a;
if ( a > b ) a = b;
else
b = a;
if ( a > b ) {
a = b;
c = 2*a; }
else
b = a;

46.

46
Вариант 2. Блок-схема
начало
ввод a,b
max = a;
да
b > a?
max = b;
вывод max
конец
нет
неполная форма
ветвления

47.

47
Вариант 2. Программа
main()
{
int a, b, max;
printf("Введите два целых числа\n");
scanf("%d%d", &a, &b );
max = a;
неполная форма
if (b > a)
условного
оператора
max = b;
printf("Наибольшее число %d", max);
}

48.

48
Вариант 2Б. Программа
main()
{
int a, b, max;
printf("Введите два целых числа\n");
scanf("%d%d", &a, &b );
max = b;
if ( a ???
> b )
???= a;
max
printf("Наибольшее число %d", max);
}

49.

49
Задания
«4»: Ввести три числа и найти наибольшее из них.
Пример:
Введите три числа:
4
15
9
Наибольшее число 15
«5»: Ввести пять чисел и найти наибольшее из них.
Пример:
Введите пять чисел:
4
15
9
56
Наибольшее число 56
4

50. Программирование на языке Си

Сложные условия

51.

51
Сложные условия
Задача. Фирма набирает сотрудников от 25 до
40 лет включительно. Ввести возраст человека
и определить, подходит ли он фирме (вывести
ответ «подходит» или «не подходит»).
Особенность: надо проверить, выполняются ли
два условия одновременно.
? Можно ли решить известными методами?

52.

52
Вариант 1. Алгоритм
начало
ввод x
да
да
'подходит'
x <= 40?
x >= 25?
нет
нет
'не подходит'
конец
'не подходит'

53.

53
Вариант 1. Программа
main()
{
int x;
printf("Введите возраст\n");
scanf("%d", &x);
if (x >= 25)
if (x <= 40)
printf("Подходит");
else printf("Не подходит");
else
printf("Не подходит");
}

54.

54
Вариант 2. Алгоритм
начало
ввод x
да
x >= 25
и
x <= 40?
нет
'не подходит'
'подходит'
конец

55.

55
Вариант 2. Программа
main()
{
int x;
printf("Введите возраст\n");
scanf("%d", &x);
if ( x >= 25 && x <= 40 )
printf("Подходит");
else printf("Не подходит");
}
сложное
условие

56.

56
Сложные условия
Сложное условие – это условие, состоящее из
нескольких простых условий (отношений),
связанных с помощью логических операций:
! – НЕ (not, отрицание, инверсия)
&& – И (and, логическое умножение, конъюнкция,
одновременное выполнение условий)
|| – ИЛИ (or, логическое сложение, дизъюнкция,
выполнение хотя бы одного из условий)
Простые условия (отношения)
<
<=
>
>=
==
равно
!=
не равно

57.

57
Сложные условия
Порядок выполнения сложных условий:
• выражения в скобках
• ! (НЕ, отрицание)
• <, <=, >, >=
• ==, !=
• && (И)
• || (ИЛИ)
Пример:
2
1
6
3
5
4
if ( !(a > b) || c != d && b == a)
{
...
}

58.

58
Сложные условия
Истинно или ложно при a = 2; b = 3; c = 4;
1
!(a > b)
1
a < b && b < c
1
!(a >= b) || c == d
a < c || b < c && b < a
0
a > b || !(b < c)
1
Для каких значений x истинны условия:
x < 6 && x < 10
x < 6 && x > 10
x > 6 && x < 10
x > 6 && x > 10
x < 6 || x < 10
x < 6 || x > 10
x > 6 || x < 10
x > 6 || x > 10
(- , 6)
(6, 10)
(10, )
(- , 10)
(- , 6) (10, )
(- , )
(6, )
x<6
x > 10
x < 10
x>6
English     Русский Правила