1、计算字符串长度:<string.h>
sizeof() 以字节为单位给出数据大小,数组定义的长度,包含空格和 \0;strlen() 以字符为单位返回字符串长度,实际字符占用空间,不含 \0;
2、创建符号常量:
预处理:#define NAME value一般大写符号名代表常量,c_,或 k_ 表示常量;const常量申明: const int name = value;
3、limits.h 和 float.h 整数、浮点数的大小限制信息:
limits.h中常用符号常量
CHAR_BIT | 一个 char 的位数 |
CHAR_MAX / CHAR_MIN | char 类型的最大值 / 最小值 |
SHRT_MAX / SHRT_MIN | short 类型的最大值 / 最小值 |
INT_MAX / INT _MIN | int 类型的最大值 / 最小值 |
LONG_MAX / LONG _MIN | long 类型的最大值 / 最小值 |
LLONG_MAX / LLONG _MIN | long long 类型的最大值 / 最小值 |
limits.h中常用符号常量
FLT_MANT_DIG | float 类型的尾数位数 |
FLT_DIG | float 类型的最少有效数字位数(十进制) |
FLT_MAX | float 类型正数的最大值 |
FLT_MIN | 保留全部精度的 float 类型正数的最小值 |
FLT_EPSILON | 1.00和比1.00大的最小的 float 类型值之间的差值 |
3、printf():
printf() 的返回值:返回打印的字符的数目,包含所有的打印字符(空格、换行符等);如果输出错误,会返回负数;printf() 换行:
// 反斜杠(/)和换行组合结束第一行,下一行必须从最左端开始;printf("Here's another way to print a \long string.\n");
// 字符串连接;
printf("Here's the newest way to print a ""long string.\n");
4、scanf():
scanf()的返回值:返回成功读入的参数个数,读取失败返回0,检测到文件结尾,会返回EOF(-1);除%c以外,scanf() 会自动跳过输入的空格,%c 前添加空格,可跳过空白字符;scanf(“%c”, &ch) ;读取输入中遇到第一个字符;scanf(“ %c”, &ch) ;读取输入中遇到第一个非空白字符;(有空格)字符串数组的结束用 \0 空字符标记;%c 字符,空格、制表符,换行符scanf() 也能读取;%s 字符串,对于字符串,scanf()会在遇到第一个空格、制表符,换行符时,会停止读取;字符数组读进scanf()时,不需要& ;
5、printf()和 scanf()的*修饰符:
printf("%*d", n); 可变宽度输出字段;scanf('%*d %d", &n); 滞后赋值,跳过输入的参数;
第四章课后习题
1、字符串打印格式:
scanf("%s", name2);printf("my name is\" %s\"\n", name2); // 双引号内打印printf("my name is\" %20s\"\n", name2); // 宽度为20,右端打印printf("my name is\" %-20s\"\n", name2); // 宽度为20,左端打印num = strlen(name2)+3;printf("my name is\" %*s\"\n", num, name2); // 比name2宽3个字符打印
2、上下行对齐:
num1 = strlen(ll_name);num2 = strlen(ff_name);printf("%s %s\n", ll_name, ff_name);printf("%*d %*d\n", num1, num1, num2, num2); //右端对齐printf("%s %s\n%-*d %-*d\n", ll_name, ff_name, num1, num1, num2, num2); //左端对齐
注:左端对齐用“-”,未知长度用“*”,注意赋值参数顺序,%s、* %d 按顺序依次赋值;
3、用FLT_DIG、DBL_DIG 查询有效位数:
3、用FLT_DIG、DBL_DIG 查询有效位数:
double d = 1.0/3.0;float fl = 1.0/3.0f;printf("%d %d\n", FLT_DIG, DBL_DIG);//最少有效数字位数(十进制)