#c
Вопрос:
это программа, о которой идет речь:
#include <stdio.h>
#include <tgmath.h>
#include <simpio.h>
long main(){
long cars_t,years;
cars_t=80000;
years=0;
while (cars_t<=160000){
cars_t=ceil(cars_t*(1 7/100));
years =1;
}
printf("Xronia:%ldn",years);
printf("Arithmos Autokinhton:%ldn",cars_t);
}
Просто чрезвычайно простая программа с функцией while. Но по какой-то причине она вообще не выдает никаких выходных данных. Однако я заметил, что в тот момент, когда я удаляю функцию while (и код внутри нее), программа работает отлично. Кто-нибудь может сказать мне, как это исправить? заранее спасибо.
Комментарии:
1.
cars_t*(1 7/100)
для начала это довольно медленный темп роста, но, несмотря на это,7/100
он равен0
из-за целочисленного деления,1 0
=1
, и, таким образом, вы просто присваиваете значениеcars_t
самому себе, и оно, вероятно, даже не увеличивается. Чтобы избежать этого, по крайней мере, выполнитеcars_t=ceil(cars_t*(1 7.0/100))
2. Да, это сработало. Спасибо. Хотите верьте, хотите нет, но на самом деле это университетский проект, я на первом курсе информатики, и они в значительной степени начинают нас с основ.
3. Кроме того, возвращаемый тип from
main()
должен бытьint
.4. Вы должны были ввести соответствующий printf в цикл, и вы бы узнали сами. Кстати, компиляция программы без ошибок или предупреждений ни в коем случае не гарантирует, что она работает должным образом.
5. ^^^^^^ ‘первый год информатики, и они в значительной степени начинают нас с основ’ — требуйте, чтобы вас обучили базовой отладке, прежде чем вы напишете еще одну строку кода. Если вы не можете отлаживать, вы не можете программировать компьютеры 🙂
Ответ №1:
Это потому, что вы объявили cars_t
как целое (длинное) значение и 7/100, которые также являются целыми числами и поэтому равны нулю. Следовательно, вы застреваете в цикле, поскольку cars_t
не увеличивается.
Вместо этого вы хотите, чтобы cars были плавающим значением и заставляли 7/100 оцениваться как плавающее:
#include <stdio.h>
#include <tgmath.h>
long main(){
long years;
double cars_t;
cars_t=80000;
years=0;
while (cars_t<=160000){
cars_t=ceil(cars_t*(1 7.0/100));
years =1;
}
printf("Xronia:%ldn",years);
printf("Arithmos Autokinhton:%lfn",cars_t);
}