C Primer Plus第六版第四章编程练习答案

4.8编程练习

//输入姓和名,以“姓,名”的格式打印
#include <stdio.h>
int main(void)
{	
	char first_name [40];
	char last_name[40];

	printf("What's your firstname? \n");
	scanf("%s", first_name);
	printf("What's your lastname? \n");
	scanf("%s", last_name);
	printf("Your name : %s,%s ", first_name, last_name);

	return 0;
}

//提示用户输入姓和名,并执行以下操作
// a.打印名和姓,包括双引号
// b.在宽度为20的字段右端打印名和姓,包括双引号
// c.在宽度为20的字段左端打印名和姓,包括双引号
// d.在比姓名宽度宽3的字段中打印名和姓
#include <stdio.h>
#include <string.h>
int main(void)
{
	char first_name [40];
	char last_name [40];
	int f_len;
	int l_len;

	printf("What's your firstname? \n");
	scanf("%s", first_name);	
	printf("What's your lastname? \n");
	scanf("%s", last_name);
	f_len = strlen(first_name);	//frist_name的长度
	l_len = strlen(last_name);	//last_name的长度
	printf("a. : *\"%s %s\"* \n", first_name, last_name);
	printf("b. :*%*s %s* \n", 19-l_len, first_name, last_name);	//*号中间的宽度一共20
	printf("c. :*%s %-*s* \n", first_name, 19-f_len, last_name);	
	printf("d. :*%*s %s* \n", f_len + 2, first_name, last_name);	//包含姓和名中间的空格,一共多出3个空格(宽度)

	return 0;

}

//读取一个浮点数,分别用小数点记法,指数记法打印
//用下面的格式输出
//a. 输入21.3或2.1e+001;
//b. 输入+21.290或2.129E+001;
#include <stdio.h>
int main(void)
{
	double d1;
	double d2;
	printf("请输入一个floating-point number: ");
	scanf("%lf", &d1);
	printf("请输入一个floating-point number: ");
	scanf("%lf", &d2);
	printf("输入%.1f或%.1e \n", d1, d1);
	printf("输入+%.3f或%.3E \n", d2, d2); 
	
	return 0;
}
//提示用户输入身高(单位:英寸)和姓名
//以下面的格式输出“Dabney, you are 6.208 feet tall”
//使用float类型,用 / 作为除号
#include <stdio.h>
int main(void)
{	
	float i_height;
	float f_height;
	char name[40];
	printf("What's your name? \n");
	scanf("%s", name);
	printf("OK %s ,now input your height(inch) : \n ", name);
	scanf("%f", &i_height);
	f_height = i_height / 12.0;
	printf("%s,your are %.3f feet tall. \n", name, f_height);

	return 0;
}

//Mb/s的下载速度和MB为单位的文件大小,计算文件的下载时间,使用float类型
//打印下载速度、文件大小、下载时间,显示小数点后两位
#include <stdio.h>
int main(void)
{	
	float download_speed;
	float filespace;
	float download_time;

	printf("Enter your download speed in Mb/s: \n");
	scanf("%f", &download_speed);
	printf("How many storage your file occupied? \n");
	scanf("%f", &filespace);
	download_time = filespace * 8 / download_speed;
	printf("At %.2f megabits per second, a file of %.2f megabytes. \n", download_speed, filespace);
	printf("downloads in %.2f seconds. \n", download_time);
	
	return 0;
}
//分别提示用户输入名和姓,然后在一行打印用户输入的名和姓
//下一行分别打印名和姓的字母数,字母数要与象音名和姓的结尾对齐
//接下来打印相同的信息,但是字母个数与相应的名和姓的开头对齐
#include <stdio.h>
#include <string.h>
int main(void)
{
	char f_name [40];
	char l_name [40];
	int f_len;
	int l_len;
	
	printf("Please enter your firstname: \n");
	scanf("%s", f_name);
	printf("Please enter your lastname: \n");
	scanf("%s", l_name);
	f_len = strlen(f_name);
	l_len = strlen(l_name);
	printf("%s %s \n", f_name, l_name);
	printf("%s %s \n", f_name, l_name);
	printf("%*d %*d \n", f_len, f_len, l_len, l_len);
	printf("%s %s \n", f_name, l_name);
	printf("%-*d %-*d \n", f_len, f_len, l_len, l_len);

	return 0;
}
/*一个double类型的变量设置为1.0/3.0,一个float类型的变量设置为1.0/3.0
分别显示两次的计算结果各3次:一次显示小数点后面6位数字;一次显示小数点后面12位数字;一次显示小数点后面16位数字。程序中要包含float.h头文件,并显示FLT_DIG和DBL_DIG的值。1.0/3.0的值与这些值一致吗?
*/
#include <stdio.h>
#include <float.h>
int main(void)
{	
	double d1 = 1.0 / 3.0;
	float f1 = 1.0 / 3.0;

	printf("double_1: %.3f \n", d1);
	printf("double_2: %.6f \n", d1);
	printf("double_2: %.12f \n", d1);
	printf("float_1: %.3f \n", f1);
	printf("float_2: %.6f \n", f1);
	printf("float_3: %.12f \n", f1);
	printf("FLT_DIG: %f \n", FLT_DIG);
	printf("DBL_DIG: %f \n", DBL_DIG);

	return 0;
}

结果并不一致,因为float最小有效数字位数为6,无法保证第7位及其后的数字的正确性

结果并不一致,因为float最小有效数字位数为6,无法保证第7位及其后的数字的正确性
8.

/*提示用户输入旅行的里程和消耗的汽油量,计算并显示消耗每加仑汽油行驶的英里数,显示小数点后面的一位数字。
接下来,使用1加仑大约3.785升,1英里大约1.609千米,把单位是 英里/加仑 的值转换为 升/100公里(欧洲通用的燃料消耗表示法),并显示结果(小数点后1位数字)。
使用#define创建符号常量或使用const限定符创建变量来表示两个转换系数。
*/
#include <stdio.h>
#define liter_per_gallon 3.785
#define kilo_per_miles 1.609
#define convert 3.785/1609	// 1英里/加仑 转换为 升/100公里 的系数
int main(void)
{	
	float gallon;			//加仑
	float miles;			//英里
	float miles_per_gallon;	//一加仑行驶的英里数
	float liter_per_100kilo;	//升/100公里

	printf("How many miles you travel? \n");
	scanf("%f", &miles);
	printf("And, how many gallons of petrol you consumed? \n");
	scanf("%f", &gallon);
	miles_per_gallon = miles / gallon;
	printf("Miles per gallon: %.1f \n", miles_per_gallon);
	liter_per_100kilo = miles_per_gallon * (convert);
	printf("litres per 100kilo: %.1f \n", liter_per_100kilo);	//由于这里题目要求小数点后一位所以较小的数据(如0.0032)会显示为0.0

	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42912350/article/details/82785215