表达式(Expression)
表达式=运算符+操作数
表达式必须有一个执行结果,这个结果必须是一个值,例如 3*4+5 的结果 17,a=c=d=10 的结果是 10,printf("hello") 的结果是 5(printf 的返回值是成功打印的字符的个数)
运算符
- 算术运算符→算术表达式
- 关系运算符→关系表达式
- 逻辑运算符→逻辑表达式
操作数
函数是被命名的可执行代码块,具有返回值的函数也可以用在表达式中,把其返回值作为构成表达式的操作数,以下为例子:
#include<iostream>
int main(int argc, char** argv)
{
int sum=printf("hello \n");
printf("sum=%d \n",sum);
return 0;
}
语句(Statement)
以分号; 结束的往往称为语句,而不是表达式,例如 3*4+5; 、a=c=d; 等
表达式语句
int Sum(int a, int b)
{
return a + b;
}
int main()
{
int a =0;
a;
1;
a + 1;
int b = 0;
b = a;
a == b;
a && b;
a = Sum(a, b);
return 0;
}
函数调用语句
函数调用语句:由函数调用后添加分号构成,一般形式为 函数名(实际参数表); 。执行函数调用语句,就是为函数传入实际参数,执行函数中的语句,并根据需要返回值的过程。函数调用语句的返回值也会被丢弃:
#include <stdio.h>
int Sum(int a, int b)
{
return a + b;
}
int main()
{
int a = 1;
int b = 2;
Sum(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
控制语句
- 条件判断语句(
if 语句, switch 语句) - 循环执行语句(
do while 语句,while 语句, for 语句) - 转向语句(
break 语句,goto 语句,continue 语句, return 语句)
复合语句
复合语句(compound statement)简称为语句块,它使用大括号把许多语句和声明组合到一起,形成单条语句。
语句块与简单的语句不同,语句块不用分号当作结尾。当出现语法上某处需要一条语句,但程序却需要执行多条语句时,就可以用到语句块。例如,可以在 if 语句中使用语句块,或者当循环体需要执行多条语句时,也可以使用语句块:
{
double result = 0.0, x = 0.0;
static long status = 0;
extern int limit;
++x;
if ( status == 0 )
{
int i = 0;
while ( status == 0 && i < limit )
{ }
}
else
{ }
}
如果语句块内需要有声明,通常会把声明放在语句块的头部,在其他语句之前。然而,C99 并不强制这么做,允许将声明放在语句块内的任何地方。
在语句块内声明的名称将具有语句块作用域 。换句话说,这些名称只有自声明点开始,一直到语句块结尾之前有效。在这个作用域内,这种声明会把在语句块以外声明的同名称对象隐藏起来。
同样地,动态变量的存储周期也被限制在语句块中它们生成的地方。这意味着,如果一个变量没有被声明为 static 或 extern,那么该变量的存储空间会在语句块结束之后自动被释放。
空语句
int main()
{
int i = 0;
for (; i < 20; i++)
{
;
}
return 0;
}
代码块(Blocks)
代码块概念
和上面提到的复合语句(语句块)其实是相同的概念,所谓代码块,就是由{ } 包围起来的代码。代码块在C语言中随处可见,例如函数体、选择结构、循环结构等。 【注意】一般来说代码块花括号后不用加; ,但结构体在定义时视为一条完整的语句,所以在花括号后加;
struct stu{
char *name;
int num;
int age;
char group;
float score;
};
?
|