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

3.1scanf
scanf与printf一样,编译器是不对输入数量进行检查的。注意是否有&,当然如果有些输入不当的情况将极有可能出现程序崩溃的问题,一般我们采用全部以字符形式读取,然后在转别的类型。scanf回忽略最后一个换行符,因此下一次读到的第一个就是换行符。scanf当遇到的字符为非当前项内容时会把此字符放回原处。
scanf格式字符串中,一个空白字符或空白转义序列都可以匹配任意多个空白字符,换行符,空格。
Q&A
1.%i : printf以十进制输出,与%d一致,读入时可以读入八进制和16进制的数。
2.%%: 双百分号代表%字符。
4.表达式(操作数+运算符)
对于/和%运算符,操作数有一个为负数时,/取整方向不固定与具体实现有关。%则结果完全未知,可正可负。这种与具体实现的行为,恰恰是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语句。