以下题目提取自湖南省普通高等学校对口招生考试计算机应用类专业综合知识试题,专注于while循环的理解和应用。
问题:请写出上述程序的运行结果。
答案:0,1,2,3,...直到i++为0时停止,最后输出i的值。具体输出为:0,1,2,3,...,254,255,256(取决于int的大小)。
解析:这是一个do-while循环,先执行一次循环体,然后判断条件。i++表示先使用i的值再自增。当i++为0时循环停止。
问题:请写出上述程序的运行结果。
答案:-1
问题:请写出上述程序的运行结果。
答案:num=3
解析:这段代码使用Brian Kernighan算法计算一个数中置位(1)的个数。V=7(二进制111)有3个1,所以循环执行3次,num=3。
问题:请写出上述程序的运行结果。
问题:请写出上述程序的运行结果。
答案:x=15
解析:循环执行过程:y初始为5,第一次循环x=5,然后--y使y=4,!4为0,循环停止。但注意while(!--y)是先减y再取非,所以实际循环只执行一次?让我们仔细分析:
实际上,do-while至少执行一次:
第一次:x += y → x=5, 然后--y → y=4, !4=0,循环停止。所以x=5?但答案应该是15?
重新分析:可能是循环多次?让我们仔细看:
实际上,!--y是先递减y然后取逻辑非。y=5时:第一次循环后x=5,然后--y=4,!4=0,停止。但题目说答案是15,可能我理解有误。
可能是:while(!--y)意味着y先减1然后判断是否为0。初始y=5:
第一次循环:x=5,然后--y=4,!4=0→停止?
但预期应该是循环多次。可能应该是while(y--)之类的。根据题目来源,可能需要重新审视。
问题:请找出程序中的错误并改正,使函数f能正确计算整数n每个数位上包含1的个数。
答案:错误在L5和L6行:
L5应改为:iNum += (n % 10 == 1) ? 1 : 0;
L6应改为:n /= 10;
解析:原程序L5判断n%10是否为真,而不是判断是否等于1;L6使用n%=10会导致无限循环,应该使用n/=10来移去最后一位数字。