C语言中数据类型转换及其应用探究

2016-11-14 06:16梁科辉
山东开放大学学报 2016年4期
关键词:运算符数据类型算术

梁科辉,范 华

(山东广播电视大学,山东 济南 250014)



C语言中数据类型转换及其应用探究

梁科辉,范 华

(山东广播电视大学,山东 济南 250014)

C语言作为高校计算机相关专业的基础专业课,学好用好C语言至关重要。数据类型转换是C语言中的一个学习重点,也是一个学习难点。为了方便学习者能够深入理解并熟练使用,对三种基本数据类型转换(算术类型转换、赋值类型转换、强制类型转换)从转换条件、转换规则、转换过程和应用分析进行了阐述和归纳,同时对三种类型转换进行总结对比,并通过典型程序举例剖析了在编程中的实际应用。

C语言;数据类型;类型转换;算术类型转换;赋值类型转换;强制类型转换

一、引言

C语言是目前高校计算机专业课程中广泛应用于教学的计算机高级语言,一直以来被作为计算机专业的基础专业课程,在一些非计算机专业的教学中也是一门重要的基础学科。C语言作为计算机专业的基础语言,具有优点多、应用广、通用性强、可移植性强、效率高等特点,其最大特点就是同时具备高级语言和低级语言优良性能,这决定了它具有广阔的应用领域和持久的生命力[1]。C语言课程的学习是为了培养学生计算机编程的基本能力,同时为更多计算机技能的学习打下良好基础。C语言在计算机专业课程中能够起到良好的衔接作用,尽早学习C语言有利于为日后学习《数据结构》、《C++》和《Java》等专业课程打下良好的编程基础。

学习C语言可以使计算机专业的每一个学生了解程序设计的基本理论、掌握程序设计的相关问题和技能。C语言中的许多内容机制将程序设计得以融入到高级语言当中,而且C语言可使计算机专业初学者更容易掌握程序设计的思维和方法[2]。

C语言中数据类型纷杂多样,使用起来灵活多变,尤其在不同的应用场合,这些数据类型之间常常会进行相互转换;初学者往往体会不到其中的细微差别,使用起来常常感觉非常困难。本文针对上述问题,就C语言中的算术类型转换、赋值类型转换、强制类型转换这三种常见的基本数据类型转换进行深入的探讨和归纳,同时对三种类型转换进行总结对比,并通过典型程序举例分析了在编程中的实际应用。

二、数据类型和类型转换基本概念

(一)数据类型

在C语言中,通常将具有共同特征的数据归之于一类,称为某种数据类型,例如1.2、3.6等带有小数点的数据称之为实型数据,而12、36等自然数则称之为整型数据。

(二)C语言强类型特征

C语言是一种“强类型”的语言,即在C语言中所有的数据都应该归到某种特定的数据类型,也就是说在C程序中的任何常量和变量都应该有其特定的数据类型,并且在程序编译过程中要对每个常量和变量的数据类型进行检查,不符者会报错。

(三)数据类型转换

由于C语言具有上述“强类型”特性,在程序中可以自动或人为控制不同数据类型之间的转换,以满足运算符两侧运算数的类型相匹配[3]。但是,数据类型转换并非可以随意进行,归纳起来,在C语言中数据类型转换主要分为如下三种基本类型[4]。

三、三种数据类型转换

(一)算术类型转换

1.转换条件:在C语言中,双目运算符两边的运算数的类型必须一致才能进行运算。如果双目运算符两边运算数的类型不一致,则在运算过程中必须进行相应的类型之间的转换。例如,表达式:1.2+5,算术运算符“+”其左侧为实型数据1.2,另右侧为整型数据5,这时,系统将自动先把右侧的整型转换为实型再进行算术加运算。当前这种在算术运算过程中所发生的数据类型之间的转换称之为算术类型转换。

2.转换规则和过程

在算术类型转换过程中,按照“从低向高”或“由短到长”的总原则进行。如图所示,向左的箭头表示必定的转换,即运算中凡是有float型数据参与的运算,必先把float型转换成double型;运算中凡是有char/short型数据参与的运算,必先把char/short型转换成int型[5];向上的箭头表示数据级别“由低级向高级”转换,但并非逐级转换。比如int型数据和long型数据进行运算,直接把int型转换为long型。

3.应用分析

上述总原则之“从低向高”主要是从数据的精度角度,将低精度数据转换为高精度数据,比如,将float型数据转换为double型数据;而总原则之“由短到长”主要是从每类型数据在内存中开辟空间的大小,比如,在标准C语言中,char型数据开辟一个字节单元,int型数据开辟两个字节单元,为此,在运算中当char型数据和int型数据相遇,总是将char型数据转换为int型数据。

(二)赋值类型转换

1.转换条件:在赋值运算中,赋值运算符两侧的数据类型不一致时,所进行的数据类型之间的转换称之为赋值类型转换。

2.转换规则和过程:在赋值运算中,如果赋值运算符两侧的数据类型不一致时,在进行赋值运算前,系统将自动先把赋值号右侧表达式求得的值,按赋值号左侧变量的类型进行转换后再赋给左边的变量。

例如,int x;x=1.2+3.6;其运算过程为先进行右侧的算术加运算得结果4.8,然后根据左侧变量x的类型为整型,最后把实型数据4.8取其整数部分4赋给x变量。

3.应用分析

在赋值类型转换中,同样也要遵循上述“从低向高”或“由短到长”总原则,也称为“赋值兼容性”原则,否则,即使赋值过程不提示编译错误,但最终却得不到所期望的结果。比如,如果将double型数据赋值给float型变量,则就不能保证数据的精度。

另外,在函数调用中,实参与形参之间的数据传递同样也属于赋值类型转换,即“形参=实参”,赋值号右侧为实参,而赋值号左侧为形参。调用函数时,通过将实参“赋值予”对应形参,实现参数值的传递,其中,也要满足“赋值兼容性”原则。

(三)强制类型转换

1.转换条件:根据编程中应用需要,人为设定所需转换类型实现数据类型之间的转换,称之为强制类型转换。

2.基本形式:(类型名)表达式,其中(类型名)称为强制类型转换运算符,其后的表达式如果不是简单变量或常量也需要将其放在括号中,方可对整个表达式的值进行强制类型转换。

3.转换规则和过程:利用强制类型转换运算符,将其后表达式的值转换为(类型名)所指定的类型,这种类型转换是根据人为要求而进行的。

例如,表达式(int)3.14把3.14转换为整数3;表达式(double)(10%3)把10%3所得结果整数1转换成双精度实数1.0。

4.应用分析

强制类型转换在实际应用中非常灵活,尤其在一些特殊的应用中,例如,在指针类型转换中使用、在函数调用中使用等。学好用好强制类型转换将给编程中解决一些实际问题带来极大的方便。

四、类型转换应用探究

(一)典型程序举例[6]

程序功能:从键盘输入一个float类型的数据,通过多种运算处理所得结果要求保留该数小数点后三位小数,并对第四位小数进行四舍五入处理,然后输出结果,以便验证。

程序代码如下:

main( )

{ ①float a;

②printf(“Enter a:”);

③scanf(“%f”,&a);

④printf(“处理前a=%f/n”,a);

⑤a=a*1000;

⑥a=a+0.5;

⑦a=(int)a;

⑧a=a/1000;

⑨printf(“处理后a=%f/n”,a);

}

(二)程序运行结果

输入3.141592运行结果

输入6.153287运行结果

(三)转换应用分析

在上述程序第⑦a=(int)a行中,由于a定义为float变量,当从键盘输入3.141592值时,通过处理赋值号右侧a当前值为3142.092,按照表达式(int)a对变量a进行强制类型转换,取其整数部分得到3142,这时在进行赋值运算时,可以看到赋值号左侧变量a为float类型,为此,要进行赋值类型转换,即将整数3142按照赋值号左侧a的类型转换为3142.0,然后再赋值给变量a。

接下来执行上述程序第⑧a=a/1000行内容,首先在赋值号右侧的算术表达式a/1000中,由于a为float类型,而算术运算除“/”右侧运算数1000则为整型数据,按照上述算术类型转换规则,需将整型数据1000转换为实型数据1000.0,然后进行算术除运算得到结果为3.142,最后将其赋值给赋值号左侧变量a。

五、小结

本文从C语言在计算机相关专业课程的重要性和学好C语言的必要性引入,通过数据类型和类型转换等基本概念,主要分析了C语言中三种数据类型转换的转换条件、转换规则和过程以及相关应用。最后通过典型程序举例分析了三种数据类型转换在编程中的实际应用。总结了三种数据类型转换的结论。

在此,还需要特别注意以下两个方面的内容:

(一)在上述三种数据类型转换中,算术类型转换和赋值类型转换是由系统自动完成转换的,只需把握其转换规则即可,也称为隐式类型转换;而强制类型转换是根据实际需要人为控制进行的,三种数据类型转换的简单对比表如下所示。

三种类型转换对比表

(二)由C语言的“强类型”性,在程序编译过程中,要进行类型检查,为此,在实际编程中要注意数据类型间的自动转换和人为控制。

[1]范华,秦茂玲,张俊.透视C程序设计语言[J].计算机技术与发展,2008.

[2]谭浩强.C程序设计[M].北京:清华大学出版社,2005.

[3]范华.三级C编程应试模板及应用[J].软件,2012,(33):77-79.

[4]范华.C语言中数据类型转换[OL].http://weike.enetedu.com/play.asp?vodid=142861&e=1.

[5]徐新华.C语言程序设计教程[M].北京:中国水利水电出版杜,2001.

[6]范华.C语言程序设计简明教程[M].北京:清华大学出版社,2015.

2016-08-21

梁科辉,男,山东广播电视大学高级工程师。

范华(1979-),男,工程师,硕士研究生,主要研究方向为软件工程、程序设计语言与算法、网络工程、教学法研究。

TP311.1

A

1008—3340(2016)04—0087—03

猜你喜欢
运算符数据类型算术
老祖传授基本运算符
详谈Java中的基本数据类型与引用数据类型
如何理解数据结构中的抽象数据类型
用手机插头的思路学习布尔运算符
算算术
学算术
基于SeisBase模型的地震勘探成果数据管理系统设计
相似度计算及其在数据挖掘中的应用
小狗算算术
做算术(外一则)