005-循环结构(上)-C语言笔记

/ 0

switch-case结构

计算表达式的值,并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,执行到 break 就跳出 switch 语句,继续执行后面代码。如果逐个比较都没有相等的值,则执行 default 后的代码。

switch(表达式){
case 常量表达式1:
    语句1;
    break;
case 常量表达式2:
    语句2;
    break;
case 常量表达式n:
    语句n;
    break;
default:
    语句n+1;
    break;
}

switch-caseif-else 的区别:

1.能够使用 switch-case 结构写的代码一定可以使用 if 结构写出来,但能够使用 if 结构写出来的代码,不一定可以使用 switch-case 结构。

2.switch-case 结构只能直接做等值判断,判断 switch 后的值是否和给定的 case 值相等。而 if 结构不仅可以做等值判断,还可以做范围判断。

3.如果是做范围判断推荐使用 if 语句,如果是做等值判断则推荐使用 switch 语句。

switch-case 语句注意事项:

1.表达式的类型和 case 语句后的值必须是整型或可以转变为整型的值(byteshortcharint 类型)。

2.case 的值只能为常数或常量,不能为变量。

3.功能代码部分可以写任意多句。

4.break 关键字的意思是中断,指结束 switch 语句,break 语句为可选。

5.case 语句可以有任意多句,可以不用加括号 {}

6.default 语句可以写在 switch 语句中的任意位置,功能类似于 if 语句中的 else

7.case 后面不可以直接定义变量,使用定义的这个变量的作用域。

8.如果在 case 后面定义的变量必须加上大括号。

case语句穿透

case 语句执行的过程中,如果在每一个 case 语句后没有 break,则一旦进入某个分支后就会一直执行到 switch 结束。

break 在这里的作用是直接跳出 switch 语句。

int year = 0, month = 0;
printf("请输入年份和月份:");
scanf("%d%d",&year,&month);

switch (month){
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        printf("%d年的%d月有31天\n",year,month);
        break;//这里就是使用了case穿透,1,3,5,7,8,10,12任意分支满足,都会执行他们后面所有代码,直到遇到break跳出switch
    case 4:
    case 6:
    case 9:
    case 11:
        printf("%d年的%d月有30天\n",year,month);
        break;
    case 2:
        //判断年份是否为闰年.
        if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)){
            printf("%d年的%d月有29天\n",year,month);
        }else{
            printf("%d年的%d月有28天\n",year,month);
        }
        break;
    default:
        printf("你是都教授吗?\n");
        break;
}

穿透的作用:不同 case 语句执行的代码相同,就可以使用穿透来简写代码。

Xcode断点调试

在程序运行期间,我们可以通过 Xcode 提供的断点调试监视 CPU 执行代码的步骤,变量的值的变化,以便我们排查 BUG。

Xcode 如何显示行号:在 Xcode - Preferences - Text Editing 里的第一个选项,勾选 Lines numbers 。

QQ20150629-1

添加断点:

QQ20150629-2

禁用断点:

QQ20150629-3

删除断点:拖动断点到空白处,即可彻底删除断点。

调试程序:Command + R 运行后,如果设置了断点,则直接进入调试视图。

QQ20150629-5

while循环结构初体验

循环结构可以将一段代码重复执行指定次数,C 语言中的循环结构有 while 循环结构、do-while 循环结构和 for 循环结构。当然由 goto 语句和 if 判断也能组成循环,不过全世界人民都不建议使用 goto 语句。

语法:

while(条件表达式){
    需要被反复不停执行的代码,也叫循环体;
}

执行过程:判断 while 后面小括号里的表达式是否为真,为真则执行大括号里的循环体,直到 while 后面的表达式为假,则停止 while 循环。

关于死循环:循环体一直反复不停的执行,永远不会结束,这种循环我们就叫做死循环。

while (1){
    printf("表达式一直为真。。。所以,死循环!");
}

while循环结构的运用

第一种场景:确定循环体,也确定循环的次数。

#include <stdio.h>

int main() {
    int i = 0;

    //将一句话输出2万次
    while (i < 20000){
        printf("欢迎来到六阿哥博客\n");
        i++;
    }
    return 0;
}

第二种场景:确定循环体,不确定循环次数,但确定循环结束或者继续的条件。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, const char * argv[]){

    int money = arc4random_uniform(101);
    int guess = -1;

    while (guess != money){
        printf("请猜一下我给了你多少钱吧:");
        scanf("%d",&guess);
        if(guess > money){
            printf("你猜得太大了\n");
        }else if(guess < money){
            printf("你猜得太小了\n");
        }
    }
    printf("恭喜你,正确\n");
    return 0;
}

第三种场景:遍历指定范围的数,将每1个数据都找出来。

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

第四种场景:找出指定范围中符合特定条件的数。

int i = 100;
while (i <= 999){
    int bai = i / 100;
    int shi = i % 100 / 10;
    int ge = i % 10;
    //只取出满足条件的值
    if(bai * bai *bai + shi * shi * shi + ge * ge * ge == i){
        printf("%d\n",i);
    }
    i++;
}

第五种场景:求累加和与平均值。

int i = 1;
int sum = 0;

while (i <= 5){
    sum += i;
    i++;
}
printf("sum = %d\n",sum);

第六种场景:求最大值和最小值。

#include <stdio.h>
#include <limits.h>

int main(int argc, const char * argv[]){

    int max = INT32_MIN; //先声明1个擂台变量.用来保存最大值的.
    int i = 0;
    while (i < 5){
        printf("请输入第%d个数:\n",i+1);
        int num = 0;
        scanf("%d",&num);
        //每循环1次 就拿刀了用户输入的1个数据.

        //如果输入的是第1个数据 那么就直接将这个数据赋值给max。
//        if(i == 0)
//        {
//            max  = num;
//        }
        //拿刀用户输入的这个数据 和擂台上的数据做比较.
        if(num > max){
            max  = num;
        }
        i++;
    }
    printf("max = %d\n",max);
    return 0;
}

break和continue

break

可以使用在 switch-case 结构之中。如果在其中使用了 break,就代表结束这个 switch-case 结构。

还可以使用在循环体之中,如果在循环体之中遇到了 break,就会立即结束当前循环结构。

int i = 0;
while (i < 5){
    printf("我爱你们\n");
    if(i == 2){
        break;//i等于2的时候直接结束while循环,最终i的值也只停留在2
    }
    i++;
}

continue

只能用在循环体之中,如果在循环体之中遇到了 continue,会立即结束本次循环。再判断循环条件,决定是否要继续下一次循环。
int i = 0;
while (i < 5){

if(i == 2){
    continue;//当i等于2的时候,直接结束本次循环
}
i++;//因为i等于2就结束了本次循环,所以i++没有被执行。最终i的值为2
printf("%d\n",i);

}