! - логическое отрицание
Пример:
(a<=1)&&(b>2)
Условная операция является операцией и может использоваться в выражениях:
b>a?b:a;
Если окажется b>a, то результат операции равен b, иначе a.
Пример:
y=x+x>1?0:1+Math.Sin(x);
Оператор ветвления switch:
switch (выражение целого или строкового типа)
{
case конст.1:
операторы 1
case конст.2:
операторы 2
__
__
default:
операторы 0
}
Особенность switch: если в операторе i не указан оператор break, то будут выполняться операторы нижеследующих case:
switch (k)
{
case 1: a = 1;
case 2: a = 2;
default: a = 0;
}
В этом примере, если k = 1, то выполнится последовательность
a = 1; a = 2; a = 0;
Очевидно, что данный пример всегда будет определять a = 0;
Приведенный пример будет верным:
switch (k)
{
case 1: a = 1; break;
case 2: a = 2; break;
default: a = 0; break;
}
Однако иногда такая специфика оператора switch позволяет упростить ветвление учитывая, что в case может располагаться только одна константа:
switch (k)
{
case 1:
case 2:
case 3: a = 1; break;
case 4: a = 2; break;
}
В этом примере a будет равно 1 в случае, если k = 1 или k = 2 или k = 3.
Цикл с предусловием while:
|
|
Примеры:
while (a< 1) a++;
while (а <1){
а++;
b+=а;
}
Логика работы: оператор за циклом выполняется до тех пор, пока выполняется условие в скобках.
Правила формирования условия идентичны оператору ἰf
Цикл с постусловием do
do a++while(a <1);
do{
a++;
b+=a;
}
while(a <1);
Этот цикл по смыслу идентичен while, но в данном случае операторы цикла будут всегда выполняться хотя бы один раз, а условие проверяется в конце цикла
Цикл for
синтаксис:
for(начало значения; условие; модификация) оператор;
Логика работы:
1) Выполняются все выражения в начальных условиях. Здесь выражения могут указываться через знак запятая:
а=1, b=3, ἰ=0;
2) Проверяется условие. Если оно истинно, то выполняется оператор, иначе делается выход из цикла.
Синтаксис условия полностью соответствует оператору ἰf:
а<1;
3) после выполнения оператора выполняются выражения модификация. В этих выражениях должна задаваться такая модификация, чтобы было окончание цикла:
i++, j+=2;
4)Делается переход на П.2.
В операторе for можно опускать любую конструкцию в скобках:
for(; a<1; a++) s+=a; //нет начальных условий
for(i=1;; i ++) s+=ἰ; // нет условия, т.е. будет бесконечный чикл
for(ἰ=1; ἰ<10;) s+= ἰ; //нет модификации
for(;;) s+= ἰ; //пустой бесконечный цикл
В любом из циклов while, do, for могут использоваться операторы передачи управления:
contine; // переход на следующую операцию цикла
break; //выход из цикла
Оператор безусловного перехода:
goto a1; //принудительный переход на метку а1
≡
а1: оператор;
Предупреждение: запрещено в программах использоваться этим оператором, кроме особо источительных случаев!
|
|
ДИРЕКТИВЫ ПРЕПРОЦЕССОРА
Позволяют перед компиляцией убирать и добавлять часть кода. Это практически всегда необходимо при отладке программы. Управление операторов препроцессора определяется с использованием символов. Символ – это логические переменные. Логическая переменная, например DEBUG принимает true, если она установлена оператором:
#define DEBUG
и значение false, если она установлена оператором
#undef DEBUG
Операторы # define и # undef записываются самыми первыми (можно за комментариями, если они есть).
Пример:
#define DEBUG
class Example 1
{public statiс void Main ()
{int i=5, k;
k=6*i;
# if DEBUG
MessageBox(“k=”+(string)k);
#endif
}}
Оператор препроцессора #if
# if символ 1
текст c#
#elif символ 2
текст c#
#elif символ 3
текст c#
#else
текст c#
#endif
Строки
Существует два типа строк:
string
StringBuilder
Отличия:
1) string является неизменяемым типом данного. Это значит, что при любой модификации создается в памяти новая копия, а старая сбрасывается в «мусор».
В связи с этим в string можно только прочитать отдельный символ:
a=”пример”;
c=a[2]; // в с будет буква ‘и’
но нельзя
a[2]=’a’;
StringBuilder является полноправным объектом и при модификации строки это делается именно в этой памяти, а не в копии. Этот объект можно наследовать в отличие от string.
a=”пример”;
c=a[2]; // в c будет буква ‘и’
a[2]=’a’ // буква ‘и’ заменится на ‘а’!
С точки зрения работы эти два типа практически одинаковы.
string
Инициализация
В объекте инициализация выполняется КОНСТРУКТОРОМ. Перегруженным конструктором называется конструктор с различным синтаксисом инициализации
- string s; // размер строки не определен и зависит от того, что ей потом будет присвоено
- string s = “пример”; // аналогично первому, только задается начальное значение
- string s = new string(20); //длина строки устанавливается в 20 символов
- string s = new string(‘+’,20); // аналогично третьему, только строка заполняется всеми знаками «+»
- string s = new string(а); //аналогично 2, только начальная строка берется из массива символов а => char[ ]
Операции над строками
+ - сцепление строк
“abc” + “def” // будет “abcdef”
[ ] – обращение к символу строки
D=A[2] // в D будет записан 3-й символ строки A
Методы и свойства string
Length – (свойство) текущая длина строки в символах
S.Length
S.Substring (3) – выделение подстроки начиная с 4 символа и до конца строки
S.Substring (5,3) - выделение подстроки длиной 3 символа, начиная с шестого символа
Остальное стр. 144
Пример:
St = s.Substring(3).Remove(12,2)
Возвращает подстроку, удаляет 2 символа, начиная с 12
начиная с 4-го символа
и до конца
Часть методов класса string являются статическими, т.е. независимыми от экземпляра. Если метод статический, то к нему надо обращаться через указание класса string:
String.Join(“!”, mas); // для статического метода нет экземпляра!
StringBuilder
Инициализация возможна только с использованием new:
StringBuilder s = new StringBuilder(); //создается пустая строка длиной 16 байт
StringBuilder s = new StringBuilder (100); //создается пустая строка длиной 100 символов
StringBuilder s = new StringBuilder(“abc”); //создается строка «abc» длиной будет 3 cимвола
StringBuilder s = new StringBuilder(“abc”, 100);
StringBuilder s = new StringBuilder(“фапр”,1,3,100); // создается строка длиной 100 символов, в которую записывается начальная строка “апр”
СТР 147 см.
пример метода s.AppendFormat:
а=1; b=1;
StringBuilder s = new StringBuilder(“s=”);
s.AppendFormat (“{0} и m={1}”, a,b);
будет в s: «s=1 и m=2» - строка как и при выводе в файлы