C语言数据

本文介绍了C语言中的数据类型,包括关键字如int、float,以及运算符和函数的使用。文章通过示例程序展示了如何使用printf和scanf读写数据,特别是处理整数和浮点数。还讨论了变量与常量、数据类型的关键字,以及浮点数可能存在的溢出问题。
摘要由CSDN通过智能技术生成

数据和C

本文介绍以下内容

1关键字

2运算符

3函数

4整数类型和浮点数类型

5如何使用printf()和scanf()函数读写不同的类型

程序离不开数据,把数字,字母,文字输入计算机,就是希望它利用这些数据完成某些任务。

c语言提供两大数据:整数类型和浮点数类型

1 示例程序

/*platinum.c  --your weight in platinum */

#include <stdio.h>

int main (void)

{

  float weight; //你的体重

  float value; //相等重量的白金价值

printf("Are you worth your weight in platinum?\n");

printf("Let's check it out.\n");

printf("please enter your weight in pounds:");

//获取用户的输入

scanf("%f",&weight);

//假设白金的价格$1700

//14.5833用于英镑转化

value =1700.0 * weight *14.5833;

printf("your weight in platinum is worth $%.2f.\n",value);

printf("you are easily worth that! if platinum prices drop,\n");

printf("eat more to maintain your value.\n");



return 0;

}

注:“enter your weight ”的意思是输入你的体重,然后按下Enter或Return键(不要输入之后就一直等着)

程序结果

Are you worth your weight in platinum?
Let's check it out.
please enter your weight in pounds:156
your weight in platinum is worth $3867491.25.
you are easily worth that! if platinum prices drop,
eat more to maintain your value.

1.1 程序调整

本例 需要调用两次getcher()函数

/*platinum.c  --your weight in platinum */
#include <stdio.h>

int main (void)

{

  float weight; //你的体重
  float value; //相等重量的白金价值

printf("Are you worth your weight in platinum?\n");

printf("Let's check it out.\n");

printf("please enter your weight in pounds:");

//获取用户的输入

scanf("%f",&weight);
getchar();
getchar();
//假设白金的价格$1700

//14.5833用于英镑转化

value =1700.0 * weight *14.5833;

printf("your weight in platinum is worth $%.2f.\n",value);

printf("you are easily worth that! if platinum prices drop,\n");

printf("eat more to maintain your value.\n");

return 0;

}

键入156并按下Enter(或Return)键(发送一个换行符),然后是scanf()读取键入的数字,第一个getchar()读取换行符,第2个getchar()让程序暂停,等待输入。

1.2 程序中的新元素

1 代码中用到了一种新的变量 float

2演示了常量的几种新写法,可以使用带小数点的数

3在printf()中使用%f来处理浮点值。%.2f中的.2用于精准控制输出,指定输出的浮点数只显示小数点后面两位

4scanf()函数用于输入。%f说明scanf()要读取用户从键盘输入的浮点数

5新特点是人机交互性

2 变量与常量数据

常量:有些数据类型在程序使用之前已经预定好了,在整个程序的运行变化中没有变化

变量:其他数据类型在程序运行期间可能会改变或被覆值

3数据:数据类型关键字

int表示基本整数类型

char关键字用于指定字母和其他字符,也可以表示较小的整数

float double long double表示带小数点的数

_Bool类型表示布尔值(true false)

_Complex和 _Imaginary分别表示复数和虚数

位、字节和字

位、字节和字是描述计算数据单元或储存单元的术语。这里主要指储存单元

位是计算机内存的基本构建块,最小的储存单位是位(bit)可以储存0或1

字节时常用的计算机储存单位,对于几乎所有的机器,1字节均为8位

字是设计计算机时给定的自然储存单位

2.1 整数和浮点数

整数没有小数部分,浮点数有小数部分

浮点数表达范围比整数大

一些算术运算,浮点数损失的精度更多

计算机的浮点数不能表示区间内的所有值,只能是实际数的的近似值

浮点数运算会比整数运算慢一些

3 C语言基本数据类型

3.1 int类型

int类型是有符号整数型,范围:-32768~32767

声明int变量可以通过赋值和函数来获得,也可以初始化变量

可以使用printf()函数打印int类型的值

注意:转义说明的数量与打印数量相等

3.11 显示八进制和十六进制

以十进制显示数字,使用%d;以八进制显示数字,使用%o;以十六进制显示数字,使用%x。要显示各进制数的前缀0,0x和0X,必须使用%#o,%#x

,%#X

//以十进制、八进制、十六进制打印十进制数100
#include <stdio.h>
int main (void)
{
    int x =100;
    printf("dec=%d; octal=%o; hex=%x\n", x, x, x);
    printf("dec=%d; octal=%#o; hex=%#x\n", x, x, x);

    return 0;

}

3.2 其他整数类型

short类型占用的储存空间可能比int类型少,常用于较小数值的场合以节省空间

long占用的储存空间可能比int多适用于较大数值的场合

long long占用的储存空间可能比long多适用于更大的数值场合

unsigned int 或unsigned 只用于非负值的场合。这种类型与有符号类型表示的范围不同

3.2.1 long常量和long long常量

通常程序代码中使用的数字都被储存为int类型,八进制和十六进制常量被视为int类型,可以在值的末尾加上l(小写)或L后缀,使用L后缀更好

类似地,在支持long long 类型的系统中,也可以使用ll或LL后缀来表示long long类型的值

整数溢出

// toobig.c--超出系统允许的最大int值
#include <stdio.h>
int main (void)
{
    int i= 2147483647;
    unsigned int j = 4294967295;
    printf ("%d %d %d\n",i,i+1,i+2);
    printf ("%u %u %u\n",j,j+1,j+2);

    return 0;
}

输出结果

2147483647 -2147483648 -2147483647
4294967295 0 1

溢出行为是未定义行为,c标准并未定义有符号类型的溢出规则(上例是特殊情况,也可能会出现其他情况)

3.2.2 打印类型

打印unsigned int类型的值,使用%u转换说明;打印long类型的值使用%ld转换说明,如果系统中int和long的大小相同,使用%d就行(但是,这样的程序移植到其他程序时会无法正常工作)

在x和o前面可以使用l前缀,%lx表示以十六进制格式打印long类型整数,%lo表示八进制格式打印long类型整数

打印short类型,可以使用h前缀,%hd表示十进制显示short类型的整数,%ho表示以八进制显示short类型的整数

注:虽然c允许使用大写或小写的常量后缀,但是在转换说明中只能写小写

//printf.c--更多printf()的特性
#include<stdio.h>
int main (void)
{
    unsigned int un =3000000000; //int为32位和shaort为16位的系统
    short end=200;
    long big =65537;
    long long verybig = 12345678908642;
    printf("un = %u and not %d\n",un,un);
    printf("end = %hd and %d\n",end ,end );
    printf ("big =%ld and not %hd\n",big ,big);
    printf("verybig =%lld and not %ld\n",verybig,verybig);

    return 0;

}
执行结果:
un = 3000000000 and not -1294967296       
end = 200 and 200
big =65537 and not 1
verybig =12345678908642 and not 1942899938

为什么要进行转换?

int类型被认为是计算机处理整数类型时最高效的类型

h修饰符有什么用?

使用h修饰符可以显示较大整数被截断成short类型值的情况

本例中:

65537 以二进制写成了32位,使用%hd,printf()只会查看16位

verybig由于使用%ld,printf()只显示了储存在后32位值

注:在使用printf()函数时,切记检查每个待打印值都相应的转换说明,还要检查转换说明的类型是否与待打印值的类型相匹配

3.3 使用字符:char类型

char类型用于储存字符(字母和标点符号),但从技术层面来看,char是从技术层面

3.3.1 声明char类型变量

char类型变量的声明方式与其他类型变量的声明方式相同

3.3.2 字符常量初始化

标准ASCII表的范围是0~127

用单引号括起来的单个字符被称为字符常量。编译器一经发现'A'就会将其发现。

例如:char grade = 'A';

char grade = '65'; //对于ASCII,这样没问题,但是一种不好的编程风格(最好使用字符常量,而不是数字来代替)

3.3.3 非打印字符

单引号只适用于字符、数字、标点符号,浏览ASCII发现,有些字符打印不出,这就需要表义转义

转义序列:

\a--警报;\b--退格;\f--换页;\n--换行;\r--回车;\t--水平制表符;\v--垂直制表符

\--反斜杠;\'--单引号;"--双引号;?--问号?\0oo--八进制;\xhh--十六进制

3.3.4 打印字符

printf()函数用%c指明待打印字符

有些编译器把char实现为有符号类型,这意味着char可表示的范围是-128~127.而有些编译器把char实现为无符号类型,其范围0~255

在char前面使用signed或unsigned,来定义类型

signed char 表示有符号类型

unsigned char 表示无符号类型

3.4 _Bool类型

_Bool类型表示布尔值,即逻辑值true和false

3.5 可以移值类型

stdint.h和inttypes.h(如有需要自行了解)

3.6 float、double、long double类型

3.6.1 声明浮点型常量

浮点型变量的声明和初始化方式与整型变量相同

3.6.2 浮点型常量

浮点型常量的基本形式是:有符号的数字(包括小数点),后面紧跟e或E,最后是一个有符号表示10的指数

例如:

-1.56E+12;2.87e-3

默认情况下,编译器假定浮点型常量是double类型的精度,在浮点数后面加上f或F后缀可覆盖默认设置,编译器会将浮点型常量看做float类型,使用l或L后缀使得数字成为long double类型(建议使用L后缀),没有后缀的浮点型常量是double类型

3.6.3 打印浮点值

printf()函数使用%f转换说明打印十进制记数法的float和double类型浮点数,用%e打印指数记数法的浮点数,打印long double类型要使用%Lf、%Le或%La类型转换说明,没定义参数类型的函数的值自动转换成double类型。

3.6.4 浮点值的上溢下溢

当计算导致数字过大时,超出当前表达类型就会上溢(printf()函数会打印inf或infinity)

float toobig =3.4E38*100.0f;

 printf("%e\n",toobig);

由于对很小的数做除法,在计算过程中损失了原末尾有效位的数字,这种情况叫做下溢

特殊的浮点值NaN(printf()会返回NaN或者nan)

3.7 复数、虚数类型

float_Complex;double_Complex;long doubhle_Complex

float_Imaginary;double_Imaginary;long double_Imaginary

如果包含complex.h头文件,便可使用complex来代替_Complex;用imaginary来代替 _Imaginary,还可以用I代替-1的平方根(也可以不使用)

3.8 类型大小

打印类型的大小

//typesize.c--打印类型大小
#include<stdio.h>
int main (void)
{
    //c99为类型大小提供%zd转换说明
    printf("Type int has a size of %zd bytes.\n",sizeof(int));
     printf("Type char has a size of %zd bytes.\n",sizeof(char));
      printf("Type long has a size of %zd bytes.\n",sizeof(long)); 
       printf("Type long long has a size of %zd bytes.\n",sizeof(long long));
        printf("Type double has a size of %zd bytes.\n",sizeof(double));
          printf("Type long double has a size of %zd bytes.\n",sizeof(long double));
           

           return 0;

}
Type int has a size of 4 bytes.      
Type char has a size of 1 bytes.     
Type long has a size of 4 bytes.     
Type long long has a size of 8 bytes.
Type double has a size of 8 bytes.   
Type long double has a size of 16 bytes.

4 小结

4.1 关键字

基本数据类型由11个关键字组成:

int;long;short;unsigned;char;float;double;signed;_Bool; _Complex; _Imaginary

4.2 整型分为有符号整型和无符号整型

有符号整型可用于表示正整数和负整数

无符号整型只能用于表示零和正整数,因此无符号整型可表示的正整数比有符号整型的大,在整型类型前加上关键字unsigned表明该类型是无符号整型

4.3 字符类型

4.4 布尔类型

4.5 浮点数类型

浮点数类型又分为实浮点数类型和虚浮点数类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值