你该逆袭了
红色标注的是:错误的答案
蓝色标注的是:正确的答案
绿色标注的是:做题时有疑问的地方
橙色标注的是:答案中需要着重注意的地方
练习题
一、复习题
1、
a.x=30;
b.x=27;
c.x=1;y=1;
d.x=3;y=9;
2、
a.x=6;
b.x=52;
c.x=0;
d.x=13;
3、
a.37.5;
b.1.5;
c.35;
d.37;
e.37.5;
f.35.0;
4、
错误答案:
#include <stdio.h>
int main()
{
int i = 1;
float n;
printf("watch out! here come a bunch of fractions!\n");
while (i < 30)
n = 1 / i; //从 int 强制转换成 float
printf(" %f", n); //输出结果:1
printf("that's all,folks!\n");
return 0;
}
正确答案:
由于变量 i 没有增加,程序会一直停留在 while 循环中。
会进行无限次的循环计算 n = 1 / i
#include <stdio.h>
int main()
{
int i = 1;
float n;
printf("watch out! here come a bunch of fractions!\n"); //一堆分数
while (i++ < 30)
{
n = 1.0 / i;
printf(" %f\n", n);
}
printf("that's all,folks!\n");
return 0;
}
5、
我的答案:正确,但是没有标准答案好
#include <stdio.h>
#define S_TO_M 60
int main()
{
int sec, min, left;
printf("this program converts seconds to minutes and ");
printf("seconds.\n");
printf("just enter the number of seconds.\n");
printf("enter 0 to end the program.\n");
scanf("%d", &sec);
while(sec > 0)
{
//scanf("%d", &sec); //sec没有值,无法进行判断,要么使用未初始化的内存 sec
min = sec / S_TO_M;
left = sec % S_TO_M;
printf("%d sec is %d min, %d sec.\n", sec, min, left);
printf("next input?\n");
scanf("%d", &sec);
}
printf("bye\n");
return 0;
}
标准答案
程序的主要问题是:
第一次进入 while 循环判断时,sec 并未赋值。
sec 数据无法确定(不同编译器有不同处理结果,有可能是垃圾数据,也有可能被清零)。
(sec > 0)的逻辑判断不能正确获得真或者假。
此外,scanf() 语句位于 while 循环语句块中第一行,输入数据 0 也将会进行数据转换和打印,直到下一次循环判断才能退出。
//程序的主要问题是:
//第一次进入 while 循环判断时,sec 并未赋值。
//sec 数据无法确定(不同编译器有不同处理结果,有可能是垃圾数据,也有可能被清零)。
//(sec > 0)的逻辑判断不能正确获得真或者假。
//此外,scanf() 语句位于 while 循环语句块中第一行,输入数据 0 也将会进行数据转换和打印,直到下一次循环判断才能退出。
#include <stdio.h>
#define