老九C 26~30 循环结构进阶 For, break, continue

本文详细介绍了`for`循环的基本语法和注意事项,包括如何初始化、判断条件和更新循环变量。同时,讨论了`break`语句在跳出循环时的应用,以及在猜商品价格游戏中的实现。此外,还探讨了`continue`语句在处理循环中的特殊情况,如统计负数输入的次数。最后,总结了循环结构的使用要点,并提出了用循环构造菱形图案的编程挑战。

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

  • for循环
  • break语法
  • continue语法

for循环

for是把循环三要素定在头上的while(初值,判断,更新)
语法
表达式1:变量初值 可省略
表达式2:判断条件 可省略
表达式3:循环变量的更新 可省略
分号不能省略 for(;?

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

const 常量/只读变量
帕斯卡命名法要求常量需要大写

const int NUM =100;

循环6个月的工资,计算平均工资

#include <stdio.h>

int main() {
    int i;
    double salary;
    double total_salary = 0;
    double avg_salary;
    for(i = 0; i < 6; i++)
    {
        printf("输入第%d个月工资\n", i+1);
        scanf("%lf", &salary);
        //累加
        total_salary += salary;
    }
    printf("%lf", avg_salary = total_salary / 6);
    
}

打印简易加法表:

int main() {
    int num;//创建数字变量
    
    printf("请输入一个数字:");  //录入数字
    scanf("%d", &num);
    
    int i;
    for(i=0; i<num; i++){
        if (i%2 == 0) {
            printf("%d + %d = %d\t", i, num - i, num);
        }
        if (i%2 == 1) {
            printf("%d + %d = %d\n", i, num - i, num);
        }
    }
 }

小结

for循环常见问题:

  1. 忘记定义循环变量或初始化
  2. 循环条件缺少时造成死循环
  3. 循环变量不更新可能造成死循环
  4. 不可省略分号

Break语句

跳出循环,执行循环之后的语句

循环输入玩家年龄,如果为负跳出循环
两种死循环 1. while(1) 2. for(;?

int main() {
    int age;
    while(1){
        printf("输入年龄\n");
        scanf("%d", &age);
        if(age<0){
            break;
        }
        
    }
}

猜商品价格的游戏

  1. 设定商品价格
  2. 用户输入猜测价格后,系统给出大小提示
  3. 如果在5轮内猜中,提示恭喜
    // 循环次数是多少,每猜一次加一
#include <stdio.h>
int price = 50;     //商品价格
int main() {
    int price = 50;     //商品价格
    int i;          //猜测次数
    for(i=0; i<5; i++){
        printf("你觉得值多少钱?\n");
        scanf("%d",&price);
        if(i == 4){
                printf("你没机会了sb\n");
                       break;
        }
        if(price < 50){
            printf("垃圾,猜小了\n");
        }
        if(price > 50){
            printf("垃圾,猜大了\n");
        }
        if(price == 50){
            printf("你牛逼\n");
            break;
        }
    }
}

上边那个应该用else if

老九答案:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main() {
    int price;       //目标价格
    int guessPrice;         //用户猜测商品价格
    int count = 0;          //用来记录猜测次数
    srand((unsigned)time(NULL));
    price = rand() * 1000 % 10000; //%1w生成四位数字
    for(;;count++)
    {
        printf("输入价格");
        scanf("%d", &guessPrice);
        if(guessPrice > price){
            printf("大了\n");
    }
        else if(guessPrice < price){
            printf("小了\n");
        }
        else{
            printf("对了\n");
            break;
        }
}
     printf("你猜了%d次\n", count+1);
    if(count+1<5){
        printf("牛逼");
    }

}

**输入性别m/M/f/F,输入错误即结束"有空再写吧脑袋大了

在这里插入代码片

continue语法在这里插入图片描述

问题:输入五个玩家年龄,统计为负的录入次数

#include <stdio.h>


int main() {
    int age;
    int wrong_count = 0;
    int right_count = 0;
    while(1){
        printf("请输入年龄\n");
        scanf("%d", &age);
        if(age < 0){
            wrong_count += 1;
            printf("输入错误%d次\n",wrong_count);
            continue;
        }
            right_count += 1;
            if(right_count > 4){
                break;
            }
        }
}

注意:

  1. break可以用于switch和循环
  2. break终止循环,调到循环块外
  3. continue只能用于循环结构
  4. continue跳出本次循环,进入下一次

问题:求1~100之间的偶数和


循环结构总结
5. 多次执行重复任务的时候用循环
6. 注意判断和执行顺序
7. 循环次数不确定的情况下用 while 或者 do-while循环


题目:用*打出一个菱形

模拟转换
###*
##***
#*****
##***
###*

*
***
*****
*******


*******
*******
*******
*******

由此可知打印星号的两个问题

  1. 行数:几行星
  2. 列数:每行几个星
    int i, j;
    for(i = 0; i < 7; i++){
        for( j = 0; j < 7; j ++){
            printf("*");
        }
        printf("\n");
    }

启示:

  • 外层循环控制行(行数, 换行)
  • 内层循环控制列(列数, 打印的符号)
*
***
*****
*******

每一行中,行数和列数之间的关系

ij
00
12
24
36
  • 结论j <= i *2
  • 修改j的值
int main() {
    int i, j;
    for(i = 0; i < 10; i++)
    {
        for( j = 0; j <= i*2; j ++)
        {
            printf("%c", '*');
        }
        printf("\n");
    }
}

最终答案:

#include <stdio.h>

int main() {
    int i, j;
    for(i = 0; i < 4; i++)              //上半部分
    {
        for( j = 0; j <= 2-i; j ++)     //打印空格
        {
            printf("%c", ' ');
        }
        for( j = 0; j <= i*2; j ++)     //打印星号
        {
            printf("%c", '*');
        }
        printf("\n");
    }
        
    for(i = 0; i < 3; i ++)              //下半部分
    {
        for (j=0; j <= i; j++) {
            printf("%c", ' ');           //打印空格
        }
        for ( j = 0; j < 5 - 2*i ; j ++ )//打印星号
        {
            printf("%c", '*');
        }
        printf("\n");
    }
    
}

总结:

  1. 双for模型
  2. 抽象问题(空格)具象化(#)
  3. 寻找#(j)与*(j) 与i的关系
  4. 分上下写

作业:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值