zoukankan      html  css  js  c++  java
  • C++笔记(2)——一些语法基础知识以及基本算法知识

    今天和PAT无直接相关的关系,主要是关于一些语法/算法的笔记,因为我发现自己的基础还没有打扎实,有些时候看别人的代码还会觉得一头雾水,不明白代码的含义。

    一些C/C++语法

    先从语法开始吧。这部分很琐碎简单,如果没兴趣的话建议跳过(毕竟其实是很基础的东西,而且主要是C)。

    注意scanf("%d", &a);中的&,一定要有。

    不要同时使用coutprintf,否则会出BUG。建议刷题的时候使用scanfprintf,更加省时。

    通常<stdio.h>之类的库在C++中用<cstdio>来代替,例如#include <stdio.h>换成#include <cstdio><cstdio>, <cmath>, <cstring>

    数据类型 大致范围 占用位数 备注
    int -2*109~2*109 32
    long long -9*1018~9*1018 64 long long bignum = 123456789012345LL一定要有LL
    float 6~7位精度 32 尽量别用,1位符号8位指数23位尾数
    double 15~26位精度 64 1位符号11位指数52位尾数,double和float都是%f作为输出格式
    char -128~+127 8 输出格式:%c
    bool 0/1 1 0False/1True

    强制转换类型:(int)a

    设置常数:const double pi=3.14159;,推荐使用这种方式而不是直接用#define来设置常数。

    注意关系运算符的写法是<=>=

    逻辑运算符:&&||!

    位运算符:<<>>&~|^

    注意数组名称本身代表了数组第一个元素的地址,所以不需要再加取地址运算符。

    如果要输入“3 4”之类用空格隔开的两个数字,两个%d之间可以不加空格,因为除了%c,scanf对其他格式的输入是以空白符为结束判断标志的,所以会自动跳过空格。

    此外,%c是可以读入空格和换行的。

    可以用getchar来输入字符,例如c1 = getchar();

    练习

    先上个输入输出的,这里是codeup题号为1000的练习,直接给出源代码:

    #include <cstdio>
    
    using namespace std;
    
    int main(void){
        int first, second;
        while(scanf("%d%d", &first, &second)!=EOF){
            printf("%d
    ", first + second);
        }
    }
    

    多点测试,要注意codeup是一次性给出所有的测试数据,是多点测试,代码必须要能够处理所有数据的输入,后台指挥运行代码一次来测试不同的数据,这点和PAT不同。

    常用的math函数

    这里的函数在使用的时候要记得#include <math.h>

    fabs(double x)

    取绝对值,例子:

    int main(){
        double db = -12.56;
        printf("%.2f
    ", fabs(db));
        return 0;
    }
    

    输出的结果:

    12.56
    

    floor(double x)ceil(double x)

    就是向下取整和向上取整(floor,地板,向下,ceil天花板,向上),具体用法和fabs类似,不重复了。

    pow(double r, double p)

    就是计算幂函数,返回值是(r^p),例如pw(2.0, 3.0)返回(2^3 = 8)

    sqrt(double x)

    取开方。

    log(double x)

    就是取以自然对数为底的对数。

    sin(double x)cos(double x)tan(double x)asin(double x)acos(double x)atan(double x)

    三角函数,不解释。

    round(double x)

    四舍五入取整。

    练习

    很简单的练习,这里就不放代码了,练习地址

    冒泡排序

    这个是最基础的算法,本质就是交换,每次都通过交换的方式把当前剩余元素的最大值移动到一端,当剩余元素减少为0的时候排序结束。给个图理解下:

    上图只是其中一次,类似上面的步骤要执行多几次,直到所有的元素都是按照从小到大的顺序排列为止。

    直接上代码:

    上图代码来自书《算法笔记》,作者是胡凡。强烈建议自己敲一遍,不要复制。

    本博客文章默认使用CC BY-SA 3.0协议。
  • 相关阅读:
    Local File Manage in JavaScript Using FileSystemObject
    How to Register COM in VS
    Permission Error When Building C++ in VS2010
    Upload and Download File using Java
    JavaScript Interactive with ActiveX Control
    一个完整的Installshield安装程序实例
    一个.NET(C#)的双键字典类
    C#实现内存中字符串或byte[]的加解密
    判断请求是否来自 AJAX
    Reflector 7.3.018
  • 原文地址:https://www.cnblogs.com/yejianying/p/cpp_notes_2.html
Copyright © 2011-2022 走看看