C语言的表达式与语句

C语言中,表达式是显示如何计算值的公式。变量是表示程序在运行过程中计算出的值,常量表示不变的值,它们是最简单的表达式。一般地,表达式为运算符和操作数的有效组合。C语言包括丰富的运算符组合,包括算术运算符、关系运算符和逻辑运算符等,对应的表达式也被称为算术表达式,关系表达式,逻辑表达式等。函数是被命名的可执行代码块,具有返回值的函数也可以用在表达式中,把其返回值作为构成表达式的操作数。

语句是C语言的关键特性之一,表示程序运行时执行的命令。C语言标准规定语句以;结尾,但是对于复合语句,它用大括号{}将多条语句包裹起来,强制编译器将其当作一条语句处理,结尾不需要;

C语言中语句包括以下几种,表达式语句,函数调用语句,复合语句,控制语句和空语句。

  • 表达式语句。由表达式添加分号;构成表达式语句。执行完表达式语句后,表达式的值会被丢弃,因此,若表达式不修改操作数的值,表达式语句就没有什么实际意义。对于无意义的表达式语句,使用gcc编译器时,设置-Wall选项,就可以statement with no effect的警告。一个表达式可以划分为多个子表达式,但是C语言并没有规定子表达式的执行顺序,例如(a+b)*(c+d)这样的式子就无法保证a+b是在c+d之前执行的,因此表达式的值不应依赖于子表达式的执行顺序,否则会出现在编译器间的不兼容问题。
/***************************************
 * expression.c                        *
 *                                     *
 * C语言中的表达式和表达式语句             *
 ***************************************/

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;
}

表达式语句

  • 函数调用语句。由函数调用后添加分号构成,一般形式为函数名(实际参数表);。执行函数调用语句,就是为函数传入实际参数,执行函数中的语句,并根据需要返回值的过程。函数调用语句的返回值也会被丢弃。
/*************************************
 * function_call.c                   *
 *                                   *
 * 函数调用语句                      *
 *************************************/
#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;
}

函数调用语句

  • 复合语句。复合语句由大括号包裹多条语句,强制编译器将其当作单独一条指令处理,常出现在选择、循环和其他需要执行多条语句但C语言语法却要求单独一条语句的地方。
/*************************************
 * compount_statement.c              *
 *                                   *
 * C语言中的复合语句                 *
 *************************************/
#include <stdio.h>

int main()
{
  int a = 5;
  int b = 3;

  //复合语句
  {
    int temp = a;
    a = b;
    b = temp;
  }

  printf("a = %d, b = %d\n", a, b);

  return 0;
}

复合语句

  • 控制语句。用于控制程序结构,支持选择、循环等结构方式,包括三类共九种:
    • 条件判断语句(if语句, switch语句)
    • 循环执行语句(do while语句,while语句, for语句)
    • 转向语句(break语句,goto语句,continue语句, return语句)
/**************************************
 * using_control_statement.c          *
 *                                    *
 * C语言中的控制语句                  *
 **************************************/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
 start:
  printf("Are you going to play a game? \nEnter 1 as Yes and 0 as No!\n");
  short selection = 0;
  scanf("%hd", &selection);

  /*switch 语句,根据输入值分0,1和其他分别处理*/
  switch (selection)
  {
  case 0:
    return 0;
  case 1:
    break;
  default:
    printf("Wrong input!\n");
    return 0;
  }

  srand((unsigned)time(NULL));
  int goal = rand() % 100;

  int guess = 0;
  /*while语句*/
  while (1)
  {
    printf("Guess which number in my hand. Enter -1 if you want to stop the game.\nPlease enter your guess: ");
    scanf("%d", &guess);

    if (guess == -1)
      break;

    /* if语句,判断条件根据结构进行处理*/
    if (guess > goal)
    {
      printf("Sorry, Your guess is bigger than my number!\n");
    }else if (guess < goal)
    {
      printf("Sorry, Your guess is smaller than my number!\n");
    }else
    {
      printf("Congratulations! You win!\n Enter -2 if you want to play again!");
      short isContinued = 0;
      scanf("%hd", &isContinued);
      if (isContinued == -2)
        goto start;
      else
        break;
    }
  }

  return 0;
}

控制语句
- 空语句。只有分号组成的语句,什么也不执行。

/***********************************
 * empty_statement.c               *
 *                                 *
 * C语言中的空语句                 *
 ***********************************/

int main()
{
  int i = 0;
  for (; i < 20; i++)
  {
    /*空语句*/
    ;
  }
  return 0;
}

空语句

参考文献

  1. K.N. King 著,吕秀峰 译. C语言程序设计-现代方法. 人民邮电出版社
  2. http://www.cnblogs.com/JCSU/articles/1303491.html
  3. http://baike.baidu.com/link?url=LuAbEZGVl2koSfWE2vEG0VDBNCrWHgCkmHZuxaEzSonXnh3PsJQ0SCpqDYKBgVttAmxiq4aPy3wozSTqO2P-C_
  • 14
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值