C (Си): Переменные и циклы в Си
Переменные и цикл while
В этом уроке соберем первую полезную программу: таблицу перевода температуры из градусов Фаренгейта в градусы Цельсия.
Идея простая: берем значение в Фаренгейтах, считаем по формуле и печатаем результат.
Формула:
C = 5 * (F - 32) / 9Переменные
В C переменная имеет тип. Если переменная объявлена как int, в ней хранятся только целые числа.
int fahr;
int celsius;
int lower;
int upper;
int step;Зададим стартовые значения:
lower = 0;
upper = 300;
step = 20;
fahr = lower;Вывод через printf()
Чтобы печатать целые числа, используем %d:
printf("%d : %d\n", fahr, celsius);- В первый
%dподставится значениеfahr. - Во второй
%dподставится значениеcelsius. - Последовательность
\nпереводит строку.
Повторение через цикл while
Нам нужна не одна строка, а целая таблица. Для этого используем цикл while: код повторяется, пока условие истинно.
Полная программа:
#include <stdio.h>
int main(void)
{
int fahr;
int celsius;
int lower;
int upper;
int step;
lower = 0;
upper = 300;
step = 20;
fahr = lower;
while (fahr <= upper) {
celsius = 5 * (fahr - 32) / 9;
printf("%d : %d\n", fahr, celsius);
fahr = fahr + step;
}
return 0;
}Итоги
- Переменные хранят данные во время работы программы.
- Тип
intподходит для целых значений. printf()умеет подставлять значения переменных в строку.- Цикл
whileпозволяет повторять код, пока выполняется условие.
Задание
Напишите программу celsius_to_kelvin, которая конвертирует Цельсии в Кельвины аналогично той, что была написана в видео. Программа должна выводить на экран значения в таком виде:
0 : 273
20 : 293
40 : 313
60 : 333
80 : 353
100 : 373
120 : 393
140 : 413
160 : 433
180 : 453
200 : 473
220 : 493
240 : 513
260 : 533
280 : 553
300 : 573Левый столбец – это градусы Цельсия, правый – градусы Кельвина
Полезное
Температура в Кельвинах (K) равна температуре в градусах Цельсия (°C) + 273
C (Си): Переменные и циклы в Си
Переменные и цикл while
В этом уроке соберем первую полезную программу: таблицу перевода температуры из градусов Фаренгейта в градусы Цельсия.
Идея простая: берем значение в Фаренгейтах, считаем по формуле и печатаем результат.
Формула:
C = 5 * (F - 32) / 9Переменные
В C переменная имеет тип. Если переменная объявлена как int, в ней хранятся только целые числа.
int fahr;
int celsius;
int lower;
int upper;
int step;Зададим стартовые значения:
lower = 0;
upper = 300;
step = 20;
fahr = lower;Вывод через printf()
Чтобы печатать целые числа, используем %d:
printf("%d : %d\n", fahr, celsius);- В первый
%dподставится значениеfahr. - Во второй
%dподставится значениеcelsius. - Последовательность
\nпереводит строку.
Повторение через цикл while
Нам нужна не одна строка, а целая таблица. Для этого используем цикл while: код повторяется, пока условие истинно.
Полная программа:
#include <stdio.h>
int main(void)
{
int fahr;
int celsius;
int lower;
int upper;
int step;
lower = 0;
upper = 300;
step = 20;
fahr = lower;
while (fahr <= upper) {
celsius = 5 * (fahr - 32) / 9;
printf("%d : %d\n", fahr, celsius);
fahr = fahr + step;
}
return 0;
}Итоги
- Переменные хранят данные во время работы программы.
- Тип
intподходит для целых значений. printf()умеет подставлять значения переменных в строку.- Цикл
whileпозволяет повторять код, пока выполняется условие.
Задание
Напишите программу celsius_to_kelvin, которая конвертирует Цельсии в Кельвины аналогично той, что была написана в видео. Программа должна выводить на экран значения в таком виде:
0 : 273
20 : 293
40 : 313
60 : 333
80 : 353
100 : 373
120 : 393
140 : 413
160 : 433
180 : 453
200 : 473
220 : 493
240 : 513
260 : 533
280 : 553
300 : 573Левый столбец – это градусы Цельсия, правый – градусы Кельвина
Полезное
Температура в Кельвинах (K) равна температуре в градусах Цельсия (°C) + 273
Ваше упражнение проверяется по этим тестам
#include "greatest.h"
#include <unistd.h>
#include "main.c"
TEST test_base(void) {
int stdout_bk = dup(fileno(stdout));
int pipefd[2];
pipe(pipefd);
dup2(pipefd[1], fileno(stdout));
celsius_to_kelvin();
fflush(stdout);
close(pipefd[1]);
dup2(stdout_bk, fileno(stdout));
int buf_size = 10240;
char actual[buf_size];
read(pipefd[0], actual, buf_size);
char* expected =
"0 : 273\n"
"20 : 293\n"
"40 : 313\n"
"60 : 333\n"
"80 : 353\n"
"100 : 373\n"
"120 : 393\n"
"140 : 413\n"
"160 : 433\n"
"180 : 453\n"
"200 : 473\n"
"220 : 493\n"
"240 : 513\n"
"260 : 533\n"
"280 : 553\n"
"300 : 573\n";
ASSERT_STR_EQ(expected, actual);
memset(actual, 0, buf_size);
PASS();
}
GREATEST_MAIN_DEFS();
int main(int argc, char **argv) {
GREATEST_MAIN_BEGIN();
RUN_TEST(test_base);
GREATEST_MAIN_END();
}Решение учителя откроется через:
20:00
