碎片知识点整理

常量

1. 常量

1整形常量赋值给布尔型时自动转化为true或false(文件扩展名必须为.cpp否则加上头文件

       2常量两种定义方式:

        #define ADD(a,b) ((a)+(b))  //每个都加括号防止出错

      const double PI =3.14;//记得不要漏分号 主推荐

     typedef long long LL;

2. 数据类型与格式化输出

数据类型:绝对值在1e9以内的整数都可以定义成int类型,整数超过2147483647(例如1e10或1e18)用long long 

     long long a ;   scanf("%lld",&a);  printf("%d",a);  

     double a ;   scanf("%lf",&a);  printf("%f",a);

     float  a ;   scanf("%f",&a);  printf("%f",a);

     

格式化输出:%md以m位进行右对齐

    %0md以m位进行右对齐,不足的地方补0
    %.mf,四舍六入五成双,保留m位小数,四舍六入用round

#include<stdio.h>
#include<math.h>
int main()
{
    
    printf("%.2f,%.2f\n",3.125,3.135);//四舍六入五成双 
    printf("%.2f,%.2f\n",round(3.135),round(3.125));// 四舍五入到整数部分 
    printf("%.2f,%.2f\n",round(3.135*100+0.5)/100,round(3.125*100+0.5)/100);//四舍五入到小数后2两位 
    return 0;
    
} 

结果为:

3.13,3.13
3.00,3.00
3.14,3.13

3. 常用函数

1.math类

四舍五入到整数位:double round(double x)
向下取整:floor(double x)
向上取整:ceil(double x)
求绝对值:fabs(double x)
指数函数:double(double a,dpuble b)
以e为底的对数:double log(double x)
三角函数:sin(double x),cos(double x),tan(double x)
asin(double x),acos(double x),atan(double x)

2.其他

memset--数组中每个元素赋相同值0或者-1(速度快)
memset(数组名,值,sizeof(数组名))
注意点:加头文件 string.h,赋除了0和-1之外的其他值用fill函数 ,实践表明用memset赋值1出错

4. 字符数组

1.注意点:

  • 数组较大要将其定义在函数外面,否则可能会异常退出
  • 字符数组可以通过直接赋值字符串来初始化,但是仅限于初始化,其他位置不允许直接赋值字符串
  • gets,sanf赋值字符数组末尾自动添加\0;因此开数组要比实际长度多1

2.几种常见字符处理方法

  • scanf对字符类型有%c,%s两种,%c可以识别空格和换行并读入,而%s以空格和换行为读入的结束标志
  • getchar(),putchar()输入输出当个字符,可以识别换行符
  • gets(),puts()用来输入一行字符串,可以包含空格,以换行符\n作为结束输入标志,注意!!!

  (因此在使用gets之前先使用了scanf(),要用getchar()先接收换行符)

  • string 类型不可以读入空格,空格作为结束输入的标志,但是初始化中有空格可以输出,使用要包含#include<string>头文件

     需要读入空格使用getline()如:string s1; getline(cin,s1); cout<<s1;

  • 4
#include<stdio.h>
int main()
{

char b[10];
char a[10];
scanf("%s",a);//注意无取地址符
getchar();//如果没有此句,输入a回车键之后程序结束 
gets(b);
puts(a);
puts(b);
return 0;

} 

 

3.处理字符串相关函数

  • strlen()
  • strcmp()字符串比较
  • strcpy(b,a),将a复制给b
  • strcat(a,b)b连接到a后面
  • scannf与sprintf
#include<stdio.h>
int main()
{
    
    char str1[20]="2010:1.50,happy";
    char str2[20];
    int a;
    double b;
    char s[10];
    sscanf(str1,"%d:%lf,%s",&a,&b,s);//从左至右,将str中的字符按格式写到a,b,c中 
    printf("%d %.2f %s\n",a,b,s);
    sprintf(str2,"%d:%.2f,%s",a,b,s);//从右至左,将a,b,s中的内容按格式写道str2中 
    puts(str2);
    return 0;
    
} 

 

5. 函数,指针,引用

1函数:

数组作为参数时,在函数中对数组元素的修改相当于对原数组元素的修改
数组可以作为参数,但是不可以作为返回类型出现


2指针:

int *p ;*是类型的一部分,p才是变量名,
a+i等同于a[i]

3引用

#include<stdio.h>
void change(int &a,int &b)
{
    int c;
    c=a;
    a=b;
    b=c;
}
int main()
{
    int a=1,b=2;
    change(a,b);
    printf("a=%d ,b=%d",a,b);
    return 0;
    
} 

 

6. 浮点数比较

//按照区间图理解记忆
#include<stdio.h>
#include<math.h>
const double eps=1e10-8;
const double pi=acos(-1.0);
#define Equ(a,b) ((fabs((a)-(b)))<(eps))//a==b
#define Mor(a,b) (((a)-(b))>(eps))//a>b
#define Les(a,b) (((a)-(b))<(-eps))//a<b
#define MorEqu(a,b) (((a)-(b))>(-eps))//a>=b
#define LesEqu(a,b) (((a)-(b))<(eps))//a<=b

7. 多组输入输出

详见https://blog.csdn.net/qq_40763929/article/details/83096221

  • while(scanf("%s",str)!=EOF){}
  • while(get(s)!=NULL){}
  • while(scanf("%s",str)!=EOF)

       {

if(a==0&&b==0) break;

  }

  • while(scanf("%s",str)!=EOF,a||b)

  {..}

// 逐个读取字符 ,直至按下回车键停止 
    while((a=getchar())!='\n'){        
        sum+=a-'0';    
    } 

 

 

 








posted @ 2020-01-05 18:09  caiweii  阅读(302)  评论(0编辑  收藏  举报