JavaRush /Курсы /Harvard CS50 /И снова Hello C: разбор синтаксиса простейших программ

И снова Hello C: разбор синтаксиса простейших программ

Harvard CS50
1 уровень , 15 лекция
Открыта
#include &ltstdio.h>
int main(void)
{
    printf("hello, world\n");
}

Итак, мы выяснили, что директива #include подключает библиотеки. В случае нашего hello.c
библиотеку ввода/вывода &ltstdio.h>

Теперь поговорим о том из чего состоят программы в Си.

Программы в Cи состоят из функций, а те — из операторов и переменных. Функция — это кусок кода, в котором уже есть или подаются какие-то данные, а какие-то данные получаются в результате её исполнения. 

Фигурные скобки { } ограничивают тело функции — описание того, что она должна делать. 

printf() из стандартной библиотеки stdio выводит любую строку на экран. Строки заключаются в двойные кавычки, а символ “\n” означает перевод курсора на новую строку. 

Пример: функция «посчитать квадрат целого числа». Передаем функции данные, в нашем случае — число, которое нужно возвести в квадрат. Затем в ней прописывается алгоритм умножения числа на такое же число, и результат этого умножения она выдает на выходе. 

int sqr(int a)
{
return a*a;   
}

int sqr(int a) — название функции. В скобках — её аргумент a, это то, что подается на вход функции. Это как переменная в уравнении. То есть, если мы хотим узнать квадрат числа 5, то мы вызовем нашу функцию в виде sqr(5) и получим результат 25. 

int — тип данных (от англ. integer — целые числа). Наша функция написана так, что мы не можем вызвать её с аргументом a = 5.5. Такая попытка выдаст ошибку, поскольку 5.5 — число дробное, а наше число должно быть целым. int перед именем функции означает тип, который должна эта функция возвращать. Он не обязательно совпадает с типом аргумента.

Пример: функция, которая отнимает от целого числа 0.5: 

double bit_less(int a)
{
double b; 
b = a – 0.5; 
return b;
}

int main (void) — название главной функции. В одной программе может быть много функций, но, чтобы начать её выполнять, нужна функция под названием main. Слово void в скобках означает, что у этой функции нет аргументов.

Внимание! Главная функция main всегда возвращает int, но return для неё не обязателен.

Пример функции не возвращающей значения: 

void sayhello(void)
{
printf(“hello everyone!\n”);
}

При вызове функции в главной программе, она выведет приветствие. 

Давайте напишем одну программу, в которой будет несколько функций. Тех, что мы уже создали выше. Две созданные нами функции вызовем через главную функцию main()

В Cи, как и любом языке, есть такой элемент, как комментарий или примечание в теле программы, предназначенное не для компьютера, а для понимания людей. Например, описание того, что именно делает код. Компилятор комментариев не видит. Комментирование программ — очень важный момент, поскольку порой разобраться в чужом (и даже своем) коде очень сложно. 

//пример однострочного комментария 

/** а это — 
 многострочного **/

Итак, вот наша программа:

#include &ltstdio.h> 
//функция возведения в квадрат числа a 
int sqr(int a){
return a*a;
}

//выводит приветствие
void test(void) {
printf ("hello everyone!\n"); 
}

//главная функция
int main(void) 
{
test();
printf("%d\n", sqr(5));
}

Почти всё, что есть в этой программе вы уже видели. Две функции — возведения в квадрат и приветствия и главная функция main, где мы последовательно вызываем эти две функции. 

В результате выполнения программы у нас сначала выведется приветствие, на следующей строке — квадрат числа 5. Обратите внимание, функция test() вызывается с пустыми скобками, потому что её аргументы определены как void.

Комментарии (28)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Вита Уровень 1
21 июля 2021
Спасибо пишущим комменты. Вы реально даете больше, чем "коронованные" преподы
Віталій Чирка Уровень 2
29 апреля 2021
как новичку, стало интересно как зациклить код, если вводим не положительные значения: вот что получилось: #include<stdio.h> #include<cs50.h> //функция возведения в квадрат числа a int sqra(int a){ return a*a; } int sqrb(int b){ return b*b; } //выводит приветствие void test(void) { printf ("hello everyone!\n"); } //главная функция int main(void) { test(); int x; int n = get_int("Input integer:\n"); if (n > 0) { printf("%d\n", sqra(n)); } else { do { printf("input right integer:\n"); x = get_int("\n"); } while ( x < 1); printf("%d\n", sqrb(x)); }}
hidden #2969529 Уровень 1
23 января 2022
А оно у тебя компилируется? Я по той же логике писал, почти схожую программу, но твоя выдаёт синтаксическую ошибку((
Max Filinn Уровень 2
16 марта 2021
😎👍🏻
12 декабря 2020
всё работает, кроме понимания как это работает. Добавились новые английские слова, но забыли сделать их описание
Nilufar Abylova Уровень 0
17 августа 2020
Это и есть задачки? Или есть еще типа домашней работы чтобы самостоятельно создать чтото?
Илья Огнев Уровень 35
30 мая 2020
Как я запускал онлайн компилятор CS50. 1. Зашёл по ссылки: https://ide.cs50.io/ 2. Набрал код, и нажал File - Save As. Указал имя фала myfile.c (не забываем про расширение) 3. Вводим команды в консоль внизу: "make myfile", "./myfile"
Antoha_poha Уровень 2
16 ноября 2022
помимо всего прочего нужно не забывать выбирать зону работы ~/pset1/mario/ $ - и вот чтобы так было написано нужно еще прописать в начале cd ~/pset1/mario/ (тут у каждого зависит от того где находится файл с которым ты работаешь, адрес файла)
InYaHead Уровень 1
10 апреля 2020
переписал всю программу, но так и не понял как ее запустить( Напишите пожалуйста как её выполнить.
InYaHead Уровень 1
10 апреля 2020
разобрался, чтобы все это запустилось нужно прописать 2 строки 1. make squad 2. ./squad в итоге будет: hello everyone! 25
Шолпан Уровень 0
20 мая 2020
Здравствуйте, нужно прописать в Terminal?
Шолпан Уровень 0
21 мая 2020
Спасибо большое. У меня получилось. вместо squad написала название своего файла ураааа, работает
Виталий Злобин Уровень 1
27 августа 2019
int sqr(int a) — сигнатура функции. В скобках — её аргумент a, это то, что подается на вход функции.
Victor Уровень 3
6 января 2019
06.01.2019г. проехали 1.15 Программы на C состоят из функций, а те в свою очередь из операторов и переменных, // и /** это комментарии.
Gritsenko Eduard Уровень 0
5 октября 2018
Всем привет! Ребят, помогите зеленому нубу разобраться в проге, что была указана в этой лекции: Я почему то решил разобрать ее на составляющие, то есть чтобы получились два отдельных кода (для возведения в квадрат числа и для вывода текста). У меня получилось следующее: Для возведения в квадрат числа - #include <stdio.h> int sqr(int a){ return a*a; } int main(void) { printf("%d\n", sqr(5)); } Для вывода текста - #include <stdio.h> int main (void){ printf ("hello everyone!\n"); } Коды рабочие, все выводится верно, однако мне стало интересно почему именно такой вариант написания верен для возведения в квадрат числа а не например вот такой: #include <stdio.h> int main(void); int sqr(int a){ return a*a; printf("%d\n", sqr(5)); } ну или вот такой: #include <stdio.h> int sqr(int a){ return a*a; printf("%d\n", sqr(5)); } В первом случае я так понимаю порядок функций скорее всего указал верно, дело либо в точке запятой, либо в скобках, никак не разберу... Во втором варианте написания квадрата числа я так понимаю main функции не хватает... Как говорилось выше я совершенно новенький и тут и в кодинге, скорее всего что-то очень важное пропустил, просто мне хочется понять - есть ли определенный порядок при написании функций одна за другой и почему именно этот вариант является правильным для написания: #include <stdio.h> int sqr(int a){ return a*a; } int main(void) { printf("%d\n", sqr(5)); } Также подскажите пожалуйста что в данном коде означает void test(void) и test(). Описание функции в лекции отсуствует... Отмечу что кодинг начал изучать благодаря Вашему порталу и использую материалы и лекции CS50. Спасиб
Вячеслав Уровень 1
3 мая 2019
#include <stdio.h> int sqr(int a){ return a*a; printf("%d\n", sqr(5)); } Вывода на экран не будет, так как return прервет выполнение функции и printf уже не сработает. Ну и плюсом будет скорее всего ошибка компиляции, потому как ты вызываешь функцию из той же функции.))
DmytroT Уровень 17
13 ноября 2019
Любая программа начинается с main(). Это функция входа в программу. Ее запуск. Зеленый флаг как в Scratch. Ты написал пример программы там вообще нету main это значит что она не запуститься. Пиши код и смотри что тебе отвечает компилятор.