c++题目 选择语句问题

来源:百度知道 编辑:UC知道 时间:2024/05/02 16:53:16
请各位看下题目
#include <iostream>
using namespace std ;
int main ()
{
int x ;
for ( int i = 1 ; i <= 100 ; i++ ) {
x = i ;
if ( ++x%2 == 0 )
if ( ++x%3 == 0 )
if ( ++x%7 == 0 )
cout << x << ',' ;
}
cout << endl ;
}
为什么结果是28,70.而不是42,84.希望详细解释下.
还有在循环语句中,已声明的变量,如果用std::cin 输入的值与声明的变量数据类不同,会形成死循环. 例如 int a ;
for ( int i = 0 ; ; i++ ) {
cin >> a ;
....}
如果输入的a 为char 型, 就会变成死循环.

for ( int i = 0 ; ; i++ )
中间没有条件,当然是死循环了.

28%7 =0
(28-1)%3=0
(28-2)%2=0

42%7=0
(42-1)%3!=0
在执行%2之前x会+1.
执行%3之前x会+1.
执行%7之前x会+1.
所以答案为28 70.

第一个问题:++x是对变量x先加1,然后返回值为x,也就是比如开始的时候x=10,执行++x后,x变为11,所以你的答案是28.70.原因是这样的,当机器运行到
if( ++x%2 == 0 ) 时,x=25,执行++x后x为26,26%2=0,符合判定,接着做下一个if语句,此时同样先做++x,所以27%3也符合,同理28%4也符合,因此26符合。应该吧你的语句改为
if ( x%2 == 0 )
if ( x%3 == 0 )
if ( x%7 == 0 )
{
cout << x << ',' ;
x++;
}
第2个问题:你的for循环for ( int i = 0 ; ; i++ )你的循环条件里没有终止循环,即使不输入char型的,这个也是个死循环

因为++的关系,这个运算符在每次执行的时候让X自动加一,也就是你的程序求得其实是满足这样条件的X:X+1 是2的倍数,X+2 是3的倍数,X+3是7的倍数
而不是2,3,7的公倍数