文章目录

  • ​​2.表达式语句​​
  • ​​4.if语句​​
  • ​​5.while语句​​
  • ​​6.for​​
  • ​​7.switch语句​​
  • ​​9.go to语句​​
  • ​​10.条件表达式​​

2.表达式语句

++i;
这条语句没有赋值操作符,但是它是一条合理的表达式语句;
++操作将增加变量a的值,这就是他的副作用side effect。

4.if语句

  • C语言的if语句和其它语言的if语句只有一个差别:C不具有布尔类型,而是用整型来代替——零值表示假,非零值表示真。
(1)表达式x>3的值将是0或1
if (x>3)
...
else
...

(2)整型变量也可以用于表达式。其比较的结果(0或者1)首先保存于一个变量中。
result=x>3;
if (x>3)
...
else
...
  • if语句的条件表达式中的常量写在左边,以防因为疏忽造成难以查找的错误
  • if 和 else 的配对准则是 : else 与距离它最近的同一个作用域内的没有被配对的 if 进行配对。

5.while语句

  • break,continue与while的关系
while (expression)
statement

(第4章)语句_if语句

若循环体内执行了continue语句,循环体内的剩余部分便不再执行,而是立即开始下一轮循环;
用法:当循环体只有遇到某些值才会执行的情况,continue很好用
while (ch==getchar()!=EOF)
{
if (ch<'0'||ch>'9')
continue;
/*仅处理数字*/
}

若循环体内执行了break语句,循环就将永久性地退出;
eg:处理一个以负值作为结束标志的值
while (scanf("%f", &value)==1)
{
if (value<0)
break;
/*处理非负数*/
}
等价于
while (scanf("%f", &value)==1 && value>=0)
{
}
eg2:丢弃当前输入行的剩余字符:
while ((ch=getchar())!=EOF && ch!='\n')
{
;
}

6.for

  • for如果省略条件部分,则表示测试的值始终为真;
for (expr1;expr2;expr3)
statement;

expr1:初始化部分;
expr2:条件部分;
expr3:调整部分;

(第4章)语句_while语句_02

for循环中的continue语句将跳过循环体的剩余部分,直接回到调整部分;

7.switch语句

  • expr必须是整型值
switch (expr)
statement
  • 不用break的eg
计算一个输入中字符、单词和行的个数。
每个字符都必须计数,但是空格符和制表符同时也作为单词的终止符使用。所以,字符计数器的值和单词计数器的值都必须增加。
此外,还有换行符,这个字符是行的终止符,同时也是单词的终止符。所以出现换行符的时候,三个计数器的值都必须增加。
switch (ch)
{
case '\n':
lines+=1;
//继续
case ' ':
case '\t':
words+=1;
//继续
default:
chars+=1;
}

9.go to语句

  • go to语句语法
go to 语句标签;
使用go to语句,则必须在你希望跳转的语句前面加上语句标签;
语句标签就是:标识符后面加个冒号,包含这些标签的goto语句可以出现在同一个函数中的任何位置;
  • goto语句可以跳出多层嵌套的循环
while (condition1)
{
while (condition2)
{
while (contion3)
{
if (some disaster)
go to quit:
}
}
}
quit:
....;

如果想要避免使用goto语句的话,还可以使用的一种方法(情况较复杂)是:
在你所希望退出的所有循环时,设置一个状态标志,但这个状态标志在每个循环中都必须进行测试:
enum {EXIT, OK} status;
.......
status=OK;
while(status==OK && condition1)
{
while (status==OK && condition2)
{
while (condition3)
{
if (some disaster)
{
status=EXIT;
break;
}
}
}
}

还有一种方法是:把所有循环放到一个单独的函数里,当灾难降临到最内层的循环时,可以使用return
离开该函数
  • eg:用loop语句实现1-100之间所有整数的累加和
#include <stdio.h>

void main(void)
{
int num=0,i;
int sum=0;

loop:
sum+=num;
num++;
if (sum<101)
goto loop;
printf(:%d,sum);

sum=0;
//与for循环结果一致
for (i=0;i<101;++i)
sum+=i;
printf(:%d,sum);
}

10.条件表达式

  • 表达式 1 ? 表达式 2: 表达式 3;
    条件表达式的含义为, 如果表达式 1 为真, 那么条件表达式的值取表达式 2 的值, 否则条件表达式的值取表达式 3 的值。

参考:<C和指针>,<C语言进阶重点、难点与疑点解析>