Язык Си для начинающих / #2 - Переменные и типы данных
HTML-код
- Опубликовано: 3 апр 2020
- Переменные являются важной частью любого языка программирования. В ходе урока мы познакомимся с написанием переменных, а также изучим различные типы данных. Также мы научимся выводить и получать данные от пользователя.
1) Урок на сайте itProger: itproger.com/course/c-program...
✔ Сообщество программистов: itproger.com/
✔ -------------
Вступай в группу Вк - prog_life 🚀
Группа FaceBook - goo.gl/XW0aaP
Инстаграм itProger: / itproger_official
Instagram: / gosha_dudar
Telegram: t.me/itProger_official
Twitter - / goshadudar
- Уроки от #GoshaDudar 👨🏼💻
- Все уроки по хештегу #goshaLessons
Дали книгу в институте, сказали: «читай», ничего не понял, а тут человек подробно все по полкам разложил. Спасибо тебе, обнял. БЫСТРЕНЬКО ВСЕ ПОДПИСАЛИСЬ!!!💙👋🏻
тебе хотя бы книгу дали.Мне сразу дали работы,которые нужно сдавать
@@user-gs6pw2hp8m жиза
@@user-gs6pw2hp8m до боли жиза
чел одной книгой ты ничего не добьёшся практика тоже нужна
А читать пробовал?
Я в восторге. Автор - вы прирождённый учитель. Браво. Великолепно! Единственное, что автор не слишком хорошо помнит диапазоны типов данных. Например int 4 байта (32 бита). Минимальное значение -2 147 483 648, максимальное значение 2 147 483 647. А вот short имеет размер 2 байта(16 бит) и, соответственно, позволяет выразить множество значений равное 2 в степени 16: 2^16=65 536. Так как тип short является знаковым и содержит как положительные, так и отрицательные значения, то диапазон значений находится между -32 768 и 32 767
65535* short вмещает
@@Klerfe Он про шорты говорил что кол-во значений
Спасибо за уроки. Вы сделали отличный курс для тех, кто изучает Си.
Отлично и доходчиво! Все понятно! Спасибо огромное!!!
Очень полезная информация, спасибо!
Гоша, спасибо тебе огромное!!! Объясняешь очень понятно, все доходит до головы. У тебя лучшие курсы!
вот за это от души. ничего лишнего все как и должно быть. а самое главное понятно))))
Большое спасибо, очень круто объяснено 👍👍
Большое спасибо! Это отличный опыт ❤
Спасибо ! Очень информативно и понятно !!
Спасибо, Гоша. Даже 13-летнему мне интересно
увожаю
А мне 12=), и тож интересно.
@@ivaniwan1947 а мне 12 и скучно
@@nakidai Мне тоже, сейчас 12
@@yglyglya а мне уже 14 скоро будет 😎
Спасибо, ждем еще
Очень просто объяснил👍
Спасибо за видосы, учу этот курс в китайском университете)) 😃
Спасибо огромное! Просто реально помог
Пытался до этого учить с++ по книге, многое понятно но не все. Знаю ассемблер и работал на нем.
Но когда начал смотреть ваш курс понял "вот оно, мое! ".
Спасибо большое! От души спасибо!
Так а что не так? в асме подключается WinAPI, а у него функции как в C.
Красавчик, не слушай хейтеров.
С типом int я бы не был так однозначен. По спецификации int - целое число, размер которого минимум 2 байта. В x86 int - 4 байта, а в AVR (Arduino Uno) - 2 байта. Так что когда используете этот тип, всегда стоит уточнить сколько байт он занимает на вашем устройстве.
если на платформе x86 short 2 байта (2 в степени 16), int 4байта (2 в степени 32). Автор ошибся в интервале int, там будет больше 2млрд. а без знака больше 4млрд, у автора млн.
Да, поэтому есть библиотека stdint.h, которая добавляет числа с конкретными размерами:
int8_t - 1 байт, int16_t - 2 байта, int32_t - 4 байта и там ещё на 8 байт и без знаков
@@user-uj4gr9ql4m о спс шо сказал нейм этой либы
Топ урок! Наконецто что то понял)
Просто " спасибо тебе"
Сколько пытался всегда с самого начала не чего не понимал, пока не наткнулся на эти уроки, спасибо. А просто повтори за мной как на 99,9% курсов для начинающих, это не учёба
С char можно производить математические операции. В char хранятся числа. То, что они являются символами, влияет на их отображение, например, в printf, если указать спецификатор %c
Топ! стукнуло 30 лет сижу конспекты по видео пишу (современная учеба)
Благодарю!
спасибо за труды очень помогаешь учиться все внятно и понятно
Неинициализованные переменные не используют значения по умолчанию! Они могут хранить мусорные данные.
@@user-bh6zu7ct6w вам повезло с оптимизацией компилятора
В стандарте не прописано - значит поведение может быть любое
@@user-bh6zu7ct6w эх, золотая школота... Скажи спасибо своему компилятору (или ide при компиляции), он умнее тебя и сам исправил эту ошибку.
Поэтому нельзя смотреть Гошу 😏 Хотя парень старается
Хотел посоветовать плейлист первокурсникам своим, но после такого точно не буду, а то потом их переучивать :(
Количество информации порадовало, не просто int float double и char. Но раздражает неточность в диапозоне значений.
Добрый день. Подскажите пожалуйста как называется Ваш компилятор, в котором вы работаете. Больно у него френдли интерфейс.
Идеально все монял❤
Для работы с типом данных short нужно использовать спецификатор %hd , а не просто %d!
Иначе будут вылезать ошибки.
Кроме того, ещё есть спецификатор для типа unsigned - %u -, о котором ни слова не сказано...
а естьли смысл вообще шорт то использовать? с интом легче
@@user-fo1ho4ww6p шорт меньше места в памяти занимает. Например, если нужен небольшой счетчик. как я понимаю
@@user-fo1ho4ww6p Ну так short занимает меньше места в оперативке, чем int
@@user-uj4gr9ql4m знаешь, сегодня люди такие что ради удобства юзают long long
Курс имба
Я в Visual Studio 2019, и там он у меня требует чтобы я писал вместо функции scanf(), scanf_s(). Так что будьте внимательны!
А в чём разница? Спасибо, заработало со scanf_s(...)
@@user-jd1dv4gk8n Ну типа это зависит от компилятора. Вот например у меня Visual Studio принимает scanf() за ошибку.
2:39
Да, конечно, 0. Если бы в Си было всё так просто))
Язык Си разрабатывался для максимальной производительности. А т.к. присваивание нулевого значения по умолчанию является операцией, то это идёт в разрез его эффективности. Зачем присваиватьзначение по умолчанию, если разработчик потом планирует дать переменной значение?
В переменную по умолчанию записывается мусор, который хранится в ячейке памяти, в которой находится переменная. Да, там может быть 0. А может и не быть)) (скорее всего это будет второй вариант)
А что будет вместо нуля?
@@txmka7 По идее ничего...Если говорить про максимальную эффективность программа даже не должна пытаться дать этой переменной какое-то значение,а просто отставлять болванку для дальнейшего использования...Я далеко не эксперт но если расширить комментарии выше,по идее должно быть так, если это физически возможно.
А можете посоветовать книги для изучения Си
Почему функция вывода в C называется printf, а не просто print?
printf (от англ. print formatted, «форматированная печать») (Википедия). Может быть записана printf("my number is %f", 1.5); в итоге мы увидим "my number is 1.5" знак "%" значит, что сейчас будет форматирование, а буква ""f" обозначает тип данных( в данном случае float).
А если проще говорить, функция printf позволяет работать с переменными. Поэтому она и называется print format.
29:13 указатель не на переменную, а именно на адрес области памяти этой переменной. Так точнее и понятнее сам процесс работы
Это не указатель, а просто символ адресации, амперсанд, он указывает на месторасположения значения переменной в памяти, это не указатель
@@ruslanvolovik2745 ты не понял мой комментарий. Моё слово "указатель" означает одно и тоже, что ты потом подправляешь меня словом "указывает". В данном контексте, при вводе значения через scanf, имхо, но этим словом больше понятно, чем говорить, что он возвращает адрес. Да и к тому же я тут напрямую поправляю автора...
То что этот знак не указатель и так должно быть понятно, ибо что такое указатель? Указатель это ПЕРЕМЕННАЯ, которая хранит адрес ячейки.
@@demetriuss.8291 все верно!
Сделай урок по C# Xamarin для Android
Спасибо). Открыл благодаря тебе жуткий баг в mingw. (visual studio не захотел со мной дружить) в scanf. Теперь сижу, горю
Небольшая поправка:
тип данных *short int* использует 2 байта памяти -> может хранить значения 0...65536 для unsigned и -32768...+32768 для signed
если *int* использует в 2 раза больше памяти (4байта), то диапазон его значений составляет +-2 млрд, а не млн
@@moneyhouse4365 Спасибо, поправил. Действительно перепутал signed и unsigned местами)
@@citizenone158 Да, и так же ещё:
верхний предел для unsigned short не 65 536, а 65 535. И для signed short верхний предел не 32 768, а 32767 ;-)
Не на всех компьютерах машинное слово 4 байта (размер для int). Я пришёл сюда душить)) Тип short хранит половину машинного слова
Мастер "hello world!" на все руки
Не строка а команда. В строке может быть много действий и т. д., но целом урок хороший как всегда.
Здравствуйте. В видеоуроке вы рассказали о том, что для типа float не нужно писать unsigned, так как для данного типа подходят и отрицательные, и положительные числа. Но разве в тот же int не входят те же отрицательные и положительные числа? Почему мы возле int можем написать unsigned, а возле float - нет?
Он сказал что в тип float не могут входить только положительное значение так как он работает и с теми и с отрицательными по умолчанию(грубо говоря тип данных тупо так устроен и так он и работает)
@@user-bt6mf1qq4u хорошо, спасибо
я все это делаю через терминал так у меня при подставлении значений появляется ошибка (%x and %y) а в целом все очень ххорошо расставелно по местам. мне все очень понравилось
Привет, скажи пожалуйста. Только только начал изучение программированием, что можешь посоветовать новичку? С чего начать лучше всего? Ответь ПЖ!
С основ т.е. то чего он говорит.
Я бы тебе питон для начала посоветовал .А когда уже научишься мыслить и искать инфу в гугле то переходи на С ,или С++ , смотря для чего тебе программирование надо.C и C++ звучит одинаково ,но языки разные )
@@animovhere894 Я бы никогда бы не посоветовал начинать с питона. Это СЛИШКОМ дружелюбный язык, который показывает слишком мало ошибок и часто будет просто пропускать если неправильно напишешь (к примеру случайно поставил = вместо == в условии). Да и гемор такой будет при переходе на c-подобные языки, когда надо везде эти скобочки, точки с запятой ставить. Где ' ' и " " не одно и тоже. Но также, каждый выбирает что ему интереснее, и указывать что выбрать не стоит.
Где же ты раньше был , добрый человек?
9:58 разве %d - это не decimal (рус "десятичный") или же у него есть два названия?
молодец
Спасибо за урок. Я Полный "чайник"и перед тем как пойти на курсы, решил подучить хоть какие основы для лучшего усвоения в дальнейшем. Начал Рихтера читать, но в какой-то момент понял, что читаю просто текст без понимания))) А тут все досконально объяснил, детали из книги стали понятны. Буду продолжать по тихоньку, от непривычной информации мозг кипеть начинает. Может быть кто-то поделится опытом, как действовать в изучении от полного 0?
По началу тебе только видео помогут
Год прошёл) поделитесь опытом
Удалось с нуля разобраться?
@@user-qi2vu2rm4g начинаю с нуля тоже) из базы только знания питона. си учу по курсам на степике и по видео с этого канала. пока вроде все понятно, но особенно понятно, что дальше будет сложно. потому что си очень про память и эффективность))(((
отпишусь может быть потом
В Си же значение по умолчанию не присваивается. Просто повезло, что ячейка памяти переменной попала на чистую память. Если не инициализировать, то в переменную может попасть любой мусор, который в памяти оставили другие программы
👍
Integer Types
Type Storage size Value range
int 2 or 4 bytes -32,768 to 32,767 or -2,147,483,648 to 2,147,483,647
unsigned int 2 or 4 bytes 0 to 65,535 or 0 to 4,294,967,295
short 2 bytes -32,768 to 32,767
unsigned short 2 bytes 0 to 65,535
А на Andruino меньше
Когда будет видео про бота
А зачем к флоату добавлять "f"? компилятор прочитал корректно как число с "f" так и без
Здравствуйте, Гоша! Пусть Вам не покажется этот комментарий слишком наивным. Я делаю игру на C++. Выживание. Скажу сразу, я занимаюсь программированием меньше года. Знаю циклы, массивы, условные операторы ну и там по мелочи. Игра представляет собой выживание на улице. Да, звучит странновато. Так вот. Мне нужно, чтобы прогресс игры сохранялся каждый день (один день - один ход). И чтобы игрок мог выйти из игры и потом продолжить. Как я могу такое реализовать? Я долго искал в интернете, но так и не нашёл или не понял. Ах да, ещё я хотел бы сделать, чтоб был "зал рекордов", где показывалось бы максимальное количество прожитых дней. И как сделать это, я тоже не знаю. Надеюсь на Вашу помощь, буду очень благодарен, если хотя бы откликнитесь.
Здравствуйте, для этого нужно использовать базу данных или чтение/запись с файлов и каждый "день" записывать всю информацию о данной игре в файл или бд, и при загрузке в зависимости от того, что там написано, то и загружать. Таким же образом работает таблица рекордов. Может я объяснил как-то криво, но постарался помочь, ведь я пока что только Смотрю и Учусь.
Согласен с челом выше , тебе нужно использовать файлы что будут сохранятся на жестком диске или в облако.А как именно то там уже изворачивайся как хочешь.Например при загрузке будет считываться файл в котором на каждой определенной строке будет определенная инфа (хп,мана,опыт и тд.) в другом файле в виде массива будут записаны числа которые будут обозначать какие вещи есть в инвентаре и тд.
Это самое первое что пришло на ум.
Удачи!!
@@animovhere894 знаешь. бд звучит тут получше как-то
лучше чем в Гарварде
лучше, но всеравно не понятно. В гарварде вобще даже не обясняют, этот гарвардский курс cs50 для тех кто уже немного знает
Гоша Дударь привет
Я пользователь linux каккой текстовый редактор мне использовать?
Спасибо!
vim
Sublime text
Gedit с плагинами и не нужно изобретать велосипед !! Для среды KDE не помню какой там дефолтный редактор, но он тоже весьма норм будет
@@iCoteg cbacibo
NetBeans 8.2 (с модулями работы с Си и Си++)
Работаю в atom. Запись следующая:
#include
#include
int main(){
char fletter;
short age;
float height;
printf("Первая буква вашего имени: ");
scanf("%c", &fletter);
printf("Ваш возраст: ");
scanf("%d", &age);
printf("Ваш рост: ");
scanf("%f", &height);
printf("Первая буква: %c,
Возраст: %d,
Рост: %f
", fletter, age, height);
}
При запуске ошибок не выдаёт, всё работает до конца. но не высвечивается первая буква. Вывод выглядит так:
Первая буква вашего имени: О
Ваш возраст: 45
Ваш рост: 345
Первая буква: ,
Возраст: 45,
Рост: 345.000000
Для продолжения нажмите любую клавишу . . .
Используй кодировку, где русский символ занимает 1 байт.
слм всем, кто может подсказать: пишу код(C#) на дев С++ без библиотеки (то есть не пишу #include ), программа всё равно запускается.
В какой среде работаете? Возможно вы ставили дополнения, которые автоматически подключают библиотеки? Ещё вроде VS с этим сам справляется
При подключении библиотеки ты не расширяешь возможности файла или языка, тут происходит другое...
Если конечно для тебя готовые функции и типы не являются так называемой расширенной возможностью программирования...
Это не библиотека а загаловочный фаил
При создании локальной переменной НЕ будет установлено значение по умолчанию. Будут случайные значения.
В Си не инициализированная переменная принимает мусорное значение, а не 0. В Java 0 по умолчанию присваивается и возможно в других языках
Для глобальной переменной значение будет 0, тк память под нее выделяется при компиляции. Но так то, в видео глобальные переменные вообще не представлены)
хорош
Здравствуйте. Что вы порекомендуете почитать если и этот урок ступор вызывает? Непонятно вообще что значат все эти буквы и цифры и для чего они нужны
Сайт t-r-o-n.ru имеет вполне не плохое руководство по языку си
Если ваще тупой (как я) начни с питона , дальше будет видно втянешся или нет.Если втянешся переходи на С или С++ или ваще на Java я хер знает .
Ага, слушай их....
Если не понимаешь что написано, то первым делом бери учебник английского, нужно хотя-бы понимать такие базывые надписи, далее почитай немножко про матлогику, а именно что такое бинарные числа и как работают операции И, ИЛИ, НЕ. Для самого начала этого хватит. Далее, ты должен понимать, что компудахтер как раз и работает с бинарными числами.
Далее язык. Если не смыслешь в СИ, то бери обычный паскаль или бейсик. Питон не бери, он язык ооп, к тому же в основном для веба используется....
Если сразу с него начнёшь, то либо запутаешься, либо станешь говнокодером, в плане ооп. Пока что тебе нужно научиться писать обычные структурированные программы. Как только будешь уверенным в паскале или в бейсик, садись либо на си, либо с++. Научись его синтаксису, разбери уже указатели, работу с памятью и т.д.
И только после этого садись за ооп. Для ооп есть си object, c++, c#, Java, Python. Но начинать лучше либо с C object, либо с C++. А там уже выбирай что хочешь
@@animovhere894 пиши на javascript и не нужен тебе c/c++, питон и прочее
А как будет сокровенные версия x=1-x .
1 -= x? - да не ужели
Мне одно не понятно. Что в итоге получается после всех этих манипуляций? Программа получается или что?
Что сделать если комманда /n не переносит на следующую строку, я пишу в Code blocks
Потому что не /n, а
@@hoyoreverse Аа, пасиба большое)
Спасибо ты топ но это точно))
Крутой урок! Отлично объясняет, все понятно, збс, чётко.
Возвращаемое значения пропущено "scanf" ??? что делать ?
scanf_s пиши)))
@@zloyden4ik332 спасибо большое, это сработало))
-32768 ÷ 32767 про 0 не забываем !!
А у меня scantf не пошла.
Пишет возвращаем значение пропущено: "scantf".
Работал в visual studio. Всё делал как в видео.
Не подскажите что может быть?
думаю нужно без t)
напиши scanf_s
@@ostapilkiv3058 такое пошло, но почему с _s ?
@@kimaller5148 с "_s" потому-что это безопасное(раньше были проблемы с безопасностью без этого) дополнение к функции, без этого visual studio попросту не разрешает, ну там конечно можно заморочиться и макрос добавить, тогда оно и без дополнения разрешает, но это уже такое
Я потписался
Цілі числа в printf() можна виводити не тільки за допомогою %d, а ще й за допомогою %i.
ТЫ ТОП
не нашел в комментах объяснение, может кто ответит зачем были поставлены f в записях типа float x = 5.5f, y = 6.7f;?
Без этого суффикса десятичное число рассматривается как значение типов int/long
@@YangiyerBolaспасибо за ответ, но конечно поздновато уже)))
Если не ошибаюсь, булевых значении нет в языке "C". А в "C++" есть.
Да есть они везде, bool зовутся.
@@nakidai, только в Си требуется стандарт С99 и stdbool.h
@@eirjair7037 ну, как миниммум в MinGW это есть, так что норм
Mожете научить pointer , пожалуйста, как можно скорее
Спасибо за дезинформацию! Полчаса искала, почему же я не могу в VS ввести числа и что за ошибку мне выдает при scanf! Оказалось, надо вообще по-другому писать, весь инет перешерстила, нашла в комментах.
Доброго времени суток, скажите пожалуйста, где можно найти решение? Тоже выдаёт ошибки)
и у меня такая же ошибка, что нужно сделать что бы исправить?
пол часа мучался, пока не погуглил, в MS_VS не работает svanf, нужно вводить scanf_s, нужно учитывать такие мелочи
тоже самое.твой комент помог, спасибо
А разве bool не используется в си++, а чи его нет?
Си*
Здравствуйте! Мне 12 и я очень хочу программировать пытался учить джава СЛОЖНО, Пайтон НЕОХОТО И СЛОЖНО а с си ОТЛИЧНО покачто я очень люблю математику и думаю это мне поможет можете ли вы мне что то посоветовать
иди в бравл старс по играй
Учи Си, так как это плюс-минус сложный язык программирования, как и с++, потом будет легче учить другие
Как успехи спустя год?:)
@@andrey6552 норм, на С написал лишь калькулятор, перебрался на питон, забросил, сейчас учу Godot вообще имба
@@NIVLON красавчик :)
У меня не работает функция запроса " scanf" 😭😭😭. Во первых это единственная функция которая не подсвечиваеться другим цветом. И в ошибке указывает на scanf
Вместо bool можно просто использовать целые числа. А раз ты решил затронуть подключаемых библиотеки, то нужно рассказать что это такое
Зачем тогда это множество значений булевого типа данных?
@@ruslanvolovik2745 да в жопу оно идет, учитывая что bool юзает столько же, сколько byte, то либо использовать побитовые операторы, либо byte, например чтобы экономить оперативку юзая одну переменную
даже такой как я 0) понял что это вообще такое))
num_first, если не задать ей значение, не ноль, а пустота
а разе %d означает не decimal?
digit
Что за редактор кода и что за тема?
Редактор - Xcode.
ааа, зачем у Плавающих чисел ("с точкой) добавляется "f"????
(кто-нибудь знает зачем? пробую вводить без f и "все пока работает", но чувствую, что надо использовать... (в др. "объяснениях" такое не упоминают, видимо чего-то не знают..)
Изначально без f присваивается тип данных double, здесь же используется float, для коей реализации и добавляется "f"
@@user-rd4gb9sk7m а как же неявные преобразования, тыры пыры шмыры?
Чувак, в локальной переменной значения по умолчанию нет, тк память под них выделяется в процессе выполнения.
Кстати не все числа можно в инт писать,вроде как от -2 миллиардов до +2 миллиардов.Ну это грубо говоря.
Переменная не должна называться одними цифрами, об этом не сказано. Также не услышал о том, что например такие переменные не равные: Name, name, NAME, ...
Кто-нибудь может посоветовать книги по си?
K&R
Программирование на C для начинающих, 3-е изд. Грег Перри, Дин Миллер.pdf
Это - лучшее для начинающих!
Так %d означает digest? Но оно не переводится как "цифра"
Цивра переводится как number
digit → число (состоит из цифр)
number → цифра (0-9)
@@yglyglya а понятно
пацаны ,нужна помощь .Помогите сделать задачу по программированию на C.
Даны три действительных числа. Найти и вывести максимальное по модулю число.
#include
#include // для abs()
int main() {
const int SIZE = 3;
int arr[SIZE];
arr[0] = -10, arr[1] = 5, arr[2] = 0;
for (int i = 0; i < SIZE; i++)
arr[i] = abs(arr[i]);
int max = arr[0];
for (int i = 0; i < SIZE; i++)
if (max < arr[i]) max = arr[i];
printf("%d", max);
return 0;
}
Если кто-то хочет программировать под Windows 7, то для этого есть самая простая в установке (по сравнению с другими) и интуитивно понятная среда CodeBlocks.
Ага, индивидуальная для Windows 7 🤦♂️
Учитесь писать в простом текстовом редакторе и компилировать через cmd
@@vip51000 зачем?
В большинстве компиляторов уже давно запрещено юзать scanf, ибо нужно scanf_s
Ерунда, scanf_s - только в VS используется, в остальных компиляторах стандартный scanf.
если честно впервые слышу о твоих _s, юзал MinGW и не ругалось
2:40 не любое число, а число только из диапазона integer. Да, ты об этом сказал позже, но ошибка есть ошибка. Не точность
7:20 а кто будет говорить, как эти действия называются?
Это чистый си или си шарп?
Чистый си
@@magicwinnie8779 а что за среда показана на видео?
@@user-qe9zw4yj1n Вроде бы, xcode
@@user-qe9zw4yj1n block code
Что в описании написано?
Переменные не всегда становятся нулем без инициализации, так что учить что в свежесозданной переменной именно он и будет ну такое себе. По умолчанию нужно считать что там мусор иначе код может вдруг взять и сломаться.