zoukankan      html  css  js  c++  java
  • 3 算法、控制结构

    +一个完成某种特定任务的过程可分解成一组操作步骤,这组操作步骤即构成一个算法

    +算法结构
    顺序结构
    选择结构
    循环结构

    +条件
    布尔类型及相关运算符

    +布尔类型bool
    true false 1个字节

    #include <iostream>
    using namespace std;
    
    int main()
    {
      bool x=true;
      cout<<x<<endl;//true被显示为1
    }
    
      int y;
      y=x;//将bool型变量x赋值给int型变量y,c++将自动转换类型,true被转换成1
      cout<<y<<endl;
    
      x=5;//将int型常量5赋值给bool型变量x,5被转换为true,即非0值转为true
          // 此时编译系统会提示warning
      cout<<x<<endl;//显示变量x的值,true被显示为1
      return 0;
    

    +关系运算符

    比较结果为bool类型

    +逻辑运算符

    一、选择语句
    if (表达式)
    {语句}
    else
    {语句}

    if(表达式)语句;
    else if(表达式)语句;
    else 表达式;

    switch - case

    //求倒数
    #include <iostream>
    using namespace std;
    
    int main()
    {
      double x;
      cin>>x;
    
      if(x!=0)
      {
        double y;
        y=1/x;//求x的倒数,结果赋值给y
        cout<<y;//显示y的值,即x的倒数
      }
      else
        cout<<"0的倒数没有意义";
      return 0;
    }
    
    //判断闰年
    #include <iostream>
    using namespace std;
    
    int main()
    {
      int year;
      cin>>year;
    
      if((year%4==0&&year%100!=0)||year%400==0)//闰年判断条件
        cout<<year<<"是闰年"<<endl;
      else
        cout<<year<<"不是闰年"<<endl;
      return 0;
    }
    

    +条件运算符"?"
    int a=5,b=10,c;
    if(a>b)c=1;
    else c=b;
    表达式?表达式1:表达式2
    如果表达式结果为true,则计算表达式1,将其结果作为整个条件表达式的结果;否则计算表达式2,将其结果作为整个条件表达式的结果
    3目运算符,优先级为13,结合性从右到左
    c=a>b?a:b;

    +switch-case
    多分支
    switch(表达式)
    {
    case 常量表达式1:语句1;
    case 常量表达式2:语句2;

    default:语句//功能完成退出
    //break语句跳出switch语句,继续执行switch语句的下一条语句,即return语句
    return 0;
    }

    二、循环语句
    求解:奇数数列1 3 5 7 9.....前N项的累加和

    循环结构: 如果条件成立,则重复执行循环体,否则结束循环
    循环4要素: 循环变量及其初始值、循环条件、循环体
    +while语句
    while(表达式)
    语句

    循环条件一开始就不成立,则循环体一次也不执行。循环条件一致为true,循环体将无休止地执行,俗称为死循环

    #include <iostream>
    using namespace std;
    
    int main()
    {
      int N;
      cin>>N;
      int n=1,sum=0;//定义循环变量n(初始值为1)
            //定义保存累加结果的变量素描(初始值0)
      while(n<=N)
      {
        sum+=2*n-1;//当前项的值2n-1累加到sum上
        n++;//将n加1,准备下一次累加,该语句使得循环条件n<=N趋向于false
              //执行完循环体最后一个语句之后,转到while重新判断循环条件
      }
      //循环结束后,继续执行while语句的下一条语句
      cout<<sum<<endl;
      return 0;
    }
    

    +do-while
    do
    语句
    while(表达式);

    +for 语句
    for(表达式1;表达式2;表达式3)
    语句

    +逗号运算符 ,
    表达式1,表达式2,....,表达式n
    将最后一个表达式的结果作为整个逗号表达式的结果
    逗号运算符的优先级为15(最低),结合性为从左到右

    三、控制语句
    造成程序执行顺序跳转的语句被统称为控制语句

    break 结束循环 ,跳出switch 继续执行下一条switch
    continue 结束本次循环,转入下一次循环

    四、算符设计与评价
    +算法应具有的5个特性
    有穷性:执行步骤有限
    确定性:算法每个步骤必须有明确的定义,不能含糊不清,或有二义性
    有效性:算法的每个步骤应该能被计算机执行,并得到有效的结果
    输入: 算法可以有0个或多个输入,输入是算法处理的原始数据
    输出:算法至少有一个输出,输出是算法处理的结果
    +计算复杂度
    O(1)
    x*=x;

    O(N)
    for(int n=1;n<=N;n++) x*=x;

    决定计算机执行算法所需要的时间

    #include <iostream>
    using namespace std;
    
    int main()
    {
      int x;
      cin>>x;
     
      bool yes_no=true;
      for(int n=2;n<x;n++)
      {
        if(x%/n==0)//如果x能被某个n整除,zex就不是素数
        {
          yes_no=false;break;
        }
        //如果x不能被n整除,则yes_no 保持为true不变,继续检查下一个数
      }
      if(yes_no==true)  cout<<"是素数"<<endl;
      else cout<<"不是素数"<<endl;
      return 0;
    }
    
    

    +内存占有量

    求反正切(arctan)函数的算法设计

    #include <isostream>
    using namespace std;
    int main()
    {
      double x;
      cin>>x;//输入正切值x
      double sum=0;//sum用于保存累加和
      int n=0;//n用于保存当前的数列项序号,初始值为0
      double a=x;//a用于保存数列项分子的值,初始值等于x
      double b=1;//b用于保存数列项分母的值,初始值为1
      double f;//f用于保存数列项的值
      do
      {
        f=a/b;
        sum=((n%2==0)?sum+f:sum-f);//偶数项做加法,奇数项做减法
        n++;//数列项序号加1,准备累加下一项
        a*=x*x;b+=2;//计算出下一项的分子和分母
      }//while(f>1e-5);//循环条件为f(n)>=10^-5
      //循环结束后,sum中保存的是反正切函数的结果(以弧度为单位的角度)
      cout<<sum*180/3.1415926<<endl;//将弧度单位转换成以度为单位,显示结果
      return 0;
    }
    
  • 相关阅读:
    leetcode 283. 移动零
    leetcode 547. 朋友圈
    【剑指offer37】二叉树的序列化
    腾讯数据岗
    华为笔试题2
    华为笔试题1
    leetcode 分割回文串
    leetcode 正则表达式匹配
    leetcode241 为运算表达式设计优先级
    leetcode 44. 通配符匹配
  • 原文地址:https://www.cnblogs.com/OceanF/p/9246802.html
Copyright © 2011-2022 走看看