黑马程序员—IOS之C语言基础—循环结构与分支结构

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

                第一章 循环结构    

循环结构是指在一定的条件下重复执行某一个代码段。构成循环结构的三大因素:循环条件、循环体和让循环为假的控制条件。循环条件是让循环得以有意义的条件;循环体是在某一条件下执行的代码,如果没有代码段那么循环体的循环将没有任何意义;让循环为假的控制条件是让循环不是死循环,若循环是死循环,那么循环将永不停止,没有意义。
循环结构分为for循环,while循环,do…while循环三种。
1、while循环讲解(又称为当循循环)
1)while循环的格式:

while(表达式){
语句块
}

2)while循环的一个示例

int main(int argc, const char * argv[]) {
    int i=1,sum=0;
    int n=0;
    printf("请输入一个数:\n");
    scanf("%d",&n);
    //计算1+2+3...+n的循环while结构
    //i<=n为循环条件,当i>n时就跳出循环,结束循环结构。
    while (i<=n) {
        sum+=i;
        i++;
    }
    printf("1+2+3+...+%d=%d",n,sum); 
    return 0;
}

3)while使用注意
(1)若while后面只有一句话可以省略大括号,如。

int i=0;
int sum = 0;
while(i++<100)
//省略了大括号
sum=sum+i;

(2)死循环分为两种:判断条件一直为真即任何数值都有真假性;空语句的问题。

//最简单的死循环
while1//空语句问题造成的死循环,
while(i<3);//虽然控制条件不会造成空语句问题,分号导致了空语句,进而导致死循环。

(3)当一个变量和一个常量==和!=运算时,一般把变量放在前面

while(i!=5){
printf"succeed");
i++;
}

(4)作用域:内部代码块定义的变量不能在外部访问
(5)作用域紊乱问题:

while5>4int = 5;//这是错误的,虽然说咋一看没什么问题,在不使用大括号时不能定义变量。

2、do…while循环结构(又称为直到型循环)
1)do…while的语法格式:

do{
循环体
}while(条件);

注意:在do…while结尾需要有分号。

#include <stdio.h>
int main(int argc, const char * argv[]) {
    int i = 0;
    int sum = 0;
    //计算1+2+3+...+100的和
    do {
        sum +=i; 
        i++;
    } while (i<=100);
    return 0;
}

2)while和do…while的区别
关于do…while(先执行再判断)和while(先判断在执行)的区别
1)当循环控制条件第一次判断不为假的时候
while和do…while执行次数相同。
2)当循环控制条件第一次判断为假的时候
while一次都不执行,do…while会执行一次。

3、for循环
1) for循环的格式:

//初始化语句只会被执行依次
for(1、初始化语句;2、变量的控制条件;3、变量值的表达式)
{
4、语句块
}
执行过程是:1->2->4->3->2->4->3依次循环

2)for循环的几种表达式结构

#include <stdio.h>

int main(int argc, const char * argv[]) {
    //1.基本格式
    for (int i=0; i<5; i++) {
        printf("%d\t",i);
    }
    //2.省略格式:省略表达式1,省略表达式3
    int i=0;
    for (; i<5; ) {
        printf("%d\t",i);
        i++;
    }
    //3.全省
    int i=0;
    for (; ; ) {
        if (i<5) {
            printf("%d\t",i);
            i++;
        }else{
            break;//break后的语句将不再执行,将跳出当前循环
        }
    }
    //4.什么都不写,是一个死循环。
    int i=0;
    for (; ; ) {
        printf("hello world\n");
    }
    return 0;
}
                    第二章 分支结构

分支结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程。分支结构可以理解为选择结构,即根据选择的条件进行流程。
分支结构主要分为if…else和switch结构
1、if..else结构

1)if..else的格式:

if(表达式/常量/变量){
语句块1
}else{
语句块2
}

执行的原理分两步:一先计算if后先括号的值,有两个值:真(1)、假(0);二如果为真(1)执行语句块1,如果为假(0)执行语句块2。

2)if语句的嵌套

if(表达式1){
语句块1//若表达式1的值为真执行此语句
}else{
//若表达式1的值为假执行此代码块
if(表达式2){
语句块2//若表达式2的值为真执行此语句
}else{
语句块3//若表达式2的值为假执行此语句
}
}

3)if语句的使用注意

     //1、空语句
     if (1!=3);  //空语句,什么都没有干

    //2、如果if之后的代码块,如果只有一句话,则可以省略大括号
    if (5>3)
    printf("5>3\n");  //if条件如果没有大括号,只会影响一句话

    //3、永真式和永假式
    if(1){   }  //大括号中永远执行
    if(0){   }  //大括号中永远不会执行

    //4、if语句结合return 语句
    if (5>3)
    return 0;   //在一个函数中,return语句之后的语句都不会执行

    //5、if作用域的问题
    if (3==3) {
        int num = 10;
    }
    printf("num = %d\n",num);//代码块外部不能访问定义的内部变量

    //6、作用域的紊乱
    if(a==3)
    int num = 10;//语句后不能直接在没加大括号的情况下定义变量,这是错误的。

2、switch分支结构
1)switch的基本格式

  switch(表达式){
      case 常量表达式1: 语句1;
      case 常量表达式2: 语句2;
      case 常量表达式3: 语句3;
      case 常量表达式4: 语句4;
      case 常量表达式5: 语句5;
      case 常量表达式6: 语句6;
      default:
          break;
   }
   //将表达式的值分别与常量表达式作对比,等于谁就将执行那一段语句

2)case语句的穿透问题
case穿透指的是某个case语句执行完成后,并没有结束,而直接向下执行其他的case语句。
那程序中要如何防止穿透问题呢?
我们需要在每一个case语句结束之后,加上一句话:break; break作用 是结束switch语句。

int sum=1
//不加break,程序运行后sum=64
//加了break,程序运行后sum=2
switch(1){
      case 1: sum+=sum;break;
      case 2: sum+=sum;break;
      case 3: sum+=sum;break;
      case 4: sum+=sum;break;
      case 5: sum+=sum;break;
      case 6: sum+=sum;break;
      default:
          break;
   }

3)switch使用注意

//1、switch语句的表达式类型
    //1)可以放一个整型的变量 int num = 10;switch (num)
    //2)可以放一个整形常量  switch (10)
    //3)可以放一个返回值是整型的表达式 
          switch (1+1),switch(num = 1+1)
    //4)还可以放可以转换为int类型的表达式 switch ('b'+'B')
// 2、casey语句使用注意
    //1)case语句可以有多行语句,可以加括号,也可以省略括号
          case 10:
            printf("lala\n");
            printf("lala\n");
    //2) case语句格式: case  常量表达式: (空格和冒号不能省)
    //3) 可以是常量  case 10:
    //4) 如果放表达式,那么只可以是常量表达式 case 2+2:
    //5) case 后面不能是实数  case 9.0f 错误的
    //6) case 语句之后,默认的第一句话不能定义定义变量
            //如果第一句话非要定义,应该加上大括号
            case 10:{
            int num2 = 3;}
    //7) 编译器的bug
    int num = 11;
    switch (num) {
        case 10:
            printf("num = %d\n",num);
            int num2 = 3;//这样定义是可以的
            break;
        case 11:printf("num2  =  %d\n",num2);
            break;//使用case1中定义num2,但是程序是可以运行
                    //但是输出的值并不是num2=10,而是0
                    //这就是编译器的bug
    }
//3、break语句是可选的,可以加也可以不加
//4、default使用注意
    //1)default语句的位置可以任意放
    //2) case的穿透问题,同样适用于default
    //3) 如果default语句放到 switch语句的最后,可以不加break
        //如果不是放到最后,是必须加上break的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值