黑马程序员——ios开发基础之C语言程序结构分类与函数

来源:互联网 发布:mac上的svn管理工具 编辑:程序博客网 时间:2024/05/20 20:46
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

第一讲 程序结构分类

一、顺序结构

             最简单的C语言程序,从上到下依次执行语句,程序默认的也是顺序结构。简单顺序机构设计举例:
       //从键盘接收一个大写字母,输出其小写形式        #include<stdio.h>        int main(){            char c1,c2;            printf("请输入要转换的大写字母\n");            c1 = getchar();            printf("%c,%d\n",c1,c1);//打印大写字母和ASCII值            c2 = c1 +32;//ASCII值加32,转换成小写字母ASCII值            printf("%c,%d\n",c2,c2);//输出小写字符形式和ASCII值            return 0;        }

二、分支结构

         1)if语句分支结构

                 1.1 if语句的三种形式
                         第一种:if(表达式)语句
                                     例如 if(x>y)printf("%d",x);
                         第二种:if(表达式)语句1 else 语句2
                                     例如 if(x>y)
                                                printf("%d",x);
                                             else
                                                printf("%d",y);
                         第三种:if(表达式1)语句1                                例如    if(num>500) cost = 0.15;
                                       else if(表达式2)语句2                                      else if(num>300) cost = 0.10;
                                       else if (表达式3)语句3                                     else if(num>100) cost = 0.075;
                                               ┇                                                                     else if(num>50) cost = 0.05;
                                       else if (表达式n)语句n                                      else cost=0;
                                       else  语句m
                 1.2 if语句的嵌套
                         在if语句中包含一个或多个if语句称为if语句的嵌套
                                if(){
                                      if()语句1
                                      else 语句2
                                 }else{
                                     if()语句1
                                     else  语句2
                                }
                     
                 if程序应用举例:
       //输入三个数,按由小到大输出       #include<stdio.h>       int main(){          float a, b ,c ,t;          printf("请输入三个实数:\n");          scanf("%f,%f,%f",&a,&b,&c);           if(a>b){               t = a;               a = b;        /*如果a>b将a和b对换,a是a、b中的小者*/               b = t;           }           if(a>c){               t = a;               a = c;         /*如果a>c将a和c互换,a是a、c中的小者,现在也是三者中的最小者*/               c = t;          }          if(b>c){               t = b;               b = c;           /*如果b>c将b和c对换,b是b、c中的小者,也是三者中的次小者*/               c = t;          }          printf("%5.2f,%5.2f,%5.2f\n",a,b,c);          return 0;      }

             1.3  if 注意点
                    (1) if(1)、 if(-1)、 if(a=5) 永真式 if(0) 永假
                    (2) if(表达式); 表示判断完了什么都不做
                    (3) if(表达式) return 0; //程序退出,代码不会再往下执行了
                    (4) if(表达式){int num=10;} printf("%d",num);(错误的)
                    (5) if(表达式) int num=10; (作用域紊乱)          

         2)switch语句分支结构

             2.1 用于条件判断,当表达是的结果有多种情况,用switch比较方便一些
                        格式:
                       switch(表达式){
                         case 整型常量或者字符常量: 语句;
                           .....
                         default:
                             //如果上面的条件都不满足,执行default
                        }
              计算表达式的值,用这个值和case后的常量进行比较,如果这个值等于了某个常量值,会执行case对应的分支语句,遇到break;才结束,如                 果没有遇到break,程序一直会往下执行,直到switch语句结束
            2.2 switch的注意点
                   1) switch(表达式) 表达式:返回值是整型
                   2) case 常量 常量:必须是整型的 ,不能是flaoat cast 2.3:可以放常量表达式,但是不允许: a+3
                   3) 作用域的问题
                          case 3: {
                               int num=-1;
                           }
                       case 4:printf("%d\n",num); 不允许的
                  4) case分之语句可以有多句,可以使用大括号,也可以不使用
                  5)作用域紊乱的问题: case 4:int a=4; (错误的)
            2.3 应用举例
        //使用Switch实现简单计算器          #include<stdio.h>          int main(){             int num1,num2,op,result;             printf("请输入第一个数\n");             scanf("%d",&num1);             printf("请输入要进行的运算:1 加法   2 减法   3 乘法   4 除法\n");             scanf("%d",&op);                     printf("请输入第二个数:\n");             scanf("%d",&num2);                     switch(op){               case 1 :                   result = num1+num2;                  break;               case 2 :                    result = num1-num2;                  break;               case 3 :                     result = num1*num2;                   break;               case 4 :                     result = num1/num2;                   break;               default :                      printf("error\n");                   break;          }        printf("计算结果:%d\n",result);     return 0;}
           2.4 case语句穿透问题:判断季节
          #include<stdio.h>           int main(){                 int m;                 printf("请输入一个月份:\n");                 scanf("%d",&m);                       switch(m){                      case 12:                      case  1 :            //case12和case1都被合理的穿透了,余下情况类似                       case  2 :                         printf("冬季\n");                       break;                      case  3 :                      case  4 :                      case  5 :                         printf("春季\n");                       break;                      case  6 :                      case  7 :                      case  8 :                         printf("夏季\n");                       break;                      case  9 :                      case  10:                      case  11:                         printf("秋季\n");                       break;                     default :                       break;                 }                 return 0;          }

三、循环结构

        1、循环控制

               循环是程序语句的一种结构,当条件满足的时候,一直重复执行某一段代码,当条件不满足的时候,需要退出循环。
                正常情况下,够成循环结构三个要素:
                                                                      1)循环结束的条件
                                                                      2)得有循环体 
                                                                      3) 有一个操作可以让循环条件为假

        2、 while循环(当型循环: 当 .....满足时候,然后....)

                          格式:
                                 while(表达式){
                                         语句块;
                                        }
               计算机首先计算表达式的值,如果表达式的值非0(也就是真),会去执行语句块,执行完语句块以后,继续计算表达式的值,如果表达式的                  值非0(也就是真),再继续执行语句块....... 当表达式的值为0(也就是假)的时候,循环结束。
               注意:
                1)死循环的问题
                          while(1);
                             int i=1;
                          while(i++&&i<=100)sum+=i;
                2)作用域
                         while(a<10){
                              int num=10;
                         }
                        printf("%d",num);(错误的)
                3)作用域的紊乱的问题
                       while(i<10) int num=10; (错误的)
                4) 当循环体只有一句语句的时候,是可以省略大括号的
            while循环应用:疯狂猜数
#include<stdio.h>int main(){     int inputNum=-1,randomNum=-1,oldNum=0,m=1,n=1000;     int flag=1;     int count=1;//定义计数变量     int totalCount=10;//定义总的竞猜次数     randomNum=arc4random_uniform(n-m)+m;          //随机产生一个m到n之间的随机数     printf("%d\n",randomNum);     while(flag){          if(count<totalCount){          printf("请竞猜[%d,%d]之间的一个数,%d次机会:\n",m,n,totalCount);          scanf("%d",&inputNum);               if(inputNum>randomNum){                     printf("上次竞猜:%d本次竞猜:%d\n竞猜结果:猜大了!\n剩余次数:%d\n",oldNum,inputNum,totalCount-count);                  }else if(inputNum<randomNum){                      printf("上次竞猜:%d本次竞猜:%d\n竞猜结果:猜小了!\n剩余次数:%d\n",oldNum,inputNum,totalCount-count);                         }else{                           printf("上次竞猜:%d本次竞猜:%d\n竞猜结果:猜对了!\n",oldNum,inputNum);                            printf("本次竞猜结束\n");                            flag=0;                       }                         oldNum=inputNum;//把上一次的竞猜结果保存到oldNum中                          count++;//每猜一次计数器+1        }else{            printf("%d次都没有猜中,你的智商不适合玩这个游戏!\n",totalCount);       }     }     return 0;}

      3、 do...while循环(直到型循环: .......直到条件为假)

                       格式:
                           do{
                                语句块;
                            }while(表达式);
             表述:程序先执行语句块,然后再计算表达式的值,如果表达式的值非0(真) ,再去执行语句块,执行完语句块以后再计算表达式的值,如果                          表达式的值非0(真) ........... 直到执行完了以后,发现表达式的值为0,退出循环
             注意:
                    1)当首次执行表达式为真的时候,执行的结果和while一样
                    2)当首次执行表达式为假的时候, while执行循环体0次,但是dowhile会执行一次

      4、 for循环(当型循环)

                       格式:
                         for(int i=0;i<100;i++){
                                 语句块;
                              }
                注意:
                        1)int i=0;只会被执行1次
                        2)当循环体语句只有一句代码,可以省略大括号
                        3)OC的格式: for(NSString *name in arr){NSLog(@"%@",name);}
                        4)形式一: int i=0; for(;i<100;i++){}
                        5)形式二: int i=0; for(;i<100;){ i++;}
                        6)形式三: int i=0; for(;;){ if(i<100){ break;} i++;}
                        7)for的死循环 for(;;){ } 这是for的死循环
                 for循环的嵌套:
                                    for(int k=0;k<5;k++){
                                        for(int i=0;i<5;i++){ //一行 *
                                                  printf("* ");
                                          }
                                      }
                       注意:
                              1) k的值每变化一次, i从0开始到4循环5次
                              2)双重循环:外层控制行数,里层控制列数,打印形状
<pre name="code" class="objc">           //应用举例:for循环打印九九乘法表            #include<stdio.h>            int main(){                 for(int i=1;i<=9;i++){   //外层循环控制行数                    for(int j=1;j<=i;j++){  //里层循环控制列数                          printf("%d*%d=%d\n",j,i,j*i);                        }                    printf("\n");                 }               return 0;            }


        5、 break和continue的使用

                   1) break和continue都是关键字                   
                   2) break用在两个地方:                          
                      (1)用在switch中                                           
                                   switch(n){                                                
                                       case 1: printf("xxxx"); break;//表示结束switch语句                                             
                                   }                           
                      (2)用在循环中                                           
                                    while(1){                                                      
                                           if(i==5){                                                          
                                             break; //结束循环                                                     
                                            }                                            
                                     }                           
                      (3)如果不在循环中 if语句中使用break是没有作用的                  
                  3)continue 表示结束本次循环,继续下一次循环                         
                           假如循环要执行100次,如果第5次循环的时候遇到了continue,第5次的余下部分不执行了,循环从第6次继续执行
         //continue关键字应用举例:输出100~200之间不能被3整除的数          #include<stdio.h>          int main(){              for(int i=100;i<200;i++){                  if(i%3==0) continue;                   printf("%d\n",i);                }           return 0;         }

第二讲  函  数

     1、函数的概念

             完成特定功能的代码段,他也是组成我们C语言源程序的基本单位
               优点:
                     1)提高程序的可读性,
                     2)可以提高开发的效率
                     3)提高代码重用性

    2、函数的定义

             格式:
                   返回值 函数名(形参列表){
                              函数体;
                             //return
                         }
             4种:
                   有参无返回值:void test(int x,float y){ }
                   无参无返回值:void test1(){ }
                   有参有返回值: int max(int x,int y){ return x>y?x:y; }
                   无参有返回值: int test2(){ return 10;}

    3、函数的参数

            1)形参和实参
                   形参: 在定义函数的时候, 函数名后面小括号中的参数 。格式: 数据类型 变量 如:int x;
                   形参的作用域:只能在本函数中使用
                   实参:调用函数的时候传递的参数
            2)参数的传递的过程
                   实参的值拷贝一份放到函数形参中

    4、函数的返回值

             主调函数:A B两个函数 ,如果在A中调用了B,A叫主调函数,B被调函数
             返回值是被调函数返回给主调函数的值
             函数的返回值使用return 关键字进行返回
                     1) return 0; return (0);
                     2) return a+b; return a>b?a:b;
                     3) 如果函数的返回值是 void return ;(程序返回了,不再向下执行)
                     4) 函数中可以有多个return ,但是只有一个起作用

    5、函数的调用

            1)函数的声明:
                    类似于变量的使用,我们要使用函数,就应该先定义函数,编译器不知道我们是否已经定义了某个函数,为了防止编译                       器编译的时候报错(即函数调用)所以,要告诉编译器,我已经定义了哪些函数
                  原则:
                       在调用函数之前,进行该函数的声明
                  声明的方法:
                       技巧:复制函数的头部,加上分号,写在调用调用方法之前
                                    int max(int x,int y); //声明
                                      max(56,78); //调用
            2)函数的调用
                     函数名(实参列表);
            3)函数的嵌套调用
                    C语言中函数的定义是平行、独立的,也就是说不能嵌套定义函数,但可以嵌套调用函数,即在调用一个函数的过程中又调用另一函数。

    6、递归函数

              在函数中自己调用函数自己
              能够进行递归的有两个条件:
              1)能够找到让问题的规模缩小的规律
              2)能够让递归结束的条件
              递归函数的执行有两个阶段:
              1)递推阶段:问题规模缩小的过程
              2)回归迭代:迭代计算值得过程
             递归的优点和缺点:
                  优点是:遇到问题规模能够缩小,而且有规律的问题的时候,代码比较简洁
                  缺点:消耗内存
                  建议:在程序中不能用太多
         递归函数举例:有5个人坐在一起,问第5个人多少岁?他说比第4个人大两岁。问第4个人岁数,他说比第3个人大两岁。问第3个人,又说比第2个人大两岁。问第2个人,说比第1个人大两岁。最后问第1个人,他说是10岁。请问第5个人多大?
          #include<stdio.h>          int main(){               int a;               int age(int n);    //函数的声明               a=age(5);         //函数的调用              printf("%d",a);          return 0;         }         int age(int n){              //求年龄递归的函数              int c;                 //用c作存放年龄的变量              if(n==1) c=10;        //当n=1的时候,年龄为10              else c=age(n-1)+2;  //当n>1的时候,这人年龄比前一个大2             return c;           //将所求年龄值返回         }

    7、static 和 extern关键字使用

    1、static 和 extern使用
                 static : 把一个变量声明为静态变量(内部)
                 extern : 把一个变量声明为外部变量
           1)static 和 extern 对局部变量的作用
                     static 局部变量:延长局部变量的生命周期
                              void sum(){
                                   static int a=10;
                                           a++;
                               }
                          extern 局部变量:(不能这么用)
         2)static 和 extern 对全局变量的作用
                 main.c 包含了 test.h
                   test.c         static int a = 10;
                  表示a只能在test.c中使用,表示是一个内部的变量
                     main.c       static int a = 15;
                               printf("%d\n",a); // 15
                               test.c int b = 100;
                                main.c 使用b
                (1) 在main.c中声明一个同名的全局变量
                           int b; 等价于 extern int b;
                 (2) 在main.c中需要使用 b的之前
                                   extern int b;
        3)static 和 extern 对函数的作用
                     static 修饰函数:内部函数,不能在其他文件中访问
                     extern 修饰函数:函数定义的时候,默认就是extern 的
                      test.c    extern int sum(int a,int b){ }
                     main.c   extern int sum(int a,int b);
                                        sum(1,2);


0 0
原创粉丝点击