C语言作业 第二章 C语言的数据类型

C语言作业 第二章 C语言的数据类型

2.1 引例

 

 运行结果:
Programming is fun
说明
(1)程序中第一行:
/*Output:“Programming is fun.”*/
它是程序的注释,用于说明的功能,是为增加程序的可读性而设置的注释内容必须包含在/*和*/之间,其内容可以是任何可显示字符,注释部分可以出现在程序和执行结果没有任何影响。注意/和*之间不能有空格

(2)在程序的适当位置插人注释,可以使程序容易被人理解。注释可以出现在程序中任意合适的地方,但必须成对出现。注释出现在某--段代码的前面时,其作用为说明该段代码的功能;出现在-行代码的后面时,用于说明该行代码的功能。注意注释不能出现在语句的中间。

(3)程序中的第二行是 #include<stdio.h>

它是它是编译预处理命令,因为程序中调用了pinr()函数.该函数是c语盲提供的标准输出图数,在系统文件sdio. h(称为头文件)中声明,所以在程序开始处夔使用件包含进来。注意C语言有效的预处理命令总是以#开始的,预处理命令的末尾不加分号。
(4)程序中的第三行是
int main( void)
它是本程序中的“主函数”,在一个C程序中有且仅有一个main()函数,程序运行时.会首先从main()函数开始执行。该行的关键字int说明main()函数的返回值是整型数,括号中的void表示main()函数不需要参数。
(5)一对大括号将函数的所有语句括起来,构成了函数体。本程序中的函数体共有两条语句。第一条语句为
printf( "Programming is fun. ");
它由函数调用和分号两部分组成。printf("Programmingisfun.")调用了标准输出函数,将引号中的内容原样输出到屏幕上(C语言的默认输出设备为屏幕),语句末尾的分号表示该语句结束。注意C语言中除复合语句外的所有语句都必须以分号结束。
main()函数的第二条语句是:
return 0
它结束main()函数的运行,并向系统返回一个整数0,作为程序的结束状态。如果返回0,说明程序运行正常,返回其他值值则表示不同的错误情况。系统根据返回值判断程序是否运行成功。

 

         运行结果:

体积为:33.510292,表面积为50.265442

说明;

(1)程序中第2行语句;

#define PI 3.14159

定义了一个符号常量PI,这样程序中反是需要使用3.14159的地方,都用PI代替提高了程序的可读性(2)main()函数前面 的void表示该函数无返回结果值(3)程序中调用prinf()函数输出结果时,将引号内除%f以外的内容原样输出,并在第一个%f的位置上输出变量v的值,在第二个位置上输出变量f的值。

2.2 C语言的数据类型


C语言程序中所用到的每一一个常量、变量和函数等程序的基本操作对象都有一种数据类型与之相联系,数据类型决定了数据的取值范围、占用内存的字节数和所能进行的操作。 

C语言提供了四种数据类型:基本类型、结构类型、指针类型和空类型 ,C语言中构造类型包括:数组类型、结构体类型、共用体类型和枚举类型。 (1)基本类型还可以分解为其他类型,主要为整型、字符型和浮点型。 (2)结构类型是根据已定义的一个或多个数据类型,用构造的方式来定义的可以理解为,一个构造类型的值由若干个“成员”或“分量”构成。每个“成员”都是一个基本类型或一个结构类型。 (3)指针是C语言中一种特殊,同时又具有重要作用的数据类型。

2.3 C语言的常量
2.3.1 直接常量

1.直接常量

 整型常量即整数,包括正整数、负整数和零。C语言中,整型常量可以用十进制、八进制和十六进制表示。

 十进制表示:由数字0~9,正、负号组成,如369,- 663等;

 八进制表示:以0(数字0)为前缀,其后由数字0~7组成,如0163,036等;八进制数一般是无符号数。如0192、-011 都是不合法的八进制常量。

十六进制表示:以0x或0X为前缀,其后由数字0~9和字母A~F(字母大小写均可)组成,如0x12cd,0X6Fa等。十六进制数-般是 无符号数。

注意:

(1)在一个整型常量后面加一个字母u或U,认为是unsigned int型, 如246U。(2)在一一个整型常量后面加一个字母1或L,认为是long int型,如12L。2.实数常量

2.实数常量

实型常量即实数,又称为浮点数。C语言中,实数只能用十进制形式表示,实数的表示方法有两种:小数形式和指数形式。①小数形式:由整数部分、小数点和小数部分组成,当整数部分或者小数部分为0时,可以省略不写,但是小数点不可省略。如12. 345,3. ,一.123等均为正确的实数。②指数形式:由尾数部分、字母E或e和指数部分组成,格式为:士尾数E指数。如1. 23E-2、3.14E+3等,它们表示的数值分别为1.23X10-2、3. 14X10.

 注意:

(1)以小数形式表示实数时,必须有小数点,并且小数点的前、后至少-边要有数字。(2)以指数形式表示实数时,字母E (或e)的前后必须有数字,并且指数部分只能是整数。如12.-E3、1. 5E、E6都是不正确的实数。

 在C语言中,实型常量默认为是double 型的实数,如果在数的后面加字母f或F(如1.65f、654.87F),则认为是float 型的实数。

3.字符型常量

字符常量指单个字养,用一对单引号及其拓号所括起的字符来表示。

 (1)字符常量只能用单引号括起来,不能用双引号或其它括号。

(2)字符常量只能是单个字符,不能是字符串。

(3)字符可以是ASCII字符集中的任意字符。按ASCII码的大小,不同的字符之间存在着次序,以字符的ASCII码值按升序连续排列。如小写字母的ASCII码大于大写字母的ASCII码,大写字母的ASCII码大于数字字符的ASCII码。

使用字符常量时,每个字符在内存中占用一一个字节,用于存储它的ASCII码值。所以C语言中的字符常量具有数值特征可以像整数一样参加运算,此时相当于对字符的ASCII码

进行运算。

 转义字符使用实例

 

分析:

(1)语句1处使用print[()函数分别输出char型变量b.c.d、e的值.由于b='\43'.即将转义字符\43'赋值给变鼓b.则系统会将"\43'转换为八进制数据43(十进制为35)所对应的字符“#”,因此b=井,其余变量的值可以采用同样的方法计算出来。

printf()函数的格式控制字符串中有-一个转义字符\n',编译系统会将它转换为回车换行符,即在输出一行内容后换行。程序运行后第一行的输出结果为:

b=#,c=C,d= * ,e=A

(2)语句2处使用printf()函数输出字符串“\" good\40morning!\b\"!\n”时.其中的转义字符会转换为相应的字符输出,即将“\"”转换为“"”输出,“\40”转换为空格,“\b”使光标回退一位,然后在此位置上使用“\”输出一个“",因此程序运行后第二行的输出结果为:" good morning" !

(3)语句3处使用printf函数输出字符串““\123456"时,其中的转义字符\123转换为相应的字符S输出,456原样输出.因此程序运行后第三行的输出结果为:“S456”

4.字符串常量
字符申常量是由一对双引号””括起来的零个或多个字符序列,如Hello Wordr .字符串中可以使用空格字符转义字符和其他字符,也可以使用汉字等文字符号。如:"china"、"你好Visual C"、"\tVisualC"等。字符串中还可以使用空字符,如:””表示空串,即不包含任何字符。字符串常量在内存中占用一段连续的存储单元,系统自动在每个字符串的尾部加上\0作为字符串的结束标志,因此,n个字符组成的字符串,在内存中要占用n+1个字节空间。可以使用sizeof 运算符,来计算字符串占用的内存空间大小。
如字符串常量"Hello\nWorld"占用12个字节的内存空间。
字符串的长度等于该字符串中所包含的有效的个数,如“Hello World”的长度为10,在字符串中如遇到'\0'('0'是表示字串结束符)则认为该字符串结束,如“Hello\0World”的长度为5.如果字符串中有转义字符,则一个转义字符作为一个字符,如“Hello World\t”的长度为11.可以使用strlen()函数来计算字符串的长度。注意:
字符常量和字符串常量在内存中的存储情况是不同的,如'6'在内存中占储的是其ASCII码.而"6"在内存中占2个字节,一个字节存储'6',另一以把个字符常量赋子 -个字符变量,但 不能把一个字符申常量赋子一个字符变量’在言中.由于没有提供字符串类型的变量,字符串一般用字符数组来解决。


2.3.2 符号常量


在C语言中,可以用一个标识符来表示一个常量称之为符号常量.符号常量在使用之前必须先定义,其一般形式为:
# define标识符常量值
其中#define是一条编译预处理命令,称为宏定义命令,其功能是把该标识符定义为其后的常量值,该标识符称为符号常量。一个#define命令只能定义一个 符号常量,若要定义多个符号常量,需使用多个#define命令。
 

运用符号常量计算价格

 

为编写程序提供好处:
(1)增加程序的可读性:通过标识符就知道该常量的意思,既见名知意(2)提高程序的可维护性:通过符号常量使得修改常量很方便,只需在常量的定又处修改即可。(3)简化程序代码:通过符号常量可以简化复杂表达          ’【-式的重复输人。(4)方便数组的定义:可以将整型符号常量作为数组的长度。


2.4 C语言的变量

变量是指在程序运行期间其值可以发生变化的量。变量用于从外部接收数据、保存一些不断变化的值、保存中间结果及最终结果,而这些都无法用常量来实现。一个变量应该有一个名字即变量名,在内存中占据一定的存储单元,在该存储单元中存放变量的值。
变量名实际上是一个符号地址,程序在编译时由系统给变量分配一定的内存空间。程序中对变量进行处理时,实际上是通过变量名找到相应的内存地址,从其存储单元中读取数据,也就是变量的值。
2.4.1 变量的定义与使用
1.变量的定义
(1)类型说明符必须是C语言中的有效数据类型,如int、float、double、char等,用于指定变量的类型,该类型决定了编译时分配给变量的内存单元的多少。(2)变量名表可以由一个或多个变量名组成,各变量名之间用“,”分隔。变量名必须是合法的C语言标识符,变量名一般使用小写字母。(3)变量的定义必须放在变量的使用之前,一般在函数体的开头部分进行定义。
在C语言中,基本数据类型包括char(字符型)、int(整型)、float(单精度浮点型)及double(双精度浮点型)等。不同的类型用于存放不同的数据,所需的储存空间也不相同
2.变量的初始化
C语言允许在定义变量的同时对变量赋值,这个过程称为变量的初始化。
对变量初始化时需注意:(1)对一个变量赋初值之后,该值被存储在分配给该变量的内存空间中。(2)不允许对多个未定义的同类型变量连续初始化,如:“int x=y=3;”是不合法的,应写成"int x=3,y=3;”。(3)初始化时,一般应使“一”右边表达式的数据类型和“二”左边的变量的类型一致,如果不一致,系统会进行自动赋值转换。(4)没有进行初始化的变量,其值是由定义时所使用的存储类型决定的。全局变量和static型变量的值是0或'\0',其它存储类型的局部变量的值是未知的。
3.变量的使用
变量定义之后,就可以在程序中使用。在程序中使用变量,称为变量的引用,如进行数值计算、数据处理等。使用变量时,应该先赋值,后引用。
在程序中可以通过初始化、赋值表达式或者输入函数scanf()来对变量赋值。

变量使用示例

分析:在main()函数中定义了三个int型变量a,b,c,一个char型变量ch。


2.4.2 整型变量


一个整型变量用来保存整数。在C语言中,整型又可分为:短整型(short int)、整(int)、长整型(long int)、无符号整型(unsigned int)、无符号短整型( unsigned short int)和符号长整型(unsignedlongint)六种。
C标准没有规定各类整型数据所占内存的字节数,只要求短整型不长于整型,长整型短于整型。某种类型的数据所占内存的大小随编译系统的不同而有差异,可以使用size运算符,计算某种数据类型占用内存的大小。在Visual C++ 2010环境下,种整型的关键字及占用内存字节数和取值范围

 

说明:(1)各种无符号整数所占的字节数与相应的有符号整数相同。但由于省去了符号位,故不能表示负数。(2)有符号整数以二进制补码形式存储。最左边第1位表示符号,该位为0,表示正数,该位为1.表示负数。(3)无符号整数以二进制原码形式存储。

不同类型整形变量的定义与使用示例

 

 

2.3.4 实数变量

C语言中实型变量分单精度(float型)和双精度(double型)两类。

单精度型数据能保留7位有效数字,双精度型数据能保留16位有效数字。 

 

 
2.4.4字符型变量
字符型变量的值是字符常量,即用单引号引起来的单个字符。字符型变量的类型说明符是char.其类型说明的格式和命名规则与整型变量相同。
由于字符常量在内存中占用一个字节,用于存储它的ASCII 码值,所以C语言中的字符具有数值特征,可以像整数一样参加运算,允许对整型变量赋以字符值,也允许对字符变量赋以整型值。C语言在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。

把大写字母转换为小写字母

 

2.5 运算符和表达式

C语言中运算符和表达式数量之多,在其他高级语言中是很少见的。正是丰富的运算符和表达式使C语言功能十分完美,这也是C语言的特点之一
2.5.1 赋值运算符和赋值表达式
C语言中赋值运算符有,=、+=、-=、*=、/=和%=等。用赋值运算符将运算对象连接而成的表达式称为赋值表达式,i++先用后加、++1先加后用。
1.简单赋值运算符
最简单的赋值运算就是“=”,它的作用是将一个数值赋给一个变量。如r=2的作用是执行一次赋值操作(或称赋值运算)。把常数2赋值给变量r。也可以将一个表达式的赋值给一个变量。
2.复合赋值运算符
在简单赋值运算前面加上算术运算符就构成复合赋值运算符

 

3.赋值表达式

在C语言中,赋值语句属于表达式语句。赋值表达式是由赋值运算符将一个变量和个表达式连接起来的式子所组成。

 2.5.2 算术运算符和基本的算术表达式

基本的算术运算符

 

(1)+加法运算行,为双目运算符,其功能是进行求和运算(2)一作为单目运算符使用时,是取负运算,如一3;作为双目运算符使用时,是进行求差运算,(3)*乘法运算符,为双目运算符,功能是进行求乘积运算,(4)/除法运算符,为双目运算符,功能是进行求商运算,如a/b。
在计算a/b时,如果a和b都是整型,则其商也为整型,小数部分被舍去,如3/4的结果为0,4/3的结果为1。如果a和b中有一一个是实型,则a和b都转换为double类型,然后相除,结果为double类型。(5)%求余运算符,为双目运算符,功能是进行求余数的运算,如a%b,其结果为a除以b后的余数。
求余运算要求参与运算的两个运算对象都必须是整型,其结果也是整型。如4%3的结果为1。求余运算结果的符号与第一个操作数符号相同,如-4%3的值为一1,4%- 3的值为1。
2.自增、自减运算符
C语言有两个特殊运算符“++”和“--”
(1)++自增运算符,为单目运算符,其功能是使变量的值自加1。自增运算符有两种使用形式:①前缀方式:用于变量前面,如"inta=+ +x;"它是“先计算,后使用”,即先将x的值自加1,然后将x的值赋给变量a。②后缀方式:用于变量后面,如"inta=x++ ;”它是“先使用,后计算”,即先将x的值赋给变量a,然后再将x的值自加1。
(2)--自减运算符,为单目运算符,功能是使变量的值自减1,使用方法和自增运算符相似的。
3.算术运算符的优先级和结 合性

C语言规定了运算符的优先级和结合性,单目运算符是右结合的,双目算术运算符是左结合的。算术运算符的优先级为:“++、--、-”>“*、/、%”>“+、-”,即单目运算符的优先级高于双目运算符,双目算术运算符中*、/、%的优先级高于+、一。在优先级相同的情况下,按规定的“结合性”进行处理。
4.算术表达式
算术表达式是由算术运算符、运算对象和括号连接起来的式子,运算对象可以是常量变量和函数等。
例如:若有定义“char a=0; int b=1; float c=2; doubled=3;”,则表达式“a+b+c+d"值的类型为double。
算术表达式使用注意:(1)表达式中的乘号不能省略,且表达式中的所有字符均应写在同一行上。(2)在表达式中还可以使用多层圆括号(不能使用中括号[]和花括号{}),但是要注意括号的配对。(3)在数学中,5X6+4的运算结果与6+4X5的结果相同,都是34,但是C语言中表达式5*6/4的结果却与6/4*5的结果不一样。另外,还需注意8/(8/10)之类的表达式,因为(8/10)的结果为0,用0做除数将会出现运算溢出的错误,为了不使8/10点结果为0,应将整型常常量改为实型常量8.0/10。

输入一个3为的正整数,输出其反序数
 

 

2.5.3 逗号运算符和逗号表达式

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

(1)逗号表达式的执行顺序是:从左到右依次计算每个表达式的值,并把最后一个表达式的值作为整个逗号表达式的值。如对于表达式“a=4,b=5,c=a+ b”,首先计算a=4的值,结果为4,再计算b=5的值,结果为5,最后计算c=a+b的值,结果为9,则整个逗号表达式的值为9,该表达式执行完后,a=4,b=5,c= 9。(2)逗号运算符是双目运算符,其优先级最低,是左结合的。(3)并非所有出现逗号的地方都为逗号表达式,如在变量说明语句中,以及函数参数表中逗号只是用作各变量之间的分隔符。

2.5.4 求字节数运算符 

运算符sizecof 用于计算数据类型所占的字节数,它是一个单目运算符,优先级高于双目运算符,其一般格式如下:

(1)sizeof(表达式)或sizeof表达式

 (2)sizeof(数据类型名)

 

说明:执行语句“a= sizeof(3+5.0);”时,先计算出3+5.0的结果为double型的8. 0,然后再对其求字节数,结果为8。执行语句“b= sizeof 3+5.0”时,由于sizeof运算符的优先级高于+运算符,因此先计算sizcof 3,其值为4,然后计算4+5.0=9.0,赋值给int型的变量b时,b-9,"hin"是字符串,其字节数为字符串的长度加1个字节,增加的这个字节用于存放字符串的结束符’\0'。 

2.6 数据类型转换


C语言规定,各种不同数据类型的数据在一起运 算时,不同类型的数据要先转换成相同类型的数据才能进行运算。数据类型的转换可以分为自动转换和强制转换,

2.6.1自动类型转换

不同类型的数据在一起运算时 ,编译系统会自动进行类型转换。进行自动转换的规则是:把占用内存空间少的(低级)类型向占用空间多的(高级)类型转换.以保证运算的精度,(1)图2.2中的横向箭头表示必定的转,換如char型short型数据必定先转换为int型,float型数据在运算时将先转换成double 型,以提高运算精度(即使是两个float 型数据相加,也要先转换成double型.然后再相加)。(2)纵向简 头表示当经过横向的转换后,进行运算的数据类型仍然不同时进行的转换方式。在不同数↑据类型的转换过程中,类型转换顺序并不是按箭头方向一步一步的转换,可以没有中间类型转换。例如int型与double型数据进行运算,先将int型的数据直接转换成double型,然后再进行两个同类型(double型)数据的运算。山(3)数据类型的各种转换只影响表达式的运算结果,并不改变原变量的定义类型,并且其数据值也不会发生任何改变。(4)当赋值运算符两边的运算对象类型不同时,也要发低生类型转换,转换的规则是:把赋值运算符右边表达式的类型转换为左边变量的类型。

 

强制类型转换是采用强制类型转换运算符将某种数据类型强制转换成指定的数据类型,其一般形式为

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

功能:把表达式的运算结果强制转换成类型说明符指定的类型。

分析:计算表达式(float)(a+b)时,是将a+b的结果7强制转换为float 型的7.0,然后计算7.0/2的结果为3.5。输出c的值时,由于c的数据类型是单精度型的,有7位有效数字,故添加了5个0。

进行强制类型转换时需注意:

(1)需强制类型转换中的表达式一定要括起来,否则只对紧随括号后的量进行类型转换。(2)强制类型转换是一种不安全的转换,如果是从高级类型转换成低级类型,则会损失数据的精度。(3)强制类型转换并不改变表达式中变量的类型和值.

以上是本人对第二章C语言 数据类型,运算符和表达式的总结

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值