函数和数据类型
平方和
#includeint sqr_int(int x) { return x * x; } double sqr_double(double x) { return x * x; } int main() { int nx; double dx; printf("请输入一个整数:"); scanf("%d", &nx); printf("该数的平方是%dn", sqr_int(nx)); printf("请输入一个整数:"); scanf("%lf", &dx); printf("该数的平方是%fn", sqr_double(dx)); return 0; }
版本一:名称功能相似的函数过多,程序显得复杂
#include#define sqr(x)((x)*(x)) int main() { int nx; double dx; printf("请输入一个整数:"); scanf("%d", &nx); printf("该整数的平方是%dn", sqr(nx)); printf("请输入一个整数:"); scanf("%lf", &dx); printf("该整数的平方是%fn", sqr(dx)); return 0; }
版本二:运用了函数式宏,更简洁
#define命令给出指示如下:
若出现sqr(⚪)的表达式,就将其展开为((⚪)(⚪))
函数式宏在使用上务必小心,例如sqr(a++)在展开后是((a++)(a++))会加两次,因此在定义和使用函数宏时,应该考虑是否会有副作用产生。
函数式宏和逗号运算符
响铃并显示的宏定义
#include#define putsa(str) (putchar('a'),puts(str)) int main() { int na; printf("请输入一个整数"); scanf("%d", &na); if (na=0) putsa("0"); else putsa("不是0!"); return 0; }
2.枚举类型如果宏定义中要代换两个以上的表达式,使用逗号连接符连接,使其在语法上表示为一个表达式
枚举类型
显示所选小动物的叫声
#includeenum animal {Dog,Cat,Monkey,Invalid}; void dog() { puts("汪汪!"); }void cat() { puts("喵!"); }void monkey() { puts("唧唧!"); } enum animal select() { int tmp; do { printf("0是狗,1是猫,2是猴子,3是结束"); scanf("%d", &tmp); } while (tmp Invalid); return (tmp); } int main() { enum animal selected; do { switch (selected = select()) { case Dog:dog(); break; case Cat:cat(); break; case Monkey:monkey(); break; } } while (selected != Invalid); return 0; }
命名空间
枚举名和变量输入不同的命名空间,即使名称相同也能够区分。
3.输入和输出字符getchar函数
gatchar函数的作用是读入字符并将其返回。
字符
C语言中的字符就是该字符中的字符编码。
计算标准输入流中的数字字符数
#includeint main() { int i, ch; int cnt[10] = { 0 }; while (1) { ch = getchar(); if (ch == EOF) break; if (ch >= '0' && ch <= '9') cnt[ch - '0']++; } puts("数字字符的出现次数"); for (i = 0; i < 10; i++) printf("'%d':%dn", i, cnt[i]); return 0; }
转义字符
复制
从标准输入流复制到标准输出流
#includeint main() { int ch; while ((ch = getchar()) != EOF) putchar(ch); return 0; }
数字字符计数程序会逐个读取输入字符。将输入的字符按原样输出。



