天天看点

C语言程序设计:现代方法

3.1转换说明

%m.pX ,m和p都是可选项,且必为整型,m代表最小字段宽度,如果要打印的比m个字符小,则值在字符段为右对齐,前面用空格补位。当然,-m就是左对齐,另外打印的比m个字符多,那什么也不会改变。p代表转换精度分为d,f,e,g。后三者均是显示浮点数,e为科学计数法,g都行,显示比较智能根据数的大小决定。
C语言程序设计:现代方法

3.1scanf

scanf与printf一样,编译器是不对输入数量进行检查的。注意是否有&,当然如果有些输入不当的情况将极有可能出现程序崩溃的问题,一般我们采用全部以字符形式读取,然后在转别的类型。scanf回忽略最后一个换行符,因此下一次读到的第一个就是换行符。scanf当遇到的字符为非当前项内容时会把此字符放回原处。

scanf格式字符串中,一个空白字符或空白转义序列都可以匹配任意多个空白字符,换行符,空格。

Q&A

1.%i : printf以十进制输出,与%d一致,读入时可以读入八进制和16进制的数。

2.%%: 双百分号代表%字符。

4.表达式(操作数+运算符)

对于/和%运算符,操作数有一个为负数时,/取整方向不固定与具体实现有关。%则结果完全未知,可正可负。这种与具体实现的行为,恰恰是C语言高效率的体现,这意味这要与硬件行为相匹配。大家应避免这种未定义行为。
C语言程序设计:现代方法
C语言程序设计:现代方法
C语言程序设计:现代方法

左值:存储在计算机内存中的对象,比如变量,而不是常量或表达式。

v += e 不等价 v = v + e

需要记住的是自增/自减运算符是分前后缀的,前缀左结合,优先级高于一元操作符+/-,后缀右结合与其相同。不在子表达式使用赋值运算符,而是采用一串分离的赋值表达式。

fmod可以针对浮点数求余数。

/*int 逆序*/
int Reverse(unsigned int num, unsigned int reversenum = ) {
    return (num == ) ? reversenum : Revert(num / , reversenum *  + num % );
           

5.选择语句

/*级联式if语句*/
/*不用缩进,告诉读者这只是单纯的一系列判断
  也防止判定过多产生过量缩进*/
if()
语句
else if()
语句
else
语句
           
switch()
{
  case : case : case :
    printf("!");
    break;
  case :
    printf("!");
    break;
  default:
    printf("!");
    break; 
}
return (i > j ? i : j);
           

5.循环

do while语句一般得带个大括号,否则很容易以为是while语句。
上一篇: APUE习题8.7
下一篇: 8.7 动态数组

继续阅读