1.表达式中float类型的操作数不会自动转换为double类型。一般来说,数学函数(如math.h)使用双精度类型的变量。使用float类型主要是为了在使用较大数组时节省存储空间,有时也为了节省机器执行时间(双精度算数元算特别费时)。
2.scanf函数调用时,字符串类型不需要写‘&’,因为其本身即为地址。
3.EOF可能被定义为不同的值,使用EOF等标准符号可以增强程序的可移植性,常见值有-1。
4.根据某种特定的状态做不同的行为,可以用define定义状态量,然后定义int state。如:
#define IN 0
#define OUT 1
...
if(state == IN)
...
else //OUT
...
5. ~(~0<<n) 得到最右边n位为1,其他位是0.
6.条件表达式
每10行一个换行符:
for(i=0;i<n,i++)
printf("%6d%c",a[i],(i%10==9||i==n-1)? '\n':' ');
是否复数的s
printf("You have %d item%s.\n",n,n==1?"":"s");
7.在switch语句中,case的作用只是一个标号。
8.break只能跳出其所在的一级到上一级,而不是所有层次。
9. getch和ungetch 超前读并放回一个字符
#define BUFSIZE 100
char buf[BUFSIZE];//for ungetch to buffer
int bufp=0;//the next spare index of buf
int getch(void)
{
return (bufp>0) ? buf[--bufp] : getchar();
}
void ungetch(char c)
{
if(bufp >= BUFSIZE-1)
printf("ungetch: too many characters\n");
else
buf[bufp++]=c;
}
10. 一个外部变量只能在某个文件中定义一次,而其他文件可以通过extern声明来访问他。外部变量的定义必须指定数组的长度,但extern声明则不一定要指定数组的长度。外部变量的初始化只能出现在其定义中。
11.在函数中,可以以程序块结构的形式定义变量,例如for语句的花括号。
12.在不进行显式初始化的情况下,外部变量和静态变量都将被初始化为0,而自动变量和寄存器变量的初值则没有定义。
对于外部变量和静态变量来说,初始化表达式必须是常量表达式,且只初始化一次(在概念上讲是在程序开始执行前进行初始化)。
对于自动变量和寄存器变量,则在每次进入函数或程序块时都将被初始化,可以不是常量表达式。
数组的初始化,如果初始化表达式的个数比数组元素少,则对外部变量、静态变量和自动变量来说,未被初始化的元素将被初始化为0。若初始化表达式的个数比数组元素多,则是错误的。
13.将一个数作为字符串打印
/*print decimal as string*/
void printd(int n)
{
if(n<0){
putchar('-');
n=-n;
}
if(n/10)
printd(n/10);
putchar(n%10+'0');
}