C语言基础(一)数据类型

一、开发工具

推荐使用Qt creator,优点是跨平台。

下载地址:Index of /archive/qt/5.12/5.12.12

选择qt-opensource-windows-x86-5.12.12.exe

二、认识C程序结构

1.创建一个C程序。

使用qt creator创建plain CApplication(non-qt project),代码如下:

#include <stdio.h>

int main()
{
    printf("请输入一个整数:\n");
    //新建一个数据类型:整型变量
    int num;
    //输入函数
    scanf("%d",&num);
    /*输出函数*/
    printf("您输入的数是%d",num);
    return 0;
}

注意:QT需要设置独立终端(项目->“build & run”->Run->“Run in Terminal”),否则无法接受输入参数。 

代码说明:

1. #include <stdio.h>是预处理器指令,告诉编译器在编译之前要包含stdio.h文件(标准输入输出头文件)。 系统自带的头文件 使用 <>,程序员自己写的使用 " ";头文件(.h .hpp):定义函数,实现文件 (.c .cpp):函数的实现。

2. main函数:入口函数(主函数),程序从这里开始执行。每个C程序只能有一个入口函数。

3. 语句:C语言中每条语句都以”;“结尾;在一条语句中换行使用\ ,可以省略\

4. 注释://c++风格注释 /* */ c风格注释

5. 函数:scanf输入函数;printf输出函数

输入输出函数占位符含义:

Code

格式

%c

字符

%d

带符号整数

%i

带符号整数

%e

科学计数法, 使用小写"e"

%E

科学计数法, 使用大写"E"

%f

浮点数

%g

使用%e%f中较短的一个

%G

使用%E%f中较短的一个

%o

八进制

%s

一串字符

%u

无符号整数

%x

无符号十六进制数, 用小写字母

%X

无符号十六进制数, 用大写字母

%p

一个指针

%n

参数应该是一个指向一个整数的指针

指向的是字符数放置的位置

%%

一个'%'符号

三、C语言类型

基本类型:字符型、整型、浮点型

构造类型:数组、结构体、共用体、枚举

指针:*

空类型:void

1.基本类型:

 

整型:存储整数的类型

  • 按照表示范围大小,分为:short2字节)、int24字节)、long4字节)、long long8个字节)
  • 整型分为无符号整型和有符号整型
  • 无符号整型使用unsigned表示,无符号整型只能表示非负整数。
  • 有符号整型实用signed表示(signed可以省略),符号占用一个bit

 short类型

  • 无符号表示范围:0~65535
  • 有符号表示范围:-32768~32767
  • intlong略

如果把一个超过类型范围的数赋值给这个类型的变量会怎样?

溢出:把一个范围大的类型值赋值给小的类型,会导致溢出

    //无符号
    unsigned short s1 = 65537;
    printf("s1 = %d\n",s1);

    //有符号
    signed short s2 = 32769;
    printf("s2 = %d\n",s2);//补码

输出:

s1 = 1
s2 = -32767

说明:

65537的二进制为:0001 0000 0000 0000 0001

unsigned short 只能保存16个二进制位,高位舍弃,所以s1存储的结果是0000 0000 0000 0001

有符号数据使用补码保存,所以需要先了解补码

补码(二进制):计算机中所有的数值都是以补码的形式存储的。

•正数的补码就是其本身;
•负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。

补码的设计目:

•使符号位能与有效值部分一起参加运算,从而简化运算规则.
•使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计

举例:数据类型有符号char
7-5
=7+(-5)
=00000111[原]+10000101[原]
=00000111[补]+11111011[补]
=00000010[补]
=00000010[原]

2-4
=2+(-4)
=00000010[原]+10000100[原]
=00000010[补]+11111100[补]
=11111110[补]
=10000010[原]

(-1) + (-127) 
= [1000 0001]原 + [1111 1111]原 
= [1111 1111]补 + [1000 0001]补 
= [1000 0000]补
= [1000 0000]原

注意:-128是个特殊的数,用原码和补码都用10000000表示(假设字长8位)
*补码转原码:对补码求补码

所以:

代码中s2 = 32769

32769二进制为1000 0000 0000 0001,复制给s2后,这个值被看做补码,还原成原码的值为:1111 1111 1111 1111最高位的1被当做符号,所以输出时显示为-32767(32767的二进制为0111 1111 1111 1111)。

进制
八进制:以0开头,如020,035
十六进制:以0x或0X开头,如0x15,0X16
代码:

    int d = 20;
    printf("十进制:d=%d\n",d);
    d = 020;
    printf("八进制:d=%d\n",d);
    d = 0x20;
    printf("十六进制:d=%d\n",d);

 输出:

十进制:d=20
八进制:d=16
十六进制:d=32

字符型:是特殊的整型,用来表示ASCII字符,它存储整数,显示整数对应的ASCII码值。
 

    //char c = 'a';
    char c = 97;//ASCII中97对应字符a,效果一样
    printf("c=%c\n",c);
    printf("c=%d\n",c);
  • 给char赋值,可以直接赋值字符,也可以赋值字符对应的ASCII码值
  • 输出char类型,使用%c输出字符,使用%d输出字符对应的ASCII码值

很多编译器中的char类型区分有符号和无符号,在这些编译器中字符型直接当作整型使用。

    unsigned char c1 = 99;
    printf("c1 = %d\n",c1);
    signed char c2 = -55;
    printf("c2 = %d\n",c2);

浮点型就是数学中的科学计数法在计算机中的表示方法。
浮点型分为:float(4字节)、double(8字节)、long double(16字节,一般用不到)。

 单精度浮点值:1位符号,8位指数,23位小数。

双精度浮点值。1位符号,11位指数,52位小数。 

float和double,优先使用double,因为:
    1,double精度高;
    2,有些情况计算机对float的处理要比double复杂;
整型和浮点型转换的时候要考虑经度丢失的问题。

    float f = 34.555;
    printf("f = %e\n",f);
    double dd = 5444.5566;
    printf("dd = %1.9E\n",dd);

    //精度1
    int d2 = 1234567899;
    float f1 = d2;
    printf("f1 = %1.9f\n",f1);

    //精度2
    int m =10;
    int n =4;
    double res = (double)m/4;//两个整数相除,结果还是整数,小数部分舍弃
    printf("res = %lf\n",res);

输出

f = 3.455500e+01
dd = 5.444556600E+03
f1 = 1234567936.000000000
res = 2.500000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值