《C Primer Plus》第三章 编程习题

发布于:2023-02-17 ⋅ 阅读:(452) ⋅ 点赞:(0)

目录

3.11.1

3.11.2

3.11.3

3.11.4

3.11.5 

3.11.6 

3.11.7 

3.11.8 


3.11.1

通过试验(即编写带有此类问题的程序)观察系统如何处理整数上溢、浮点数上溢和浮点数下溢的情况。

/*3.11.1. 通过试验(即编写带有此类问题的程序)观察系统如何处理整数上溢、浮点数上溢和浮点数下溢的情况。*/
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
	//1个字节 = 8位 n表示位
	//整数有符号取值范围:[-2 ^ (n - 1), 2 ^ (n - 1) - 1]
	//整数无符号取值范围:[0, 2 ^ n - 1]
	//float类型(单精度浮点数类型)占用4字节,数值范围为 - 3.4E+38 到 3.4E+38
	int i = 12345862514;
	float big = 4.4e38;
	float small = -3.4e38/10e100;
	printf("%d\n", sizeof(int));
	printf("%d\n", sizeof(float));
	printf("%d\n", i);      //整数上溢
	printf("%e\n", big);      //浮点数上溢
	printf("%e\n", small);    //浮点数下溢
	return 0;
}

运行结果:

3.11.2

编写一个程序,要求提示输入一个ASCII码值(如,66),然后打印输入的字符。

/*3.11.2. 编写一个程序,要求提示输入一个ASCII码值(如,66),然后打印输入的字符。*/
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
	int num;
	printf("请输入一个ASCII码值:");
	scanf("%d", &num);
	printf("ASCII码%d对应的字符是:%c\n", num, num);
	return 0;
}

运行结果:

3.11.3

编写一个程序,发出一声警报,然后打印下面的文本:
Startled by the sudden sound, Sally shouted,
By the Great Pumpkin, what was that!

/*3.11.3. 编写一个程序,发出一声警报,然后打印下面的文本:
Startled by the sudden sound, Sally shouted,
By the Great Pumpkin, what was that! */
#include<stdio.h>
int main(void)
{
	printf("\aStartled by the sudden sound, Sally shouted,\n");
	printf("By the Great Pumpkin, what was that!\n");
	return 0;
}

运行结果:

3.11.4

编写一个程序,读取一个浮点数,先打印成小数点形式,再打印成指数形式。
然后,如果系统支持再打印成P计数法(即十六进制计数法)。
按以下格式输出(实际显示的指数位数因系统而异):
Enter a floating-point value:64.25
fixed-point notation: 64.250000
exponential notation: 6.425000e+01
p notation: 0x1.01p+6

/*3.11.4. 编写一个程序,读取一个浮点数,先打印成小数点形式,再打印成指数形式。
然后,如果系统支持再打印成P计数法(即十六进制计数法)。
按以下格式输出(实际显示的指数位数因系统而异):
Enter a floating-point value:64.25
fixed-point notation: 64.250000
exponential notation: 6.425000e+01
p notation: 0x1.01p+6
*/
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
	float num;
	printf("Enter a floating-point value:");
	scanf("%f", &num);
	printf("fixed-point notation: %f\n", num);     //%f 打印小数
	printf("exponential notation: %e\n", num);     //%e 打印指数
	printf("p notation: %a\n", num);               //%a 打印p计数法
	
	return 0;
}

运行结果:

3.11.5 

一年大约有3.156*10^7秒。编写一个程序,提示用户输入年龄,然后显示该年龄对应的秒数。

/*3.11.5. 一年大约有3.156*10^7秒。编写一个程序,提示用户输入年龄,然后显示该年龄对应的秒数。*/
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
	double year_second = 3.156e7;    //一年大约有3.156e7秒
	int age;
	double second;
	printf("请输入您的年龄:");
	scanf("%d", &age);
	second = age * year_second;
	
	printf("%d岁对应的秒数是:%e\n", age,second);
	return 0;
}

运行结果:

3.11.6 

1个水分子的质量约为3.0*10^-23克。1夸脱水大约是950克。
编写一个程序,提示用户输入水的夸脱数,并显示水分子的质量。

/*3.11.6. 1个水分子的质量约为3.0*10^-23克。1夸脱水大约是950克。
编写一个程序,提示用户输入水的夸脱数,并显示水分子的质量。*/
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
	float water_M = 3.0e-23;     //1个水分子的质量约为3.0*10^-23克
	float water_num = 950;       //1夸脱水大约是950克
	float KT;     //  夸脱数
	float M;      //  质量
	printf("请输入夸托数:");
	scanf("%f", &KT);
	M = KT * water_num;
	
	printf("%f克的水分子数量是:%e\n", M, M / water_M);
	return 0;
}

运行结果:

3.11.7 

1英寸相当于2.54厘米。编写一个程序,提示用户输入身高(/英寸),然后以厘米为单位显示身高。

/*3.11.7. 1英寸相当于2.54厘米。编写一个程序,提示用户输入身高(/英寸),然后以厘米为单位显示身高。*/
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
	float inch;
	printf("请输入您的身高(英寸):");
	scanf("%f", &inch);
	printf("您的身高为%.2f厘米\n", inch * 2.54);
	return 0;
}

运行结果:

3.11.8 

在美国的体积测量系统中,1品脱等于2杯,1杯等于8蛊司,1盎司等于2大汤勺,1大汤勺等于3茶勺。
编写一个程序,提示用户输入杯数,并以品脱、盎司、汤勺、茶勺为单位显示等价容量。
思考对于该程序,为何使用浮点类型比整数类型更合适?

答:是必要的,用浮点数精度更高。比如 1盎司=0.125杯,如果用整型的话就是0杯了。

/*3.11.8. 在美国的体积测量系统中,1品脱等于2杯,1杯等于8蛊司,1盎司等于2大汤勺,1大汤勺等于3茶勺。
编写一个程序,提示用户输入杯数,并以品脱、盎司、汤勺、茶勺为单位显示等价容量。
思考对于该程序,为何使用浮点类型比整数类型更合适?*/
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
	float cup;
	float pint;    //pint:品脱
	float all_ounce;   //all_ounce:总盎司
	float big_spoons;  //big_spoons:大汤勺
	float teaspoons;   //teaspoons:茶勺
	
	printf("请输入杯数:");
	scanf("%f", &cup);
	pint = cup / 2;
	all_ounce = 8 * cup;
	big_spoons = 2 * all_ounce;
	teaspoons = 3 * big_spoons;
	
	printf("%.3f杯等于%.3f品脱\n", cup, pint);  //此处%.3f 是限定保留3个小数
	printf("%.3f杯等于%.3f盎司\n", cup, all_ounce);
	printf("%.3f杯等于%.3f大汤勺\n", cup, big_spoons);
	printf("%.3f杯等于%.3f茶勺\n", cup, teaspoons);

	return 0;
}

运行结果:


网站公告

今日签到

点亮在社区的每一天
去签到