C语言程序设计-Chap.3


程序控制结构

1. 三种基本结构

  1. 顺序结构
  2. 选择结构
  3. 循环结构

2. 关系,逻辑,条件的相关语句

关系运算符

六个: < <= == > >=
注:在C语言中,==表示相等,=表示赋值,勿混淆

关系表达式

在C语言中,用 1 表示表达式为真,用 0 表示表达式为假
如:

  1. 表达式: 8>4 为真,值为1
  2. 表达式: 0==1 为假,值为0

这里引入一种语句: 条件运算符
写为:?:
如:

int a, b, x;
scanf("%d %d", &a, &b);
x = a > b ? a : b;

上述语句表示:
若a>b,则x=a,反之,则x=b

逻辑运算符

三个: ! && ||
分别表示:非,与,或

逻辑表达式

对于 ! 表达式,会对该表达式求值,以该值的否定为结果
对于 && 表达式,会对两侧表达式分别求值,只有两侧表达式值均为1时,整个表达式值才为1,否则均为0
对于 || 表达式,会对两侧表达式分别求值,只有两侧表达式值均为0时,整个表达式值才为0,否则均为1

短路特性(重点关注)

逻辑表达式求值时,只有系统判定必须计算下一个运算符才能得出表达式的值时,才会进行计算 (多绕的慌啊)

举个例子:

int a, b, c, x;
scanf("%d %d %d", &a, &b, &c);
x = a && b && c;

当上述例子输入时,第一个数值(即a的值)输入0时,则不会计算b && c这一部分的值,而会直接将x的值赋值为0

3. 顺序结构程序设计

自上而下,逐行运行

主要由以下部分组成:

  1. 赋值语句
  2. 复合语句
  3. 函数调用语句

赋值,函数调用在前面的章节已经有过叙述,这里仅对复合语句做简要说明

复合语句指一组语句,可以由 {} 框在中间

4. 选择结构程序设计

选择结构需要利用此前的关系,逻辑表达式来阐述条件

两种常用语句: if ; switch

if 语句

有三种形式:

  1. if:条件成立后执行
  2. if-else:条件成立则执行if后的语句,反之则执行else后的语句
  3. else-if:用于增加if-else中的条件个数

最完备的一种情况:

if(条件1){
    表达式1;
}
else if(条件2){
    表达式2;
}
...
else(条件n){
    表达式n;
}

switch 语句

用于实现多分支选择结构

switch(variable){
    case E1:
    ...
    ...
    break;
    case E2:
    ...
    ...
    break;
    ...
    default:
    ...
}

简而言之,通过对variable(即变量)的值进行判断从而决定要执行的语句
当variable==E1时,执行case E1中的语句
后续同理
如果variable的值不等于其中的任意一个case,则执行default中的语句

  1. 执行语句时,只有遇到 break} 才会终止,故这里推荐在每一个case后均加上break
  2. default并不是必须的,如果不加default,则variable不符合要求时不会执行任何语句
  3. variable不仅仅可以是数值,也可以是字符形式

5. 循环程序结构设计

与选择结构类似地,同样需要利用关系、逻辑表达式进行条件的阐述

常用语句: while ; for ; do-while

while 语句

while(condition){
    ...
    ...
}

即:当condition为真(即condition非零)时,执行while内语句,执行完毕后重新判断condition,直至condition为假


当执行语句时遇到诸如 break ; return ; goto 之类的语句时,会跳出while循环

for 语句

for(expr1 ; expr2 ; expr3){
    ...
    ...
}

这里需要做出一点说明:

  1. expr1 表示初始条件
  2. expr2 表示需要满足的条件
  3. expr3 表示每次执行完一次语句后要做出的改变

给出一例方便理解:

for(i=0;i<=50;i++){
    ...
    ...
}

上述语句表示:i 的初始值为0;每次执行完语句后 i 自增1,直到 i 大于五十时结束循环

  1. for结构中每个表达式都可以省略,但分号不可省略
  2. for结构和while结构可以互相转化,下属while语句与上述for语句等价
    expr1;
    while(expr2){
     ...
     ...
     expr3;
    }
  3. 特殊语句同样可以跳出for循环,如 break ; goto ; return

do-while 语句

do{
    ...
    ...
}while(condition);

与 while 的区别在于这种语句会先将语句执行一遍再判断

循环中的常见问题

  1. 循环可以相互嵌套,但一般不超过三层(会极大降低运行效率)
  2. 一般不用浮点数对循环进行控制,原因是浮点数存在误差,容易增减循环次数

以上

这篇博文就到这里~


文章作者: MUG-chen
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 MUG-chen !
  目录
加载中...