zoukankan      html  css  js  c++  java
  • 数据类型、常量、变量、printf、scanf和运算符

    1. 数据类型
    2. 常量
    3. 变量
    4. printf函数介绍
    5. scanf函数介绍
    6. 运算符

    数据类型

         数据类型是指数据在内存中存储的方式。

         C语言中有5大数据类型:基本类型、构造类型、指针类型、空类型、定义类型。

         C语言中常见的数据类型:

     

         各种数据类型在内存中占用的空间大小:(单位:字节)(1 Byte = 8 bit)   

    16位编译器

    32位编译器

    64位编译器

    char

    1

    1

    1

    Int

    2

    4

    4

    Float

    4

    4

    4

    Double

    8

    8

    8

    Short

    2

    2

    2

    Long

    4

    4

    8

    Long long

    8

    8

    8

    Void *(指针变量)

    2

    4

    8

         各种数据的表示范围:

     

    常量

         常量就是在内存中固定的数据,不可改变其内容。

         常见分类:

    1. 整型常量

    a)     十进制常量,和自然界十进制表示法一致

    b)     二进制常量,以0b(0B)开头,例如:0b1100

    c)      八进制常量,以0开头,例如:045

    d)     十六进制常量,以0x开头,例如:0x123

    1. 实型常量

    a)     单精度常量,小数后面加f表示单精度常量。 例如:3.14f

    b)     双精度常量,和自然界小数表示方法一致。 例如:3.1415926     3.8e5(或3.8E5 相当于3.8 x 105)

    1. 字符型常量

    用单引号括起来的单个字符表示。

    a) 普通字符:例如: ‘A’ ‘b’ ‘$’等等

    b) 转义字符:例如:’ ’ ‘ ’ ‘%%’ 等等

    1. 字符串常量

    用双引号括起来的一系列字符串。 例如:”Hello World! ”    “”表示一个空字符串

    1. 符号常量

    也叫宏常量。 例如: #define PI 3.1415926

    变量

           所谓变量,即代表内存中某个空间的值是可变的。

         1. 变量的定义:变量类型  变量名

         2. 变量的初始化

               a) 定义时初始化: int a = 10;

                    定义时全部初始化: int a = 10, b=11;

                    定义时部分初始化: int a =2, b;

               b) 先定义后初始化:int b; b = 10;

               c) 用其他变量初始化: int a=10, b; b = a;

               d) 连续初始化:double pi, pai; pi = pai = 3.14;

         3. 变量的使用

               取值和存值!

         4. 变量的作用域

               按照作用域不同可以分为局部变量和全局变量:

               局部变量:也称为内部变量,定义在函数内部或者代码块内部,其作用范围从变量定义开始到函数结束或者代码块结束。在内部可以定义和外部同名的变量,在内部这些变量会屏蔽外部的同名变量。

               全局变量:也称为外部变量,定义在函数外部,其作用范围是从定义开始,到文件结尾。(同一文件中,从该变量定义以后的任何位置都可以使用该变量。)

    1. 变量为什么要区分类型?

    不同类型数据在内存中存储的空间大小和存储方式是不尽相同的,为了有效的使用内存空间和有效率的存取,变量也需分为不同的类型。

    &nbsp

    printf函数介绍

           printf是一个标准输出函数,包含在标准输入输出头文件stdio中,能够以精确的格式输出结果。

         printf函数的调用格式:  printf(“格式控制字符串”,输出项目列表);  例如:prinf(“name = %s, age = %d”, name, age);

         格式控制字符串:

                是由格式字符(转换说明符、标志、域宽、精度)和普通字符组成。

         输出项列表:

                可以是常量、变量或者表达式,也可以没有输出项(例如只输出一系列字符串),输出项必须与格式控制符在类型和数量上一致,否则结果不可预测。当有多个项目输出时,各输出项之间以逗号隔开。

    printf的格式控制的完整格式:


    % - 0 m.n l或h 格式字符


    下面对组成格式说明的各项加以说明:


    1 %:表示格式说明的起始符号,不可缺少。

    2 -:有-表示左对齐输出(右侧补空格),如省略表示右对齐输出(左侧补空格)。

    3 0:有0表示指定空位填0,如省略表示指定空位不填。

    4 m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型 数的小数位数。对数值型的来说,未指定n时,隐含的精度为n=6位。

    5 l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。

    格式字符

    格式字符用以指定输出项的数据类型和输出格式。

    1 d格式:用来输出十进制整数。有以下几种用法: %ld:输出长整型数据。

    2 o格式:以无符号八进制形式输出整数。对长整型可以用"%lo"格式输出。同样也可以指定字段宽度用“%mo”格式输出。


               3 x 格式:以无符号十六进制形式输出整数。对长整型可以用”%lx”格式输出。同样可以指定字段宽度用”%mx”格式输出。

               4 u 格式:以无符号十进制形式输出整数。对长整型可以用”%lu”格式输出。同样也可以指定字段宽度用”%mu”格式输出。

               5 c 格式:输出一个字符;

               6 s 格式:用来输出一个字符串

               7 f 格式:用来输出实型数据。对double型可以用”%lf”格式输出。对单精度,前7位为有效数字,默认输出6位小数;对双精度前15位为有效数字,默认输出6位小数。

               8 g 格式:自动选择f格式或者e格式中的较短的一种输出,且不输出无意义的0.

               9 p 格式:输出内存地址

               10 e 格式:以指数形式输出实数。

        

         printf函数的补充:

    1. %*.*的作用:printf(“%*.*f”, 5, 3, a); *可以理解为占位符,例如这里就是把变量a按照域宽为5,小数点后保留3位小数输出。
    2. printf严格按照格式控制符输出,如果将一个整型变量,用%f格式输出,显示的结果并不是自己想要的(不可预期的)。

    &nbsp

    scanf函数介绍

         scanf函数原型包含在标准输入输出头文件stdio.h中,用于接受键盘输入的内容。Scanf函数是一个阻塞式函数。

         格式: sancf(“格式控制字符串”, 输入地址列表);  例如: sancf(“%s,%d”, &name, &age);

         注意点:

    1. scanf(“%d %d”, &a, &d); 这里%d和%d之间用空格隔开,则在输入的时候两个数字之间需要用空格或者回车隔开,不可用其他字符
    2. scanf(“%d, %d”, &a, &b); 这里%d和%d之间使用逗号隔开,则在输入两个数字的时用逗号隔开。
    3. scanf(“%f”, &f1); 接受一个实数时不可以使用%m.nf;
    4. scanf(“%f ”, &f1); 这里的 并不是回车的转义字符,在输入数字后需要原样输入 才能结束scanf函数。格式控制字符窜中除了格式控制符的其他字符要原样输出。
    5. scanf(“%3d”, &num); 这里表示只接收输入数字的前3位,例如:输入了12345, 那么 num = 123;
    6. scanf(“%d, %*d, %d”, &a, &d); 这里表示接收到输入的3个数,第一个数的值给a, 把第三个数的值给d,。%*d在这里的意思就是跳过接收的这个数字。

    scanf函数的运行原理:

    scanf函数被调用后会创建一个缓冲区,当用户在键盘上输入内容的时候,缓冲区会依次记下这些数据,并根据格式控制符,按照地址列表依次找到这些变量并传值;所以在混合接收不同类型数据时会有所影响。比如scanf(“%d%c%d”, &a, &ch, &b); 在键盘上输入“10 A 10”,则会把10给a,把’ ’(空格)给ch, 把’A’给b,但是b是整型变量,所以不接收这个值,所以 b 的值不变化。为了避免这种情况,在输入的时候,接收字符前不要输入空格,例如输入”10A 10”;或者使用逗号分隔符,例如scanf(“%d,%c,%d”, &a, &ch, &b),在输入的时候数据之间使用逗号隔开。建议使用逗号分隔符。

    运算符

    运算符

      运算符是说明特殊操作的符号。

      按照功能划分:算数运算符、关系运算符、逻辑运算符、位运算符;

      按照参与运算的操作数数目分为:单目运算符、双目运算符、三目运算符

    优先级与结合性

      优先级:C语言中,运算符的运算优先级共分为15 级。1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。

      结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。

      所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。

      C语言中优先级和结合性详细如下:

    优先级

    运算符

    名称或含义

    使用形式

    结合方向

    说明

    1

    []

    数组下标

    数组名[常量表达式]

    左到右

    --

    ()

    圆括号

    (表达式)/函数名(形参表)

    --

    .

    成员选择(对象)

    对象.成员名

    --

    ->

    成员选择(指针)

    对象指针->成员名

    --

    2

    -

    负号运算符

    -表达式

    右到左

    单目运算符

    ~

    按位取反运算符

    ~表达式

    ++

    自增运算符

    ++变量名/变量名++

    --

    自减运算符

    --变量名/变量名--

    *

    取值运算符

    *指针变量

    &

    取地址运算符

    &变量名

    !

    逻辑非运算符

    !表达式

    (类型)

    强制类型转换

    (数据类型)表达式

    --

    sizeof

    长度运算符

    sizeof(表达式)

    --

    3

    /

    表达式/表达式

    左到右

    双目运算符

    *

    表达式*表达式

    %

    余数(取模)

    整型表达式%整型表达式

    4

    +

    表达式+表达式

    左到右

    双目运算符

    -

    表达式-表达式

    5

    << 

    左移

    变量<<表达式

    左到右

    双目运算符

    >> 

    右移

    变量>>表达式

    6

    大于

    表达式>表达式

    左到右

    双目运算符

    >=

    大于等于

    表达式>=表达式

    小于

    表达式<表达式

    <=

    小于等于

    表达式<=表达式

    7

    ==

    等于

    表达式==表达式

    左到右

    双目运算符

    !=

    不等于

    表达式!= 表达式

    8

    &

    按位与

    表达式&表达式

    左到右

    双目运算符

    9

    ^

    按位异或

    表达式^表达式

    左到右

    双目运算符

    10

    |

    按位或

    表达式|表达式

    左到右

    双目运算符

    11

    &&

    逻辑与

    表达式&&表达式

    左到右

    双目运算符

    12

    ||

    逻辑或

    表达式||表达式

    左到右

    双目运算符

    13

    ?:

    条件运算符

    表达式1?

    表达式2: 表达式3

    右到左

    三目运算符

    14

    =

    赋值运算符

    变量=表达式

    右到左

    --

    /=

    除后赋值

    变量/=表达式

    --

    *=

    乘后赋值

    变量*=表达式

    --

    %=

    取模后赋值

    变量%=表达式

    --

    +=

    加后赋值

    变量+=表达式

    --

    -=

    减后赋值

    变量-=表达式

    --

    <<=

    左移后赋值

    变量<<=表达式

    --

    >>=

    右移后赋值

    变量>>=表达式

    --

    &=

    按位与后赋值

    变量&=表达式

    --

    ^=

    按位异或后赋值

    变量^=表达式

    --

    |=

    按位或后赋值

    变量|=表达式

    --

    15

    逗号运算符

    表达式,表达式,…

    左到右

    --

    算数运算符

      算数运算符包括:加+  减-  乘*  除/  取余%

      其中,加、减的优先级是4,其他的优先级都是3.

      除法运算需要注意的地方:两个操作数都是整型则结果是整型;有一个操作数是实型,则结果是实型。

      取余运算(模运算)总结:

        1. m % n , m 和 n 必须是整型,且 n 不能为 0;

        2. m % n , 如果m < n,则余数为m;

        3m % n , m 和 n 都不能为小数(实型);

        4. m % n , 余数的正负性取决于m的正负性,和n的正负性无关;

    类型转换

      类型转换分为两种:显式转换和隐式转换,也叫强制转换和自动转换。

      

      需要注意的是:对变量进行类型转换后的值赋值给另一个变量,例如: b = (int)a, 被转换的变量a其数据并没有改变,只是相当于把转换后的数据拷贝给。 

     

    表达式

      将操作数,用运算符号按一定规则连接起来,有意义的式子叫做表达式。例如,算数表达式、逻辑表达式、字符表达式。

      表达式的特点:一定有返回值

    赋值运算符

      赋值符号为“=”,用“=”连接起来的式子叫做复制表达式,其一般形式为:变量 = 表达式;

      赋值运算符的符号一共有十一个: + += -= *= /= %= &= |= ^= <<= >>=

      赋值语句:以分好结尾的赋值表达式就是赋值语句。在C语言中,以分好结尾的表达式叫语句,表示对一些事物的陈述!

    自增、自减

      C语言中提供了使变量自动+1或则自动-1的运算符,即自增运算符++和自减运算符--。具有右结合性、优先级是2级。

      1) 前缀表达式:++x, --x; 其中x表示变量名,先完成变量的自增自减1运算,再用x的值作为表达式的值;即“先变后用”,也就是变量的值先变,再用变量的值参与运算。 

      2) 后缀表达式:x++, x--; 先用x的当前值作为表达式的值,再进行自增自减1运算。即“先用后变”,也就是先用变量的值参与运算,变量的值再进行自增自减变化。 

      3) 自增、自减运算只能用于单个变量,只要是标准类型的变量,不管是整型、实型,还是字符型 变量等,但不能用于表达式或常量。 

      

    sizeof运算符

      sizeof运算符是单目运算符,并不是函数。起作用是返回一个类型所占的内存字节数。

      sizeof的用法:

        1. sizeof(a), a可以是常量、变量或者数据类型(例如,sizeof(int))

        2. 在返回常量、变量的内存空间字节数时,可以省略括号,但是数据类型不型,例如: sizeof int 是错误的!

      注意:

      sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据 类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。 

     

    逗号运算符

      在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式。 

      其一般形式为: 表达式1, 表达式2, 表达式3

      求值过程:

      其求值过程是从左向右依次计算各表达式的值,并把最后一个表达式的值作为整个逗号表达式的返回值。

     

    关系运算符

      在C语言中所有的数值都有真假性,非零则真,只有0为假。关系运算(比较运算)返回值要么是真(1)要么是假(0)。

      结合性:

        关系运算符都是双目运算符,其结合性为左结合。

      关系运算符的优先级:

        关系运算的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,<,<=,>,>=的优先级相同,高于==和!= ==和!=的优先级相同。

     

    逻辑运算符

      C语言中提供了三种逻辑运算:&&与 ||或 !非

     

      &&逻辑运算:同真则真,一假则假。优先级11级。

      &&逻辑短路问题: 如有A&&B,如果A的值为假,则系统判断整个表达式的值为假,从而不运算B(即B中的变量或者表达式未参加任何计算,不改变其数据)。

     

      ||逻辑运算:同假则假,一真则真。优先级12级。

      ||逻辑短路问题: 如有A||B,如果A的值为真,则系统判断整个表达式的值为真,从而不运算B(即B中的变量或者表达式未参加任何计算,不改变其数据)。

     

      !运算:真变假,假变真。单目运算符,右结合性。优先级高,2级。

    三目运算符

      三目运算符(条件运算符)为?和:,它是一个三目运算符,即有三个操作数参与运算的量。 由条件运算符组成条件表达式的一般形式为:

      表达式1? 表达式2: 表达式3 

      求值过程:判断表达式1的值为真还是假,如果为真,则把表达式2的值作为整个表达式的值返回,否则把表达式3的值作为整个表达式的值返回。

      注意事项:

        1. 条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此 max=(a>b)? a:b可以去掉括号而写为 max=a>b?a:b

        2. 条件运算符?和:是一对运算符,不能分开单独使用。

        3. 条件运算符的结合方向是自右至左。

  • 相关阅读:
    函数的有用信息,装饰器 day12
    函数名、闭包、装饰器 day11
    函数的动态参数与命名空间 day10
    函数 day9
    集合 day8
    文件操作 day8
    基础数据类型补充,及capy daty7
    day7 回顾
    编码补充 daty 6
    字典的增删改查 daty 5
  • 原文地址:https://www.cnblogs.com/siyingcheng/p/4584464.html
Copyright © 2011-2022 走看看