C基础
1. 基础常量及函数
1.1 符号常量
1 |
|
i=7
i sieze=4
因为PI是 符号常量,在 i = PI * 2 时,实际为 i = 3+2*2 即为 7
1.2 浮点型常量
类型强制转换
1 |
|
j=2.000000,k=2.500000
注:
- i/2=2 why? 因为/的左右操作数都为int,执行整型操作(整除,左取整)
- (float)i/2=2.5 why? 因为/的左操作数此时为
(float)i表达式,类型为float,执行小数运算(除法运算)
1.3 printf函数
代码格式
| 代码 | 格式 | 代码 | 格式 |
|---|---|---|---|
| %d | 十进制有符号整数 | %p | 指针的值 |
| %u | 十进制无符号整数 | %e | 指数形式的浮点数 |
| %f | 浮点数 | %x | 无符号数以十六进制表示的整数 |
| %s | 字符串 | %o | 无符号数以八进制表示的整数 |
| %c | 单个字符 | %g | 把输出的值按照%e或%f类型中输出长度较小的方式输出 |
对齐示例
1 | int main(){ |
1 | student1 number=10 score=96.300003 |
注:
- 使用%3d,表示默认占3个位置
- 使用%-3d,表示左对齐,默认不带’-'表示
右对齐 - 使用%5.2f,表示默认占用5个位置,保留2为小数
1.4 进制转换
1 | int main(){ |
1 | 123 |
1.5 scanf函数
1 |
|
1 | 10 |
注意:
1. 运行后仅在第一个scanf进行了阻塞,即输入值 赋给 i
2. 为什么第二个scanf没有阻塞?因为当第一次scanf时,输入10,敲下回车后,scanf在读取过程中,输入缓冲区存值为10\n,scanf设置为%d将读取该缓冲区内的整形即10,当步过第一scanf后输入缓冲区的值为\n。而scanf函数在读取int、float、str时会忽略'\n'、空格(忽略指scanf函数执行时会首先删除这些字符,再阻塞),所以在第二个scanf使用%c会直接读取缓冲区的换行符\n,导致输出c为换行
3. 解决方式:getchar()消耗输入缓冲区中的换行符或空字符串
评论


