当前位置:   article > 正文

【C Primer Plus】第4章

【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】代码:

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. int main()
  4. {
  5. char name[10]; //保存名
  6. char surname[10]; //保存姓
  7. // 提示用户输入名和姓
  8. printf("请输入用户的名:");
  9. scanf("%s", name);
  10. printf("请输入用户的姓:");
  11. scanf("%s", surname);
  12. // 以“名,姓”的格式打印
  13. printf("%s,%s\n", name, surname);
  14. return 0;
  15. }

【2】结果:

 题目2

【1】代码:

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. int main()
  5. {
  6. char name[10]; //保存名字
  7. // 提示用户输入名字
  8. printf("请输入用户的名字:");
  9. scanf("%s", name);
  10. // 操作a:打印名字,包括双引号
  11. printf("\"%s\"\n", name);
  12. // 操作b:在宽度为20的字段右端打印名字,包括双引号
  13. printf("\"%20s\"\n", name);
  14. // 操作c:在宽度为20的字段左端打印名字,包括双引号
  15. printf("\"%-20s\"\n", name);
  16. // 操作d:在比姓名宽度宽3的字段中打印名字
  17. int width = strlen(name) + 3;
  18. printf("%*s\n", width, name);
  19. return 0;
  20. }

【2】结果:

  题目3

【1】代码:

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. int main()
  5. {
  6. float num;
  7. scanf("%f", &num);
  8. printf("The input is %.1f or %e\n", num, num);
  9. printf("The input is %+.3f or %E\n", num, num);
  10. return 0;
  11. }

【2】结果:

 题目4

【1】代码:

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. int main()
  5. {
  6. // 提示用户输入身高(单位:英寸)和姓名
  7. float height;
  8. char name[10];
  9. printf("请输入用户身高(单位:英寸):");
  10. scanf("%f", &height);
  11. printf("请输入用户姓名:");
  12. scanf("%s", name);
  13. // 根据指定格式打印
  14. printf("%s, you are %.3f feet tall\n", name, height);
  15. return 0;
  16. }

【2】结果:

 题目5

【1】代码:

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. int main()
  5. {
  6. // 提示用户输入以兆位每秒(Mb/s)为单位的下载速度
  7. float speed;
  8. printf("请输入下载速度(单位: Mb/s):");
  9. scanf("%f", &speed);
  10. // 提示用户输入兆字节(MB)为单位的文件大小
  11. float size;
  12. printf("请输入文件大小(单位: MB):");
  13. scanf("%f", &size);
  14. // 计算下载时间
  15. float time = size * 8 / speed;
  16. // 打印下载速度、文件大小和下载时间
  17. printf("At %.2f megabits per second, a file of %.2f megabytes\n", speed, size);
  18. printf("downloads in %.2f seconds\n", time);
  19. return 0;
  20. }

【2】结果:

  题目6

【1】代码:

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. int main()
  5. {
  6. // 提示用户输入名
  7. char name[10];
  8. printf("请输入用户的名:");
  9. scanf("%s", name);
  10. // 提示用户输入姓
  11. char surname[10];
  12. printf("请输入用户的姓:");
  13. scanf("%s", surname);
  14. // 一行打印名和姓,一行打印对应的字母数,且结尾对齐
  15. int len_name = strlen(name);
  16. int len_surname = strlen(surname);
  17. printf("%s %s\n", name, surname);
  18. printf("%*d %*d\n", len_name, len_name, len_surname, len_surname);
  19. // 字母个数与相应名和姓开头对齐
  20. printf("%s %s\n", name, surname);
  21. printf("%-*d %-*d\n", len_name, len_name, len_surname, len_surname);
  22. return 0;
  23. }

【2】结果:

 题目7

【1】代码:

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <float.h>
  4. int main()
  5. {
  6. double num1 = 1.0 / 3.0;
  7. float num2 = 1.0 / 3.0;
  8. // 打印三次结果
  9. // 第一次:显示小数点后6位数字
  10. printf("num1 = %.6lf, num2 = %.6f\n", num1, num2);
  11. // 第二次:显示小数点后12位数字
  12. printf("num1 = %.12lf, num2 = %.12f\n", num1, num2);//float精度不准确了
  13. // 第三次:显示小数点后16位数字
  14. printf("num1 = %.16lf, num2 = %.16f\n", num1, num2);
  15. // 显示FLT_DIG和DBL_DIG的值
  16. printf("FLT_DIG = %d, DBL_DIG = %d\n", FLT_DIG, DBL_DIG);
  17. return 0;
  18. }

【2】结果:

 题目8

【1】代码:

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <float.h>
  4. #define GALLON_TO_LITER 3.785
  5. #define MILE_TO_KILO 1.609
  6. int main()
  7. {
  8. // 提示用户输入旅行里程和消耗的汽油量
  9. float mile, gallon;
  10. printf("请输入里程数(单位:英里):");
  11. scanf("%f", &mile);
  12. printf("请输入汽油量(单位:加仑):");
  13. scanf("%f", &gallon);
  14. // 计算并显示消耗每加仑汽油行驶的英里数
  15. float mile_per_ges = mile / gallon;
  16. printf("消耗每加仑汽油行驶的英里数: %.1f\n", mile_per_ges);
  17. // 将单位是英里/加仑的值转换为升/100公里
  18. float liter_per_100kilo = (gallon * GALLON_TO_LITER) / (mile * MILE_TO_KILO * 100);
  19. printf("消耗每100公里的燃油量:%f\n", liter_per_100kilo);
  20. return 0;
  21. }

【2】结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/587417
推荐阅读
相关标签
  

闽ICP备14008679号