复习题

  1. 再次运行程序清单4.1,但是在要求输入名时,请输入名和姓(根据英文书写习惯,名和姓中间有一个空格),看看程序会发生什么情况。为什么?

C语言在使用scanf()函数读取用户输入的字符串时,如果遇到第一个空白(空格,制表符,换行符),就认定完成数据的读取工作,后续数据不再写入当前变量,而只保存在输入缓冲区。因此读取名的scanf()函数只能够在name[]中存储第一个无空白的连续单纯。在空白之后用户输入的内容依然会保留在输入缓冲区内,等待下一次scanf()函数的输入。因此,程序中并没有等待用户输入体重数据,而直接将刚才缓冲区内的姓赋予体重。最终weight变量存储的数据为0.0。

2.假设下列示例都是完整程序的一部分,它们的打印结果分别是什么?

对这四个输出进行讲解:

第一个输出:这个%2.2f什么意思。

形如%m.nf ,其中m表示输出数据的宽度(如果宽度不够就补空格,如果宽度超过m久用实际宽度);n表示输出的实数保留n位小数;

举个例子:

输出如下

第一个输出在前面补空格让数据宽度达到12,第二个只需要保留小数点后三位就行(四舍五入),第三个不仅需要保留小数点后三位,而且还需要在前面补空格让数据宽度达到12.

输出“He sold the painting for $234.50.”这是浮点数据的格式化输出,%f表明以十进制记数法打印浮点数据,因此,会自动将e记数法转换成十进制,保留小数点后面的两位数字。

第二个输出:输出“Hi!“。打印语句分别用字符型,十进制整型和八进制转义方式打印3个字符。整型十进制数据105对应ASCII字符‘i’,‘\41’中的转义序列表示八进制数据,通常表示八进制时可以写成‘\041’,也可以省略0.直接写成‘\41’.

第三个输出

预编译指令定义了Q为字符串“His Hamlet was funny without being vulgar.“,打印时会直接通过转换说明符输出该字符串,strlen(Q)函数计算实参字符串Q的长度,即42,并且输出。需要注意的是strlen()函数并没有计算字符串结尾的‘\0’

第四个输出:

Printf()函数打印了两个浮点数,“%e“表示按照e计数法打印,保留小数点后两位数字,

”%2.2f“表示按照普通十进制打印数据,保留小数点后两位数字,如果不够用0补齐。

4.找出下列程序的错误

改正后的程序如下:

5.设一个程序的开头是这样的。

6.打印下列各项内容分别要使用什么转换说明符?

A:一个字段宽度与位数相同的十进制整数;

B:一个形如8A,字段宽度为4的十六进制整数;

C:一个形如232.346、字段宽度为10的浮点数:

D:一个形如2.33e+002、字段宽度为12的浮点数;

E:一个字段宽度为30、左对齐的字符串;

分析与解答;

A:整型数据使用的转换说明符是%d,字段宽度和位数相同不需要使用特殊修饰符,换说明符为%d;

B:十六进制数据的转换说明符(输出大写字符应当使用大写的X)是%X,因为宽使用4作为修饰符。因此转换说明符为%4X;

C;%10.3f

D:%12.2e

E: 字符串使用转换说明符%s,长度为30,左对齐,使用-30修饰符,因此转换说明符为%-30s;

7.打印下面的内容分别使用什么转换说明符?

A;字段宽度为15的unsigned long 类型整数;

B:一个形如ox8a,字段宽度为4的十六进制整数;

C:一个形如2.33E+02、字段宽度为12、左对齐的浮点数;

D:一个形如+232.346、字段宽度为10的浮点数;

E:一个字段宽度为8的字符串的前8个字符;

解析:

A;unsigned 类型整数转换说明符是%u,对于long类型的字段宽度,应添加l修饰符,字段宽度为15,就需要添加15的修饰符,因此转换说明符为%15lu;

B;十六进制整型数据的转换说明符为%x(输出是小写x就小写),输出OX使用#修饰符;字段宽度为4,转换说明符为%#4x;

C;输出科学计数法使用转换说明符%E(输出是大写E就用大写),左对齐,字段宽度为12修饰符为-12,转换说明符为%-12.2E

D:浮点数转换说明符是%f,显示正好使用+修饰符,字符宽度为10,3位小数,使用的转换说明符如下:%+10.3f;

E:字符串转换说明符是%s,字段宽度位8,显示前八个字符使用8.8修饰符,因此转化说明符为%8.8s。

补充:C语言中,%m.ns 的含义:
%s:就是字符串的转换说明符

%ms:输出字符串宽度为m,如果字符串本身实际宽度大于m,那么就用字符串的实际宽度。如果字符串的实际宽度小于m,则左补空格。可以理解成m前面有个省略了的+号,所以字符串右对齐;

%-ms:规则和基本上面一样,不一样的是字符串左对齐,右补空格;

%m.ns;输出宽度占m,但是只取字符串中左端的n个字符。这n个字符排列在m宽度的右侧,如果n小于m则左补空格,如果n大于m,那么m失效,字符的输出宽度就是n。

%-m.ns;规则和上面基本一样,不一样的地方在于,如果n小于m那么需要左对齐,右补空格。

8.打印下面各项内容要分别使用什么样的转换说明符?

A:一个字段宽度为6、最少有4位数字的十进制数;

B:一个在参数列表中给定字段宽度的八进制整数;

C:一个字段宽度为2的字符;

D:一个形如+3.13、字段宽度等于数字中字符数的浮点数;

E:一个字段宽度为7、左对齐的字符串中的前5个字符。

分析与解答:

A:转换说明符为%d,%6.4d;

B:八进制数据使用转换说明符%o,字段宽度由参数列表指定,使用修饰符“*”,因此转换说明符为%*o;

C;%2c

D:%+0.2f;字段宽度为数字中字符数,即不指定字段宽度,小数点后显示两位,使用修饰符+0.2,因此转换说明符为%+0.2f;

E:%-7.5s

9.分别写出读取下列各输入行的scanf()语句,并且声明语句中用到的变量和数组;

A.101;

B.22.32 8.34E-09;

C.linguini;

D.catch 22;

E.catch 22(但是跳过catch)。

分析与解答:

A.输入数据是整型数据,首先定义整型变量i, scanf()函数使用转换说明符%d。

Int dalmations;

Scanf (“%d”,& dalmations);

B.  输入数据有两个浮点型数据,scanf()使用转换说明符%f或者%e %g。

float kgs ,share;

scanf(“%f %f”,&kgs,&share);

C.输入数据为字符串scanf()函数使用转换说明符%s,需要注意的是,对于字符数组,scanf()函数的参数列表不需要使用&符号。

              char pasta[20];

scanf(“%s”,pasta);

D. 输入数据为字符串和整型数据,因此scanf()需要使用%s,%d。

char action[20];

int value;

scanf(“%s %d” , action ,&value);

E. 输入数据为字符串和整型数据,忽略字符串,应当使用“*”修饰字符串转换说明符

int   value;

scanf(“%*s %d”,&value);

10.什么是空白?

C语言中的空白是指空格、制表符、换行符,这三种空白是scanf()函数进行输入分割的符号。

11.下面的语句有什么问题?如何修正?

Printf(“The double type is %z bytes..\n”, sizeof(double));

分析与解答:

百分号(%)后面的z在printf()函数中表示一个修饰符,需要注意的是,修饰符是百分号和转换说明符中间用于表示特定数据类型的符号。修饰符不能单独使用。Z修饰符和整型转换说明符在一起,表示使用sizeof的返回类型——size_t,例如,%zd表示十进制,%zo表示八进制。因此应当修改为%zd,表示打印sizeof的十进制整型数据。

12.假设要在程序中用圆括号替代花括号,以下方法是否能可行?

分析与解答:

C语言中的预编译指令#define语句,可以对相应的符号进行编译时替换,即编译器在对源代码进行编译时进行符号替换。但是例子中的#define语句替换的是c语言中表示语句块和一些重要的语句符号,替换后会导致程序出现语法错误。

C primer plus 第四章课后复习题答案笔记解释整理相关推荐

  1. C++ Primer Plus第四章课后编程

    C++ Primer Plus第四章课后编程 4.12 复习题* 4.13 编程练习* 三句话,希望读者可以先看* 4.12 复习题* #include<iostream> #includ ...

  2. 《计算机网络技术》第四章课后习题答案(全)

    <计算机网络技术>第四章课后习题答案(全) 1 . IEEE802委员会提出将数据链路层划分为哪两个层次,每个层次的功能各是什么? 答: IEEE802委员会提出将数据链路层划分为两个子层 ...

  3. C语言程序设计第五版 谭浩强 第四章 课后习题 答案

    谭浩强C语言程序设计第五版 第4章 课后习题 答案 点我看视频讲解+可运行源码 记得一键三连哦 第四章 选择结构程序设计 1. 什么是算术运算?什么是关系运算?什么是逻辑运算? [答案解析] 算熟运算 ...

  4. 工程伦理(2021春)第四章课后习题答案

    工程伦理(2021春)第一章课后习题答案 工程伦理(2021春)第二章课后习题答案 工程伦理(2021春)第三章课后习题答案 工程伦理(2021春)第五章课后习题答案 工程伦理(2021春)第六章课后 ...

  5. C primer plus 第四章课后编程练习答案笔记解释整理

    第四章的编程练习: 1.编写一个程序,提示用户输入名和姓,然后以"名,姓"的格式打印. 编程分析: 程序功能是读取用户输入的字符串,并且重新格式化输出.应该针对名和姓分别定义对应的 ...

  6. 《Python语言程序设计》王恺 机械工业出版社 第四章课后习题答案

    第四章 面向对象 4.5 课后习题 (1)类和对象的关系即数据类型与变量的关系,类规定了可以用于存储什么数据,而对象用于实际存储数据,每个对象可存储不同的数据 (2)类中包含属性和方法.属性对应一个类 ...

  7. 计算机网络原理(谢希仁第八版)第四章课后习题答案

    第四章 1.网络层向上提供的服务有哪两种?是比较其优缺点. 答:网络层向运输层提供 "面向连接"虚电路(Virtual Circuit)服务或"无连接"数据报服 ...

  8. 【最详细】数据结构(C语言版 第2版)第四章课后习题答案 严蔚敏 等 编著

    所有章节答案合集-->传送门 第 4 章串.数组和广义表 1.选择题 ( 1)串是一种特殊的线性表,其特殊性体现在() . A .可以顺序存储 B .数据元素是一个字符 C.可以链式存储 D . ...

  9. 《C语言程序设计教程》(主编黄迪明、余勤)第四章课后习题答案

    在阅读代码前,先说一下这本书的在版编目(CIP)数据:C语言程序设计教程/黄迪明.余勤主编.--北京:国防工业出版社,2006.5    ISBN 7-118-04516-0 所有代码均在 VS201 ...

最新文章

  1. 解决docker镜像无法删除的问题
  2. linux32安装pgsql,Linux安装pgsql
  3. DCIM在数据中心现代化计划中的作用
  4. 家装强电弱电布线图_强弱电布线注意事项,强弱电布线的4个讲究!
  5. Windows 2003 系统管理 视频教程 http://www.91xueit.comm 下载
  6. PuppeteerSharp: 更友好的 Headless Chrome C# API
  7. 设计模式之禅之六大设计原则-依赖倒置原则
  8. oracle 游标内存自动释放,详解Oracle隐式游标和显式游标
  9. Spring 中的重试机制,简单、实用!
  10. 安卓24:Android关于日期和时间的几个相关控件DatePicker、TimePicker等
  11. Java中常见的服务器
  12. MATLAB 图像伪彩色处理
  13. 新路由3详细刷机教程
  14. linux系统重装win系统教程,Win10如何重装linux系统 Win10重装linux系统教程
  15. win7远程桌面连接 简易教程
  16. 四分位数算法记录(含java代码实现)
  17. 移动联通基站定位API以及电信基站定位API
  18. 系统提示无法删除文件或文件夹的常用解决办法
  19. js打印去掉页眉页脚
  20. uni-app 实现语音播放实现思路和代码

热门文章

  1. leetcode1079. 活字印刷(回溯)
  2. 寒假训练十(map,pair,string)2020.02.17(4题)
  3. 小米1S MIUI V5刷回V4教程
  4. 一次简单的爬虫过程记录:静态网页小说下载
  5. 《杀出个黎明》(From Dusk Till Dawn)--This is the fucking movie
  6. 财务会计基础(二)复式记账法
  7. Ubuntu连接手机adb调试
  8. 论文阅读:GMAN: A Graph Multi-Attention Network for Traffic Prediction
  9. 一键通(手机实现对讲机功能)
  10. ci mysql操作_MySQL基础篇/第3篇:MySQL基本操作语句.md · icanci/MySQL-Review - Gitee.com...