newbie в c і випуск цілих чисел

#include 

int main(int argc, const char * argv[])
{
  int x =10, y =20, b = 500;
  int z = x*y;
  int f = z/b;

 //insert code here...
  printf("x is:%d, y is:%d, b is %d\n",x,y,b);
  printf("x times y is: %d\n",z);
  printf("z divided by b is: %d\n",f);
  return 0;
}

на друк f = 0. Чому?

2
Int означає ціле число. Чи є деякі цифри після крапки з цілими числами?
додано Автор Florian Margaine, джерело
Int означає ціле число. Чи є деякі цифри після крапки з цілими числами?
додано Автор Florian Margaine, джерело
Тому що це 0.
додано Автор Telastyn, джерело

8 Відповіді

Тип int є цілим числом, яке містить значення, які можна використовувати для підрахунку (1, 2, 3 ...). Він не обробляє нічого від десяткової крапки.

Якщо мені слід було присвоїти значення будь-яким значком десяткового значення у вигляді int , всі цифри у правій частині десяткової буде скорочено:

int v = 3.14159

залишив би мені значення 3 для v , тому що ціле число не може зберегти .14159.

Ваша цінність 200/500 становить 0,4, що скорочується до 0, коли він призначений для int f .

Щоб зберегти десяткове значення, потрібно використовувати тип float або double . Зверніть увагу, що ці типи не такі точні, як ви думаєте, тому, якщо ви призначите значення 4,57, ви можете досягти фактичного значення щось на зразок 4.569999999 ....

У своєму коді ви хочете змінити тип f на float , і ви, мабуть, хочете зробити відтінку з цілого числа, щоб плавати на елементах, які ви розділяючи їх, щоб переконатися, що вони зберігають інформацію про плаваючу точку.

Отже, ваша лінія

int f = z/b;

стане

float f = (float)z/(float)b;

і тоді ви використовуватимете % .1f у вашому printf як запропонований @BalogPal.

5
додано
Зверніть увагу, що якщо z і b вже розміщуються, вам не потрібно їх відкидати.
додано Автор Uooo, джерело
@ user2527918 н.п., радий я міг допомогти
додано Автор paul, джерело
дякую, дуже оцінили.
додано Автор Arcanium, джерело

Тип int є цілим числом, яке містить значення, які можна використовувати для підрахунку (1, 2, 3 ...). Він не обробляє нічого від десяткової крапки.

Якщо мені слід було присвоїти значення будь-яким значком десяткового значення у вигляді int , всі цифри у правій частині десяткової буде скорочено:

int v = 3.14159

залишив би мені значення 3 для v , тому що ціле число не може зберегти .14159.

Ваша цінність 200/500 становить 0,4, що скорочується до 0, коли він призначений для int f .

Щоб зберегти десяткове значення, потрібно використовувати тип float або double . Зверніть увагу, що ці типи не такі точні, як ви думаєте, тому, якщо ви призначите значення 4,57, ви можете досягти фактичного значення щось на зразок 4.569999999 ....

У своєму коді ви хочете змінити тип f на float , і ви, мабуть, хочете зробити відтінку з цілого числа, щоб плавати на елементах, які ви розділяючи їх, щоб переконатися, що вони зберігають інформацію про плаваючу точку.

Отже, ваша лінія

int f = z/b;

стане

float f = (float)z/(float)b;

і тоді ви використовуватимете % .1f у вашому printf як запропонований @BalogPal.

5
додано
Зверніть увагу, що якщо z і b вже розміщуються, вам не потрібно їх відкидати.
додано Автор Uooo, джерело
@ user2527918 н.п., радий я міг допомогти
додано Автор paul, джерело
дякую, дуже оцінили.
додано Автор Arcanium, джерело

Я не "вільно" в С, але я думаю, що ви повинні використовувати поплавок замість int. Розподіл цілого на ціле число поверне ціле число.

Зауважте також, що ви повинні використовувати% f, а не% d, щоб відобразити плаваючу інформацію в prinf

Ваш код повинен бути:

//
//  main.c
//  cmd4
//
//  Created by Kevin Rudd on 27/06/13.
//  Copyright (c) 2013 Charlie Brown. All rights reserved.
//

#include 

int main(int argc, const char * argv[])
{
  float x =10.0, y =20.0, b = 500.0;
  float z = x*y;
  float f = z/b;

 //insert code here...
  printf("x is:%f, y is:%f, b is %f\n",x,y,b);
  printf("x times y is: %f\n",z);
  printf("z divided by b is: %f\n",f);
  return 0;
}
2
додано
Я спробував це, але він просто повертає 0.00000
додано Автор Arcanium, джерело
Спасибі за "ціле число за цілим числом поверне ціле число", що має сенс зараз. Але поплавок повертає 0,00000
додано Автор Arcanium, джерело
Я спробував поплавати, подвоїти і багато присягати
додано Автор Arcanium, джерело

Я не "вільно" в С, але я думаю, що ви повинні використовувати поплавок замість int. Розподіл цілого на ціле число поверне ціле число.

Зауважте також, що ви повинні використовувати% f, а не% d, щоб відобразити плаваючу інформацію в prinf

Ваш код повинен бути:

//
//  main.c
//  cmd4
//
//  Created by Kevin Rudd on 27/06/13.
//  Copyright (c) 2013 Charlie Brown. All rights reserved.
//

#include 

int main(int argc, const char * argv[])
{
  float x =10.0, y =20.0, b = 500.0;
  float z = x*y;
  float f = z/b;

 //insert code here...
  printf("x is:%f, y is:%f, b is %f\n",x,y,b);
  printf("x times y is: %f\n",z);
  printf("z divided by b is: %f\n",f);
  return 0;
}
2
додано
Я спробував це, але він просто повертає 0.00000
додано Автор Arcanium, джерело
Спасибі за "ціле число за цілим числом поверне ціле число", що має сенс зараз. Але поплавок повертає 0,00000
додано Автор Arcanium, джерело
Я спробував поплавати, подвоїти і багато присягати
додано Автор Arcanium, джерело

Тому що ціле ділення a та b дорівнює 0, коли a менше, ніж b, ви знаєте. Ви бачите, що C веде себе по-іншому від Python!

1
додано
так що я повинен використовувати щось інше, ніж int?
додано Автор Arcanium, джерело

Тому що ціле ділення a та b дорівнює 0, коли a менше, ніж b, ви знаєте. Ви бачите, що C веде себе по-іншому від Python!

1
додано
так що я повинен використовувати щось інше, ніж int?
додано Автор Arcanium, джерело

Ціле ділення визначається таким чином. Він просто скидає залишок на 300/500 і залишає вас 0.

0
додано
використовувати формат% .1f і передавати 300.0/500.0 як аргумент
додано Автор Balog Pal, джерело
як я буду використовувати це у вищезгаданому?
додано Автор Arcanium, джерело
Оцініть той факт, що це, мабуть, настільки ж основне, як воно потрапляє. Вибачте за рівень дурість, але це те, що я думаю про навчання. Дякую за допомогу до цього часу Балога.
додано Автор Arcanium, джерело
так як я можу показати 0,4?
додано Автор Arcanium, джерело

Ціле ділення визначається таким чином. Він просто скидає залишок на 300/500 і залишає вас 0.

0
додано
використовувати формат% .1f і передавати 300.0/500.0 як аргумент
додано Автор Balog Pal, джерело
як я буду використовувати це у вищезгаданому?
додано Автор Arcanium, джерело
Оцініть той факт, що це, мабуть, настільки ж основне, як воно потрапляє. Вибачте за рівень дурість, але це те, що я думаю про навчання. Дякую за допомогу до цього часу Балога.
додано Автор Arcanium, джерело
так як я можу показати 0,4?
додано Автор Arcanium, джерело