c++语法快速入门

c++语法快速入门

准备研究生复试,刷算法题前看了看书前的语法快速入门
本着随便看看的态度来看的,但还是发现了很多以前的盲点,我列举如下

  1. c++的cout和cin看似简单许多,且不用填写类型,可实际上运行起来极为耗时,所以c与c++混用时,不应偷懒用cout,cin,而是要用scanf和printf
  2. 建议使用.cpp文件进行编辑
  3. 浮点数优先double类型,因为其精度更高
  4. scanf对于double是“%lf”,而printf对于double是“%f”
  5. 字符是“%c”,字符串是“%s”
  6. 一般的常量定义用const而不是#define,如果用#define,尽量只用于常量定义,如果硬是要用来实现类似函数的功能,括号千万别忘
  7. 三目运算符 ?:
  8. ^是位异或
  9. long long才是长整型其对应的为“%lld”
  10. 在scanf中要加&(表地址),char数组(也即字符串)例外【因为数组的名称即地址】
  11. 几种实用的输出格式
    1. %md
      m位右对齐输出(对齐的位补 空格 ),超出m位则原样
    2. %0md
      m位右对齐输出(对齐的位补 0 ),超出m位则原样
    3. %.mf
      即保留小数点后m位(此类题目即用该表示方法!)
  12. 常用的math函数
    首先要加一个<math.h>的头文件
    1. fabs(double x)绝对值

    2. floor(double x)–向下取整,ceil(double x)–向上取整

    3. pow(double r,double p),次幂,返回值为r^p

    4. sqrt(double x) 返回算术平方根

    5. log(double x) 即lnx,如果要计算以非e为底数的对数,应该用换底公式:
      (log(a)B)=log(B)/log(a)

    6. sin(double x)cos(double x)tan(double x)

      注意这三个函数的参数是弧度制!
      所以一般用法是:

      const double pi = acos(-1.0) //可以表示pi的大致精准值
      double db1 = sin(pi * 45 /180)//表示四分之pi 
      
    7. asin(double x)acos(double x)atan(double x) 反正弦函数

    8. round(double x)对变量四舍五入

  13. 对于for循环,c语言不允许在表达式第一部分定义变量,即for(int i = 0;;)非法,而c++允许,所以后缀是cpp很重要
  14. 定义数组时的数组大小应为整数常量,不可以是变量,即int n = 10; int a[n]错误
  15. 数组初始化时如果想全赋值为0有两个办法:
    //有大括号便给没有赋值的数默认赋值0
    int a[10] = {};
    //但是更加推荐使用memset函数
    int b[10];
    memset(b,0,sizeof(b));//这里千万要注意第二个参数,只推荐用0或-1,因为它的作用是补码全为某值,如果是1,对于一个int类型而言,那就是“11111111 11111111 11111111 11111111”
    
  16. 字符数组的初始化才允许用一个字符串赋值,其他情况不允许
    char str[10] = "good story";//right
    char str1[10];
    str1 = "sad story" //wrong
    
  17. scanf()gets()都会自动添加\0作为结尾,所以用这两个函数输入的时候要注意数组大小,比如说:一个大小为10的数组,那么就只能放9个字符,最后一个用来结尾
    另外,scanf()以空格和换行作为输入结束,而gets()只以换行作为输入结束,
    所以输入”link start“对scanf()而言是”link“,对gets()而言是“link start”
    还有一点就是,scanf()gets()各有千秋,要视情况而用
  18. <string.h>头文件
    1. strlen(char str[]) 即数组长度

    2. strcmp(char str1[],char str2[]) 按字典序比较两个字符串的大小

      str1 < str2 则返回负整数(不一定-1)
      str1 = str2 则返回0
      str1 > str2 则返回正整数(不一定+1)

    3. strcpy(char str1[],char str2[])把str2复制给str1(包括了结束字符)

    4. strcat(char str1[],char str2[])把str2接到str1后面

  19. sscanf()sprintf()
    sscanf()可以使得屏幕输入变成字符数组输入,即把一个字符数组的值输入到某个变量中
    int n;
    char str[100] = "123";
    sscanf(str,"%d",&n); //可以做到字符串和整型的类型转换
    
    sprinf()则是同理,可以使得屏幕输出变成输出到字符串中
    如此则可以实现其他类型到字符串类型的转换
  20. 结构体里面可以定义除了自己本身以外地任何数据类型。不过虽然不可以定义自己本身,但可以定义自身类型的指针变量。
    struct node{
        node n;//wrong
        node* next;//right
    }
    

21.浮点数比较时的精度修正(5种情况)
所用方法是引进一个极小数,用偏差与其比较即可
1. ==

```
const double eps = 1e-8 //即10的负8次方
#define Equ(a,b) ((fabs((a)-(b)))<(eps))
//功能段
if(Equ(a,b)) return true;
else return false;
```
2. >
`#define More(a,b) (((a)-(b))>(eps))`
3. <
`#define Less(a,b) (((a)-(b))<(-eps))`
4. >=
`#define MoreEqu(a,b) (((a)-(b))>(-eps))`
5. <=
`#define LessEqu(a,b) (((a)-(b))<(eps))`

22.单点测试和多点测试

单点测试就是把你的程序执行多次来测试
多点测试是你的程序支持多次输入
重点谈多点测试:
有几种类型:
1. while…EOF型
题目没有给出输入的结束条件
while(scanf("%d",&n) != EOF){...}//Ctrl+Z可退出
2. while…break型
当要求输入数据满足某个条件时停止输入
while(scanf("%d",&n) != EOF){if(n = 0) break;....}
3. while(T–)型
题目说明会给定组数
scanf("%d",&T);
while(T--){....}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值