C (Си): Условие if/else
Условие if else
В этом уроке разбираем условные конструкции if/else и применяем их в функции power().
Заодно закрываем важную деталь: у main() тоже должен быть тип и возвращаемое значение.
int main(void)
{
return 0;
}0 обычно означает, что программа завершилась без ошибок.
Комментарии
Комментарии помогают объяснить код людям. Компилятор их игнорирует.
Однострочный комментарий:
// this function calculates base to the power of nМногострочный комментарий:
/*
this function calculates
base to the power of n
*/Условие if else
Добавим в power() правило: если основание отрицательное, функция сразу возвращает 0.
int power(int base, int n)
{
int i;
int p;
if (base < 0)
return 0;
else {
p = 1;
for (i = 1; i <= n; i++)
p = p * base;
return p;
}
}Логика простая:
- Если
base < 0, выполняется веткаif. - Иначе выполняется ветка
elseи считается степень.
Полная программа
#include <stdio.h>
int power(int base, int n);
int main(void)
{
printf("%d\n", power(3, 4));
printf("%d\n", power(-3, 4));
return 0;
}
int power(int base, int n)
{
int i;
int p;
if (base < 0)
return 0;
else {
p = 1;
for (i = 1; i <= n; i++)
p = p * base;
return p;
}
}Результат:
- Вызов
power(3, 4)возвращает81. - Вызов
power(-3, 4)возвращает0по нашему правилу.
Итоги
- Конструкция
if/elseпозволяет явно задать разные сценарии выполнения кода. - Функция
main()должна иметь корректный тип и возвращать код завершения. - Комментарии помогают читать код, но не влияют на выполнение.
Задание
Напишите функцию fizzbuzz(), которая принимает на вход в качестве параметра число limit типа int. В функции должен быть цикл, который проверяет числа от 1 до limit, и:
- если число делится на 3 без остатка, то на экран выводится слово 'Fizz'
- если число делится на 5 без остатка, то на экран выводится слово 'Buzz'
- если число делится и на 3, и на 5 без остатка, то на экран выводится слово 'FizzBuzz'
- в противном случае на экран выводится само число
Функция должна печатать результат на экран.
fizzbuzz(5);
// => '1 2 Fizz 4 Buzz'
fizzbuzz(8);
// => '1 2 Fizz 4 Buzz Fizz 7 8'C (Си): Условие if/else
Условие if else
В этом уроке разбираем условные конструкции if/else и применяем их в функции power().
Заодно закрываем важную деталь: у main() тоже должен быть тип и возвращаемое значение.
int main(void)
{
return 0;
}0 обычно означает, что программа завершилась без ошибок.
Комментарии
Комментарии помогают объяснить код людям. Компилятор их игнорирует.
Однострочный комментарий:
// this function calculates base to the power of nМногострочный комментарий:
/*
this function calculates
base to the power of n
*/Условие if else
Добавим в power() правило: если основание отрицательное, функция сразу возвращает 0.
int power(int base, int n)
{
int i;
int p;
if (base < 0)
return 0;
else {
p = 1;
for (i = 1; i <= n; i++)
p = p * base;
return p;
}
}Логика простая:
- Если
base < 0, выполняется веткаif. - Иначе выполняется ветка
elseи считается степень.
Полная программа
#include <stdio.h>
int power(int base, int n);
int main(void)
{
printf("%d\n", power(3, 4));
printf("%d\n", power(-3, 4));
return 0;
}
int power(int base, int n)
{
int i;
int p;
if (base < 0)
return 0;
else {
p = 1;
for (i = 1; i <= n; i++)
p = p * base;
return p;
}
}Результат:
- Вызов
power(3, 4)возвращает81. - Вызов
power(-3, 4)возвращает0по нашему правилу.
Итоги
- Конструкция
if/elseпозволяет явно задать разные сценарии выполнения кода. - Функция
main()должна иметь корректный тип и возвращать код завершения. - Комментарии помогают читать код, но не влияют на выполнение.
Задание
Напишите функцию fizzbuzz(), которая принимает на вход в качестве параметра число limit типа int. В функции должен быть цикл, который проверяет числа от 1 до limit, и:
- если число делится на 3 без остатка, то на экран выводится слово 'Fizz'
- если число делится на 5 без остатка, то на экран выводится слово 'Buzz'
- если число делится и на 3, и на 5 без остатка, то на экран выводится слово 'FizzBuzz'
- в противном случае на экран выводится само число
Функция должна печатать результат на экран.
fizzbuzz(5);
// => '1 2 Fizz 4 Buzz'
fizzbuzz(8);
// => '1 2 Fizz 4 Buzz Fizz 7 8'Ваше упражнение проверяется по этим тестам
#include "greatest.h"
#include <unistd.h>
#include "main.c"
TEST test_base(int limit, char *expected) {
int stdout_bk = dup(fileno(stdout));
int pipefd[2];
pipe(pipefd);
dup2(pipefd[1], fileno(stdout));
fizzbuzz(limit);
fflush(stdout);
close(pipefd[1]);
dup2(stdout_bk, fileno(stdout));
int buf_size = 10240;
char actual[buf_size];
read(pipefd[0], actual, buf_size);
ASSERT_STR_EQ(expected, actual);
memset(actual, 0, buf_size);
PASS();
}
GREATEST_MAIN_DEFS();
int main(int argc, char **argv) {
GREATEST_MAIN_BEGIN();
RUN_TESTp(
test_base,
5,
"1 2 Fizz 4 Buzz"
);
RUN_TESTp(
test_base,
10,
"1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz"
);
RUN_TESTp(
test_base,
20,
"1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz"
);
GREATEST_MAIN_END();
}Решение учителя откроется через:
20:00
