Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите в изучении C.

Ответить
Настройки темы
C/C++ - Помогите в изучении C.

Аватара для Efimalex

Пользователь


Сообщения: 76
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Drongo
Дата: 04-02-2014
Добрый вечер. Решил я попытаться освоить программирование, решил начать с C. До этого с программированием дела не имел ( школьный курс Basic не в счет ). Читаю книгу Д. Ритчи & Керниган Б. Язык программирования С., поставил Eclipse, компиляторы MinGW. Начал писать, а вернее списывать, свою первую программу. Текст программы взят из книги.
Код: Выделить весь код
#include <stdio.h>
main()
{
    printf("Hello, world\n");
}
eclipse после компиляции выдавал две ошибки, хотя и запускал программу. Они пропали после того как текст изменил на
Код: Выделить весь код
#include <stdio.h>
int main()
{
    printf("Hello, world\n");
    return 0;
}
Этот текст я взял в инете. Объясните в чем разница? Что такое int я разобрался, но зачем в данной программе нужно указывать тип функции? И про return 0

Отправлено: 23:16, 03-02-2014

 

Пользователь


Сообщения: 121
Благодарности: 35

Профиль | Отправить PM | Цитировать


lxa85, c .NET я не сталкивался, а Java компилируется в байткод, который потом выполняется на специальной виртуальной машине JVM. Согласитесь, javac никаких кодов завершения не получает, т.к. в выполнении программы не участвует.

Отправлено: 08:49, 05-02-2014 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Efimalex

Пользователь


Сообщения: 76
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Итак, добрался я до следующей программы:
Код: Выделить весь код
#include <stdio.h>
/* печать таблицы температур по Фаренгейту
и Цельсию для fahr = 0, 20, ..., 300 */

main()
{
    int fahr, celsius;
    int lower, upper, step;

    lower = 0; /* нижняя граница таблицы температур */
    upper = 300; /* верхняя граница */
    step = 20;  /* шаг */

    fahr = lower;
    while (fahr <= upper) {
        celsius = 5 * (fahr-32) / 9;
        printf(“%d\t%d\n”, fahr, celsius);
        fahr = fahr + step;
    }
}

Поясните пожалуйста вот эти две строчки
Код: Выделить весь код
int fahr, celsius;
int lower, upper, step;
Я правильно понял, что переменные нужно "раскладывать" раскладывать по типам? И непонятно с формулой, вернее с объяснением
Цитата:
Причина, по которой мы сначала умножаем на 5 и затем делим на 9, а не сразу умножаем на 5/9, связана с тем, что в Си, как и во многих других языках, деление целых сопровождается отбрасыванием, т. е. потерей дробной части. Так как 5 и 9 - целые, отбрасывание в 5/9 дало бы нуль, и на месте температур по Цельсию были бы напечатаны нули.
Может мне другими словами это разъясните? Ни как я не пойму этого отбрасывания. Может на конкретном примере покажете что происходит?

Отправлено: 22:35, 05-02-2014 | #12


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Efimalex:
Может мне другими словами это разъясните? Ни как я не пойму этого отбрасывания. Может на конкретном примере покажете что происходит? »
С этим: Представление целых чисел - Поиск в Google Вы знакомы?

Что получится при обычном делении 5 на 9? «0.5(5)» — «0.5555555555555555555555555555555…». Операция деления над двумя целыми числами даёт целочисленный результат, т.е. вся дробная часть — «.5555555555555555555555555555555…» просто теряется, остаётся только «0». При делении 10 на 9 будет 1 («1.1111111111111111111111111111111»), 20/3 = 6 («6.6666666666666666666666666666667»).
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:29, 06-02-2014 | #13


Аватара для Efimalex

Пользователь


Сообщения: 76
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


В упражнении нужно переделать программу наоборот. Вот что получилось
Код: Выделить весь код

#include <stdio.h>
/*печать таблицы температур по Фаренгейту
 и Цельсию
 */
int main()
{
    printf("Таблица температур\n");

	float fahr, celsius;
	float lower, upper, step;

	lower=-17.8; /*нижняя граница температур*/
	upper=300.0; /*верхняя граница температур*/
	step=20.0; /*шаг*/

	celsius=lower;
	      while (fahr<=upper)
	      {
	    	  fahr=(9.0/5.0*celsius+32.0);
	    	  printf("%5.1f %8.2f\n%" , celsius, fahr);
	    	  celsius=celsius+step;
	      }
	return 0;
}
Пока строчка вывода результата вычеслений выглядела
Код: Выделить весь код
printf("%5.1f %8.1f\n%" , celsius, fahr);
Программа выводила такие числа например, 162.2 323.0 (по Цельсию и Фаренгейту соответственно).
Когда указал в спецификации что выводить нужно с точностью до сотых, начала выводить нормально, 162,2 323,96. Это что, шло округление? Я думаю, не должно, ведь он должен просто откинуть все что идет после десятых долей, или я не прав?

Последний раз редактировалось Efimalex, 06-02-2014 в 23:18.


Отправлено: 22:01, 06-02-2014 | #14


Аватара для User001

Ветеран


Сообщения: 740
Благодарности: 116

Профиль | Отправить PM | Цитировать


Цитата Efimalex:
Это что, шло округление? »
Оно самое почитайте например, здесь.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:19, 07-02-2014 | #15


Аватара для Efimalex

Пользователь


Сообщения: 76
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Добрый вечер. Помогите разобраться вот в чем. Поставил на другой ноут(Win7 x86) Eclipse и MinGW. При запуске Build, создается лишь папка Debug, а бинарный фал нет. Но если использовать готовый проект Hello World ANSI C Project с кодом:
Код: Выделить весь код
 ============================================================================
 Name        : hr.c
 Author      : 
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */
 
#include <stdio.h>
#include <stdlib.h>
 
int main(void) {
    puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
    return EXIT_SUCCESS;
}
то все проходит нормально. Но если создавать свой проект с кодом
Код: Выделить весь код
#include <stdio.h>
 
int main() {
   printf("Hello, world!\n");
   return 0;
}
то при запуске Build, в консоли выводится следующее: Info: Internal Builder is used for build
gcc -O0 -g3 -Wall -c -fmessage-length=0 -o h.o "..\\h.c"
gcc -o hk.exe h.o
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../libmingw32.a(main.o):main.c.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

22:55:18 Build Finished (took 1s.715ms)

Последний раз редактировалось Efimalex, 30-11-2014 в 21:52.


Отправлено: 21:47, 30-11-2014 | #16


Ветеран


Сообщения: 1630
Благодарности: 220

Профиль | Отправить PM | Цитировать


Цитата Efimalex:
Если что компилятор ставил как тут написано http://www3.ntu.edu.sg/home/ehchua/p...wTo.html#mingw »
Я, конечно, не программист и пусть меня не бьют ногами за это.
Но, имхо, изучать С(а не C#) на базе допотопных средств из 1980-х годов на сегодня негоже (это на совести старых авторов (Ритчи и т.п.), читающих многолетние курсы для профессионалов, для таких случаев можно и так).
Нужно поставить какую-нибудь версию MSVisualStudio из современных и изучать программирование, исходя из ее особенностей, интерфейса,
потому что все это изучение нужно для возможности в перспективе создать что-то современно-полезное, а не просто сдать экзамен по началам С и забыть надолго.
Примерно так http://msdn.microsoft.com/ru-ru/library/k1sx6ed2.aspx (У меня без всяких вопросов все сразу заработало)

Иначе неизбежно будут горы ненужных для изучения проблем в разных версиях, которые в последнем вопросе.
Можно там в Studio обыгрывать примерчики с фаренгейтами из Ритчи.

Последний раз редактировалось alef2474, 01-12-2014 в 02:47.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:56, 01-12-2014 | #17


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


alef2474, можете пояснить — с какого перепуга MinGW и Eclipse в Ваших устах превратились в «допотопные средства из 1980-х годов»?

Отправлено: 06:46, 01-12-2014 | #18


Ветеран


Сообщения: 1630
Благодарности: 220

Профиль | Отправить PM | Цитировать


Цитата Iska:
с какого перепуга MinGW и Eclipse »
Да, Википедия говорит о 1998 годе, но начало было положено раньше в 1985-ом https://ru.wikipedia.org/wiki/GNU_Compiler_Collection.
В любом случае, имхо, это несовременно изучать отмирающие версии языка и старые грабли версий для новичка, в моей ссылке на MS, кстати отвечены варианты написания main() Управление памятью значительно усовершенствовано в C# по сравнению с C++ Имхо, нужно изучать не только язык, но и нормальную среду программирования, а не что-то минималисткое, вызывающее вопросы.
Если я неправ, объясните в чем.

Вы ответите про return EXIT_SUCCESS; и stdlib из последнего вопроса?

Последний раз редактировалось alef2474, 01-12-2014 в 11:11.


Отправлено: 10:25, 01-12-2014 | #19


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата alef2474:
Если я неправ, объясните в чем. »
В азарте. Язык — всего лишь инструмент. Не надо делать из него фетиш. Кто-то пишет на стандартном C, кто-то — на C++. Кто-то жить не может без C#, а кому-то хватает и пакетных файлов. Апологеты чистого ассемблера их запросто заклюют за «неправильный», с их точки зрения, подход.

Цитата alef2474:
Вы ответите про return EXIT_SUCCESS; и stdlib из последнего вопроса? »
Нет, конечно. У меня нет MinGW.

Отправлено: 11:46, 01-12-2014 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите в изучении C.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[Ну помогите же человеку, а? :)] Помогите с конкурсом HTML64 Тест-форум 0 29-06-2012 10:33
CMD/BAT - [решено] помогите скачал себе этот вирус помогите его разблокировать orell Скриптовые языки администрирования Windows 2 05-05-2012 15:45




 
Переход