目录
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;
}
运行结果: