c primer plus 第六版 第四单元

前提:在ubuntu(17.0.0)中使用gcc(11.4.0)编译,以伪代码形式展示。

//所写的代码仅为阅读者提供参考;

//若有不足之处请提出,本人会尽所能修改;

1.编写一个程序,提示用户输入名和姓,然后以“名,姓”的格式打印出
来。
void printf1(void)
{
char first_name[20];
char last_name[20];

printf("Please enter your name: ");
scanf("%s %s",first_name,last_name);
printf(""%s,%s"\n",first_name,last_name);
}
结果:
Please enter your name: spongebob squarepants
"spongebob,squarepants"

2.编写一个程序,提示用户输入名和姓,并执行一下操作:
a.打印名和姓,包括双引号;
b.在宽度为20的字段右端打印名和姓,包括双引号;
c.在宽度为20的字段左端打印名和姓,包括双引号;
d.在比姓名宽度宽3的字段中打印名和姓。
void printf2(void)
{
char name[20];

printf("Please enter your name: ");
scanf("%s",name);

printf(""%s"\n",name);
printf(""%20s"\n",name);
printf(""%-20s"\n",name);
printf("%*s\n",strlen(name)+3,name);

}
结果:
Please enter your name: Patrick Star
"Patrick"
" Patrick"
"Patrick "
Patrick

3.编写一个程序,读取一个浮点数,首先以小数点记数法打印,然后以
指数记数法打印。用下面的格式进行输出(系统不同,指数记数法显示的位
数可能不同):
a.输入21.3或2.1e+001;
b.输入+21.290或2.129E+001;
void printf3(void)
{
float fl;

printf("Please enter number: ");
scanf("%f",&fl);
printf("%f , %e\n",fl);
}
结果:
Please enter number: 2.129e+001
21.290001 , 2.129000e+01

4.编写一个程序,提示用户输入身高(单位:英寸)和姓名,然后以下
面的格式显示用户刚输入的信息:
Dabney, you are 6.208 feet tall
使用float类型,并用/作为除号。如果你愿意,可以要求用户以厘米为
单位输入身高,并以米为单位显示出来。

void printf4(void)
{
float height;
char name[40];

printf("Please enter your name and height 😊;
/height (in)/
scanf("%s %f",name,&height);
printf("%s,you are %f feet tall.\n",name,height);

printf("please enter your name and height 😊;
/height (cm) -> (m)/
height = 0;
scanf("%s %f",name,&height);
printf("%s,you are %f feet tall.\n",name,height/100);

}
结果:
Please enter your name and height : Dabney 6.208
Dabney,you are 6.208000 feet tall.
please enter your name and height :Dabney 168
Dabney,you are 1.680000 feet tall.

5.编写一个程序,提示用户输入以兆位每秒(Mb/s)为单位的下载速度
和以兆字节(MB)为单位的文件大小。程序中应计算文件的下载时间。注
意,这里1字节等于8位。使用float类型,并用/作为除号。该程序要以下面
的格式打印 3 个变量的值(下载速度、文件大小和下载时间),显示小数点
后面两位数字:
At 18.12 megabits per second, a file of 2.20 megabytes
downloads in 0.97 seconds.

void printf5(void)
{
float speed, size, time;

printf("please user enter speed and size 😊;
scanf("%f %f",&speed,&size);
printf("At %.2f megabits per second,a file of %.2f megabytes\ndownloads in %.2f seconds.\n",speed,size,size*8/speed);

}
结果:
please user enter speed and size :18.12 2.2
At 18.12 megabits per second,a file of 2.20 megabytes
downloads in 0.97 seconds.
6.编写一个程序,先提示用户输入名,然后提示用户输入姓。在一行打
印用户输入的名和姓,下一行分别打印名和姓的字母数。字母数要与相应名
和姓的结尾对齐,如下所示:
Melissa Honeybee
7 8
接下来,再打印相同的信息,但是字母个数与相应名和姓的开头对齐,
如下所示:
Melissa Honeybee
7 8
void printf6()
{
char first_name[20];
char last_name[20];

int fweight,lweight;
printf("please enter your name:");
scanf("%s %s",first_name,last_name);
printf("%s %s\n",first_name,last_name);

fweight = strlen(first_name);
lweight = strlen(last_name);
printf("%d%d\n",fweight,fweight,lweight,lweight);

printf("%s %s\n",first_name,last_name);
printf("%-d%-d\n",fweight,fweight,lweight,lweight);
}
结果:
please enter your name:Melissa Honegbee
Melissa Honegbee
7 8
Melissa Honegbee
7 8

7.编写一个程序,将一个double类型的变量设置为1.0/3.0,一个float类
型的变量设置为1.0/3.0。分别显示两次计算的结果各3次:一次显示小数点
后面6位数字;一次显示小数点后面12位数字;一次显示小数点后面16位数
字。程序中要包含float.h头文件,并显示FLT_DIG和DBL_DIG的值。1.0/3.0
的值与这些值一致吗?
void printf7(void)
{
double db = 1.0/3.0;
float fl = 1.0/3.0;

printf("%.6f,%6f\n",db,fl);
printf("%.12f,%.12f\n",db,fl);
printf("%.16f,%.16f\n",db,fl);
printf("%f,%f",FLT_DIG,DBL_DIG);

}
结果:
0.333333,0.333333
0.333333333333,0.333333343267
0.3333333333333333,0.3333333432674408
0.333333,0.333333
不一致,float类型的小数部分出现了运算精度不准确,使用浮点型尽量使用double。

8.编写一个程序,提示用户输入旅行的里程和消耗的汽油量。然后计算
并显示消耗每加仑汽油行驶的英里数,显示小数点后面一位数字。接下来,
使用1加仑大约3.785升,1英里大约为1.609千米,把单位是英里/加仑的值转
换为升/100公里(欧洲通用的燃料消耗表示法),并显示结果,显示小数点
后面 1 位数字。注意,美国采用的方案测量消耗单位燃料的行程(值越大越
好),而欧洲则采用单位距离消耗的燃料测量方案(值越低越好)。使用

define 创建符号常量或使用 const 限定符创建变量来表示两个转换系数。

define TRANSFER 2.352e-2

void printf8(void)
{

float in,oil;

printf("please enter your in and oil:");
scanf("%f %f",&in,&oil);
printf("%.1f,%.1f\n",in/oil,oil/in*TRANSFER);

}
结果:
please enter your in and oil:1 3
0.3,0.1

posted @ 2023-11-06 19:06  派大宝宝和海绵星  阅读(61)  评论(0)    收藏  举报