C语言的数据类型、常量、变量

  • Post author:
  • Post category:其他



2.1 引例

/* Output:"Programming is fun."*/      /*注释*/	
#include <stdio.h>                      /*编译预处理命令*/
int main(void)                        
{  				                
	printf("HelloWorld!");   	/*调用prontf()函数输出文字*
	return 0;
}

/* Output: “Programming is fun.”*/ / *注释*/

它是程序的注释,用于说明程序的功能,是为增加程序的可读性而设置的。注释内容必须包含在/*和*/之间0,其内容可以是任何可显示字符,注释部分对程序的编译过程和执行结果没有任何影响。注意“/”和“*”之间不能有空格。

#include < stdio. h>

它是编译预处理命令,因为程序中调用了printf()函数,该函数是C语言提供的标准输出函数,在系统文件stdio.h(称为头文件)中声明,所以在程序开始处要使用include将该文件包含进来。注意C语言有效的预处理命令总是以#开始的,预处理命令的末尾不加分号。

int main( void)

它是本程序中的“主函数”,在一个C程序中有且仅有一个main()函数,程序运行时,会首先从main()函数开始执行。该行的关键字int说明main()函数的返回值是整型数,括号中的void表示main()函数不需要参数。

printf( “Programming is fun. ” ) ;

它由函数调用和分号两部分组成。printf(“Programmingisfun.”)调用了标准输出函数,将引号中的内容原样输出到屏幕上(C语言的默认输出设备为屏幕),语句末尾的分号表示该语句结束。注意C语言中除复合语句外的所有语句都必须以分号结束。

return 0 ;

它结束main()函数的运行,并向系统返回一个整数0,作为程序的结束状态。如果返回0,说明程序运行正常,返回其他值则表示不同的错误情况。系统根据返回值判断程序是否运行成功。

如果需要在两行上输入文字,可以更改上面的代码,改写内容如下:

#include <stdio.h>
int main(void)
{
	printf("Programming is fun.\n");                  /*输出文字后换行*/
	printf("And Programming in C is even more fun!");
	return 0;
}

语句printf(” Programming is fun. \n”)中的\n是换行符,即在输出“Programming isfun.”后换行。\n 称为转义字符,关于转义字符的详细介绍本章会讲解。

设球半径为r、球体积为V、球表面积为f ,球体积和球表面积的计算式为:

输入半径,分别计算球体积和球表面积。

#include<stdio.h>                
#define PI 3.14159				  /*定义符号常量PI*/	
void main()
{
    int r;                        /*定义r为整型*/
    float v,f;                    /*定义v、f为单精度浮点型*/
    r=2;                          /*给半径赋值*/
    v=4.0*PI*r*r*r/3.0;           /*计算体积*/
    f=4.0*PI*r*r;                   /*计算表面积*/
    printf("体积为:%f,表面积为:%f\n",v,f);            /*输出体积、表面积*/
}


#define PI 3.14159

:定义一个符号常量PI,这样程序中凡是需要使用3.14159的地方都可以用PI代替。


void main()

:main函数前面表示的是程序的返回值类型,后面表示的是传入参数,这里传入参数为空被省略了,返回参数也是空,也可以被省略。


%f

:会将printf引号内除了

%f

之外的内容原样输出,并在第一个

%f

上输出v的值,在第二个

%f

上输出f的值。


注意:

百分号f补空的时候只能补小数

百分号d补空的时候只能补整数

百分号c补空的时候只能补字符


2.2 C语言的数据类型


2.3 C语言的常量

常量是在程序执行过程中,其值不发生改变的量,分为直接常量和符号常量两种。


2.3.1直接常量


1.整数常量

整数常量即整数、包括正整数、负整数和零。

整数常量可以用十进制、八进制、十六进制表示。

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

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

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

注意:

(1)在一个整型常量后面加一个字母u或U,认为是unsigned int型,如246U。

(2)在一个整型常量后面加一个字母1或L,认为是long int型,如12L。


2实数常量

实数常量即实数,又称为浮点数。C语言中实数只能用十进制表示,实数的表示方法有两种:小数形式和指数形式。


(1)小数形式

:由整数部分、小数点和小数部分组成,当整数部分或者小数部分为0时,可以省略不写,但是小数点不可省略。如12. 345,3. ,一. 123等均为正确的实数。


(2)指数形式

:由尾数部分、字母E或e和指数部分组成,格式为:±尾数E指数。

如1.23E-2、3.14E+3等,它们表示的数值分别为1. 23X10-2、3. 14X103。


注意:

(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码值按升序连续排列。

(4) 对于控制符(如回车、换行等)与不可见字符,在C语言中通过转义字符来表示。

转义字符 转义功能 ASCII码值
\0 空字符 0
\a 响铃 7
\b 退格(Backspace) 8
\t 水平制表符(横向跳格) 9
\n 回车换行(Enter) 10
\v 竖向跳格 11
\f 换页 12
\r 回车 13
双引号(”) 34
单引号(’) 39
? 问号(?) 63
\ 反斜线字符(\) 92
\ddd 1~3位八进制所代表的字符
\xhh 1~2位十六进制所代表的字符


注意:

字符型常量只占一个字符

/0表示停止,如果要用空格打/40


转义字符使用示例

#include<stdio.h>
int main()
{	
    char b,c,d,e;
    b='\43';
    c='\103';
    d='\x2a';
    e='\x41';
    printf("b=%c,c=%c,d=%c,e=%c\n",b,c,d,e);            /*语句1*/
    printf("\"good\0morning!\b\"!\n");	                /*语句2*/
    printf("\123456");                                  /*语句3*/
    return 0;
}

结果:

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

“good morning”!

S456

/123456最终得出S456占五个字符,因为结束时会自动补个/0


4.字符串常量

字符串常量是由一对双引号””括起来的零个或多个字符序列,如:”HelloWorld”。

字符串中可以使用空格字符、转义字符和其他字符,也可以使用汉字等文字符号。如:”china”、”你好Visual C”、”\tVisual C”等。

字符串中还可以使用空字符,如:”表示空串,即不包含任何字符。

字符串的长度等于该字符串中所包含的有效字符的个数,如“HelloWorld”的长度为10。

在字符串中如遇到’\0(‘\0’是字符串结束符)则认为该字符电结束.如”Hello\oWorld”的长度为5。如果字符串中有转义字符,则个转义字符作为一个字符,如”HelloWorld\t”的长度为11。

可以使用strlen()函数来计算字符串的长度。


注意:

字符常量和字符串常量在内存中的存储情况是不同的,如’6’在内存中占1个字节,存储的是其ASCII码,而”6″在内存中占2个字节,一个字节存储6′,另一个字节存储’\0’。可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量,在 C语言中,由于没有提供字符串类型的变量,字符串一般用字符数组来解决。


2.3.1符号常量

在C语言中,可以用一个标识符来表示一个常量,称之为符号常量

符号常量在使用之前必须先定义,其一般形式为:


#define 标识符 常量值

其中#define是一条编译预处理命令,称为宏定义命令,,其功能是把该标识符定义为其后的常量值,该标识符称为符号常量。一个#define命令只能定义一个符号常量,若要定义多个符号常量,需使用多个# define命令。

某程序需要使用一个代表常数3.145的符号常量名xp,则以下定义中正确的是 。

A.#define xp 3.145;                                        B.#define xp(3.145)

C.#define xp=3.145                                        D.#define xp 3.145

分析:A选项错误,井define是编译预处理命令,不是C语言中的语句,末尾不能加“;”。

B、C选项错误,不符合符号常量定义的语法形式。

所以正确答案是:D


利用符号常量计算价格

#include<stdio.h>
#define PRICE 20
int main()
{
    int num,total;                /*num表示购买商品的数量,total表示总价款*/
    num=10;
    total=num* PRICE;             /*PRICE是符号常量,表示单价20*/
    printf("总价格为:%d\n",total);
    return 0;
}

运行结果:

总价格为200


符号常量的使用,可以为编写程序提供很多好处:


(1)增加程序的可读性:

通过标识符就知道该常量的意思,即见名知义。


(2)提高程序的可维护性:

通过符号常量使得修改常量很方便,只需在常量的定义处修改即可。


(3)简化程序代码:

通过符号常量可以简化复杂表达式的重复输入。


(4)方便数组的定义:

可以将整型符号常量作为数组的长度。

2.4 C语言的变量

变量是指在程序运行期间其值可以发生变化的量。

变量用于从外部接收数据、保存一些不断变化的值、保存中间结果以及最终结果,而这些的无法用常量来实现。


2.4.1变量的定义与使用

在C语言中,所有的变量必须先定义后使用。


1.变量的定义

其定义格式为:


类型说明符  变量名表;


其中:

(1)类型说明符必须是C语言中的有效数据类型,如int、float、double、char等,用于指定变量的类型,该类型决定了编译时分配给变量的内存单元的多少。

(2)变量名表可以由一个或多个变量名组成,各变量名之间用“,”分隔。变量名必须是合法的C语言标识符,变量名一般使用小写字母。

(3)变量的定义必须放在变量的使用之前,一般在函数体的开头部分进行定义。


例如:

int r;                             /*定义r为整型*/

float v,f;                        /*定义v、f为单精度浮点型*/

double x,y;                /*定义x,y为双精度浮点型*/

char ch;                        /*定义ch为字符型*/

在C语言中,基本数据类型包括char(字符型)、int(整型)、float(单精度浮点型)及double(双精度浮点型)等。不同的类型用于存放不同的数据,所需的存储空间也不相同。


2.变量的初始化

C语言允许在定义变量的同时对变量赋值,这个过程称为变量的初始化。如:

int x=2;                      /*定义一个整型变量x并赋初值2*/

int s=1,t=1;                 /*定义两个整型变量s和t,并分别赋初值1 */

float f =3. 68;             /*定义一个单精度型变量f并赋初值3.68 * /

char ch=’x’;                /*定义一个字符型变量ch并赋初值字符x * /

对变量初始化时需注意:

(1)对一个变量赋初值之后,该值被存储在分配给该变量的内存空间中。

(2)不允许对多个未定义的同类型变量连续初始化,如:“int x=y=3;”是不合法的,应写成“int x=3,y=3;”。

(3)初始化时,一般应使“=”右边表达式的数据类型和“=”左边的变量的类型一致,如果不一致,系统会进行自动赋值转换。

(4)没有进行初始化的变量,其值是由定义时所使用的存储类型决定的。全局变量和static 型变量的值是0或’\0′,其它存储类型的局部变量的值是未知的。


3.变量的使用

使用变量时,应该先赋值,后引用。

在程序中可以通过初始化、赋值表达式或输入函数scanf()来对变量赋值。


变量使用示例

#include<stdio.h>
int main()
{
    int a,b,c;
    char ch='A';                    /*初始化*/
    a=10;                           /*使用赋值语句对变量a赋初值*/
    b=a+ch;                         /*使用赋值语句对变量b赋值*/
    scanf("%d",&c);                 /*使用scanf函数对变量c赋值*/
    printf("%d,%d,%d,%c\n",a,b,c,ch);
    return 0;
}


分析:

在mian()函数中定义了三个int型变量a、b、c,一个char型变量ch。


若程序运行时输入:

10↙                /*输入10,则对变量c赋值为10*/


则程序运行结果如下:

10,75,10,A


2.4.2  整型变量

Visual C++ 2010环境下,各种整型的关键字及占用内存字节数和取值范围如下表:

关键字 类型 占用字节数 取值范围
short int 短整型 2 -32768~32767
int 整型 4 -2147483648~2147483647
long int 长整型 4 -2147483648~2147483647
unsigned short 无符号短整型 2 0~65535
unsigned int 无符号整型 4 0~4294964295
unsigned long 无符号长整型 4 0~4294964295


说明:

(1)各种无符号整数所占的字节数与相应的有符号整数相同。但由于省去了符号位,故不能表示负数。

(2)有符号整数以二进制补码形式存储。最左边第1位表示符号,该位为0,表示正数,该位为1,表示负数。

(3)无符号整数以二进制原码形式存储。


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

#include<stdio.h>
int main()
{
    int a,b,c,d;
    unsigned long e;
    a=5;b=6;e=10;
    c=a+e;
    d=b+e;
    printf("c=%d,d=%d\n",c,d);
    return 0;
}


运行结果:

c=15,d=16


短整型变量的溢出:

#include<stdio.h>
int main()
{
    short int a, b;
    a = 32767;
    b = a + 10;
    printf("a=%d, b=%d\n", a, b);
    return 0;
}


运行结果:

a=32767,b=-32768


2.4.3实型变量

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

实型的关键字及占用内存字节数和取值范围如表所示:

关键字 类型 占用字节数 取值范围
float 单精度型 4 3.4E-38~3.4E+38
double 双精度型 8 1.7E-308~1.7E+308

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


实型变量的使用示例:

#include<stdio.h>
int main()
{
    float a=1234.56789;
    double b=1234.567895678;
    printf("a=%f,b=%f\n",a,b);
    return 0;
}


运行结果:

a=1234.567871,b=1234.567896

单精度浮点型,有效数字位数为7位,其中整数已占4位,故3位小数之后的均为无效数字。

双精度型,有效数字位数为16位,但Visual C++2010规定双精度小数后最多保留6位,其余部分四舍五入。


2.4.4字符型变量

字符型变量的值是字符常量,即用单引号引起来的单个字符。字符型变量的类型说明符是char,其类型说明的格式和命名规则与整型变量相同

由于字符常量在内存中占用一个字节,用于存储它的ASCII 码值,所以C语言中的字符具有数值特征,可以像整数一样参加运算,允许对整型变量赋以字符值,也允许对字符变量赋以整型值。C语言在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。


字符变量的使用示例

#include<stdio.h>
int main()
{
    char c1,c2;
    c1='A';
    c2=65;
    printf("%c,%c\n",c1,c2);
    printf("%d,%d\n",c1,c2);
    return 0;
}


运行结果:

A,A

65,65


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

#include<stdio.h>
int main()
{
    char c1,c2;
    c1='A';
    c2='B';
    c1=c1+32;
    c2=c2+32;
    printf("%c,%c\n",c1,c2);
    printf("%d,%d\n",c1,c2);
    return 0;
}


运行结果:

a,b

97,98

上面的例子中,cl,c2被说明为字符变量并赋予字符值,由于大小写字母的ASCII值相差32,因此运算后把大写字母转换成小写字母。最后分别以字符型和整型输出。



版权声明:本文为weixin_61913018原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。