基础零碎知识点

这些细碎知识点平时也没怎么去刻意注意过,也是上学期期末考试认真总结了一下,过了几个月早都忘了…今天再次看到还是再次总结一下加深印象吧。

  1. 双目运算符,即运算符要求有两个运算量;

  2. 再次区分 ++i和i++
    ++i、- -i:它的功能是在i使用之前,i值先+/-1
    i++、i- -:它的功能是在i使用之后,i值先+/-1
    eg.
    j=3;k=++j; //j先+1,再将j赋值给k,结果 k=4 j=4;
    j=3;k=j++; //j先赋值给k,然后+1,结果 k=3 j=4;

  3. 正号运算符(+x、-x)
    它们的优先级高于*、/、%,而与++、- -优先级相同,故结合方向为 自右向左
    eg.
    i=3;j = -i++;
    表达式 - i++相当于 - (i++),即先计算i++,则i=4;再做负值运算,表达式的值为-3,再将 -3赋值给变量j
    结果:i=4,j=-3

  4. 结合性
    算术运算符为左结合性;
    eg.
    x+y-z ,先执行x+y,再执行-z
    ** 赋值运算符为右结合性;**
    eg.
    x=y=z ,先执行y=z,再执行x=y

  5. 数据范围汇总
    int —>32位,最高位是正负位所以实际值只有31位,那它的最大值=2^31-1 = 2147483647.
    unsigned int —>2^32 -1 = 4294967295
    long long —>2^63 -1 = 9223372036854775807
    unsigned long long —>2^64-1=18446744073709551615

  6. 为什么在C语言中,用scanf输入字符串时,不需加&
    因为字符串变量名在 scanf 语句里 表示指针 (地址) 例如: char s[80]; scanf("%s",s); — 这里的s 已是地址。 当然,写成 scanf("%s",&s[0] ); 也可以, &s[0] 是地址

  7. a?b:c是什么意思
    这个是条件表达式,表示如果a为真,则表达式值为b,如果a为假,则表达式值为c

  8. typedef long long ll;
    typedef c语言中自定义, typedef long long ll; 把long long 定义成了ll,这样在程序书写过程中用到long long(int) 的地方直接ll 即可,这样书写简单,也节省时间

  9. 标识符:某种语言成分的名字:变量名、常量名、函数名
    字母、数字、下划线_ 组成,必须由字母、下划线开头
    2ab X a@b X
    关键字:if else int char float double 等等都是关键字,是由系统保留下来有特殊含义的字母组合,不能挪作它用。
    预定义的标识符:printf、scanf、main,有特定的含义,不建议挪作它用。
    用户自定义的标识符:这种由程序员自己定义使用 int a,b,;
    (定义变量时最好一行一个变量)
    ‘ ; ’ 的用法
    除了在 for语句中为 隔开 其余部分均为结束

  10. 数据类型(是因为c语言是强类型语言,在C中,所有的数据都有类型,变量在使用之前,一定要先定义)
    基本数据类型
    int 整型 16bits -215~215-1
    char 字符类型 8bits -27~27-1
    float 单精度浮点数 32bits ieee754
    double 双精度浮点数 64bits ieee754

构造类型
    数组
    结构类型
    联合类型
    枚举类型
指针类型(地址类型)
void 空类型(无返回值)
类型的修饰符
    signed由符号位、unsigned无符号位、short、long   都可以放在int之前
        signed int(int)(signed)          16bits    -2^15~2^15-1
        unsigned int(unsigned)        16bits    0~2^16-1
        short int(short)                      16bits    -2^15~2^15-1
        long int(long)                        32bits    -2^31~2^31-1
        signed short
        unsigned short
        signed long
        unsigned long
        long long
    signed、unsigned 还可以放在char前面
        signed char(char)                 8bits    -2^7~2^7-1
        unsigned char                      8bits    0~2^8-1
    
    long 可以放在double前
        long double                128bits

char 不可扩展和缩短故位数不变
缩短:只保留地位,删除高位

类型转换(计算表达式或者是赋值的时候会发生类型的转换) 隐式类型转换(自动转换) 如下图(右边无条件变为左边) 1+2//int
1+2L//long 1+‘a’//int int a=1 char
b=‘a’//在运算时把b的值转化为int,而b本身的类型仍然是char
1+2L+3.1//double,最终的结果类型和表达式中最宽类型是一致的 ‘a’+‘b’//int 强制类型转换(显示类型转换) int
a =12345; char b; b=a;//值保留低位字节,高位字节舍去
(char) m + (char)n //为int (char)x+y (char)(x+y)
PS. b占一个字节 a=10占四个字节
多余的数字正数用0补 负数用1补

在这里插入图片描述
%d 为ASCII %c 为a

  1. 常量
    一般够用即可,浮点数在计算机内表示不精确
    属于long eg.6000l/L 12L 长整形
    单精度: 1.23f/F
    双精度:1.23(double)
    字面常量: 112、‘a’、“abc”
    整型常量: 12(int) 12L(long) 12l(long)
    0123(8进制数) 0开头的数码表示8进制
    0x1a(16进制数 ) 0x开头的数码表示16进制
    浮点常量:
    1.23e4(1.23X10^4) e后面必须是整数,不可以是带小数点的数
    1.23e0.3 X 1.23e X e3 X 1.e3 对 1. 对 .1 对 . X
    小数点左右必出现一个数字 e的左右必有数字

    字符常量:‘a’(char)
    转义字符:由\引导的字符,表示被引导的字符被转义了
    \n 回车换行
    \t 下一个制表位 (做数据分析的排版)
    \b 退格
    \r 回车
    \
    " "
    ’ ’
    \ddd d表示的是1~3位的8进制数, \123表示的是某个字符的ASCII编码
    \xhh h是16进制数 \x1a
    字符串常量(规定为指针类型):“abc” 若干个字符(0含以上) “” 空字符串 " " 空格字符串
    ‘ ’对 ‘’错
    符号常量
    #define 预处理指令(不属于语句)
    const int a = 10;(a的值不可变) C语句
    int a=10;(a的值可变)
    枚举类型中的标识符

可数类型 :整数 字符 枚举类型 逻辑
不可数类型:浮点 字符串

  1. 变量
    值可以发生变化的量
    所有的变量在使用之前,必须定义
    类型名 变量名[ = 值] ; int a = 10;
    类型名 变量表(变量名之间用,隔开) int a = 10, b = 20, c;
    如果变量没有经过初始化(变量的第一个值就是初始值),那么变量的值为随机值
    即变量的第一个值

13.表达式
由若干个(0个或0个以上)操作符连接起来的式子, 必须能够计算出结果来,有结果,表达式就有类型
操作符(运算符,都有运算的优先级,加小括号可以改变优先级):
算术运算符(左结合): + - * / % 模 /的左右如果都是整型的数值,那么为整除,只要出现一个浮点数,那么就是除法; %为取余运算,也叫模运算
±低于%/
比较运算(关系运算) : > >= < <= != 运 算结果为0(假) 1(真) ,
、!=优先级比> >= < <=低
逻辑运算: ! && || 逻辑运算的优先级低于比较运算, 运算结果为0(假) 1(真),参与逻辑运算的运算数可以是0(假) 和非零(真) 的数 1||2 结果为 1
! && || 优先级逐渐降低
!(a||b)<=> !a&&!b !(a&&b)<=>!a||!b
b=3
if(b=1||3||5||7||8||10||12)printf(“a”); 应为b
1||b
3||b==5
if(b=4||6||9||11)printf(“b”);
if(b=2)printf(“c”);
错误 最后abc都会输出 因为 = 为赋值 ==才为等于
赋值运算: 把某个表达式的值放入某个变量中
a = b; 2 = a; X a + b = c X a = 2 这个赋值运算的计算结果为2

a+b=2 错 a+b为一个值不能为2 常量的值不可被改变

短路现象:

        a = b = c = 2      <=>     a = (b = (c = 2))    a+(b=2)=a+2
        
        复合赋值: e1 op= e2      <=>     e1 = e1 op (e2)
        a *= b + c        <=>     a = a * (b + c)
        
    自增自减:++ -- 它表示相应的变量值增1,或者减1;这两个运算符可以放在变量的前面,也可以放在变量的后面,含义是有区别的:
        放在前面,表示先自增或自减,然后取相应变量的值作为该表达式的计算结果,例如:
        int a = 1;
        int b;
        b = ++a;                                      (a=a+1、b=a+1)
        //b,a?        2 2
        
        放在后面,表示先取变量的值作为表达式的计算结果,然后变量再自增或者自减
        int a = 1;
        int b;
        b = a++;
        //b,a?     1 2
  1. 语句
    控制语句:if 、while、for switch等等
    函数的调用语句:printf、scanf
    表达式语句:a++、a=1;
    复合语句:若干条语句用{}括起来,}后面通常没有;
    空语句:; {} 空语句主要起占位的作用,例如:
    if(a > b){

    } //if后一定要加{}

#开头的不是C的语句,它属于C的预处理指令
  1. 输入输出
    首先你得用include把某个头文件包含进来: #include <stdio.h>
    printf(“输出字符串”. 表达式表) ;
    输出字符串中可以有两种字符,一种是普通字符,它会原样输出,另一种是类型字符
    类型字符:常用d f c s
    类型字符必须和后面的表达式的类型一一对应
    printf("% 4d", 12) ; //
scanf("格式字符串", 变量的地址表) ;
    格式字符串中如果出现一般字符,在输入的时候,要对应输入
    scanf("a=%d", &a) ;   //a=12

PS: 若出现闪退现象,检查scanf
printf % d 中间的空格有特殊含义
scanf % d 不正确

  1. 字符串与字符数组

1 .字符串:结束字符为‘\0’or 0 字符数组结束以最后一个字符结尾

2 .printf (‘%c’,1234); 先转化为二进制,只去最后一个字节(XXXXXXXX)

3 .char c[10]; 没有初始化,故为随机值 字符数组可以用来放字符串,最好要有‘\0’

4 .字符串输入是不加 & ,本身就是地址
5 .区分scanf() gets() printf() puts()
6 .数组是常量不能赋值
7 .字符串长度可求strlen() 字符数组长度不可求

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值