Upload
olga-maksimenkova
View
314
Download
0
Embed Size (px)
Citation preview
Язык программирования C# и платформа
.NET.
Операторы
Максименкова Ольга ВениаминовнаСтарший преподаватель
Кафедра управления разработкой программного обеспечения
Высшая школа экономики, Москва, 2012
www.hse.ru
ОПЕРАТОРЫ
• Условный оператор
• Цикл с предусловием
• Цикл с постусловием
• Универсальный цикл
ФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.ФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.
Условный оператор
<условие>
<оператор_1> <оператор_2>
true falseНапример,
if (x > 0) {
x = x;
}
else {
x = -x;
}
<условие>
<оператор_1>
true false
Например,
if (true) {
Console.Write(“11”);
}
Полная форма
Неполная формаФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.
Программа вычисления модуля вещественного числа
using System;
class Program {
static void Main() {
double x; // число
double.TryParse(Console.ReadLine(),out x);
/*
модуль X равен X, если X >= 0
-X, если X < 0
*/
if (x >= 0)
Console.WriteLine("|x| = {0:f3}", x);
else
Console.WriteLine("|x| = {0:f3}", -x);
}
}
ФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.
using System;
class Program {
static void Main( ) {
double a, b, x;
Console.Write("a = ");
double.TryParse(Console.ReadLine(), out a);
Console.Write("b = ");
double.TryParse(Console.ReadLine(), out b);
if (a > b) { // упорядочиваем границы
a = a + b;
b = a - b;
a = a - b;
}
Console.Write("x = ");
double.TryParse(Console.ReadLine(), out x);
if (a <= x && x <= b) Console.WriteLine("принадлежит");
else Console.WriteLine("не принадлежит");
}
}
Программа проверки попадания числа в отрезок
М.Э. Абрамян 1000 задач по программированию, Ростов-на-Дону, 2004
Решите самостоятельно
ФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.
Цикл с постусловием
<выражение_условие>
<тело_цикла>
false
true
Например,
int i = 5;
do {
i--;
} while (i > 1);
Условие i
4 > 1 == true 4
3 > 1 == true 3
2 > 1 == true 2
1 > 1 == false 1
ФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.
Проверка корректности ввода данных
Запрос ввода данных
Получение данных
Проверка корректности ввода
Данные корректны?
Дальнейшее выполнение программы
нет
да
Например,
string line;
double x;
do {
Console.Write("Введите число: ");
line = Console.ReadLine();
} while (!double.TryParse(line, out x));
Или, пока не нажат символ ‘q’:
char ch;
string line;
do {
Console.Write("Введите символ: ");
line = Console.ReadLine();
} while (!char.TryParse(line, out ch) ||
ch != 'q’);
ФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.
using System;
class Program {
static void Main() {
double a, b, x;
do {
Console.Write("a = ");
} while (!double.TryParse(Console.ReadLine(), out a));
do {
Console.Write("b = ");
} while (!double.TryParse(Console.ReadLine(), out b));
if (a > b) { // упорядочиваем границы
a = a + b;
b = a - b;
a = a - b;
}
do {
Console.Write("x = ");
} while (!double.TryParse(Console.ReadLine(), out x));
if (a <= x && x <= b) Console.WriteLine("принадлежит");
else Console.WriteLine("не принадлежит");
}
}
Программа проверки попадания числа в отрезок (модификация)
Цикл с постусловием
/* Выводить квадраты вводимых пользователем с клавиатуры чисел.
Выполнение программы прекратить после ввода нуля.*/
using System;
class Program {
static void Main() {
int currNum; // введенное число
string str; // строка ввода данных
do {
Console.Write("Введите число: ");
str = Console.ReadLine();
currNum = int.Parse(str);
if (currNum != 0)
Console.WriteLine("Квадрат числа: " +
currNum * currNum);
}
while (currNum != 0);
Console.Write("\nНажмите Enter…");
Console.ReadLine();
}
}
Цикл с предусловием
<выражение_условие>
<тело_цикла>
false
true
Например,
int i = 5;
while (i > 1) {
i--;
}
Условие i
5 > 1 == true 5
4 > 1 == true 4
3 > 1 == true 3
2 > 1 == true 2
1 > 1 == false 1
ФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.
Цикл с предусловием
/* Распечатать первые N натуральных чисел. Значение натуральное
числа N вводится пользователем с клавиатуры. */
using System;
class Program {
static void Main() {
// имена переменных в C# регистрозависимы!
int n = 1, // переменная для членов ряда
N; // количество членов ряда
string str; // строка ввода данных
Console.Write("Введите количество чисел: ");
str = Console.ReadLine();
N = int.Parse(str);
while (n <= N) {
Console.Write(n++ + " ");
}
Console.Write("\nНажмите Enter…");
Console.ReadLine();
}
}
Универсальный цикл
ФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.
<инициализатор_цикла>
<выражение_условие>
<тело_цикла>
<завершающее_выражение>
true
false
Например,
int i = 3;
for (int j = 0; j < 7; j++) {
i = j * 2;
}
using System;
class Program {
static void Main() {
uint n;
do {
Console.Write("n = ");
} while(!uint.TryParse(Console.ReadLine(), out n)||n<2);
for (int i = 0; i < n; i++) // первая цифра
for (int j = 0; j < n; j++) // вторая цифра
for (int k = 0; k < n; k++) // третья цифра
Console.WriteLine(" " + i + j + k); // конкатенация!
}
}
Программа печати всех трехзначных чисел в системе
счисления, заданной своим основанием
Повторение решения
//Нажатая пользователем клавиша
ConsoleKeyInfo клавиша;
do { // цикл для повторения решения задачи
/* …. */
/* код решения задачи*/
/* …. */
Console.WriteLine("Для выхода нажмите клавишу ESC!");
клавиша = Console.ReadKey(true);
} while (клавиша.Key != ConsoleKey.Escape);
Решение задачи
Повторить выполнение?
Выход
да
нетConsoleKeyInfo Console.ReadKey(bool intercept)
получает код нажатой пользователем клавиши (символьнойили функциональной). Метод возвращает ссылку на объекттипа ConsoleKeyInfo. Код нажатой клавиши консоли -Console.ReadKey(true).Key. Перечисление ConsoleKey задаеткоды клавиш. Параметр intercept - признак визуализации.
ФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.
Операторы безусловного перехода
Оператор break, применительно к циклам, служит для принудительного
выхода из цикла.
break прекращает выполнение оператора цикла и осуществляет передачу
управления следующему за циклом оператору. Условия дальнейшего
продолжения итераций при этом не рассматриваются.
Оператор break прерывает итерации только того цикла, в котором он
размещен.
Оператор continue (оператор перехода к следующей итерации)
используется для завершения текущей итерации и перехода к проверке
условия дальнейшего продолжения цикла.
ФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.
Задание с открытым ответом
21
В результате выполнения следующего фрагмента программы: int a = 7;
int i = 0;
while (a == 7) {
if (i < 4)
Console.Write(i++);
else
Console.Write(++i);
break;
}
на экран будет выведено:
0
// b = true
Использована операция присваивания вместо проверки на равенство.
Сначала переменная b получит новое значение, а затем это новое
значение будет использовано в качестве логического выражения в
конструкции if. То есть выполнится ветка else. На экране появится
число 10.
// b = false
ФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.
Переменная i локальна для цикла. За
его пределами мы не можем
воспользоваться ее значением,
потому что она считается не
объявленной
Область видимости
переменной i
ФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.
Рассмотрим полную
трассировочную
таблицу:
789340
Для вывода использованакоманда Console.Write(),следовательно, все символыбудут выведены подряд, безпробелов и на одной строке.
ФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.
Нега-позиционная система счисления
Системы счисления с отрицательным основанием:
• Нега-десятичная (-10)
• Нега-двоичная (-2)
• Нега-троичная (-3)
• и т. д.
ФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.
Как положительные так и отрицательные числа записываются без
использования знака.
Выразите числа -10, -9, …, 9, 10 в системе счисления по основанию -2.