④ C语言的语句和程序的基本结构

目录

1. C语言的语句和程序的基本结构

1.2 语句的分类

2. 程序的三种基本结构

2.1 关系运算符和关系表达式

2.2 逻辑运算符和逻辑表达式

2.3 if 语句详解

2.3.1 if 语句的三种形式

2.3.2 if 语句的嵌套

2.4 条件运算符和switch语句

2.4.1 条件运算符

2.4.2 switch 语句

2.5 循环控制

2.5.1 概述、goto、while、do while 语句精解

2.6 while 语句

2.7 do while 语句

2.8 for语句精解

2.8.1 for 语句的一般形式

2.8.2 for 语句实际操练

2.8.3 for 语句的主要说明


1. C语言的语句和程序的基本结构

1.2 语句的分类

一行 C 程序 后面是 ; 那就是一条语句。

main 开始顺序从上往下执行,C 语言包含其他语句。

  • 5类语句:
    • 控制语句:控制程序的执行流程,在某个条件下执行某条语句。有9种控制语句
    • 函数调用语句:由一个函数调用末尾是 ; 的语句 如 printf(); 语句。
    • 表达式语句:由一个表达式构成的语句 末尾是 ; 如 3+5;
    • 空语句:就一个 ; 没什么用,但是语法是合规的
int a;
a = 3;		// 赋值表达式,末尾增加个分号,从而构成一条语句。这也是一条表达式语句。

在 C 语言中 所谓的语句就是后面有 ;; 是语句不能缺少的部分。

i = 1		// 表达式
i = 1;		// 语句

所以,表达式+ ; = 语句

// 复合语句如下,{}后面不用加 ; 
{
    int x1;
    x1 = 1;
    int y1;
    y1 = 1;
}

注意点:C语言 允许在一行上写几个语句。C语言也允许一个语句拆开在几行写,上一行用 \ 结尾,紧接下一行,这两行构成,一个完整行。

int x1; x1 = 1; int y1; y1 = 1;
printf("上面\
下面\n");

=>
    上面下面

2. 程序的三种基本结构

  • 顺序结构:从上到下操作

  • 选择结构:

    • 按照条件实现的情况进行对应的操作

    • 补充,多分支选择结构
  • 循环结构:
    • 当型循环结构,先判断条件P,才决定是否决定执行A操作,反复的执行A操作,一直到P条件为假的时候才停止循环。程序从下面的出口出去。

    • 直到型循环结构,先执行A操作,再判断条件P是否为真,若为真则继续执行A操作,一直到条件P为假。

2.1 关系运算符和关系表达式

关系运算其实就是比较运算,将两个值进行比较,判断比较结果是否符合条件。

C 语言中提供了6种关系运算符。

  • 优先级相同(高)(关系运算符)
    • < 、<=、>、>=
  • 优先级相同(低)(关系运算符)
    • ==、!=

  • 算术运算符 > 关系运算符 > 赋值运算符

c > a + b;		// c > (a+b);
a > b == c;		// (a+b) == c;
a == b < c;		// a == (b < c)
a = b > c;		// a = (b > c)

关系表达式 的值是一个 逻辑值,逻辑值就是真或者假。

在 C 语言 中,"真" 表示 true 表示,也可以用 1 表示,"假" 用 false 表示,也可以用 0 表示。

true 等于 1,false 等于 0;所以可以认为,关系表达式的值是 0 或者 1,也可以认为表达式的值是 true 或者 false 。

printf("5>3 的值为 %d\n",5>3);
 
=>
    5>3 的值为 1
if (true == 1)
{
    printf("true == 1");
}

=>
    true == 1
a = 3, b = 2 , c = 1;
(a>b) == c		// true == c ===> true
b+c<a 			// (b+c) < a ===> false,0

2.2 逻辑运算符和逻辑表达式

  • 逻辑表达式:
    • 用逻辑运算符 将 关系表达式 联系起来。

  • 逻辑表达式和关系表达式一样,也是 "真","假" 或者 1 和 0。
  • !(非) > 算术运算符 > 关系运算符 > && 和 || > 赋值运算符
    • && 逻辑与 (相当于其他语言中的AND)

    • || 逻辑或 (相当于其他语言中的 OR)

    • ! 逻辑非 (相当于其他语言中的 NOT)

  • 常见写法特殊写法

逻辑与 、逻辑或 都是双目运算符,双目运算符(有两个运算量位于两侧)

逻辑非 是单目运算符,这个运算分量放在 ! 的后面比如 !(a>b)。

描述:

a && b : 若a和b都为真,则 a && b 都是真,否则为假。

a || b :若a和b有一个为真,那么 a || b 都为真,否则为假。

!a : 若 a 为真,则 !a 为假,若a为假,那么!a 为真。

进行逻辑判断的时候,不等于0的都是认为是真。

if (3)

总的来说,由系统给出的逻辑运算结果不是0就是1,而在逻辑表达式中,作为参加逻辑运算的运算对象,是0就是假,非0就是真。

if (4 && 5) 真
if (3)      真
!a && b || x > y && c
    // 表达式从左到右
( ((!a) && b) || (x > y) && c ) 

常见写法:

(a  > b) && (x > y) 	// a>b && x > y
(a == b) || (x ==y) 	// a == b || x == y
(!a) || (a>b)  			// !a || a > b

特殊用法:

实际上,逻辑运算符的两侧可以是任何类型的数据,比如说 字符型数据、实型数据、甚至是指针。

'c' && 'd'		// 字符是ASCII码比较 ,这也是 真

逻辑表达式求解中,不是所有的逻辑运算符都会被执行,只有在必须执行下一个逻辑运算符才能求出表达式的结果时,才执行该运算符。

2.3 if 语句详解

2.3.1 if 语句的三种形式

if 语句(选择结构的代表性语句),用来判断给定的条件是否满足,根据判断的结果(真,假)决定执行给出的两种操作之一。

要在条件满足时同时执行多条语句,必须用 {} 把这些语句括起来构成复合语句。

if 语句可以单独使用,不需要 else,但是else语句不能单独使用,必须和if语句配对使用。

  • if (表达式) 语句;

  • if (表达式) {语句1} else {语句2;}

  • if (表达式) {语句1} else if {语句2;} ... ... else {语句n;}

示例:

int x = 4;
if (x > 1)
    printf("x > 1");
	printf("这时第二条语句"); 	// 由于只会执行到第一个的 ; 结尾,所以该行是不能被执行的,
							// 执行第二行命令需要有 { } 
else if (x > 2)
    printf("x > 2");

int x = 4;
if (x > 1)
{
    printf("x > 1\n");
    printf("这时第二条语句\n");
}
else if (x > 2)
    printf("x > 2");
int num = 400:
int cost = 0;
if (num > 500)
    cost = 1;
else if(num > 300)
    cost = 2;
else if(num > 100)
    cost = 3;
else 
    cost = 4;

说明 if 后的小括号一般是 关系表达式 和 逻辑表达式。

if (x > 1 && x < 5)

=== 要分开。

表达式的扩展,如果表达式值为0;那么按 "假" 处理,如果表达式的值为非0,则按 "真" 处理。

if (15)
{
	printf("15\n");
}

=>
    15

表达式的类型不限于关系表达式和逻辑表达式,也可以是任意数值类型可以是实型、字符型。

if ('a')

2.3.2 if 语句的嵌套

if 里面又包含 if,或者多个if语句。

注意else的配对,else总是和上面的尚未配对的if语句配对。

if ()
    if () 语句1;
    else 语句2;
else
    if () 语句1;
    else 语句2;   

最好还是加上 { } ,明确else和那个if配对。

2.4 条件运算符和switch语句

2.4.1 条件运算符

条件运算符是 ? 和 : 组成的,判断第一部分是否为真,那么条件表达式就取第一个的值,否则就是后面的值。

条件运算符也称三目运算符,是C 语言中位唯一的一个三目运算符。

条件运算符从右到左。

实际使用频率不高,这是一个偶尔的写法,这只能进行简单的场合。

表达式1 ? 表达式2: 表达式3;
int a = 4, b = 5, max;
max = (a>b)?a:b; // max = a > b ? a:b; 条件运算符比关系运算符地
a > b ? a: c > d ? c : d 	// a > b ? a:(a>d?c:d)

2.4.2 switch 语句

switch 语句用于多分支选择结构,用的评率相对要高。

  • 说明:
    • switch 后边表达式一般都是 整型变量 或者 表达式,其他类型也允许,但是都很罕见。

    • 每个case后边的常量表达式必须互不相同,不然会出现编译错误

    • 各个case语句之间,case与default顺序没有影响。

    • 注意 不要忘记 break 否则后果严重,有些语言是不要求break,而 C 语言 需要。

      • 忘记break的话,会导致执行一个case中包含的语句后,流程继续会执行下一个case条件中包含的语句(而不管该case条件是否满足),也就是说从满足条件的case语句那里作为入口一直执行下去,除非遇到break语句,或者整个switch执行完毕。

    • case后面可以有多行语句,可以不用加上 { } ,会系统自动顺序执行本 case 后边的所有语句,一直到 break。

    • default 语句可以没有,当所有的case都不满足的时候,则整个switch都不被执行。
    • 多个case语句可以共用一组执行语句。
case 5:
case 6:
		1行或者多行语句
switch (表达式)
{
case 常量表达式1:
        {
            1行或者多行语句
        }
		break;
case 常量表达式2:
        {
            1行或者多行语句
        }
		break;
case 常量表达式n:
        {
            1行或者多行语句
        }
		break;

... ...        
default:
        1行或者多行语句
        break;
}

switch 后边的表达式的值若满足任何某个case的值,则执行该case后面的1行或者多行语句,一直遇到break停止,就跳出整个switch语句

当所有的case都不满足,则会执行default中包含的1行或者多行语句,然后跳出整个switch语句。

2.5 循环控制

2.5.1 概述、goto、while、do while 语句精解

循环控制语句:

  • goto:
    • 无条件转向语句,用来跳转到到某个程序位置进行执行。

    • goto 主要一般和 if 构成循环语句

    • 不能跨函数

goto 语句标号;

语句标号是一个标识符,只能由字母、数字、下划线三种字符组成,并且第一个字符必须是字母或者下划线,并且标识符不可以是系统中的保留字。

goto lablel;

goto 语句有一定的争议,要看实际的情况的需要。

从循环体内到循环体外,不推荐,破坏了结构化程序设计原则,除非万不得已。

示列:

goto 语句 需要 loop:

int i = 0, sum = 0;
loop:
if (i<= 100)
{
    sum = sum + i;
    i++;
    goto loop;
}
printf("%d\n",sum);

goto 语句的应用场合比较少,很多情况下会有其他的循环语句来取代 goto,同时注意不能跨函数

2.6 while 语句

  • 当型循环结构
  • 先判断表达式的值,如果是真就执行语句,同时如果表达式为假,那么循环体内的语句一次也不执行
  • 循环体中要有循环趋势于结束的语句
while (表达式) 要执行的语句

要执行的语句为多条时也就是复合语句的时候,用 { } 起来。

int i = 1, sum = 0;
while (i<=100)
{
    sum = sum+i;
    i++;
}
printf("%d\n",sum);

2.7 do while 语句

  • 直到型循环结构
  • 至少执行循环体内的语句一次,然后才判断是否满足,则继续执行循环体内的语句,一直到条件为假(条件不满足)
do 要执行的语句
while (表达式)
int i = 1, sum = 0;
do
{
    sum = sum + i;
    i++;
}
while (i<=100);

printf("%d\n",sum);

2.8 for语句精解

2.8.1 for 语句的一般形式

  • 执行过程
    • 先求解表达式1的值
      • 表达式1只会执行一次
    • 再求表达式2的值
      • ​​​​​​​若值为真(非0),则执行 for 语句中指定的内嵌语句,同时求解表达式3的值,反复运行步骤2,一直到表达式的2为假,这说明表达式1的值只执行一次。
      • 若表达式2为假(非0),则循环结束,程序执行for语句后面的其他程序

2.8.2 for 语句实际操练

for (表达式1;表达式2;表达式3) 内嵌的语句
for (循环变量赋初值;循环变量来结束条件;循环变量增加值) 内嵌语句

如:

int i, sum = 0;
for (i = 1; i <= 100; i++)
{
	sum = sum + i;
}
printf("%d\n",sum);

2.8.3 for 语句的主要说明

  • 表达式1可以省略,但其后面的,不能省略,当表达式1省略时,应该在for之前就给循环变量赋予初值,这种写法比较罕见。
  • 表达式2可以省略,也就是不判断循环条件,那么循环就会无终止执行下去了,这就必须要用 break 语句终止循环,这种写法也比较罕见。
  • 表达式3可以省略,循环变量会消失,必须要想办法保证该for循环正常结束,否则循环会无终止进行下去。
  • 可以省略表达式1,表达式3,只保留表达式2。
  • 三个表达式都可以省略:不设置初值,不判断条件(认为条件一直是真),循环变量不增加。这种写法也少见。
    • 导致一个无终止的执行循环体。

  • 表达式1可以设置循环变量初值,有可以设置与循环变量武官的其他表达式。
  • 表达式1和表达式3都可以是简单的表达式或者逗号表达式,不常用。
    • 表达式1执行一次,表达式3执行多次,循环都少次表达式3执行多少次。

  • 表达式2的值一般是关系表达式、或者是逻辑表达式,但是只要其值为非0,那就执行循环体

罕见写法:

int i, sum = 0;
for (i=1; ;i++)
{
    sum = sum + i;
    if (i >= 100)
        break;
}
int i,sum;
for (sum = 0, i = 1; i <= 100; )
{
    sum = sum + i;
    i++;			// 保证for循环正常结束的办法,这里放在内嵌语句中,没放在表达3 的位置
}
int i,sum;
sum = 0;
i = 1;
for (; i<=100; )
{
    sum = sum +i;
    i++;
}
for (;;) 		// 会被认为是真,一直执行内嵌的语句,
{
    // 会被无限次执行,这种循环体要终止,根据一定的条件增加 break;
}

// 这就像是
while (1)
{  
}
int i,sum;
sum = 0;
i = 1;				// i 需要初始值,顶替后边 for 语句中的表达式1
for (;;)			
{
    sum = sum + 1;
    if (i >= 100)	// 顶替的就是 for 语句中的表达式2
        break;
    i++;			// 顶替 for 语句中的表达式3的
}
int i, sum;
i = 1;
int j;
for (j = 4, sum = 0; i <= 100; i++)
{
    sum = sum +i;
}
int i, j = 1000, sum;
for (sum = 0, i = 1; i<= 100; i++, j--)
{
    sum = sum + 1;
}
printf("sum=%d\n",sum);
printf("j=%d\n",j);
int i, sum;
sum = 0;
for (i = 0; 8888; i++)
{
    sum = sum + i;
    if(i>100)
        break;
}
printf("sum = %d \n",sum);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值