分支与循环

分支与循环

分支

if多分支

根据不同的条件做不一样的事情,但是要求条件之间存在:其中某一个条件成立了,另外的其他条件一定不会成立

语法:
if 条件语句1:
代码段1
elif 条件语句2:
代码段2
elif 条件语句3:
代码段3

else:
代码段N

if score >= 90:
    print('A')
elif score >= 80:
    print('B')
elif score >= 60:
    print('C')
else:
    print('D')

if嵌套

num = 20
if num % 2 == 0:
    print('偶数')
    if num % 4 == 0:
        print('4的倍数')
else:
    print('奇数')

循环

for

语法:
for 变量 in 序列:
循环体

说明:
1)for、in - 关键字;固定写法
2)变量 - 变量名
3)序列 - 容器型数据类型的数据,例如:字符串、列表、字典、元组、集合、迭代器、生成器、range等
4)循环体 - 和for保持一个缩进的一条或者多条语句;循环体就是需要重复执行的代码

执行过程:
让变量去序列中取值,一个一个的取,取完为止,每取一个值就执行一次循环体。(序列中元素的个数决定了循环的次数)

for x in 'abc=-':
    print('+++', x)

range函数 - 产生一个指定范围的数字序列

range(N) - 产生[0,N)的数字序列, N必须大于0,每次数字增加1

for x in range(5):
    print('x1:', x)

range(M,N) - 产生[M,N)的数字序列,M < N, 每次数字增加1

for x in range(-10, 10):
    print('x2:', x)

range(M,N,step) - 产生[M,N)的数字序列,每次数字增加step

for x in range(1, 10, 2):
    print('x3:', x)

while

语法:
while 条件语句:
循环体

说明:
1)while - 关键字;固定写法
2)条件语句 - 任何有结果的表达式
3)循环体 - 和while保持一个缩进的一条或者多条语句;循环体就是需要重复执行的代码段

执行过程:
先判断条件语句是否为True,为True就执行循环体,执行完再判断条件语句是否为True,为True就执行循环体,…
以此类推,直到判断条件语句的时候结果为False,整个循环就结束。

num = 1
while num < 101:
    print(num)
    num += 1

for循环和while循环的选择

当循环次数不确定的时候使用while循环,否则使用for循环

from random import randint
num = randint(0, 99)    # 产生0到99的随机整数并且保存到变量num中
i_num = int(input('请输入数字(0~99):'))
while i_num != num:
    if i_num > num:
        print('大了,再小点儿')
    else:
        print('小了,再小点儿')
    i_num = int(input('请输入数字(0~99):'))
print('恭喜你!猜对了')

循环关键字

1.continue和break

continue和break只能在循环体中使用
continue: 结束一次循环(当执行循环体的时候遇到continue,当次循环结束,直接进入下次循环的判断)
break:结束整个循环(当执行循环体的时候遇到break,整个循环直接结束)

# continue
for x in range(5):
    if x % 2:
        continue
    print(x)

# break    
pw = '123456'
while True:
    i_pw = input('请输入密码:')
    if i_pw == pw:
        break

2.else

python中完整的for循环和while循环后面都有else结构,else结构的存在不影响原循环的执行。
for 变量 in 序列:
循环体
else:
代码段

while 条件语句:
循环体
else:
代码段

当循环是因为遇到break而结束的,那么循环后面else里面的代码不会执行。
循环结束的时候不是因为遇到break,那么else后面的代码段会执行

for x in range(5):
    print(x)
    if x == 3:
        break
else:
    print('else中的代码')

作业

基础题

  1. 根据输入的成绩的范围打印及格 或者不及格

    score = int(input('请输入成绩:'))
    if score >= 60:
        print('及格')
    else:
        print('不及格')
    
  2. 根据输入的年纪范围打印成年或者未成年,如果年龄不在正常范围内(0~150)打印这不是人!

    age = int(input('请输入年龄:'))
    if 18 <= age <= 150:
        print('成年')
    elif 0 <= age < 18:
        print('未成年')
    else:
        print('这不是人!')
    
  3. 输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息a-b的结果不是奇数

    a = int(input('请输入a:'))
    b = int(input('请输入b:'))
    if (a-b) % 2 == 1:
        print(a-b)
    else:
        print('a-b的结果不是奇数')
    
  4. 使用for和while循环输出 0~100内所有3的倍数。

    for x in range(0, 100, 3):
        print(x)
    
    i = 0
    while i < 100:
        print(i)
        i += 3
    
  5. 使用for和while循环输出100~200内个位数或者十位数能被3整除的数。

    for x in range(100, 201):
        if x % 10 % 3  == 0 or x // 10 % 10 % 3==0:
            print(x)
    
    i = 100
    while i < 201:
        if i % 10 % 3 == 0 or i // 10 % 10 % 3 == 0:
             print(i)
        i += 1
    

进阶题

  1. 使用循环计算1*2*3*4*...*10的结果。

    result = 1
    for x in range(1, 11):
        result *= x
    print(result)
    
  2. 统计100以内个位数是2并且能够被3整除的数的个数。

    count = 0
    for x in range(2, 100, 10):
        if x % 3 == 0:
            count += 1
    print(count)
    
  3. 输入任意一个正整数,求他是几位数?

    注意: 这儿不能使用字符串,只能用循环

    count = 1
    num =int(input('请输入一个数:'))
    while num // 10 > 0:
        count += 1
        num //= 10
    print('他是', count, '位数')
    
  4. 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是

    ⼀个⽔仙花数,因为 1³ + 5³ + 3³ 等于 153。

    for x in range(100,1000):
        ge = x % 10
        shi = x // 10 % 10
        bai = x // 100
        if x == ge ** 3 + shi ** 3 + bai ** 3:
            print(x)
    

挑战题

  1. 判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)

    num = 7
    for x in range(2, num):
        if num % x == 0:
            print(num, '不是素数')
            break
    else:
        print(num,'是素数')
    
  2. 求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)

    num1 = 0
    num2 = 1
    num = 1
    in_p = int(input("请输入一个数:"))
    if in_p == 1:
        print(1)
    else:
        for x in range(1, in_p):
            num = num1 + num2
            num1 = num2
            num2 = num
    
        print(num)
    
  3. 输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

    for i in range(10):
        for j in range(10):
            print(i, '*', j,'=',i*j,sep='',end=' ')
            if j == 9:
                print('')
    
  4. 这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)

    for big in range(34):
        for medum in range(51):
            for small in range(0, 101, 2):
                if 100 == big + medum + small and 100 == 3 * big + 2 * medum + small/2:
                    print('大马', big, '匹,','中马', medum, '匹,','小马', small, '匹',sep='')
    
<think>好的,我现在需要回答用户关于C语言分支结构和循环结构的语法及用法的问题。用户要结构清晰,分步解释,并提供示例,同时生成相关问题。首先,我需要回顾自己掌握的C语言知识,并查看用户提供的引用内容,确保回答准确且符合参考资料。 首先,用户提到的引用[1]、[3]、[4]、[5]涉及分支循环结构的基础知识。引用[1]概述了三大结构,引用[3]详细讲解了分支语句如if和switch,以及循环结构如while、for、do-while。引用[4]强调了循环结构在处理重复任务的优势,而引用[5]提供了switch的示例代码。这些内容都是回答的重要依据。 接下来,我需要将分支循环结构分开讲解。分支结构包括if语句和switch语句。对于if语句,要说明基本语法、else的使用、多条件分支和悬空else问题。引用[3]中提到了这些点,特别是嵌套if和悬空else的问题,需要解释清楚。然后,switch语句的结构、case和default的顺序,以及break的作用,引用[5]中的示例可以很好地说明这一点。 循环结构部分,用户需要覆盖while、for和do-while循环。引用[2]和[4]讨论了循环的应用场景和基本工作原理,比如表达式控制重复执行。需要分别说明每种循环的语法、适用场景,并给出示例代码。例如,while循环适合不确定循环次数的情况,for循环适合已知次数,do-while至少执行一次。同时,要注意对比它们的不同,如引用[3]提到的for和while的区别。 在编写示例代码时,要确保语法正确,比如if后的条件需要括号,循环结构中的变量初始化和更新。例如,在switch的例子中,每个case后面是否有break会影响流程,引用[5]中的例子展示了正确的使用方式。另外,循环示例要包括基本的变量初始化、条件判断和迭代步骤。 用户可能容易混淆的地方,比如switch中不加break导致的贯穿现象,或者do-whilewhile的区别,需要特别指出。同时,引用[4]提到的使用循环代替多重分支来处理重复任务的情况,可以作为一个应用场景的例子,比如统计休息日的天数。 最后,生成的相关问题需要围绕分支循环的扩展知识,比如优化、应用场景、对比分析等,确保问题具有针对性,帮助用户深入理解。 现在需要检查各部分是否符合要:使用中文,数学公式用$...$,独立公式用$$...$$,但当前问题可能不涉及数学公式,所以可能不需要。代码块使用正确的语法高亮,例如用python的示例,但用户的问题是关于C语言,所以需要调整代码块的语言标识。同时,确保引用标识正确添加,比如在提到分支结构时引用[^1],循环结构引用[^2][^4]等。 可能存在的遗漏点:是否覆盖了所有类型的循环分支结构?是否每个部分都有示例代码?是否引用了正确的资料?例如,在讲解switch时引用[^5],讲解循环结构时引用[^4]和[^2]。确保没有错误,比如代码中的语法错误,或者解释不清晰的部分。 总结,回答的结构应该分为分支结构和循环结构两部分,每部分下分小点讲解语法、用法、示例,最后生成相关问题。现在开始组织内容,确保清晰易懂,符合用户要。</think>### C语言分支循环结构详解 #### 一、分支结构 分支结构根据条件判断选择执行不同的代码块,主要包括 `if` 和 `switch` 语句。 1. **`if` 语句** - **基本语法**: ```c if (条件表达式) { // 条件为真时执行的代码 } else { // 条件为假时执行的代码 } ``` - **多条件分支**(嵌套 `if`): ```c if (条件1) { // 条件1为真时执行 } else if (条件2) { // 条件2为真时执行 } else { // 其他情况执行 } ``` - **悬空 `else` 问题**:`else` 始终最近的未匹配 `if` 配对[^3]。 - **示例**:判断数字正负: ```c int num = 5; if (num > 0) { printf("正数"); } else if (num < 0) { printf("负数"); } else { printf("零"); } ``` 2. **`switch` 语句** - **语法**: ```c switch (表达式) { case 常量1: // 执行代码 break; case 常量2: // 执行代码 break; default: // 默认执行代码 } ``` - **注意**:`break` 用于跳出 `switch`,否则会“贯穿”执行后续 `case` 代码[^5]。 - **示例**:根据星期数输出名称(引用自[^5]): ```c int day = 3; switch (day) { case 0: printf("星期天"); break; case 1: printf("星期一"); break; // ... 其他case default: printf("输入错误"); } ``` --- #### 二、循环结构 循环结构用于重复执行代码块,包括 `while`、`for` 和 `do-while` 循环。 1. **`while` 循环** - **语法**: ```c while (条件表达式) { // 循环体 } ``` - **适用场景**:循环次数未知,例如读取用户输入直到满足条件[^2]。 - **示例**:计算1到5的和: ```c int i = 1, sum = 0; while (i <= 5) { sum += i; i++; } ``` 2. **`for` 循环** - **语法**: ```c for (初始化; 条件表达式; 更新) { // 循环体 } ``` - **适用场景**:循环次数已知,例如遍历数组[^3]。 - **示例**:打印1到5: ```c for (int i = 1; i <= 5; i++) { printf("%d ", i); } ``` 3. **`do-while` 循环** - **语法**: ```c do { // 循环体 } while (条件表达式); ``` - **特点**:至少执行一次循环体。 - **示例**:输入验证: ```c int num; do { printf("请输入正数:"); scanf("%d", &num); } while (num <= 0); ``` --- #### 三、对比应用场景 | 结构类型 | 适用场景 | |----------------|--------------------------------------------------------------------------| | **`if`/`else`** | 简单条件判断,多分支嵌套 | | **`switch`** | 多路分支且条件为离散值(如枚举、整数) | | **`while`** | 不确定循环次数(如文件读取) | | **`for`** | 已知循环次数(如数组遍历) | | **`do-while`** | 至少执行一次且需后续判断(如用户输入验证) | ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值