参考资料:高教版《全国计算机等级考试二级教程——C语言程序设计》
P69 填空题
5.15
题目:
有以下程序段:
s = 1.0;
for( k = 1; k <= n; k++ )
s = s + 1.0 / ( k * ( k + 1 ) );
printf( "%f\n", s );
请填空,使下面的程序段的功能与之完全等同。
s = 0.0;
[1];
k = 0;
do
{
s = s + d;
[2];
d = 1.0 / ( k * ( k + 1 ) );
}
while([3]);
printf( "%f\n", s );
题解:
相比原来的程序段,给出的程序段缺少的部分应实现的功能如下:
在第一次循环时使s = 1.0;
每循环一次,k加1;
判断条件,即for语句中的k <= n这部分。
所以应该这样填写:
观察程序段发现没有给d赋值,而且在第一次循环的时候要让s = 1.0,所以[1]处应该是d = 1.0;
在[2]处填写k++实现每循环一次k加1的功能;
由于do-while循环的条件是:while后面的语句为真时,执行循环体,所以[3]处直接填入k <= n。
最终的程序段如下:
s = 0.0;
d = 1.0; //给变量d赋值1.0
k = 0;
do
{
s = s + d;
k++; //每循环一次,k的值增加1
d = 1.0 / ( k * ( k + 1 ) );
}
while( k <= n ); //判断条件
printf( "%f\n", s );
5.16
题目:
以下程序的功能是:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。请填空。
(注:本人轻度代码洁癖,所以稍微改下原题的代码,最核心的部分没动,只是改了空行,左花括号,缩进,main函数的写法,加return 0等。总之改了也不影响题意,当然如果介意的话可以私信我。)
#include
int main( void )
{
float x, amax, amin;
scanf( "%f", &x );
amax = x;
amin = x;
while( [1] )
{
if( x > amax )
amax = x;
if( [2] )
amax = x;
scanf( "%f", &x );
}
printf( "\namax = %f\namin = %f\n", amax, amin);
return 0;
}
题解:
首先题目中提到“当输入为负数时结束输入”,所以控制循环的表达式应该有判断输入是否为负的情况。题目中还提到要输出最低成绩,所以应该有判断最低成绩的语句。将实现这个功能的语句分别填到[1]和[2]处就可以了。
最终的程序如下:
#include
int main( void )
{
float x, amax, amin;
scanf( "%f", &x );
amax = x;
amin = x;
while( x >= 0 ) //判断输入是否为负数,如果是就结束输入
{
if( x > amax )
amax = x;
if( x < amin ) //记录最低成绩
amax = x;
scanf( "%f",