C Primer Plus 第5章习题

你该逆袭了

红色标注的是:错误的答案
蓝色标注的是:正确的答案
绿色标注的是:做题时有疑问的地方
橙色标注的是:答案中需要着重注意的地方

一、复习题

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值