C 语句
C 语句的作用和分类
-
控制语句
- if…else…
- for( ) …
- while( ) …
- do…while( ) …
- continue
- break
- switch
- return
- goto
-
函数调用语句
-
表达式语句
-
空语句 ;
- 作为流程的转向点
- 作为循环体
-
复合语句
- 又称代码块,语句项。
赋值语句
变量 赋值运算符 表达式
赋值运算符左侧应该是一个可修改的“左值”
左值意味着它可以出现在赋值运算符的左侧,它的值是可以改变的。
不是任何数据都可作为左值的,他必须被分配存储空间且其值可被修改。
赋值过程中的类型转换
- 跨类型赋值
- 浮点数赋给整数时,浮点数取整,舍去小数部分(取整)
- 整数赋给浮点数时,数值不变,以浮点数的形式赋值(加零)
- 字符型数据赋给整型变量时,将ACSII码存入其中(ACSII)
- 实型数据赋值
- double类型数据赋给float类型时,只取7位有效数字,然后赋值(截取)
- float类型数据赋给double类型时,数值不变,扩展到15位有效数字(加零)
- 整型数据赋值
- int类型数据赋值给short类型时,只将低字节原封不动赋值(截断)
- short类型数据赋值给int类型时,数值不变,原封不动赋值(不断)
总结:
- 实型数据之间或是整实之间相互赋值,先类型转换在赋值。
- 整型数据之间赋值,则是按存储单元中的存储形式直接截取。
数据的输入输出
scanf 函数
scanf() 函数从终端输入的三个数据分别送到地址为&a,&b,&c的三个存储单元中,也就是赋值给变量a,b,c
格式声明为"%f%f%f",则输入三个数分别用空格隔开,回车隔开也行。如用其他符号就会出错。
printf 函数
%7d,7为指定域宽,不足7列补空格(右对齐),加个负号左对齐。超出7列不作为。
预处理指令#include
在对程序进行预编译预处理时,系统会自动把该头文件的内容调用出来,取代本行的#include指令,使之成为程序的一部分。
尖括号<>和双引号“ ”两种形式有什么区别?
- #include"stdio.h"
使用双引号“ ”,编译系统自动到代码保存路径去寻找,如果找不到,才会使用标准方式查找,所以这种一般是用于自定义头文件。
- #include<stdio.h>
使用尖括号<>,代表编译系统会自动到编译器安装路径的子目录中寻找,这种被称为标准方式。如下图笔者vs2019的头文件所在位置为
格式字符
-
%d 格式符
在格式声明中指定域宽(所占列数),如"%5d",输出区域占5列,右对齐。
-
%c 格式符
-
%s 格式符
-
%f 格式符
在格式声明中指定域宽和小数位数,如"%m.nf",则表示指定数据占m列,其中小数占n列。(多余位数四舍五入)
使用%f输出时要注意数据本身能提供的有效数字,如float最多提供7位有效数字,double最多提供15位有效数字。
%m.nf使数据右对齐,%-m.nf使数据左对齐
-
%e或%E 格式符
%e或%E 代表以指数形式输出实数。
一般编译器会自动规定输出数字的小数部分位6位,指数部分为5位。(vs2019里指数部分占4列,如e+02)
且以科学计数法的形式输出(即有效部分的整数部分占1位,小数部分占6位),如:
- %i 格式符
与%d同义。
- %o 格式符
按8进制位输出。
- %x或%X 格式符
按16进制位输出。
1 2 3 4 5 6 7 8 9 10 a b c d e f
- %u 格式符
按10进制输出无符号数 unsigned int
- %g 格式符
使用%g来输出浮点数,使浮点数自动选择%f或%e的形式输出,目的是使得输出域宽最短,不输出无意义的0