|
|
检测点4-13
1.表达式sum += n ++可替换为sum = sum + n ++。
(1)在表达式sum = sum + n ++里,各个子表达式的作用分别是什么?
答:左边的sum代表对象;右边的sum既代表对象,也计算出一个值;n代表对象。子表达式sum + n ++计算一个值,它的子表达式n ++既计算值,也有修改n存储值的副作用。
(2)表达式sum = sum + n ++里涉及三个运算符,它们的优先级从高到低分别是“++”“+”和“=”。在这里,运算符“=”的操作数是sum和sum + n ++;运算符“+”的操作数是sum和n ++。要完成赋值操作,必须先计算子表达式sum + n ++的值,而要完成相加操作,必须先计算子表达式sum和n ++的值。
(3)若将子表达式n ++的值计算和副作用分别记为V++和S++;将运算符“+”的值计算记为V+;将运算符“+”的左操作数的值计算记为Vsum;将运算符“=”的副作用记为S=,请写出语句
sum = sum + n ++;
的执行过程,至少列举出三种。
答:
Vsum --- V++ --- S++ --- V+ --- S=
V++ --- S++ --- Vsum --- V+ --- S=
V++ --- Vsum --- V + --- S++ --- S=
Vsum --- V++ --- S++ --- V+ --- S=
V++ --- Vsum --- V+ --- S= --- S++
2.从1加到100等同于从100反向加到1,请修改程序c0405.c以实现这个反向的累加过程。提示:n所代表的对象的初值是100而不是1;累加的最后一个数字是1,所以while语句能够持续循环的条件是n所代表的对象的值大于等于1;每一轮循环结束后,n所代表对象的存储值是递减的而不是递增的。
答案不唯一,以下是参考答案:
# include <stdio.h>
int main (void)
{
int n = 100, sum = 0;
while (n >= 1) sum += n --;
printf ("1+2+3+...+100=%d\n", sum);
return 0;
}
3.编写程序,计算5的阶乘(5!)并打印,要求使用while语句。
答案不唯一,以下是参考答案:
# include <stdio.h>
int main (void)
{
int n = 1, res = 1;
while (n <= 5) res *= n ++;
printf ("5!=%d\n", res);
return 0;
}
4.编写程序,打印等差数列1, 6, 11, 16, 21,…的前25项,要求使用while语句。
答案不唯一,以下是参考答案:
# include <stdio.h>
int main (void)
{
int n = 1, r = 1;
while (n <= 25)
{
printf ("%d ", r);
r += 5;
n ++;
}
return 0;
}
|
|