Bootstrap

第一章 C数据类型及语句

三、数据类型

3.1 基本类型

char、short、int、long、float、double

#include <stdio.h>

int main()
{
    //定义一个char类型的变量并赋值
    char c='a';
    printf("%c\n",c);//a

    //定义应该short类型的变量并赋值
    short a=10;
    printf("%d\n",a);//10

    //定义一个int类型的变量并赋值
    int b=20;
    printf("%d\n",b);//20

    //定义一个long类型的变量并赋值
    long d=3639382;
    printf("%ld\n",d);//3639382

    //定义一个float类型的变量并赋值
    //默认保留小数点后六位,并且可以四舍五入
    float e=3.1415926;
    printf("%f\n",e);//3.141593

    //定义一个double类型的变量并赋值
    double f=3.147896526654;
    printf("%lf\n",f);//3.147897

    //printf("Hello World!\n");
    return 0;
}

3.2 扩展:常量和变量

常量:在程序运行过程中,其值不可以改变的量

例:100、'a'、'hello'

常量的分类:

整型:100、125、250

实型:3.14、0.125f、-3.5

字符型:'a'、'b'

字符串:"a"、"ab"、"1234"

ASCLL表:

A~Z范围(65~90)

a~z范围(97~122)

#include <stdio.h>

int main()
{
    char c='a';
    //用%c输出的是输出字符,用%d输出的是字符的ascll码值
    printf("%d,%c\n",c,c);//97,a
    return 0;
}

变量:其值可以改变的量称之为变量

定义变量的方式:

存储类型 数据类型 变量名;

存储类型 数据类型 变量名=变量或常量;

整型数据:

整型常量(按进制分):

十进制:以正常数字1-9开头,如 458 250

八进制:以数字0开头,如:0125

十六进制:以0x开头,如:0x1e

整型变量

有/无符号短整型(un/signed)short(int) 2个字节

有/无符号整型(un/signed)int 4个字节

有/无符号长整型(un/signed)long(int) 4个字节

实型数据(浮点型):

实型常量

实型常量也称为实数或者浮点数

十进制形式:由数字和小数点组成:0.0、0.12、5.0

指数形式:123e3 代表 123*10 的三次方

123e-3代表123*10的负三次方

不以f结尾的常量是 double 类型

以 f结尾的常量(如 3.14f)是 float 类型

实型变量:

单精度(float)和双精度(double)3.1415926753456

float 型:占4字节,7位有效数字,指数-37 到383333.333 33

double 型:占8字节,16 位有效数字,指数-307 到308

字符数据:

字符常量:

直接常量:单引号括起来,如:'a'、'b'、’0’等.

转义字符:以反斜杠“\”开头,后跟一个或几个字符、如'\n,\t'等,分别代表换行、横向跳格

'\\'表示的是\'%%''\''

字符变量:

用 char 定义,每个字符变量被分配一个字节的内存空间字符值以 ASCLL 码的形式存放在变量的内存单元中:

注:char a;

a='x':

a 变量中存放的是字符'x'的 ASCLL :120

即 a=120 跟 a-=x'在本质上是一致的.

字符串常量

是由双引号括起来的字符序列,如“CHINA”、”哈哈哈”等都是合法的字符串常量.

字符串常量与字符常量的不同

'a’为字符常量,”a”为字符串常量

每个字符串的结尾,编译器会自动的添加一个结束标志位'\0',即“a”包含两个字符'a’和’\0’

3.3 格式化输出字符

%d 十进制有符号整数

%ld 十进制 1ong 有符号整数

%u 十进制无符号整数

%o 以八进制表示的整数

%x 以十六进制表示的整数

%f float 型浮点数

%lf double 型浮点数

%e 指数形式的浮点数

%c 单个字符

%s 字符串

%p 指针的值

#include <stdio.h>

int main()
{
    //输出整数
    int a=100;
    //输出十进制数
    printf("a=%d\n",a);
    //输出八进制数
    printf("a=%o\n",a);
    //输出十六进制数
    printf("a=%x\n",a);

    //输出浮点型数据,float使用%f,double使用%lf
    float b=3.1415926;
    double c=3.1415926;
    printf("b=%f\n",b);
    printf("c=%lf\n",c);


    //输出字符,使用%c输出字符,使用%d输出字符的ascll码值
    char d='a';
    printf("%d,%c\n",d,d);


    //输出字符串,使用%s
    char e[]="hello world";
    printf("e=%s\n",e);

    //输出地址,使用%p
    //&:取一个变量的地址,一般地址用十六进制数标识
    int f=999;
    printf("&f=%p\n",&f);
    return 0;
}

特殊应用:

%3d     %03d     %-3d     %5.2f

%3d:要求宽度为3 位,如果不足3位,前面空格补齐;如果足够3位,此语句无效

%03d:要求宽度为3位,如果不足3位,前面0补齐:如果足够3位,此语句无效

%-3d:要求宽度为3位,如果不足3位,后面空格补齐:如果足够3位,此语句无效

%.2f:小数点后只保留2位

3.4 类型转换

数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题

转换的方法有两种

自动转换:

遵循一定的规则,由编译系统自动完成

强制类型转换:

把表达式的运算结果强制转换成所需的数据类型

自动转换:

1.占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降

2.转换方向:

(1)当表达式中出现了char、short int、int类型中的一种或多种,没有其他类型了,参加运算的成员全部变成int类型的参加运算,结果也是int类型的

例:

#include<stdio.h>
int main()
{
    printf("%d\n",5/2);//2
    return 0;
}

(2)当表达式中出现了带小数点的实数,参加运算的成员全部变成double类型的参加运算,结果也是double型

例:

#include<stdio.h>
int main()
{
    printf("%f\n",5.0/2);//2.5
    return 0;
}

(3)当表达式中有有符号数,也有无符号数,参加运算的成员变成无符号数参加运算结果也是无符号数

例:

#include<stdio.h>
int main()
{
    int a=-8;
    unsigned int b=7;
    if(a+b>0)
    {
        printf("a+b>0\n");
    }
    else
    {
        printf("a+b<0\n");
    }
    return 0;
}
//结果为a+b>0

(4)在赋值语句中等号右边的类型自动转换为等号左边的类型

例:

#include<stdio.h>
int main()
{
    int m;
    float b=5.8f;
    m=b;
    printf("m=%d\n",m);//结果为m=5
    printf("n=%lf\n",n);//结果为n=5.8
    return 0;
}

(5)注意自动类型转换都是在运算的过程中进行临时性的转换,并不会影响自动类型转换的变量的值和其类型

强制转换:

通过类型转换运算来实现

(类型说明符)(表达式)

功能:

把表达式的运算结果强制转换成类型说明符所表示的类型

例如:

(float)a;//把a的值转换为实型

(int)(x+y);// 把x+y 的结果值转换为整型

注意:

类型说明符必须加括号

#include<stdio.h>
int main()
{
    int x=10;
    int y=4;
    float w;
    w=(float)x/(float)y;
    printf("w=%f\n",w);
    return 0;
}

;