П3_2_Ci++.pptx
- Количество слайдов: 49
Практические занятия по программированию Галимов Р. Р. , 2013
Функции стандартного ввода/вывода (printf, scanf) • Функция стандартного вывода printf() • Функция printf() является функцией стандартного вывода. С помощью этой функции можно вывести на экран монитора строку символов, число, значение переменной. . . • Функция printf() имеет прототип в файле stdio. h int printf(char *управляющая строка, . . . ); • В случае успеха функция printf() возвращает число выведенных символов. • Управляющая строка содержит два типа информации: символы, которые непосредственно выводятся на экран, и спецификаторы формата, определяющие, как выводить аргументы. • Функция printf() это функция форматированного вывода. Это означает, что в параметрах функции необходимо указать формат данных, которые будут выводиться. Формат данных указывается спецификаторами формата. Спецификатор формата начинается с символа % за которым следует код формата[Бардин П. Б. Функции стандартного ввода/вывода (printf, scanf)http: //www. realcoding. net/article/view/1633].
Спецификаторы формата %с символ %d целое десятичное число %i целое десятичное число %e десятичное число в виде x. xx e+xx %E десятичное число в виде x. xx E+xx %f десятичное число с плавающей запятой xx. xxxx %F десятичное число с плавающей запятой xx. xxxx %g %f или %e, что короче %G %F или %E, что короче %o восьмеричное число %s строка символов %u беззнаковое десятичное число %x шестнадцатеричное число %X шестнадцатеричное число %% символ % %p указатель %n указатель
Функция стандартного вывода printf() • В спецификаторе формата, после символа % может быть указана точность (число цифр после запятой). Точность задаётся следующим образом: %. n<код формата>, где n - число цифр после запятой, а <код формата> - один из кодов приведённых выше. • Например, если у нас есть переменная x=10. 3563 типа float и мы хотим вывести её значение с точностью до 3 -х цифр после запятой, то мы должны написать: • printf("Переменная x = %. 3 f", x);
Функция стандартного вывода printf() • #include
Функция стандартного ввода scanf() • Функция scanf() - функция форматированного ввода. С её помощью вы можете вводить данные со стандартного устройства ввода (клавиатуры). Вводимыми данными могут быть целые числа, числа с плавающей запятой, символы, строки и указатели. • Функция scanf() имеет следующий прототип в файле stdio. h: int scanf(char *управляющая строка); • Функция возвращает число переменных которым было присвоено значение. • Управляющая строка содержит три вида символов: спецификаторы формата, пробелы и другие символы. Спецификаторы формата начинаются с символа %.
Функция стандартного ввода scanf() • При вводе строки с помощью функции scanf() (спецификатор формата %s), строка вводиться до первого пробела!! т. е. если вы вводите строку "Привет мир!" с использованием функции scanf() • char str[80]; // массив на 80 символов scanf("%s", str); • то после ввода результирующая строка, которая будет храниться в массиве str будет состоять из одного слова "Привет". ФУНКЦИЯ ВВОДИТ СТРОКУ ДО ПЕРВОГО ПРОБЕЛА! Если вы хотите вводить строки с пробелами, то используйте функцию • char *gets( char *buf ); • С помощью функции gets() вы сможете вводить полноценные строки. Функция gets() читает символы с клавиатуры до появления символа новой строки (n). Сам символ новой строки появляется, когда вы нажимаете клавишу enter. Функция возвращает указатель на buf - буфер (память) для вводимой строки.
Функция стандартного ввода scanf() • #include
• • • Функция стандартного ввода scanf() Ещё одно важное замечание! Для ввода данных с помощью функции scanf(), ей в качестве параметров нужно передавать адреса переменных, а не сами переменные. Чтобы получить адрес переменной, нужно поставить перед именем переменной знак &(амперсанд). Знак & означает взятие адреса. Что значит адрес? В программе у нас есть переменная. Переменная хранит своё значение в памяти компьютера. Так вот адрес, который мы получаем с помощью & это адрес в памяти компьютера где храниться значение переменной. Давайте рассмотрим пример программы, который показывает нам как использовать & #include
• Создание нескольких переменных одного типа: unsigned int my. Age, my. Width; Присвоение значений переменным: my. Age=5; int Width=10; int Width=2, my. Age, Length=23; unsigned Area=(Width*Length)
Ключевое слово typedef • typedef unsigned short int USHORT; • int main() • { USHORT Width=5; • } Переполнение целых чисел • -беззнаковых; • знаковых.
Символы и числа • char a=‘ 1’; Пример: #include
Управляющие символы "Издательский дом "Питер""
Комментарии • // - комментируется одна • /* комментируется блок кода*/ Константы. Директива #define students. Per. Class 15 Ключевое слово const unsigned short int students. Per. Class 15 Второй способ имеет преимущество: константа имеет тип и компилятор может проследить за её использованием только по назначению.
• Константы перечислений enum Color {RED, BLUE, GREEN, WHITE, BLACK};
• Блоки { temp=a; a=b; b=temp; } ОСНОВНЫЕ ОПЕРАТОРЫ = -присваивание: a=20 * Умножение / деление % остаток от деления a++; инкремент b--; декремент a+=b; a=a+b c*=d; c=c*d; && - AND ! - NOT || - OR >, >=, ==, != -операции сравнения
Префикс и постфикс • int x=10; • int a=x++; // а=10 • int b=++x; //b=12 Приоритеты операций Total=a+b*c; Total=(a+b)*c;
ОПЕРАТОРЫ ОТНОШЕНИЙ • int a=10; • cout<9; // 1
Лекция № 2. Основные операторы. Массивы. Оператор IF • Оператор if позволяет проверить условие и изменить ход выполнения программы, направив в другое русло, которое будет зависеть от результата сравнения. if (условие) выражение; if (Big. Number
if (условие) выражение 1; else выражение 2; Использование фигурных скобок для вложенных операторов if If (x>y) if (x
if (x>=10) { if (x>100) cout<<“More than 100n”; } else cout<<“Less than 10n”;
Организация циклов Использование меток: int counter=0; Loop: counter++; if (counter<5) goto Loop;
Организация циклов при помощи оператора while int counter=0; while (counter<5) { counter++; cout<<“counter”<
Операторы break и continue while (true) { counter++; if (counter>10) break; }
Оператор do while do { counter--; cout<<“counter=”<
Оператор for • Оператор for объединяет собой три операции: инициализация, проверка условия и приращение счетчика цикла. int counter; for (counter=0; counter<5; counter++) cout<
Оператор Switch switch (выражение) { case первоезначение: оператор; break; сase второезначение: оператор; break; ……………… сase значение. N: оператор; break; default: оператор; }
Примеры switch (choice) { case 0: cout<<“Zero”; break; case 1: cout<<“One”; break; case 2: cout<<“Two”; break; default: cout<<“default!”; break; }
пример switch (choice) { case 0: case 1: case 2: cout<<“Less than 3”; break; case 3: cout<<“Equals 3”; break; default: cout<<“Greater than 3”; break; }
Массивы • Массив представляет собой коллекции данных одного типа, сохраненные в памяти компьютера. Каждая единица данных называется элементом массива. • Массив определяется именем, типом данных и размером. • Пример объявления массив приведен ниже: float Salary[20]; где float – тип данных; Salary – имя массива; [20] – количество элементов массива. Если объявлен массив размера N, то к его элементам можно обращаться, указывая индекс в диапазоне от 0 до (N-1).
Пример • • • • #include "stdafx. h" #include "iostream" using namespace std; int main(int argc, char* argv[]) { int a[4]; for (int i=0; i<4; i++ ) { cout<<"Value["<>a[i]; } for (int i=0; i<4; i++ ) cout<
Компилятор не контролирует выход за пределы массива при обращении к элементам массива. Если в предыдущем примере, мы вставим в конце программы выражение cout<
пример • • • • #include "stdafx. h" #include "iostream" using namespace std; int main(int argc, char* argv[]) { int a[4]; for (int i=0; i<4; i++ ) a[i]=i; int summa=0; for (int i=0; i<=4; i++ ) summa+=a[i]; cout<<"summa="<
Инициализация массива • Инициализация массива базового типа можно производить одновременно с его объявлением: • float Salary [3]={20000, (15750, 35), 7500}; • int A []={1, 3, 4, 5}; • Обратите внимание, что во втором случае компилятор сам определит размер массива. • Язык С++ позволяет создавать многомерные массивы, например, двухмерные: • short int Board [8][8];
• Ниже приведены примеры инициализации двумерных массивов: • int A[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9}; • int A[3][3]={{1, 2, 3}, • {4, 5, 6}, • {7, 8, 9}};
Строковые массивы Строка текста представляет собой набор символов. В С++ строку можно представить как массив символов, заканчивающийся концевым нулевым символов строки, например: • char str[]={‘H’, ‘e’, ‘l’, ’o’, ’ ‘, ‘ W‘, ‘o’, ’l’, ’d’, ’ ’}; или то же самое: • char str[]=”Hello World”;
• • • #include "stdafx. h" #include "iostream" using namespace std; int main(int argc, char* argv[]) { char buffer[20]; cout<<"Enter the string: "; cin>>buffer; cout<<"Here the string: ""<
• • • #include "stdafx. h" #include "iostream" using namespace std; int main(int argc, char* argv[]) { char buffer[20]; cout<<"Enter the string: "; cin. get(buffer, 19); cout<<"Here the string: ""<
• • • • • • Для хранения списка строковых данных можно воспользоваться двухмерным строковым массивом. #include "stdafx. h" #include "iostream" using namespace std; int main(int argc, char* argv[]) { char names[20][80]; char ch='y'; int ind=0; while ((ch=='y'||ch=='Y')&&ind<20) { cout<<"Enter name: "; cin. get(names[ind], 19); ind++; cout<<"Continue? : "; cin>>ch; cin. ignore(); } for (int j=0; j
• cin. getline() может привести к проблемам, если его использовать вместе с cin >> var • float fl; std: : cin >> fl; char str[101]; std: : cin. getline(str, 101); • Допустим, вы набираете: 3. 14
• Решает проблему добавление std: : cin. ignore(); сразу после первой команды с std: : cin. Будет получен и отброшен один символ из буфера ввода (в данном случае, символ новой строки). • std: : cin. ignore() можно вызывать тремя разными способами: - Без аргументов: Один символ берётся из буфера ввода и отбрасывается: std: : cin. ignore(); //отбросить 1 символ - Один аргумент: Указанное количество символов берётся из буфера ввода и отбрасывается: std: : cin. ignore(33); //отбросить33 символа - Два аргумента: Отбросить указанное число символов или все символы до указанного разделителя, включая его (зависит от того, что наступит раньше): std: : cin. ignore(26, 'n'); //игнорировать 26 символов или все символы до новой строки включительно, но не более 26 1. Советы и приемы использования C++ I/O (ввода/вывода). http: //modwind. ru/publ/cpp_io_input_output_advice/6 -1 -0 -7
Пример ввода числового значения • #include
функция • Функция по своей сути –это подпрограмма, которая может манипулировать данными и возвращать результат.
Объявление функции • Запишите прототип функции в файл, затем используйте #include, чтобы включить его в свою программу; • Запишите прототип функции в файл, в котором он используется; • Определите функцию перед тем, как её вызовет любая другая функция.
Прототипы функций • Тип возврата • Имя • Параметры int Area (float a, float b); Прототип не обязан содержать имена параметров: int Area (float, float);
#include “iostream” float Area(float a, float b); int main(int argc, char* argv[]) { float a, b, S; cout<<“Enter a: ”; cin>>a; cout<<“Enter b: ”; cin>>b; S=Area(a, b); cout<<“S=”<
Глобальные и локальные переменные #include “iostream” void my. Func(); int main(int argc, char* argv[]) { int x=5, y=10; cout<<“main x: ”<
Параметры – это локальные переменные #include “iostream” void swap(int x, int y); int main(int argc, char* argv[]) { int x=5, y=10; cout<<“main before swap x: ”<