2013-07-22 2 views
2

Я только начал изучать C, и я узнал, что знак/является оператором деления. Я экспериментировал, и было интересно, почему 5/7 Printf числа 0.Почему 5/7 печать 0?

Вот моя программа:

#include<stdio.h> 

main() 
{ 
    int n; 
    n = 5/7; 
    printf("%d", n); 
} 

Спасибо!

+9

потому что его вывод равен целому числу '5/7' =' 0.71..' = целочисленная часть '0'. C (и многие языки программирования) работают таким образом. вам также нужно изучить тип данных 'float'. –

+0

Вы объявили n как целое число. 5/7 не является целым числом. –

+0

'/' делает [целочисленное деление] (http://mathworld.wolfram.com/IntegerDivision.html). – miku

ответ

7

Это связано с целым делением. 5/7 делает 0.71.., а целочисленная часть этого номера равна 0, поэтому он печатает 0. Для решения этой проблемы используют float тип (или двойной тип) переменные, а также константы, например, попробовать:

float f = 5.0/7.0; 

переменной печати f с форматом строки %f

+0

Спасибо большое :) :) –

+0

Как начинающий хороший ответ, попробуйте написать полный ответ. ниже, ниже ответа Даниэля Даранаса. а также то, что я добавил –

+0

Нет моего комментария к @C_Beginner_Learner –

3

Потому что это 0.

5/7 - целочисленное деление, поскольку и 5, и 7 являются целыми числами. Результатом целочисленного деления 5/7 является 0.

n, переменная, которой вы назначаете результат, также является int.

У вас будет деление с плавающей запятой, если вы написали 5.0/7.0. Однако, поскольку вы назначаете результат n, который является, опять же, int, его значение равно 0. Конечно, если вы присвоите результат 5.0/7.0 переменной double, вы получите десятичные знаки в ней.

+2

Не нужно явно бросать две стороны, вы можете использовать только одну сторону, а другую - неявно. – Maroun

+0

@MarounMaroun Не нужно, правда, но мне не нравится использование неявных бросков. –

Смежные вопросы