黑马程序员——C语言——程序结构

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">------<a target=_blank href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">
</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1. 程序结构的分类</span>

顺序结构

选择结构(分支结构)

循环结构:while    do···while       for

2. if语句

if语句

If(条件表达式){

语句块1;

}

当条件表达式为真时,执行语句块1.


if···else语句

If(条件表达式){

语句块1;

}else{

语句块2

}

当条件表达式为真时,执行语句块1,否则执行语句块2.


if语句的高级用法

If(表达式1){

语句块1;

}else if(表达式2){

语句块2

}else if(表达式3){

语句块3

}


if语句使用注意点:

a. if(条件);  //表示什么也不干 

b. if语句之后代码块只有一句,可以省略大括号

c. 永真式和永假式 

if(1){ }    //大括号中永远执行

if(0){ }    //大括号中永远不执行

d. if语句结合return语句    在一个函数中,return语句之后的语句都不会执行

e. if作用域问题,从大括号开始到大括号结束

f. if作用域紊乱    

eg: if(a==3)

  int num=10;     //会报错,不允许这样使用

 if(a==3){

  int num=10;     //可以使用

}


if语句判断猜拳游戏代码示例:

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

int main(int argc, const char * argv[]) {
    //定义变量保存计算机出拳结果
    int computer=-1;
    //定义变量保存用户出拳结果
    int player=-1;
    //用产生的随机数表示计算机随机出拳的结果
    computer=arc4random_uniform(3);
    printf("请出拳:0.剪刀  1.石头  2.布\n");
    scanf("%d",&player);
    //判断玩家是否出拳正确
    if (player<0||player>2) {
        printf("请按套路出拳!");
    }//玩家出拳正确则判断玩家是否赢
    else if ((player==0&&computer==3)||(player==1&&computer==0)||(player==3&&computer==1)){
        printf("Congratulations!You win!");
    }else{
        printf("What a pity!You lose!");
    }
    return 0;
}

3. switch语句

switch语句形式:

switch(表达式){

case 常量表达式1:

语句1;

case 常量表达式2:

语句2;

……

 default:语句n+1;

}

case语句穿透问题:case语句执行完成后,并没有结束,而是直接向下执行其他的case语句,防止case穿透需要在每个case语句结束后加上break。

 if语句和switch语句可以互相转换

分支比较多且无法穷尽或者进行大量列举的时候尽量使用if。

如果分支不是很多,但是使用if代码量比较大,最好用switch。

使用switch代码示例:

/**
 *根据学生分数输出学生成绩等级
 */
#include <stdio.h>

int main(int argc, const char * argv[]) {
    //定义一个变量保存学生分数
    int score=0;
    printf("Please enter the score of studnt:\n");
    scanf("%d",&score);
    //判断用户输入分数是否合法
    if (score<0||score>100) {
        printf("You enter an illegal score.");
    }
    int n=score/10;
    //根据n值判断学生等级
    switch (n) {
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("A\n");
            break;
        case 6:
            printf("B\n");
            break;
        case 7:
            printf("C\n");
            break;
        case 8:
            printf("D\n");
            break;
        case 9:
        case 10:
            printf("E\n");
            break;
            
        default:
            break;
    }
    return 0;
}

4. 循环结构

构成循环的条件:

  • 循环控制条件
  • 循环体
  • 能够让循环结束的语句

while循环

格式:

while(条件表达式){

       循环体;

}

如果while条件表达式一开始就不成立,循环中的语句就永远不会执行。

while循环使用注意:

a. 死循环

while(1){

        printf("死循环\n");

    }

空语句也会死循环:

    int num=2;

    while(num<3);

b. 当一个变量与一个常量进行关系比较时通常把常量写在前面 while(2==num)

c. while后的语句只有一句话时可以省略大括号

d. while作用域,内部代码块定义的变量在代码块外部不可以访问

e. 作用域紊乱

eg: while(1<3)

            int num=5;


do···while语句

格式:do{

         循环体;

}while(循环条件)

do···while语句先执行一次循环再判断条件


for循环

 格式:

for(表达式1; 表达式2;表达式3){

          语句;

}

表达式1:设置初始条件,只执行一次

表达式2:循环条件表达式,判断循环是否继续

表达式3:循环的调整

for循环示例代码:

//打印9*9乘法表
#include <stdio.h>

int main(int argc, const char * argv[]) {
    //外层循环,控制行
    for (int i=1; i<=9; i++) {
        //内层循环,控制列
        for (int j=1; j<=i; j++) {
            printf("%d*%d=%d\t",i,j,i*j);
        }
        printf("\n");
    }
    return 0;

5. break关键字

break和continue都可以用在循环中,用来跳出循环,break还可以用在switch语句中。

注意:break语句对if···else不起作用

           在对多层循环中,break只是向外跳一层


6. continue关键字

continue结束本次循环,继续下次循环,用在for,while,do···while等循环体中

代码示例如下:

    
    for (int i=0; i<10; i++) {
        if (i==5) {
            continue;  //i=5的值不会被打印出来,后边的值还会继续打印
        }
        printf("%d",i);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值