【C Primer Plus】第4章

目录

一、知识点查漏补缺

二、课后编程练习


一、知识点查漏补缺

【1】在printf中,可以在参数之间断为两行,但不要在双引号中的字符串中间断开。

【2】C99和C11标准专门为sizeof运算符的返回类型添加%zd转换说明,对于strlen函数同样适用。在之前的版本中,sizeof和strlen返回的实际类型是unsigned int或unsigned long。

【3】#define后跟标识符。

【4】const修饰不同,则存储的位置不同:

  • 修饰全局变量,存储在静态存储区。
  • 修饰局部变量,存储在栈中。
  • 修饰字符串,存储在常量存储区。

【5】在C语言中,const声明的是变量,不是常量。

【6】printf中的转换说明%a和%A的区别为:显示结果中相关字母是小写(%a)/大写(%A)。

【7】printf中可以使用标记:

-左对齐
+显示正负的符号
空格若为正,则在值前面显示空格;若为负,则值前面显示减号
#可以显示八进制和十六进制的前缀
0用前导0代替空格填充字段宽度

【8】printf("%7.2f", n);表示小数点后显示2位,全部位数(包含小数点)占7位。

【9】printf返回值是打印出的字符个数。

【10】scanf返回值是接收的项数。例如,scanf("%d,%d", &n, &m);返回值为2.

【11】scanf的转换说明中,double类型为%lf。

【12】scanf接收字符串时会自动加'\0'。同时,scanf以空格和回车作为间隔,因此scanf不能接收包含空格的字符串。

【13】printf中的*修饰符:通过变量来指定字段宽度。例如,printf("%*d", 7, 15);会显示15且前面有5个空格使得总共占7个字符。

【14】scanf中的*修饰符:跳过相应输入项。


二、课后编程练习

题目1

【1】代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()  
{
	char name[10];		//保存名
	char surname[10];	//保存姓
	// 提示用户输入名和姓
	printf("请输入用户的名:");
	scanf("%s", name);
	printf("请输入用户的姓:");
	scanf("%s", surname);
	// 以“名,姓”的格式打印
	printf("%s,%s\n", name, surname);
	return 0;
}

【2】结果:

 题目2

【1】代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()  
{
	char name[10];		//保存名字
	// 提示用户输入名字
	printf("请输入用户的名字:");
	scanf("%s", name);
	// 操作a:打印名字,包括双引号
	printf("\"%s\"\n", name);
	// 操作b:在宽度为20的字段右端打印名字,包括双引号
	printf("\"%20s\"\n", name);
	// 操作c:在宽度为20的字段左端打印名字,包括双引号
	printf("\"%-20s\"\n", name);
	// 操作d:在比姓名宽度宽3的字段中打印名字
	int width = strlen(name) + 3;
	printf("%*s\n", width, name);
	return 0;
}

【2】结果:

  题目3

【1】代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()  
{
	float num;
	scanf("%f", &num);
	printf("The input is %.1f or %e\n", num, num);
	printf("The input is %+.3f or %E\n", num, num);
	return 0;
}

【2】结果:

 题目4

【1】代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()  
{
	// 提示用户输入身高(单位:英寸)和姓名
	float height;
	char name[10];
	printf("请输入用户身高(单位:英寸):");
	scanf("%f", &height);
	printf("请输入用户姓名:");
	scanf("%s", name);
	// 根据指定格式打印
	printf("%s, you are %.3f feet tall\n", name, height);
	return 0;
}

【2】结果:

 题目5

【1】代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()  
{
	// 提示用户输入以兆位每秒(Mb/s)为单位的下载速度
	float speed;
	printf("请输入下载速度(单位: Mb/s):");
	scanf("%f", &speed);
	// 提示用户输入兆字节(MB)为单位的文件大小
	float size;
	printf("请输入文件大小(单位: MB):");
	scanf("%f", &size);
	// 计算下载时间
	float time = size * 8 / speed;
	// 打印下载速度、文件大小和下载时间
	printf("At %.2f megabits per second, a file of %.2f megabytes\n", speed, size);
	printf("downloads in %.2f seconds\n", time);
	return 0;
}

【2】结果:

  题目6

【1】代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()  
{
	// 提示用户输入名
	char name[10];
	printf("请输入用户的名:");
	scanf("%s", name);
	// 提示用户输入姓
	char surname[10];
	printf("请输入用户的姓:");
	scanf("%s", surname);
	// 一行打印名和姓,一行打印对应的字母数,且结尾对齐
	int len_name = strlen(name);
	int len_surname = strlen(surname);
	printf("%s %s\n", name, surname);
	printf("%*d %*d\n", len_name, len_name, len_surname, len_surname);
	// 字母个数与相应名和姓开头对齐
	printf("%s %s\n", name, surname);
	printf("%-*d %-*d\n", len_name, len_name, len_surname, len_surname);
	return 0;
}

【2】结果:

 题目7

【1】代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <float.h>

int main()  
{
	double num1 = 1.0 / 3.0;
	float num2 = 1.0 / 3.0;
	// 打印三次结果
	// 第一次:显示小数点后6位数字
	printf("num1 = %.6lf, num2 = %.6f\n", num1, num2);
	// 第二次:显示小数点后12位数字
	printf("num1 = %.12lf, num2 = %.12f\n", num1, num2);//float精度不准确了
	// 第三次:显示小数点后16位数字
	printf("num1 = %.16lf, num2 = %.16f\n", num1, num2);
	// 显示FLT_DIG和DBL_DIG的值
	printf("FLT_DIG = %d, DBL_DIG = %d\n", FLT_DIG, DBL_DIG);
	return 0;
}

【2】结果:

 题目8

【1】代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <float.h>

#define	GALLON_TO_LITER		3.785
#define MILE_TO_KILO		1.609

int main()  
{
	// 提示用户输入旅行里程和消耗的汽油量
	float mile, gallon;
	printf("请输入里程数(单位:英里):");
	scanf("%f", &mile);
	printf("请输入汽油量(单位:加仑):");
	scanf("%f", &gallon);
	// 计算并显示消耗每加仑汽油行驶的英里数
	float mile_per_ges = mile / gallon;
	printf("消耗每加仑汽油行驶的英里数: %.1f\n", mile_per_ges);
	// 将单位是英里/加仑的值转换为升/100公里
	float liter_per_100kilo = (gallon * GALLON_TO_LITER) / (mile * MILE_TO_KILO * 100);
	printf("消耗每100公里的燃油量:%f\n", liter_per_100kilo);
	return 0;
}

【2】结果:

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值