当变量与两位数相乘和相除时,C 停止工作
C stops woking when a vaiable is multiplied and divided with double digit numbers
#include <cs50.h>
#include <stdio.h>
int main(void)
{
// TODO: Prompt for start size
int s;
do
{
s = get_int("Start size : ");
}
while (s < 9);
// TODO: Prompt for end size
int e;
do
{
e = get_int("End size : ");
}
while (e < s);
// TODO: Calculate number of years until we reach threshold
int n = s;
int y = 0;
while (n < e)
{
n = n + n / 3 - n / 4 ;
y++;
}
// TODO: Print number of years
printf("Years: %i\n", y);
}
我能够运行 完美地完成上面的代码并得到想要的结果。但是,当我尝试通过简化数学来替换 n 的计算部分时,代码停止工作,即它不计算其打算计算的内容,并将程序保持在输入获取模式,即它允许您在终端中键入而不提供输出。我将 n 的计算部分替换为
n = (13 * n) / 12
由于整数运算,表达式 n = n + n / 3 - n / 4;
和 n = n * 13 / 12;
不等价:整数除法向零舍入,因此例如第一个表达式从 3
递增 n
4
但不是第二个表达式。
你应该使用浮点运算来解决这个问题:
#include <cs50.h>
#include <stdio.h>
int main(void) {
// TODO: Prompt for start size
int s;
do {
s = get_int("Start size: ");
} while (s < 9);
// TODO: Prompt for end size
int e;
do {
e = get_int("End size: ");
} while (e < s);
// Calculate number of years until we reach threshold
double n = s;
int y = 0;
while (n < e) {
n = n * 13.0 / 12.0;
y++;
}
// TODO: Print number of years
printf("Years: %i\n", y);
return 0;
}
#include <cs50.h>
#include <stdio.h>
int main(void)
{
// TODO: Prompt for start size
int s;
do
{
s = get_int("Start size : ");
}
while (s < 9);
// TODO: Prompt for end size
int e;
do
{
e = get_int("End size : ");
}
while (e < s);
// TODO: Calculate number of years until we reach threshold
int n = s;
int y = 0;
while (n < e)
{
n = n + n / 3 - n / 4 ;
y++;
}
// TODO: Print number of years
printf("Years: %i\n", y);
}
我能够运行 完美地完成上面的代码并得到想要的结果。但是,当我尝试通过简化数学来替换 n 的计算部分时,代码停止工作,即它不计算其打算计算的内容,并将程序保持在输入获取模式,即它允许您在终端中键入而不提供输出。我将 n 的计算部分替换为 n = (13 * n) / 12
由于整数运算,表达式 n = n + n / 3 - n / 4;
和 n = n * 13 / 12;
不等价:整数除法向零舍入,因此例如第一个表达式从 3
递增 n
4
但不是第二个表达式。
你应该使用浮点运算来解决这个问题:
#include <cs50.h>
#include <stdio.h>
int main(void) {
// TODO: Prompt for start size
int s;
do {
s = get_int("Start size: ");
} while (s < 9);
// TODO: Prompt for end size
int e;
do {
e = get_int("End size: ");
} while (e < s);
// Calculate number of years until we reach threshold
double n = s;
int y = 0;
while (n < e) {
n = n * 13.0 / 12.0;
y++;
}
// TODO: Print number of years
printf("Years: %i\n", y);
return 0;
}