《全国计算机等级考试二级教程 C语言程序设计》错误一览——第3~6章 第3章 顺序结构 3.2 数据输出
函数的原型是 其中是格式控制部分,其形式为字符串形式。是输出项列表。
补充内容与更正内容如下表:格式字符说明d或i输出带符号的十进制整数。%ld为长整型,%hd为短整型,%lld为双长整型f或F以十进制小数形式输出浮点数(单精度和双精度),格式是:[-]ddd.ddd。小数位数由输出精度决定,隐含的精度是6。若指定的精度为0,则包括小数点在内的小数部分不输出;%#f或%#F则始终输出小数点,即使指定的精度为0e或E以十进制指数形式输出浮点数(单精度和双精度),格式是:[-]d.ddde±dd(%e)或[-]d.dddE±dd(%E)。小数位数由输出精度决定,隐含的精度是6。若指定的精度为0,则包括小数点在内的小数部分不输出;%#e或%#E则始终输出小数点,即使指定的精度为0。e/E后的dd为指数部分,至少输出两位,不足补0。若指数为0,输出指数是00g或G将浮点数(单精度和双精度)转换为%f/%F或%e/%E格式,输出精度为有效数字位数,隐含的精度是6,若精度为0则将精度转换为1。若转换为%e/%E格式的指数大于等于-4且小于输出精度,则以%f/%F格式输出,否则以%e/%E格式输出。%g或%G格式不输出小数末尾无意义的0;若小数部分为0,则包括小数点在内的小数部分不输出。%#g或%#G则始终输出小数点,并保留小数末尾的0a或A以十六进制指数形式输出浮点数(单精度和双精度),格式是:[-]0xh.hhhp±d(%a)或[-]0Xh.hhhP±d(%A)。小数位数由输出精度决定,隐含的精度是可以完整显示数据的准确值或显示最接近数据的值所需的小数位数。若指定的精度为0,则包括小数点在内的小数部分不输出;%#a或%#A则始终输出小数点,即使指定的精度为0。p/P后的d为指数部分,至少输出一位。若指数为0,输出指数是0n统计本次函数调用出现在%n之前输出的字符数,并将该值赋值给参数变量。实参为一个指向整数类型变量的指针
在和格式字符之间可以加入长度修饰符,以保证数据输出格式的正确和对齐。对于长整型的数()应该加,即;双长整型的数()应该加,即; 短整型的数()可以加,即;类型的数以整数形式输出可以加,即。长双精度浮点型的数()应该加,即或、或、或以及或。 、和类型的浮点数或、或、或或、或指数部分的位数(不一定是5位) 用来指定输出的有效数字位数(左边不会自动补0)。不指定将自动按照6位有效数字输出,截去右边多余的小数并对截去部分第一位小数的前一位四舍五入。 若截去后小数末尾为0,则小数末尾的所有0也会一并截去类型有18位有效数字
【补充】如果在“”和格式字符之间加一空格,则输出负数时前面带有负号,输出非负数时符号用空格占位。如果空格与“”同时出现,则空格被忽略。
8. 根据给出的输出格式,这个函数调用其实是,其输出结果是其中“”表示空格如果函数调用是,则输出结果是 9. 若类型不匹配,编译时不会报错,但会产生警告信息
10. 函数调用时实参列表中的逗号只是分隔符,不是序点。虽然函数参数压栈的顺序是从右向左的,但是函数参数求值的次序是不能确定的,因此这个表达式的行为是未定义的。
3.3 数据输入
函数的原型是 其中是格式控制部分,其形式为字符串形式。是输入项列表。 由于需要通过函数调用改变其他函数中变量的值,作为实参的输入项需要是指针类型。 表3.3补充与更正内容如下表:格式字符说明c输入一个字符序列。若不指定宽度,则输入一个字符。否则输入的字符序列的长度等于指定的宽度f/F、e/E、g/G、a/A输入浮点数,可以使用浮点常量的三种表示形式中的任意一种。(单精度数用f/F、e/E、g/G、a/A,双精度数用lf/lF、le/lE、lg/lG、la/lA,长双精度数用Lf/LF、Le/LE、Lg/LG、La/LA)s输入一个非空白字符序列,并在字符序列的末尾添加’\0′[…]输入一个字符序列,从第一个在[]内的字符开始,到第一个不在[]内的字符结束,并在字符序列的末尾添加’\0’。[]内的“字符1-字符2”(字符1小于字符2)形式表示从字符1到字符2之间的所有字符(包括字符1和字符2)。如[a-z]表示小写字母,[0-9A-Fa-f]表示十六进制数字字符[^…]输入一个字符序列,从第一个不在[]内^之后的字符开始,到第一个在[]内^之后的字符结束,并在字符序列的末尾添加’\0’。[]内的“字符1-字符2”(字符1小于字符2)形式表示从字符1到字符2之间的所有字符(包括字符1和字符2),如[^0-9]表示非十进制数字字符,[^A-Za-z]表示非字母p输入一个可以表示为指针的字符序列n统计本次函数调用出现在%n之前输入的字符数,并将该值赋值给参数变量。实参为一个指向整数类型变量的指针
说明:若类型不匹配,编译时不会报错,但会产生警告信息
2. 输入类型数据用,输入类型数据用,输入类型数据用;输入类型数据用/、/、/、/,输入类型数据用/、/、/、/
这个程序其实完全可以使用库函数实现:
第4章 条件结构
其实现代C语言已经通过这个头文件提供了、和这三个宏的定义,从而实现了逻辑类型和逻辑值的简易支持。下个C标准(C2x)可能将这三个宏名变为关键字,这样C语言也可以全面支持逻辑类型和逻辑值了。 4.4 switch 语句
这里虽然没有错误,但有一点需要补充: 主流C编译器(如GCC、Clang)可以使用这种形式的语句标号表示常量表达式A到B之间的所有整数数值(包括A和B)。需要注意的是这种形式要求两侧有一个空格,且左侧表达式的值要小于右侧表达式的值。如例4.5的程序可以改写为以下形式: 第5章 循环结构
这道例题中的程序有一个问题:有些变量只需要在循环体内部使用,却全都定义在循环体外部。而且,该程序的编写者似乎并不知道类型的常量如何书写。此程序重构如下:
语句的一般形式与语句并不绝对等价。一旦循环体中出现了语句,语句跳至表达式2, 语句跳至表达式3。 有关语句的说明那里补充一点:可以在语句的表达式1中定义仅在循环内使用的变量(一般为循环控制变量)。下面的例5.5可以写作
例5.6的程序其实是有潜在问题的。主要问题就在于循环控制变量是浮点类型。 由于不同的系统具有不同的浮点数精度限制,为了使代码具有良好的可移植性,循环控制变量要避免使用浮点类型。而且程序中的完全可以定义为一个符号常量而非变量。程序修改如下: 第6章 字符型数据
字符常量的类型是,占用的字节数为而非。既然字符常量的类型是,那么这种字符常量就是合法的(在使用ASCII码的计算机系统上等价于)。然而编译器往往会对这种多字符的字符常量发出警告(因为这种情况多为字符串字面量误写)。
转义字符中缺少了、和三种转义字符 【补充】表示Unicode编码为0xhhhh(小于0x10000)的字符,表示Unicode编码为0xhhhhhhhh的字符。 转义字符表示一个问号,使用该转义字符是为了避免连续的问号按照三联符序列处理。有的国家或地区的编码标准中不含以下9个字符中的一种或多种:(如在日本的编码标准SHIFT-JIS中,字符“”的编码被字符“”占用)。为此C语言标准规定了下列9个三联符序列替代这些字符,这些三联符序列均以两个“”字符开头。三联符序列替代字符??=#??([??/\??)]??’^??<{??!|??>}??-~ 三联符序列在源程序中的任何位置都会被替换。例如以下语句 替换三联符序列后变为 若需要输出连续的问号,问号使用转义字符“”表示: 现代编译器一般默认不开启三联符序列替换,如果源程序中出现了三联符序列,编译器会发出警告。若需要替换三联符序列,可使用提示的编译器参数开启三联符序列替换。 此外,在源程序中可以使用以下双联符序列替换5个字符。注释、字符串字面量和字符常量中的双联符序列不替换。双联符序列替代字符<:[:>]<%{%>}%:#
正确的名称是“字符串字面量”
函数的原型是 函数的原型是
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/76824.html