循环


------------------------------------转译----------------------------------------------------------------

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

    //所谓的数组,就是一次性定义的多个变量的集合

//    int num1;

//    int num2;

//    int num3;

    

    //如何需要有三个变量,并且要存储三个不同的数据,可以使用数组

//    int nums[3];

    //如果需要分别使用这三个变量,使用下标[]引用

    // nums[0] 表示第一个变量

    // nums[1] 表示第二个变量

    // nums[2] 表示第三个变量

    

   char *nums[10] = {

        "","","","","","","","","",""

    };

    

    // nums[数字几]就得到汉字几

    

    

    // 1, 提示用户输入

   int input, num1, num2;

    printf("请输入一个两位数\n");

   scanf("%d", &input);

    

    // 计算十位和个位

    num1 = input /10;

    num2 = input %10;

    

    // 3, 判断转换

   if(input == 10) {

       printf("");

    }else if(num1 ==1) {

        // 翻译第二个数字

       printf("%s", nums[num2]);

        

        // printf("%s", "");  // =>十二

        

    }else if(num2 ==0) {

        // 第一个字翻译,第二个字加十

       printf("%s", nums[num1]);

        

    }else {

        // xy 的情况,首尾翻译,中间放十

       printf("%s%s", nums[num1], nums[num2]);

        

    }

    

    

    

   printf("\n");

    


    

    return 0;



--------------------------------------------while--------------------------------------------------------


// 语法:  while (表达式循环体语句;

    //首先判断表达式,如果为真,执行循环体,然后再判断表达式,如果为假就跳出循环


函数 getchar 的含义是获取缓存中数据的 ascii


等待用户输入字符,回车后统计字符个数


   while ( getchar() !='\n' ) {

        count++;

    }

    


-------------------------------------------$---------------------------------------------------------

#include <stdio.h>


#include <stdlib.h>



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

    //输入数字,如果按字母q,结束输入,并将所有输入的数字求和

    

    // scanf 函数的返回值

//    int input = -1, num = -1, num2 = -1;

//    num = scanf("%d,%d", &input, &num2);

    

    

    //如何获取控制台的数据,如果是数字,就将其转换成

    // 数字赋值给input,如果不是是在

    // 判断它是否为字母q

//    int input;

//    char ch;

//    int num = scanf("%d", &input);

//    if(num == 0) {

//        // 没有获取数据

//        scanf("%c", &ch);

//        if(ch == 'q') {

//        

//        }

//    }

    

    

    

    

    // 1,有一个循环,用来记录用户的输入,同时判断是否继续循环

    // 2,在循环中需要准备一个变量,如果输入的是数字,实现累加

    // 3, 打印结果

    

    

//    char ch;

//    int sum = 0, input, count;

//    

//    

//    count = scanf("%d", &input); // 从缓存中,尝试获取数字

//    if(count == 0) { // 没有获取到数据

//        scanf("%c", &ch); // 尝试获取字符 q

//    } else { // 获取到了数字

//        sum += input;

//    }

//    // 应该将后面的多于的字符给去掉

//    // 序循环直到没有回车为止

//    while(getchar() != '\n')  ;

//    

//    while ( ch != 'q' ) {

//        count = scanf("%d", &input); // 从缓存中,尝试获取数字

//        if(count == 0) { // 没有获取到数据

//            scanf("%c", &ch); // 尝试获取字符 q

//        } else { // 获取到了数字

//            sum += input;

//        }

//        while(getchar() != '\n')  ;

//    }

//    

//    

//    printf("求得的和为:%d\n", sum);

    

    

    

    

    

    

    

    

    // 1, 随意的输入内容,如果按q结束

//    char ch;

//    printf("Teacher:~ apple$ ");

//    scanf("%c", &ch);

//    

//    while (ch != 'q') {

//        printf("Teacher:~ apple$ ");

//        scanf("%c", &ch);

//        

//    }

    

    

    // 2,添加清除后面输入内容的代码

//    char ch;

//    printf("Teacher:~ apple$ ");

//    while((ch = getchar()) != '\n');

//    

//    while (ch != 'q') {

//        printf("Teacher:~ apple$ ");

//        while((ch = getchar()) != '\n');

//    }

    

    

    // 3, 添加获取数字的代码

//    int count = scanf("%d", &input);  // 123abc

//    if(count != 0) {

//        // 接收到了数字

//    } else {

//        // 没有接收到数字

//    }

//    // 清除后面输入的内容


    

    

    

// 可以输入数据,按下q结束输入

    

//    int count = 0, input, sum = 0;

//    char ch, temp;

//    

//    // 输入数据.验证是否为数字,如果不是数字,获取第一个字符

//    count = scanf("%d", &input);

//    if(count > 0) { // == 1, != 0

//        // 说明数字已经存储到 input 中了

//        

//        sum += input;

//        

//    } else {

//        // 没有输入数字,需要验证一下是否为 q

//        

//        scanf("%c", &ch);

//    }

//    // 忽略后面的输入内容

//    while( (temp = getchar()) != '\n') ;

//    

//    while(ch != 'q') {

//    

//        // 在该循环中应该完成什么?

//        // 循环的目的是为了再次可以输入数字

//        

//        count = scanf("%d", &input);

//        if(count > 0) { // == 1, != 0

//            // 说明数字已经存储到 input中了

//            

//            sum += input;

//            

//        } else {

//            // 没有输入数字,需要验证一下是否为 q

//            

//            scanf("%c", &ch);

//        }

//        while( ( temp = getchar() ) != '\n') ;

//    }

//    

//    printf("%d\n", sum);

//

    

    

    

    

    

    

   int count = 0, input, sum =0;

   char ch, temp;

    

    //输入数据.验证是否为数字,如果不是数字,获取第一个字符

    count =scanf("%d", &input);

   if(count > 0) {// == 1, != 0

        // 说明数字已经存储到 input 中了

        

        sum += input;

        

    }else {

        //没有输入数字,需要验证一下是否为 q

        

       scanf("%c", &ch);

    }

    //忽略后面的输入内容

   while( (temp = getchar()) !='\n') ;

    

   while(ch != 'q') {

        

        // 在该循环中应该完成什么?

        //循环的目的是为了再次可以输入数字

        

        count =scanf("%d", &input);

       if(count > 0) {// == 1, != 0

            // 说明数字已经存储到 input 中了

            

            sum += input;

            

        }else {

            // 没有输入数字,需要验证一下是否为 q

            

           scanf("%c", &ch);

        }

       while( ( temp = getchar() ) !='\n') ;

        

        

    }

    

   printf("%d\n", sum);

    

    

    

    // 语句

    // while (条件) {

    //     语句

   // }

    


    

   return 0;

}


-----------------------------------------

格式化控制字符串


 // printf("|%10d|\n", 12);

    //保证 %d 输出的数字占10个字符的位置

    

    // img_00.jpg

    // img_01.jpg

    // ...

    // img_10.jpg

    printf("|%05d|\n",123);

    printf("img_%02d.jpg\n",1);


-----------------------------------------------------------


   int i = 0, player, computer;

    // 0, 系统生成数字

    computer =arc4random_uniform(10);// 生成的随机数是0-9(取得到)

    

   printf("%d\n", computer);

    

   while (i < 3) {

        

        // 1, 提示用户输入

       printf("请输入数字\n");

       scanf("%d", &player);

        

       // 2, 判断

       if(computer == player) {

           printf("恭喜答对了\n");

           return 0;

        

        }else if(player > computer) {

           printf("输入的数字太大了, ");

        }else {

           printf("输入的数字太小了, ");

        }

        

        i++;

    }

    

    //如果走到了这里,说明三次都没有答对

    printf("您的次数已经使用完了,很可惜...\n");

    

    return 0;

-----------------------------------------逻辑$-----------------------------------------------------------

 while 循环专门针对先判断再循环的例子

    // do-while循环专门使用在先执行再判断的条件中

   /*

  

   int count = 0, input, sum =0;

   char ch = '\0', temp;

    

   do {

        count =scanf("%d", &input);

       if(count > 0) {// == 1, != 0

            // 说明数字已经存储到 input 中了


            sum += input;


        }else {

            // 没有输入数字,需要验证一下是否为 q


           scanf("%c", &ch);

        }

       while( ( temp = getchar() ) !='\n') ;

    

    }while(ch != 'q');

    

   printf("%d\n", sum);

    

   return 0;

}


-------------------------------------------打印数字 位数---------------------------------------------------------

int num; // = 1234567;

    printf("请输入一个数字\n");

   scanf("%d", &num);

   int i = 0;

    

//    do {

//        num /= 10;

//        i++;

//    

//    } while (num > 0);

    

   while (num > 0) {

        num /=10;

        i++;

    }

    

   printf("%d\n", i);

    

    return 0;

    

    

    -----------------------------------------------for $-----------------------------------------------------------------------

    

   /*

        在使用 while do-while 循环的时候有一个缺陷

        凡是涉及到计算次数的时候,会有一些习惯上的隐患


        int i = 0;

        while( i < 100 ) {

            代码逻辑

     

            i++;

        }

     

     

        for 循环

        语法:

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

            循环体;

        }

     

        首先执行 表达式1

        判断 表达式2

        进入循环体, 再执行表达式3, 再判断表达式2

        直接跳出循环

     */

    

//    for (; 0;) {

//        

//        int _ = 0;

//    

//    }

//    

//    while(1) {

//        int _ = 0;

//    }

    

    // 使用 for 循环的一般方法

    // for循环专门针对指定次数的循环

    

    

   /*

     

    // 1

    // 循环 100

    for (int i = 0; i < 100; i++) {

        // 循环体

    }

    // 2

    // 循环 100

    for (int i = 1; i <= 100; i++) {

    

    }

    

    // 3

    // 循环 10

    for (int i = 10; i > 0; i--) {

        // printf("%d\n", i);

    }

    

     */

    

    

    

    // 1 加到 100

//    int sum = 0;

//    int i = 0;

//    while( i <= 100) {

//        sum += i;

//        i++;

//    }

    

//    

//    int sum = 0;

//    int i = 0;

//    for (; i <= 100; i++) {

//        sum += i;

//    }

    

    

//    int sum = 0;

//    int i;

//    for (i = 0; i < 100; i++) {

//        

//    }

    

    

//    printf("%d\n", sum);

    

    

    

    // C89 的规范中,变量的定义要求放在执行代码的前面

    

    // printf("123");

    // int num = 10;   // C89 会报错

    

    

    // C99的规范中,说明了,变量可以定义在代码逻辑中间,只要保证使用前定义即可

    

   int sum = 0;

    

//    for (int i = 0; i < 100; i++) {

//        sum += i;

//    }

    

   for (int i =0; i <= 100; sum += i, i++) ;

    

   printf("%d\n", sum);

    

   return 0;

}



    

   /*

        在使用 while do-while 循环的时候有一个缺陷

        凡是涉及到计算次数的时候,会有一些习惯上的隐患


        int i = 0;

        while( i < 100 ) {

            代码逻辑

     

            i++;

        }

     

     

        for 循环

        语法:

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

            循环体;

        }

     

        首先执行 表达式1

        判断 表达式2

        进入循环体, 再执行表达式3, 再判断表达式2

        直接跳出循环

     */

    

//    for (; 0;) {

//        

//        int _ = 0;

//    

//    }

//    

//    while(1) {

//        int _ = 0;

//    }

    

    // 使用 for 循环的一般方法

    // for循环专门针对指定次数的循环

    

    

   /*

     

    // 1

    // 循环 100

    for (int i = 0; i < 100; i++) {

        // 循环体

    }

    // 2

    // 循环 100

    for (int i = 1; i <= 100; i++) {

    

    }

    

    // 3

    // 循环 10

    for (int i = 10; i > 0; i--) {

        // printf("%d\n", i);

    }

    

     */

    

    

    

    // 1 加到 100

//    int sum = 0;

//    int i = 0;

//    while( i <= 100) {

//        sum += i;

//        i++;

//    }

    

//    

//    int sum = 0;

//    int i = 0;

//    for (; i <= 100; i++) {

//        sum += i;

//    }

    

    

//    int sum = 0;

//    int i;

//    for (i = 0; i < 100; i++) {

//        

//    }

    

    

//    printf("%d\n", sum);

    

    

    

    // C89 的规范中,变量的定义要求放在执行代码的前面

    

    // printf("123");

    // int num = 10;   // C89 会报错

    

    

    // C99的规范中,说明了,变量可以定义在代码逻辑中间,只要保证使用前定义即可

    

   int sum = 0;

    

//    for (int i = 0; i < 100; i++) {

//        sum += i;

//    }

    

   for (int i =0; i <= 100; sum += i, i++) ;

    

   printf("%d\n", sum);

    

   return 0;

}



    

   /*

        在使用 while do-while 循环的时候有一个缺陷

        凡是涉及到计算次数的时候,会有一些习惯上的隐患


        int i = 0;

        while( i < 100 ) {

            代码逻辑

     

            i++;

        }

     

     

        for 循环

        语法:

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

            循环体;

        }

     

        首先执行 表达式1

        判断 表达式2

        进入循环体, 再执行表达式3, 再判断表达式2

        直接跳出循环

     */

    

//    for (; 0;) {

//        

//        int _ = 0;

//    

//    }

//    

//    while(1) {

//        int _ = 0;

//    }

    

    // 使用 for 循环的一般方法

    // for循环专门针对指定次数的循环

    

    

   /*

     

    // 1

    // 循环 100

    for (int i = 0; i < 100; i++) {

        // 循环体

    }

    // 2

    // 循环 100

    for (int i = 1; i <= 100; i++) {

    

    }

    

    // 3

    // 循环 10

    for (int i = 10; i > 0; i--) {

        // printf("%d\n", i);

    }

    

     */

    

    

    

    // 1 加到 100

//    int sum = 0;

//    int i = 0;

//    while( i <= 100) {

//        sum += i;

//        i++;

//    }

    

//    

//    int sum = 0;

//    int i = 0;

//    for (; i <= 100; i++) {

//        sum += i;

//    }

    

    

//    int sum = 0;

//    int i;

//    for (i = 0; i < 100; i++) {

//        

//    }

    

    

//    printf("%d\n", sum);

    

    

    

    // C89 的规范中,变量的定义要求放在执行代码的前面

    

    // printf("123");

    // int num = 10;   // C89 会报错

    

    

    // C99的规范中,说明了,变量可以定义在代码逻辑中间,只要保证使用前定义即可

    

   int sum = 0;

    

//    for (int i = 0; i < 100; i++) {

//        sum += i;

//    }

    

   for (int i =0; i <= 100; sum += i, i++) ;

    

   printf("%d\n", sum);

    

   return 0;

}



    

    

   /*

        在使用 while do-while 循环的时候有一个缺陷

        凡是涉及到计算次数的时候,会有一些习惯上的隐患


        int i = 0;

        while( i < 100 ) {

            代码逻辑

     

            i++;

        }

     

     

        for 循环

        语法:

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

            循环体;

        }

     

        首先执行 表达式1

        判断 表达式2

        进入循环体, 再执行表达式3, 再判断表达式2

        直接跳出循环

     */

    

//    for (; 0;) {

//        

//        int _ = 0;

//    

//    }

//    

//    while(1) {

//        int _ = 0;

//    }

    

    // 使用 for 循环的一般方法

    // for循环专门针对指定次数的循环

    

    

   /*

     

    // 1

    // 循环 100

    for (int i = 0; i < 100; i++) {

        // 循环体

    }

    // 2

    // 循环 100

    for (int i = 1; i <= 100; i++) {

    

    }

    

    // 3

    // 循环 10

    for (int i = 10; i > 0; i--) {

        // printf("%d\n", i);

    }

    

     */

    

    

    

    // 1 加到 100

//    int sum = 0;

//    int i = 0;

//    while( i <= 100) {

//        sum += i;

//        i++;

//    }

    

//    

//    int sum = 0;

//    int i = 0;

//    for (; i <= 100; i++) {

//        sum += i;

//    }

    

    

//    int sum = 0;

//    int i;

//    for (i = 0; i < 100; i++) {

//        

//    }

    

    

//    printf("%d\n", sum);

    

    

    

    // C89 的规范中,变量的定义要求放在执行代码的前面

    

    // printf("123");

    // int num = 10;   // C89 会报错

    

    

    // C99的规范中,说明了,变量可以定义在代码逻辑中间,只要保证使用前定义即可

    

   int sum = 0;

    

//    for (int i = 0; i < 100; i++) {

//        sum += i;

//    }

    

   for (int i =0; i <= 100; sum += i, i++) ;

    

   printf("%d\n", sum);

    

   return 0;

}





------------------- for 循环的嵌套 ----------------------------------------
乘法口诀表


 for(int j =1; j < 10; j++) {

       for (int i =1; i <= j; i++) {

           printf("%d*%d=%d\t", j, i, j * i);

        }

       printf("\n");

    }




    ------------------------三角形----------------------------------------------------------------------------------------------

   /*

        *

        **

        ***

        ****

        *****

     

     */

//    

//    for(int i = 1; i < 30; i++) {

//        for (int j = 1; j <= i; j++) {

//            printf("*");

//        }

//        printf("\n");

//    }

    

    

   /*

        1

        22

        333

        4444

     

     */

//    for(int i = 1; i < 30; i++) {

//        for (int j = 1; j <= i; j++) {

//            printf("%02d ", i);

//        }

//        printf("\n");

//    }


    

    

   /*

            *       1   3

           ***      2   2

          *****     3   1

         *******    4   0

     

        n 1 开始

        2n - 1

     */

   int totalRow = 10;  // total 总数  row

   for (int i =1; i <= totalRow; i++) {

        // 打印空格, 打印的空格数 总行数 - 行号  4 - 1

       for (int j =1; j <= totalRow - i; j++) {

           printf(" ");

        }

        

       for (int j =1;  j <= 2 * i -1; j++) {

           printf("*");

        }

       printf("\n");

    }

    

//    for (int i = totalRow; i > 0; i--) {

//        // 打印空格, 打印的空格数 总行数 - 行号  4 - 1

//        for (int j = 1; j <= totalRow - i; j++) {

//            printf(" ");

//        }

//        

//        for (int j = 1;  j <= 2 * i - 1; j++) {

//            printf("*");

//        }

//        printf("\n");

//    }


    

   /*

     

        *

       ***

      *****

     *******

      *****

       ***

        *

     

     */

    

   return 0;

}







    ------------------------对倒三角----$------------------------------------------------------------------------------------------


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

    

   int totalRow = 10;

   for (int i =0; i < totalRow; i++) {

        //这里应该打印每一行的内容

        

       // 打印的空格

       for (int j =0; j < totalRow - 1 - i; j++) {

           printf(" ");

        }

        

       for (int j =0; j < 2 * i +1; j++) {

           printf("*");

        }

       printf("\n");

    }

    

-----------

    

   for (int i =1; i < totalRow; i++) {

        

        // i行就打印i个空格

       for (int j =0; j < i; j++) {

           printf(" ");

        }

        

       for (int j =0; j < 2 * (totalRow - i) -1; j++) {

           printf("*");

        }

       printf("\n");

    }


    

    return 0;


    -------------------------------------------函数---------------------------------------------------------------------------

函数 function

    函数这个概念是由数学概念引入

    在其他的编程语言中,都有函数的概念(函数\方法\过程)

 

    什么是函数,代码的打包

    

    我们希望将重复使用的代码,包装成一个名字,然后如果要使用这个代码,就直接调用名字即可

 

    函数是复用的机制的体现



    我们根据函数的返回值可以将函数分为

        有返回值的函数

        无返回值的函数

    根据函数的参数使用情况

        有参数函数

        无参数函数

    

    无参无返回函数

    有参无返回函数

    有参有返回函数

    无参有返回函数

 

 

    函数定义的语法:

 

    返回值类型 函数名(函数的形式参数列表) {

        函数体

    }

 

 

    1)返回值类型

        表示函数执行完成以后得到的结果的类型

        例如一个函数执行完成以后要有一个数字返回,就写成int,如果是小数,可以写成floatdouble

        如果没有返回值,表示函数执行完成,不需要变量接收返回值,那么就写 void

    2)函数名

        函数名表示函数的唯一标识(标识符),如要调用函数,就需要使用这个名字

        C 语言中函数名不允许重复

        OC 中也不支持函数的重载,也没有函数名相同的表示

        swift 支持重载

    3)函数的形式参数

        表示函数调用时需要接收的参数,如果没有参数,可以不填

        如果需要接收参数,那么需要定义与参数个数相同的变量

        例如,要接收两个数字,一个是int,一个是double,那么就写成

        ... func(int num, double dNum) { ... }

    4)函数体

        就是函数的执行代码.函数在执行的时候,会从上往下,从左到右的执行

        如果函数没有返回值,那么不需要添加 return语句, 但是如果添加了 return表示函数的结束

        如果函数有返回值,注意, return后要跟需要返回的结果

    5)一般函数的定义都会放在 main函数的前面,否则需要添加函数的声明

        只需要将除了花括号的函数体放到前面即可,这个就是函数的声明

 

 



    -------------------------------------返回最大值的函数---------------------------------------------------------------------------------

int getMax(int num1,int num2) {

   int max;

   if(num1 > num2) {

        max = num1;

    }else {

        max = num2;

    }

   return max;

    

    // return num1 > num2 ? num1 : num2;

}



    ------------------------------------转译--函数--------------------------------------------------------------------------------


void printWord(int num) {

   switch (num) {

       case 0:printf("");break;

       case 1:printf("");break;

       case 2:printf("");break;

       case 3:printf("");break;

       case 4:printf("");break;

       case 5:printf("");break;

       case 6:printf("");break;

       case 7:printf("");break;

       case 8:printf("");break;

       case 9:printf("");break;

       case 10:printf("");break;

    }

}


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

    

    printf("请输入数字!\n");

   int input, num1, num2;

   scanf("%d", &input);

    num1 = input /10;

    num2 = input %10;

    

   if(input == 10) {

        

       printWord(10);

        

    }else if(num2 ==0) {

       printWord(num1);

       printWord(10);

        

    }else if(num1 ==1) {

       printWord(10);

       printWord(num2);

    }else {

       printWord(num1);

       printWord(10);

       printWord(num2);

    

    }

    

   printf("\n");

    

   return 0;

}




    ------------------------------------输入 数字--返回int-------------------------------------------------------------------------------

// 要输入一个数字,那么函数需要返回 int

// 那么要求用户输入错误,需要重新输入,换句话说要有一个循环

int inputNum() {


    

//    while(1) {

//        count = scanf("%d", &num);

//    

//        if(count == 0) {

//            输入有误

//        

//        } else {

//            成功

//        }

//        

//    }

    

    

   int count = 0, tempNum;

    

   while (1) {

        

        // printf("请输入数字: ");

       printf("> ");

        count =scanf("%d", &tempNum);

        

         // 取消多余的字符

       while(getchar() !='\n');


       if(count > 0) {

           break;

        }

        

               

       // 输入有误

        // printf("输入有误, ");

    }

    

   return tempNum;

}



    ------------------------------------------------带参数的输入数字的函数$---------------------------------------------------------


// 函数需要用户输入一个数字,然后返回该数字

int inputNum1() {

   int temp ;

   scanf("%d", &temp);

    

   return temp;

}

// 如果用户输入有误,要求重新输入

int inputNum2() {

   int count, temp;

    

    // 先输入,在判断是否正确(do-while)

    // 这里使用 while 死循环 + break

   while(1) {

       printf("$ ");

        count =scanf("%d", &temp);

        // 去除多余的字符

       while(getchar() !='\n');

        

        // 如果输入正确,count == 1

        // 否则是为 0

       if(count > 0) {

           break;

        }

    }

   return temp;

}



// 函数内调用一个函数(函数的嵌套调用)

int inputNum3() {

    printf("请输入一个数字\n");

    returninputNum2();

}



// 允许输入字符串,带有字符串参数的函数应该怎么写?

void printString1(char *str) {

   printf(str);

}


int inputNum4(char *msg) {

   printf(msg);

    // 判断字符串结尾是不是 \n 如果不是 \n 就打印 \n,否则不打印 \n

   printf("\n");

    returninputNum2();

}




// range 表示范围

int inputNumWithRange(int min,int max) {

   int count, temp;

    

    // 先输入,在判断是否正确(do-while)

    // 这里使用 while 死循环 + break

   while(1) {

       printf("$ ");

        count =scanf("%d", &temp);

        // 去除多余的字符

       while(getchar() !='\n');

        

        // 如果输入正确,count == 1

        // 否则是为 0

       if(count > 0 && ( temp >= min && temp < max )) {

           break;

        }

    }

   return temp;

}



int inputNum5(char *msg,int min, int max) {

    

   printf(msg);

   printf("\n");

    

   int temp = inputNumWithRange(min, max);

   return temp;

}



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

   

    

   int num1 = inputNum5("请输入第一个数字",0, 100);

   int num2 = inputNum5("请输入第二个数字",16, 70);

    

    

    

   return 0;

}








-------------

    ---------------------形参---实参----------------------------------------------------------------------------------------------

形参与实参的概念

    形参就是形式参数,就是函数定义的时候写的参数

    实参就是实际参数,就是函数调用时传递的参数

 

 

    值传递

    函数在调用的时候,会将参数复制一份,然后再赋值给形式参数

    一句话:函数里和函数外是两个不同的变量,只是值刚好相等






    -----------------------------------递归----$------------递推运算---------
-------------------------------------

  递归就是函数直接调用自己或间接调用自己

 

 */


// 直接递归

// 死递归

//void func() {

//

//    

//    func();

//    

//    // 栈溢出的错误

//}

// 间接递归

//void func1();

//void func2();

//

//

//void func1() {

//    func2();

//}

//

//void func2() {

//    func1();

//}





// 需要使用递归帮助我们完成指定任务,那么就需要递归保证两个条件

//                                                1,需要有临界跳出条件

//void func() {

//    if( 条件 ) return;

//    

//    func();

//}

//                                                   2, 需要有递归体




    -----------------------------------------$---Fibonacci 数列---------------------------------------------------------------------
数列 

1 1 2 3 5 8 13 21 ...


int fib(int n) {

   if( n == 0 || n ==1 ) {

       return 1;

    }

    return

       fib(n - 1)

        +

       fib(n - 2);

}

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

    

//    fib(6);

    

   for (int i =0; i < 10; i++) {

       printf("%d\n",fib(i));

    }

   return 0;

}



    ---------------------------------阶乘---指数----------------------------------------------------------------------------------

表示 9 * 8 * 7 * 6 * ... * 1

int func(int n) {

   if( n == 1 )return 1;

   return n * func(n -1);

}




// 计算指数函数

// 2 ^ 3    2 * 2 * 2

// power(n, m)   计算 n^m


// 2^3 == 2^2 * 2

// 3^4 == 3^3 * 3

// (3, 4) == (3, 3) * 3

// (2, 6) == (2, 5) * 2

// (n, m) == (n, m - 1) * n


// 2^1 = 2^0 * 2



int power(int n,int m) {

   if(m == 0) return 1;

   return power(n, m -1) * n;

}




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

//    for(int i = 1; i <= 12; i++) {

//        printf("%d的阶乘是 %d\n", i, func(i));

//    }

    

    

   for (int i =0; i < 10; i++) {

       printf("2 %d次方是\t%d\n", i,power(2, i));

    }


   return 0;

}



    --------------------------------------------首递归---尾递归-----------------------------------------------------------------------



void func1(int n) {

   printf("%d\n", n);

    

   if(n > 0) {

       func1(n - 1);

    }

    // 没有表达式了

}


void func2(int n) {

    // 前面没有表达式

   if(n > 0) {

       func2(n - 1);

    }

   printf("%d\n", n);

}





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

    

   func1(3);

    

   return 0;

}






    ----------------------------------------带范围的函数------------------------------------------------------------------------------



头文件使用

    "" 表示在当前 main所在的文件夹下找,如果没有再到系统文件夹下去找

    <> 就是在系统文件夹下去找




int inputNumWithRange(int min,int max) {

   int count, temp;

   while(1) {

        printf("$ ");

        count = scanf("%d", &temp);

       while(getchar() != '\n');

       if(count > 0 && ( temp >= min && temp < max )) {

           break;

        }

    }

   return temp;

}


int inputNum5(char *msg,int min, int max) {

    

    printf(msg);

    printf("\n");

    

   int temp = inputNumWithRange(min, max);

   return temp;

}




    ----------------------------------------------------------------------------------------------------------------------




void func2(int n) {

    

    

    // 前面没有表达式

    if(n > 0) {

        func2(n - 1);

    }

   printf("%d\n", n);

}


// func2(3) -> func2(2) -> func2(1) -> func2(0) !-> func2(-1)




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

    

    func2(3);

    

    

    return 0;

}




1

2

3



    ----------------------------------------------------------------------------------------------------------------------


    ----------------------------------------------------------------------------------------------------------------------


    ----------------------------------------------------------------------------------------------------------------------


    ----------------------------------------------------------------------------------------------------------------------



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值