第七天作业题中有三道题连在一起,后一题是前一题的增强版,这三道题如下:
3. 编写读取并打印一个整数的语句。
4. 修改练习3,使其职能读取偶数(2,、4、6等)。
5.修改练习4,使之在用户输入数字99或输入了6个偶数后,返回用户输入的值。将这些值存储在数组中(提示:需要编写一个循环)。
第三题和第四题较简单:
#include <stdio.h>
int main(void)
{
int x;
scanf("%d",&x);
printf("%d",x);
return 0;
}
.
#include <stdio.h>
int main(void)
{
int x;
scanf("%d",&x);
while(x % 2 == 1)
{
scanf("%d",&x);
}
printf("%d",x);
return 0;
}
.
第五题:
#include <stdio.h>
int main(void)
{
int x[6],i;
for(i = 0; i < 6; i++) /* 2 */
{
scanf("%d",&x[i]); /* 要求用户输入 */
while(x[i] % 2 == 1) /* 1 */
{
scanf("%d",&x[i]); /* 当输入是奇数时循环scanf */
}
}
for(i=0;i<6;i++)
{
printf("%d",x[i]);
}
return 0;
}
以上仅仅是没有考虑“输入数字99”的代码块。第五题的难点正是:在考虑到“输入数字99”后如何改写以上这段代码。
思维过程:
考虑到用户输入的、存储在x[0]中的值,会有三种情况:偶数、非99奇数、99。当输入的是非99奇数时,循环scanf,直到输入的是偶数或者99;当输入的是偶数时,则for语句循环体结束,x值+1,进行x[1]值的输入;当输入是99时,for语句循环体结束,x值+1,不进行x[1]值的输入而在for的condition阶段跳出、执行statement后面的语句。
因此在两处需要修改:图中注释的两个地方。
在第一个修改处,试问什么时候循环,什么时候跳出 while?答案是:当输入是奇数且不为99的时候循环,当输入是偶数或者为99时跳出while。因此使 while(x % 2 == 1)变为 while( x %2 == 1 && x != 99)即可。
在第二个修改处,
考虑到 condition 前输入的 x 值无非两种,偶数和99。当在 condition 前输入值为偶数时 for(i=0;i <6;i++)可以无变化;而在 condition 前输入的值为 99 时需要跳出 for,这样一来就需要对 for(i=0;i < 6;i++)进行更改,斟酌后改为 for(i=0;i< 6 && x[ i-1 ] != 99;i++)。注意:因为到 condition 前 i 已经 +1,因此到 condition 后进行判断的值是 x[ i - 1]。
假如跳出for了,若x[ n ]等于99,则输出x[ n ]前面的所以x值。例如x[ 4 ]等于99,则输出x[ 1 ]、x[ 2 ]、x[ 3 ]的值。
最后修改好的程序如下:
#include <stdio.h>
int main(void)
{
int x[6], i;
int main(void)
{
for(i=0;i < 6 && x[i-1] != 99;i++)
{
scanf("%d",&x[i]);
while(x[i] % 2 == 1 && x[i] != 99)
{
scanf("%d",&x[i]);
}
}
for(i = 0;i < 6 && x[i] != 99;i++)
{
printf("%d", x[i]);
}
return 0;
}