暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第三天C语言:流程控制

瓶子的跋涉 2023-01-03
330

目录

 流程控制

      • 空语句

      • if注意

      • 强制转换

      • 判断浮点数x是否为零 

      • 自增

      • break  和 continue

            数组:

      • 为什么需要数组

      • 数组分类

        • 一维数组

        • 二维数组

        • 多维数组


小练习代码

  • 判断一个数是否是素数

  • 判断一个数字是否是回文数

  • 编程实现求一个十进制数字的二进制形式

  • 求一个数字的每位是奇数的数字取出来组合成的新数字

  • 求一个数字倒过来的数字

  • 费波纳茨序列 (空白符):又叫制表符,换行符,在scanf 用空格


内容

空语句:

    if(1 > 2) ;  //分号加在此,空语句后面的语句和if没有关系


    if注意

    •     即便表达式1和2的语句都成立,也只会执行表达式1符合的语句。

    •     esle 后面没有表达式,若有表达式必须+if


    强制类型转换:

      (数据类型)(表达式)


      功能:把表达式的值强制转化为前面所执行的数据类型

      例如:

        (int)(4.5+2.2)   //最终值是 6
        (float)(5)       // 最终值是 5.000000

        注意:

          int i ;
          float sum;


          sum = sum + 1.0 i; 推荐使用
          //也可以这样写
          sum = sum + 1 / (float)(i) ;

          浮点数的存储所带来的问题:

              float 和 double 都不能保证可以精确的存储一个小数。

          注意:有一个浮点型变量x,如何判断x的值是否是零。

            if(|x-0.000001| <= 0.000001) 
               是
            else
              不是


            为什么会出现自增

            • 代码更加精炼

            • 自增的速度更快

            学习自增要明白的几个问题

            • 编程时应该尽量屏蔽掉自增和自增的差别

            • i++和++i单独成一个语句,不要把它作为一个完成复合语句的一部分来使用。


            break 和 continue

            • break如果用于循环是用于终止循环

            • break如果用于switch,则是用于终止switch

            • break只能终止距离最近的循环(for或者switch)

            • break不能直接用于if,除非if属于循环内部的一个子句

              for(i = 0; i < 3; ++i)
              {
                if (3 > 2)
                  break;   //break虽然是if内部的语句,但break终止的是外内的for循环
                printf("嘿嘿!");
              }

              continue

              • 用于跳过本次循环余下的语句,转去判断是否需要执行下次循环


              数组:为了解决大量同类型数据的存储和使用问题,为了模拟现实世界

              一维数组:为n个变量连续分配内存空间,所有变量的数据类型必须相同,所有变量所占的字节大小必须相等。

                int a[5] = {1,2,3,4,5};   //完全初始化
                int a[5] = {1,2,3};  // 不完全初始化,未被初始化的元素自动为零
                int a[5]; // 不初始化,所有元素的垃圾值
                int a[5]={0};  // 清零
                // a单独时代表数组第一个元素的地址,每个元素时是单独的变量

                注意:

                • 只有在定义数组的同时才可以整体赋值,其它情况下整体赋值都是错误的。

                • 如果要把a数组中的值全部复制给b数组,使用for循环一个一个的复制

                  #define _CRT_SECURE_NO_WARNINGS
                  #include <stdio.h>
                  int main(void)
                  {
                  int a[5];
                  int i;
                  scanf("%d", &a[0]);
                  printf("a[0] = %d\n", a[0]);
                  scanf("%d", &a[3]);
                  printf("a[3] = %d\n", a[3]);
                  //输出全部
                  for (i = 0; i < 5; i++)
                  {
                  printf("数组a[%d]的值是%d\n", i, a[i]);
                  }
                  return 0;
                  }

                  练习

                  把一个数组元素给全部倒过来

                    #define _CRT_SECURE_NO_WARNINGS
                    #include <stdio.h>
                    int main(void)
                    {
                    int a[7] = { 1,2,3,4,5,6,7 };
                    int i, j, t;
                    i = 0;
                    j = 6;
                    while (i < j)
                    {
                    t = a[i];
                    a[i] = a[j];
                    a[j] = t;


                    i++;
                    j--;
                    }
                    for (int j = 0; j < 7; j++) {
                    printf("a[%d]的值是%d\n", j, a[j]);
                    }
                    return 0;
                    }

                    二位数组:

                      int a[3][4];

                      总共是12个元素,可以当作3行4列看待,这12个元素的名称依次是

                        a[0][0] ,a[0][1],a[0][2],a[0][3]
                        a[1][0] ......
                        ......
                        a[i][j]  //  表示 i+1 行,j+1 列


                        int a[m][n]; // 该二维数组右下角位置的元素只能是a[m-1][n-1]

                        二维数组初始化

                          int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};


                          int a[3][4] =
                          {
                          {1, 2, 3, 4},
                          {5, 6, 7, 8},
                            {9,10,11,12}
                            };

                          二维数组的输出

                            #define _CRT_SECURE_NO_WARNINGS
                            #include <stdio.h>
                            int main(void)
                            {
                            int a[3][4] =
                            {
                            {1, 2, 3, 4},
                            {5, 6, 7, 8},
                            {9,10,11,12}
                            };


                            for (int i = 0; i < 3; i++)
                            {
                            for (int j = 0; j < 4; j++)
                            {
                            printf("%-5d",a[i][j]);
                            //-5d意思是 -代表左对齐,5代表每个元素五个位置
                            }
                            printf("\n");
                            }
                            return 0;
                            }

                            是否存在多维数组

                            • 不存在

                            • 因为内存是线性一维的

                            • n维数组可以当作每个元素是n-1维数组的一维数组

                              int a[3][4];
                              //该数组是含有3个元素的一维数组,只不过每个元素都可以再分成4个小元素
                              int a[3][4][5];
                              //该数组是含有3个元素的一维数组
                              // 只不过每个元素都是4行5列的二维数组


                              1,判断素数;

                                #define _CRT_SECURE_NO_WARNINGS
                                #include <stdio.h>
                                /*
                                * 判断素数:素数是除了能被1和自身整除,不能被其它数整除的数


                                */
                                int main(void)
                                {
                                int n;// 存储素数
                                printf("请输入你要判断的数:");
                                scanf("%d", &n);
                                for (int i = 2; i < n ; i++)
                                {
                                if (n % i == 0)//代表整数可以被i整除,没有余数,则不是素数
                                {
                                printf("%d不是素数\n", n);
                                break; //只要有一个证明就跳出for循环
                                }
                                else
                                {
                                if (i == n - 1)
                                {
                                printf("%d是素数\n", n);
                                }
                                continue;
                                }
                                }


                                return 0;
                                }

                                2,判断回文数

                                  #define _CRT_SECURE_NO_WARNINGS
                                  #include <stdio.h>
                                  #include <stdlib.h>
                                  /*
                                  * 回文数数字正着和倒着结果相同
                                  * 例如:12321
                                  持续输入循环
                                  回文数输出yes
                                  非 NO


                                  */
                                  int main(void)
                                  {
                                  int val; //存放回文数
                                  int sum=0;
                                  int m;
                                  while (1) //不断循环
                                  {
                                  printf("请输入你要判断的数:");
                                  scanf("%d", &val);


                                  m = val;


                                  while (m)
                                  {
                                  sum = sum * 10 + m % 10;
                                  m = m 10;
                                  }
                                  if (sum == val) //是回文数
                                  printf("Yes\n");
                                  else
                                  printf("No\n");
                                  system("pause"); // 暂停输入结果
                                  system("cls"); // 清空cmd
                                  }
                                  return 0;
                                  }


                                  3.1,十进制转二进制

                                    #define _CRT_SECURE_NO_WARNINGS
                                    #include <stdio.h>
                                    /*
                                    * 将十进制转化为二进制
                                    * 两种方式
                                    * 1,使用数组存储实现倒序
                                    *,2,使用函数递归实现倒序
                                    */
                                    int main(void)
                                    {
                                    int n;
                                    int i = 0;
                                    printf("请输入你要转换成二进制的数:");
                                    scanf("%d", &n);
                                    int m[20];
                                    do
                                    {
                                    m[i] = n % 2; //余数
                                    printf("%d\n", m[i]);
                                    n = n / 2;
                                    i++;

                                    } while (0 != n);
                                    //倒序输出数组
                                    for (int j = i - 1; j >= 0; j--)
                                    {
                                    printf("%2d", m[j]);
                                    }
                                    printf("\n");
                                    return 0;
                                    }

                                    3.2,通过函数递归的方式实现进制转换:

                                      #define _CRT_SECURE_NO_WARNINGS
                                      #include <stdio.h>
                                      /*
                                      * 将十进制转化为二进制
                                      * 两种方式
                                      * 1,使用数组存储实现倒序
                                      *,2,使用函数递归实现倒序
                                      */
                                      void to_binary(int m)
                                      {
                                      int i,j;
                                      i = m / 2;
                                      j = m % 2;
                                      if (i != 0)
                                      {
                                      to_binary(i);
                                      }
                                      printf("%d", j);
                                      }


                                      int main(void)
                                      {
                                      int n;
                                      int i = 0;
                                      printf("请输入你要转换成二进制的数:");
                                      scanf("%d", &n);
                                      to_binary(n);
                                      printf("\n");
                                      return 0;
                                      }

                                      6,费波纳茨序列

                                        #define _CRT_SECURE_NO_WARNINGS
                                        #include <stdio.h>
                                        #include <stdlib.h>
                                        /*
                                        * 费波纳茨序列
                                        * 1 2 3 5 8 13 21 34
                                        * 除了前两项,其余都是前面两项之和


                                        */
                                        int main(void)
                                        {
                                        int n; //输出第几项的费波纳茨序列
                                        int f1, f2, f3;
                                        char ch ;
                                        do
                                        {
                                        f1 = 1;
                                        f2 = 2;
                                        f3 = 3;
                                        printf("请输入你要查找的费波纳茨序列:");
                                        scanf("%d", &n);
                                        if (1 == n)
                                        printf("%d\n", f1);
                                        else if (2 == n)
                                        printf("%d\n",f2);
                                        else
                                        {
                                        for (int i = 3; i <= n; i++)
                                        {
                                        f3 = f1 + f2;
                                        f1 = f2;
                                        f2 = f3;
                                        }
                                        printf("第%d项的费波纳茨序列是%d\n", n, f3);
                                        }
                                        //system("pause");
                                        printf("你想终止循环吗?Y/N:");
                                        scanf(" %c", &ch); // %c前必须加空格,空格符,制表符,换行符,统称为空白符
                                        //system("cls");
                                        }
                                        while ('Y' == ch || 'y' == ch );
                                        return 0;
                                        }


                                        文章转载自瓶子的跋涉,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                        评论