C Primer Plus课后习题-第四章编程练习

所使用的编辑器:vs2019
学习的时候自己写的

1.编写一个程序,提示用户输入名和姓,然后以“名,姓”的格式打印出来。

#include <stdio.h>
int main() {
	char name[30], lastname[30];
	printf("请输入你的名:");
	scanf_s("%s", &name, sizeof(name));
	printf("请输入你的姓:");
	scanf_s("%s", &lastname, sizeof(lastname));

	printf("您的名和姓是:%s %s\n", &name, &lastname);
	return 0;
}

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

#include <stdio.h>
#define LEN 30
int main() {
	char name[LEN], lastname[LEN];
	int length_name = 0, length_lastname = 0, length1;
	printf("请输入你的名:");
	scanf_s("%s", name, sizeof(name));
	printf("请输入你的姓:");
	scanf_s("%s", lastname, sizeof(lastname));

	length_name = strlen(name);
	length_lastname = strlen(lastname); //sizeof会加上"\0"
	length1 = length_name + length_lastname;
	
	printf("\"%s %s\"\n",name, lastname);    // 转义引号
	printf("\"%20s %20s\"\n", name, lastname); //右端宽度为20
	printf("\"%-20s %-20s\"\n", name, lastname); // 
	printf("%*s %s\n", length1+3, name, lastname);
	return 0;
}

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

#include <stdio.h>
int main() {
	double a, b;
	printf("请输入数字:");
	scanf_s("%lf", &a);
	printf("%2.1lf or %2.1e\n", a,a); // %2.1lf,总共两列数字,保留一位小数;%1e

	printf("请输入数字:");
	scanf_s("%lf", &b);
	printf("%+5.3lf or %5.3E.", b, b);
	return 0;
}

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

#include <stdio.h>
int main(){
	float height;
	char name[10]="0"; // 不赋初值会“烫烫烫”
	printf("请输入您的身高(英寸):");
	scanf_s("%f", &height);
	printf("请输入您的姓名:");
	scanf_s("%s", &name, sizeof(name));
	printf("%s,您的身高是:%.3f cm", name, height*2.54);
	printf("按米计算:%.3f",height*2.54*100);
	return 0;
}

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.

#include <stdio.h>
int main() {
	float speed, bytes;
	printf("请输入下载速度(Mb/s):");
	scanf_s("%f", &speed);
	printf("请输入文件大小(MB):");
	scanf_s("%f", &bytes);
	printf("您的下载速度为%.2f Mb/s,文件大小为%.2f MB;所需下载时长为%.2f s", speed, bytes,(bytes * 8)/speed);
	return 0;
}

6.编写一个程序,先提示用户输入名,然后提示用户输入姓。在一行打 印用户输入的名和姓,下一行分别打印名和姓的字母数。字母数要与相应名 和姓的结尾对齐,如下所示:
Melissa Honeybee
7 8
接下来,再打印相同的信息,但是字母个数与相应名和姓的开头对齐, 如下所示:
Melissa Honeybee
7 8

#define LEN 30
int main() {
	char name[LEN]="0", last_name[LEN]="0";
	int length_name,length_last_name;
	printf("请输入你的名:");
	scanf_s("%s", &name, sizeof(name));
	printf("请输入你的姓:");
	scanf_s("%s", &last_name, sizeof(last_name));

	length_name = strlen(name);
	length_last_name = strlen(last_name);

	printf("%s %s\n", name, last_name);
	printf("%*d %*d\n", length_name, length_name, length_last_name, length_last_name);
	printf("%d %*d\n", length_name, length_name, length_last_name);
	// printf("%-*d %-*d\n", length_name, length_name, length_last_name, length_last_name); 酱紫也可以
	return 0;
}

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 的值与这些值一致吗?

#include <stdio.h>
#include <float.h>
int main() {
	double a = 1.0 / 3.0;
	float b = 1.0 / 3.0;

	printf("%.6lf, %.6f\n", a, b);
	printf("%.12lf, %.12f\n", a, b);
	printf("%.16lf, %.16f\n", a, b);

	printf("DBL_DIG=%d\n", DBL_DIG);
	printf("FLT_DIG=%d\n", FLT_DIG);

	return 0;
}

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

#include <stdio.h>
#define GALLON 3.785
#define MI 1.609

int main() {
	double distance, oil;
	printf("请输入您的英里数:");
	scanf_s("%lf", &distance);
	printf("请输入您的油耗量:");
	scanf_s("%lf", &oil);

	printf("您的耗油量:%.1lf L/%.1lf km", MI * oil, GALLON * distance * 100 );
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值