小白学习笔记(流程控制结束)

while:

要素:初始化部分(只执行一次)

循环条件部分(一定是布尔类型的结果)

循环体部分(即为要反复执行的代码)

迭代条件部分(相关的变量会更新,迭代)

格式:

1.初始化部分

while(2.循环条件部分){

3.循环体部分;

4.迭代部分;

}

执行过程:1234,234,234,…………,2

说明:while和for在任何条件下都可以相互转换

举例1:(和for基本差不多,就是各部分换个位置)

//输出五行helloworld
#include <stdio.h>
int main(){
    int i = 1;
    while (i <= 5) {
    printf("Hello world\n");
    i++;
    }
    printf(”%d“,i)
    return 0;
}

while可以使用初始化部分的变量,在举例中,i的输出值为6(到5之后再经历一个i++)

但在for外不可以使用括号内部的初始化部分,想使用的话只能在循环外定义一个变量,并且初始化部分使用这个变量

while和for的区别:主要涉及初始化条件部分对应的变量的作用域可能不同(如上述所说)

举例2遍历1-100中的所有偶数:

#include <stdio.h>
int main() {
    int num = 1;
    while (num <= 100) {
        if (num % 2 == 0) {
            printf("%d\n", num);
        }
        num++;
    }
}

注意要写迭代部分,不然会陷入死循环

如果要获取所有偶数的和,和偶数的个数,则代码为:

#include <stdio.h>
int main() {
    int num = 1;
    int sum = 0;//记录总和
    int count=0;//记录个数
    while (num <= 100) {
        if (num % 2 == 0) {
            printf("%d\n", num);
            sum += num;//体会累加
            count++;
        }
        num++;
    }
    printf("%d\n",sum);
    printf("%d\n",count);
}

练习:

//珠穆朗玛峰的高度为8848.86,假如我有一张足够大的纸,它的厚度为0.1毫米。请问我折叠多少次可以折叠到珠穆朗玛峰的高度
#include <stdio.h>
int main() {
    double zfheight = 8848860;
    double paperheight = 0.1;
    int count = 0;//记录次数
    while (paperheight < zfheight) {
        paperheight = paperheight * 2;
        count++;
    }
    printf("%d\n",count);
    return 0;
}

do-while:

do-while是while的变体,它会先执行一次循环体,然后再判断是否满足条件,如果满足的话,就继续执行循环体,否则跳出循环

格式:

1.初始化部分;

do{

3.循环体部分

4.迭代部分

}while(2.循环条件部分);

执行过程:1342,342,342…………,2

说明:do-while循环至少执行一次。

do-while,for,while三者可以互相转化

举例:

要素:初始化部分(只执行一次)

循环条件部分(一定是布尔类型的结果)

循环体部分(即为要反复执行的代码)

迭代条件部分(相关的变量会更新,迭代)

格式:

1.初始化部分

while(2.循环条件部分){

3.循环体部分;

4.迭代部分;

}

执行过程:1234,234,234,…………,2

说明:while和for在任何条件下都可以相互转换

举例1:(和for基本差不多,就是各部分换个位置)

//输出五行helloworld
#include <stdio.h>
int main(){
    int i = 1;
    while (i <= 5) {
    printf("Hello world\n");
    i++;
    }
    printf(”%d“,i)
    return 0;
}

while可以使用初始化部分的变量,在举例中,i的输出值为6(到5之后再经历一个i++)

但在for外不可以使用括号内部的初始化部分,想使用的话只能在循环外定义一个变量,并且初始化部分使用这个变量

while和for的区别:主要涉及初始化条件部分对应的变量的作用域可能不同(如上述所说)

举例2遍历1-100中的所有偶数:

#include <stdio.h>
int main() {
    int num = 1;
    while (num <= 100) {
        if (num % 2 == 0) {
            printf("%d\n", num);
        }
        num++;
    }
}

注意要写迭代部分,不然会陷入死循环

如果要获取所有偶数的和,和偶数的个数,则代码为:

#include <stdio.h>
int main() {
    int num = 1;
    int sum = 0;//记录总和
    int count=0;//记录个数
    while (num <= 100) {
        if (num % 2 == 0) {
            printf("%d\n", num);
            sum += num;//体会累加
            count++;
        }
        num++;
    }
    printf("%d\n",sum);
    printf("%d\n",count);
}

练习:

//珠穆朗玛峰的高度为8848.86,假如我有一张足够大的纸,它的厚度为0.1毫米。请问我折叠多少次可以折叠到珠穆朗玛峰的高度
#include <stdio.h>
int main() {
    double zfheight = 8848860;
    double paperheight = 0.1;
    int count = 0;//记录次数
    while (paperheight < zfheight) {
        paperheight = paperheight * 2;
        count++;
    }
    printf("%d\n",count);
    return 0;
}

do-while:

do-while是while的变体,它会先执行一次循环体,然后再判断是否满足条件,如果满足的话,就继续执行循环体,否则跳出循环

格式:

1.初始化部分;

do{

3.循环体部分

4.迭代部分

}while(2.循环条件部分);

执行过程:1342,342,342…………,2

说明:do-while循环至少执行一次。

do-while,for,while三者可以互相转化

举例:

举例:

举例3:打印下面这个图形:

*****

****

***

**

*

#include<stdio.h>
int main() {
    int i,j;//i表示个数,j表示行数
    for (j = 1;j <= 5;j++) {
        for (i = 1;i <= 6-j;i++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

举例4:实现9*9乘法表

#include<stdio.h>
int main() {
     int i,j;//i表示个数,j表示行数
    for (j = 1;j <= 9;j++) {
        for (i = 1;i <= j;i++) {
            printf("%d*%d=%d  ",i,j,i*j);
        }
        printf("\n");
    }


    return 0;
}

输出为:

1*1=1

1*2=2 2*2=4

1*3=3 2*3=6 3*3=9

1*4=4 2*4=8 3*4=12 4*4=16

1*5=5 2*5=10 3*5=15 4*5=20 5*5=25

1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36

1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49

1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64

1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

break和continue关键字:

只能在switch内和循环结构中使用break

break结束的是包裹它最近的一个循环

continue结束包裹continue的最近的一层循环结构的当次循环

break举例:

//在全系1000人中募捐,总数达到100000时统计此时的人数以及平均每人的捐款数量
#include <stdio.h>
#define SUM  100000
int main() {
    double amount,total = 0;//定义人数为i,个人捐款数量为amount,次数为count。
    int i,count=0;//定义总数为total,人数为i
    for (i = 1;i <= 1000;i++) {
        printf("how much you want tou give other:");
        scanf("%lf",&amount);
        total += amount;
        count++;
        if (total >= SUM) {
            break;
        }
    }
    printf("the people number is %d\n",count);
    double average = total / count;
    printf("average is %.2lf",average);

    return 0;
}

continue举例:

//输出100-200之间不能被三整除的数
#include<stdio.h>
int main() {
    int i;
    for (i = 100;i <= 200;i++) {
        if (i % 3 == 0) {
           continue;
        }
        printf("%d\n",i);
    }

    return 0;
}

goto关键字(开发中尽量少用goto):

格式:

goto 标号(标号属于标识符,以“:”为标记,位于某语句前)

流程:执行goto语句后,程序将跳转到指定标号处执行,这样可以随意将控制转移到程序中的任意一条语句上,然后执行

举例:

#include<stdio.h>
int main() {
    loop_label:printf("Hello,world\n");
    goto loop_label;
    return 0;
}

loop_label是标签名,可以放在正常语句的前面,程序执行到goto,就会跳转到指定的标签的位置继续执行。因此这段代码会实现无限循环

举例1:

方式1(用无限循环的方式):

//录入学生的成绩,并计算平均分,当输入-1时程序结束
#include<stdio.h>
int main() {
    int score,i;//定义score是成绩,i是个数,average是平均分,total是总成绩
    double total= 0.0,average;
    for (i = 1;;i++) {
        printf("put score:\n");
        scanf("%d",&score);
        total += score;
        average = total / i;
        printf("average is %.2lf\n",average);
        if (score == -1) {
           break;
        }

    }


    return 0;
}

方式2(使用goto):

#include<stdio.h>
int main() {
    int i = 1,score,total = 0,average;//i是人数,score是个人成绩,total是总成绩,average是平均分
    next:printf("put score:\n");
    scanf("%d",&score);
    if (score >= 0) {
        total += score;
        average = total/i;
        i++;
       goto next;
    }else if (score == -1){
        goto loop;
    }else{printf("error");}
    loop:printf("average id %d",average);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值