c - 通过使用 while 循环,C 程序未在整数计数 150 处退出的问题
问题描述
我想知道是否可以就我遇到的问题获得一些帮助。
基本上,当人数达到 150 时,我试图通过使用 while 循环来结束我的程序。
我的数学似乎是对的,但由于某种原因,程序在人数达到 276 时结束。
任何人都可以帮助解决这个问题吗?谢谢!
代码输入:
int main () {
// declare variables
int weeks=0, people=5;
while (people < 150) {
weeks++;
people=(people-weeks)*2;
printf("On week %d Professor Rabnud's Social Media Group has %d people\n", weeks, people);
}
// end program
return 0;
}
代码输出:
On week 1 Professor Rabnud's Social Media Group has 8 people
On week 2 Professor Rabnud's Social Media Group has 12 people
On week 3 Professor Rabnud's Social Media Group has 18 people
On week 4 Professor Rabnud's Social Media Group has 28 people
On week 5 Professor Rabnud's Social Media Group has 46 people
On week 6 Professor Rabnud's Social Media Group has 80 people
On week 7 Professor Rabnud's Social Media Group has 146 people
On week 8 Professor Rabnud's Social Media Group has 276 people
解决方案
int main () {
// declare variables
int weeks=0, people=5;
while (people < 150) {
weeks++;
people=(people-weeks)*2;
printf("On week %d Professor Rabnud's Social Media Group has %d people\n", weeks, people);
}
// end program
return 0;
}
如您所见,当week == 7
thenpeople == 146
因为146 < 150
is时true
,循环再次执行。首先,它week
现在增加week == 8
,然后,它计算people
。(146 - 8) * 2 == 276
,所以people
现在276
然后它执行了printf()
语句。只是现在, 276 < 150
is false
,然后循环终止。
因为我们知道什么时候week == 1
可以people == 8
这样做:
int main () {
// declare variables
int weeks=1, people=8;
while (people < 150) {
printf("On week %d Professor Rabnud's Social Media Group has %d people\n", weeks, people);
weeks++;
people=(people-weeks)*2;
}
// end program
return 0;
}
推荐阅读
- vb.net - VB.Net Async - 检查大型字符串列表是否匹配
- spring - 本地主机拒绝使用 Eclipse 连接 Spring Boot 应用程序
- html - 如何修复 Elementor“自定义位置”中的“溢出隐藏”
- java - 无法使用 myBatis 为事务异常打开 JDBC 连接
- gcc - 来自 AVX 的 _mm256_set_m128i 内在的 gcc 扼流圈
- sql-server - 如何根据一条记录上的失败标准消除所有分组记录
- javascript - 创建音频上下文时 Firefox 中的错误消息
- ruby - 这个循环的复杂度是多少
- c++ - 如何使用字符串::find()?
- nativescript - 如何在 Nativescript 中创建 MediaSession?