C# For Dummies

Глава 3. Оператори и изрази

1. Напишете израз, който да проверява дали дадено цяло число е четно или нечетно.

Упътване: Вземете остатъкът от деленето на числото на 2 и проверете дали е 0 или 1 (съответно числото е четно или нечетно). Използвайте оператора % за пресмятане на остатък от целочислено деление.

Решение:
static void Main(string[] args)
{
    int number = 23;
    bool even = number % 2 == 0 ? true : false;
    Console.WriteLine("{0} is even? {1}", number, even);
}

2. Напишете булев израз, който да проверява дали дадено цяло число се дели на 5 и на 7 без остатък.

Упътване: Ползвайте логическо "И" (оператора &&) и операцията % за остатък при деление. Можете да решите задачата и чрез само една проверка – за деление на 35 (помислете защо).

Решение:
static void Main(string[] args)
{
    int number = 36;
    bool divisible = number % 35 == 0 ? true : false;
    Console.WriteLine("{0} is divisible by both 5 and 7? {1}", number, even);
}

3. Напишете израз, който да проверява дали третата цифра (отдясно на ляво) на дадено цяло число е 7.

Упътване: Разделете числото на 100 и го запишете в нова променлива. Нея разделете на 10 и вземете остатъкът. Остатъкът от делението на 10 е третата цифра от първоначалното число. Проверете равна ли е на 7.

Решение:
static void Main(string[] args)
{
    int number = 45764;
    bool isSeven = (number / 100) % 10 == 7 ? true : false;
    Console.WriteLine("Third digit of {0} is 7", number, even);
}

4. Напишете израз, който да проверява дали третия бит на дадено число е 1 или 0.

Упътване: Използвайте побитово "И" върху числото и число, което има 1 само в третия си бит (т.е. числото 8, ако броенето на битовете започне от 0). Ако върнатият резултат е различен от 0, то третия бит е 1.

Решение:
static void Main(string[] args)
{
    int number = 452;    
    Console.WriteLine("The third bit of {0} is 1? {1}", number, ((number >> 3) & 1) == 1);
}

5. Напишете израз, който изчислява площта на трапец по дадени a, b и h.

Упътване: Формула за лице на трапец: S = (a + b) / 2 * h.

Решение:
static void Main(string[] args)
{
    float a = 2;
    float b = 3;
    float h = 1;
    Console.WriteLine("S={0}", (a + b) / (2 * h));
}

6. Напишете програма, която за подадени от потребителя дължина и височина на право­ъгълник, пресмята и отпечатва на конзолата неговия периметър и лице.

Упътване: Потърсете в Интернет как се въвеждат цели числа от конзолата и използвайте формулата за лице на правоъгълник.

Решение:
static void Main(string[] args)
{
    Console.Write("Enter a: ");
    int a = Convert.ToInt32(Console.ReadLine());
    Console.Write("Enter b: ");
    int b = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("S={0}, P={1}", a * b, (a + b) * 2);
}

7. Силата на гравитационното поле на Луната е приблизително 17% от това на Земята. Напишете програма, която да изчислява тежестта на човек на Луната, по дадената тежест на Земята.

Упътване: Прочетете число от конзолата, след което го умножете по 0.17 и го отпечатайте.

Решение:
static void Main(string[] args)
{
    Console.WriteLine("Enter weight of a man: ");
    int weight = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("This person will weight {0}kg on the Moon.", weight * 0.17);
}

8. Напишете програма, която проверява дали дадена точка О (x, y) е вътре в окръжността К ((0,0), 5). Пояснение: точката (0,0) е център на окръжността, а радиусът й е 5.

Упътване: Използвайте питагоровата теорема a2 + b2 = c2. За да е точката вътре в кръга, то x*x + y*y следва да е по-малко или равно на 5.

Решение:
static void Main(string[] args)
{
    Console.Write("Enter x: ");
    int x = Convert.ToInt32(Console.ReadLine());
    Console.Write("Enter y: ");
    int y = Convert.ToInt32(Console.ReadLine());
    bool isInside = (x * * + y * y <= 5) ? true : false;
    Console.WriteLine("The point O({0},{1}) is inside K((0,0),5)?: {2}", x, y, isInside);
}

9. Напишете програма, която проверява дали дадена точка О (x, y) е вътре в окръжността К ((0,0), 5) и едновременно с това извън право­ъгълника ((-1, 1), (5, 5). Пояснение: правоъгълникът е зададен чрез координатите на горния си ляв и долния си десен ъгъл.

Упътване: Използвайте кода от предходната задача и добавете проверка за правоъгълника. Една точка е вътре в даден правоъгълник със стени успоредни на координатните оси, когато е вдясно от лявата му стена, вляво от дясната му стена, надолу от горната му стена и нагоре от долната му стена.

Решение: Link
10. Напишете програма, която приема за вход четирицифрено число във формат abcd (например числото 2011) и след това извършва следните действия върху него:
-Пресмята сбора от цифрите на числото (за нашия пример 2+0+1+1 = 4).
-Разпечатва на конзолата цифрите в обратен ред: dcba (за нашия пример резултатът е 1102).
-Поставя последната цифра, на първо място: dabc (за нашия пример резултатът е 1201).
-Разменя мястото на втората и третата цифра: acbd (за нашия пример резултатът е 2101).

Упътване: За да вземете отделните цифри на числото, можете да го делите на 10 и да взимате остатъка при деление на 10 последователно 4 пъти.

Решение: Link
11. Дадено е число n и позиция p. Напишете поредица от операции, които да отпечатат стойността на бита на позиция p от числото n (0 или 1). Пример: n=35, p=5 -> 1. Още един пример: n=35, p=6 -> 0.

Упътване: Ползвайте побитови операции.

Решение: Link
12. Напишете булев израз, който проверява дали битът на позиция p на цялото число v има стойност 1. Пример v=5, p=1 -> false.

Упътване: Задачата е аналогична на предната.

Решение:
static void Main(string[] args)
{
    int v = 350;
    int p = 350;
    int mask = 1 << p;
    bool isOne = (v & mask) != 0 ? true : false;
    Console.WriteLine("The bit at position {0}of number {1} is 1? {2}", p, v, isOne);
}

13. Дадено е число n, стойност v (v = 0 или 1) и позиция p. Напишете поредица от операции, които да променят стойността на n, така че битът на позиция p да има стойност v. Пример n=35, p=5, v=0 -> n=3. Още един пример: n=35, p=2, v=1 -> n=39.

Упътване: Ползвайте побитови операции, по аналогия със задача 11.

Решение:
static void Main(string[] args)
{
    int n = 350;
    int v = 0;
    int p = 3;
    n = (v == 0) ? n = n & (~(1 << p)) : n = n | (1 << p);
    Console.WriteLine(n);
}

14. Напишете програма, която проверява дали дадено число n (1 < n < 100) е просто (т.е. се дели без остатък само на себе си и на единица).

Упътване: Прочетете за цикли в Интернет. Използвайте цикъл и проверете числото за делимост на всички числа от 1 до корен квадратен от числото. В конкретната задача, тъй като ограничението е само до 100, можете предварително да намерите простите числа от 1 до 100 и да направите проверки дали даденото число n e равно на някое от тях.

Решение:
static void Main(string[] args)
{
    int number = 72;
    bool isPrime = true;
    if (number > 2)
        for (int i = 2; i <= Math.Ceiling(Math.Sqrt(numbber)); ++i)
        {
            if (number % i == 0) isPrime = false;
        }
    Console.WriteLine("{0} is prime?: {1}", number, isPrime);
}

15. Напишете програма, която разменя стойностите на битовете на позиции 3, 4 и 5 с битовете на позиции 24, 25 и 26 на дадено цяло положително число.

Упътване: За решението на тази задача използвайте комбинация от задачите за взимане и установяване на бит на определена позиция.

Решение:
Link
16. Напишете програма, която разменя битовете на позиции {p, p+1, …, p+k-1) с битовете на позиции {q, q+1, …, q+k-1} на дадено цяло положително число.

Упътване: Използвайте предната задача и прочетете в интернет как се работи с цикли и масиви (в които да запишете битовете).

Решение:
Link


← Обратно