选择与循环语句

本文详细介绍了C语言中的选择结构(if、switch)、循环结构(while、do-while、for),包括各种形式的if语句、条件运算符、switch语句的用法,以及循环结构的控制语句break和continue。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录


前言

C语言是结构化的程序设计语言,包括顺序结构、选择结构、循环结构,我们可以选择if、switch语句实现选择结构,使用for、while、do while语句实现循环结构


一、选择结构程序设计

应用程序在执行过程中可能会遇到多种不同的情况,程序需要依据指定的条件执行操作,用来实现这种情况的语句通常称为选择结构语句或分支结构语句。

1.if语句的多种形式

第一种形式;

if(表达式)语句;

语义:即如果表达式的值为真,则执行其后的语句。

if(a<b) 
a=b

如果a<b,则将b的值赋给a

第二种形式

if(表达式)

语句1;

else

语句2;

语义:如果表达式值为真则执行语句一,否则执行语句2。

if(a>b)
  printf("%d\n",a)
else
  printf("%d\n",b)

若a>b则打印a,若b更大则打印b

//利用if语句判断输入数字为奇数还是偶数
#include <stdio.h>

int main() {
    int num;

    printf("请输入一个数字:");
    scanf("%d", &num);

    if(num % 2 == 0) {
        printf("%d是一个偶数。\n", num);
    } else {
        printf("%d是一个奇数。\n", num);
    }

    return 0;
}

第三种形式

当有多种分支选择时,可采用if...else if...if语句

if(表达式)

语句1;

else if(表达式)

语句2;

else if(表达式)

语句3;

,,,

else

语句n;

语义:依次判断所有表达式的值,当出现某个值为真时,则执行对应的语句,并在执行结束后跳出if语句继续执行程序。


if(a<32)

 printf("This is a control character\n")

else if(c>='0' && c<='9')

 printf("This is a digit\n")

else if(c>='A' && c<='Z')

 printf("This is a letter")

根据输入的不同内容输出类型判断

2.在使用if语句时应注意的问题

1.if关键字后可以是任意类型的表达式,甚至可以是一个变量。只要值为非零,都能执行后面的语句。

2.if()后不加分号,但语句结束后必须加分号。

if() //不需要分号

语句;//分号不能丢

3.if语句只能执行接下来的一条语句,如需执行多条语句,则需在多条语句外用大括号括起来

if(a>b)

{
语句1;

语句2;
} //大括号保证语句组都可执行,若去掉则语句2单独存在,不在if语句的执行范围内

3.if语句的嵌套

当if语句的执行语句又是if语句时则构成if语句的嵌套。

特别需要注意的时else与if的配对问题

C语言中规定esle总是与它距离最近的一个if优先配对

if (表达式1)

  if(表达式2)

       语句1;

else
       语句2;//此处陷阱为else虽与第一个if对齐,但实际上与它配对的为内层的if



//若要else身处外层if语句,可改写为


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

else   
          语句2;

//此时else与第一个if配对




4.条件运算符

条件运算符是一个三目运算符。

基本形式为:

表达式1?表达式:表达式3

实际理解起来还是很简单的,语义为先判断表达式1的值,若值为真则把表达式2的值作为条件表达式的值,若表达式1的值为假则把表达式3的值作为条件表达式的值。

max=(a>b)?a:b;

//利用条件语句可写为

if(a>b)

max=a;

else

max=b;

需要注意的地方:条件运算符的运算优先级低于关系运算符和算术运算符,但大于赋值运算符。

5.switch语句的用法

一般形式:

switch(表达式){

case 表达式1:

语句1;

case 表达式2:

语句2;

...

default:

语句n+1

}

语义:计算表达式的值,并逐个与以下的常量表达式值相比较,当值相等时则执行后面的语句。之后不再进行判断,后面的语句也全部执行(除非遇到break语句,将跳出整个switch 语句)。当没有相等的值时则执行default后的语句。

#include <stdio.h>

int main() {
    int num, i;

    printf("请输入1234567中的一个数字:");
    scanf("%d", &num);

    switch(num) {
        case 1:
            printf("今天是周一。\n");
            break;
        case 2:
            printf("今天是周二。\n");
            break;
        case 3:
            printf("今天是周三。\n");
            break;
        case 4:
            printf("今天是周四。\n");
            break;
        case 5:
            printf("今天是周五。\n");
            break;
        case 6:
            printf("今天是周六。\n");
            break;
        case 7:
            printf("今天是周日。\n");
            break;
        default:
            printf("输入有误,请输入1234567中的一个数字。\n");
    }

    return 0;
}

6.使用Switch语句时需要注意的地方

1.switch语句中表达式一般为整型,包括字符型和枚举型。

2.case后的值不能相同。

3.case后可以有多条语句,无需大括号即可全部执行。

4.default不是必须存在的,可以不用。

二、循环结构程序设计

循环语句能够使计算机反复执行一组语句,直到满足某个特定的条件。是程序中一种重要的控制结构。

1.while语句的用法

一般形式:

while(表达式)语句;

语句;

//下面是一段计算1到100之间所有整数和的代码

#include <stdio.h>
int main() {
    int sum = 0;
    int i;
    printf("请输入想要计算的数字范围(1-100):");
    scanf("%d", &i);
    while(i >= 1 && i <= 100) {//在1到100范围内一直循环,直到i=101结束循环
        sum += i;
        i++;
    }
    printf("1到%d之间所有整数的和为:%d\n", i-1, sum);
    return 0;
}

2.do...while语句的用法

一般形式:

do

  语句;

while(表达式);

它与while语句的区别则在于先执行一次循环中的语句,再判断表达式是否为真,若为真则继续循环,若为假则终止循环

//利用do...while语句计算1到100的整数和
#include <stdio.h>

int main() {
    int sum = 0;
    int i;

    printf("请输入想要计算的数字范围(1-100):");
    scanf("%d", &i);

    do {
        sum += i;
        i++;
    } while(i <= 100);

    printf("1到%d之间所有整数的和为:%d\n", i-1, sum);

    return 0;
}

3.for语句的用法:

一般形式;

for(表达式1;表达式2;表达式3)语句;

执行过程:

1.求解表达式1

2.求解表达式2,若为真则执行语句,若为假则结束循环

3.求解表达式3

通常出现的形式为:

for(循环变量赋初值;循环条件;循环变量增量)语句;

如下图

for(i=1;i<=100;i++) sum=sum+i 

4.使用for语句需要注意的地方

1.for语句表达式中为分号不为逗号。

2.三个表达式都可省略,但分号不可省略。

    省略表达式1则表示不对循环控制变量赋初值。

    省略表达式2则表示循环始终成立。

    省略表达式3则表示不对循环控制变量进行操作,可在循环体中加入修改循环控制变量的语句。

5.goto语句

在C语言中,goto 语句是一种控制流语句,它的基本功能是在程序中跳转到已标记的语句。使用 goto,可以实现快速返回到之前的位置,继续执行之后的代码。
这里是一个简单的例子:

#include <stdio.h>

int main() {
    printf("hello bitn");
    goto again;  // 跳转到标签 again 所在的行
    printf("你好n");
    again:
    printf("hehen");
    return 0;
}

运行这段代码,你会看到输出是 hello bitn 和 hehen,你好n 被跳过了。
虽然 goto 语句的功能很强大,但是它也会带来一些问题,尤其是当在复杂的循环和条件语句中使用时。因为 goto 可以跳过中间的代码,直接返回到之前的位置,这可能会导致程序流程难以跟踪,使得程序难以理解和维护。因此,在实际的编程实践中,建议尽量避免使用 goto 语句。

6.break和continue语句

在C语言中,break 和 continue 都是控制流语句,用于改变程序的执行流程。


break 语句:


break 语句用于立即退出当前所在的循环或switch语句。当执行到 break 语句时,会立即停止当前循环的执行,并跳转到循环外的下一条语句继续执行。
示例代码:

#include <stdio.h>

int main() {
    for(int i = 1; i <= 5; i++) {
        if(i == 3) {
            break;  // 跳出循环
        }
        printf("i = %d\n", i);
    }
    printf("循环结束,i = %d\n", i);
    return 0;
}

运行这段代码,你会看到输出是:

i = 1
i = 2
i = 3
循环结束,i = 3

continue语句

continue 语句用于跳过当前循环的剩余部分,并直接进入下一次循环的执行。当执行到 continue 语句时,会停止当前循环当前轮的剩余执行,并跳转到循环的开始继续执行下一轮循环。
示例代码:

#include <stdio.h>

int main() {
    for(int i = 1; i <= 5; i++) {
        if(i == 3) {
            continue;  // 跳过当前循环剩余部分,直接进入下一次循环
        }
        printf("i = %d\n", i);
    }
    printf("循环结束,i = %d\n", i);
    return 0;
}

输出结果为:

i = 1
i = 2
i = 4
i = 5
循环结束,i = 5

需要注意的是,break 和 continue 语句在for循环、while循环和do-while循环中都可以使用,但不能在if语句或其他控制语句中使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值