当前位置:文档之家› c语言基础教程 第九章 联合和枚举

c语言基础教程 第九章 联合和枚举

c语言基础教程 第九章      联合和枚举
c语言基础教程 第九章      联合和枚举

C语言基础教程9.1.1 联合变量的定义和赋值

联合变量定义的形式与结构很相似,除关键字不同,其余几乎相同。下面是一个联合模式的定义格式:

union(联合名)

{

(联合成员说明);

};

其中,union是联合的关键字。(联合名)的命名方法同标识符,<联合成员说明》是将组成该联合的所有成员进行类型说明。C:语言中,几乎所有类型都作为联合的成员,包含结构变量在内。

联合变量的定义如下所示:

union<联合名)(联合变量名表);

定义一个联合变量之前要先定义一种联合模式,任何一种联合变量都是属于某种联合模

式的联合变量,这一点与结构变量很相似。<联合变量名表)中,可以是一个联合变量名,也可是多个联合变量名,多个变量用逗号分隔。这里的变量可以是一般联合变量,也可以是指向联合变量的指针。例如:

union date

{

Char c_data;

int idata;

float f._data;

double d_data;

};

union data dl,d2.*pd.

其中,anion是关键字,data是联合名,该联合有4个成员,分别作了说明dl和d2是两个联合变量,pd是一个指向联合变量的指针。联合变量dl和d2都是具有联合名data 的联合变量。而联合变量指针pd也是指向具有data联合名的联合变量的指针。

与结构相类似,上述定义联合变量也可以写成如下形式:

union data

{

char c_data;

int i _data;

float f_data;

double d_data;

}d1,d2,*pd;

这里,也同样定义了联合变量dl和d2以及指向联合变量的指针pd。

联合变量的成员表示也与结构相似。联合变量的成员用"·"表示,指向联合变量的指针用"一>"表示。

联合变量的赋值主要是给联合变量的各成员赋值。例如,在上例中,对联合变量dl的几个成员赋值分别如下:

dl.c_data='a';

dl.i_data=15;

dl.f_data=10.5;

dl.b_data=87.63;

对指向联合变量的指针pd赋值与给联合变量赋值相同,只是其成员表示不同。例如,给pd的最后一个成员赋值如下:

Pd一>d_data =97.0

由于联合变量中的若干个成员共用内存单元,即一个联合变量的所有成员具有一个相同

的内存地址值,因此,在联合变量中起作用的成员是最近一次被赋值的成员,因为一个联合变量的若干个成员共用一个内存地址,存入了新的成员值时,原来的成员值便失去意义。

如果给联合变量赋初值,只能有一个值,并且指定斌给第一个成员,而不能用多个值赋给多个成员,其原因是由于联合变量所有成员共占一个内存地址。

C语言基础教程9.1.2联合与结构的区别

前面对联合变量的定义和联合变量成员的表示以及对联合变量的赋值作了描述,可以看出联合与结构有许多相似之处,但是也指出了两者的最大区别在于联合是共址的,结构是异址的。即联合的所有成员共同使用一个内存地址,而结构的每个成员都有自己的内存地址。

由于联合的共址特性使得它与结构产生了很大差别。例如,在斌初值时,联合变量只能给第一个成员赋初值;不能对联合变量名赋值;不能用联合变量作函数参数,也不能用联合变量作函数的返回值,只能用指向联合变量的指针作函数参数。

下面举出两个例子说明联合变量的使用和特点。

[例9.1] 分析下列程序的输出结果,进而说明联合变量的成员是共址的。

uninn data

{

char c_data;

int i_data;

float f_data;

};

main()

{

unian data dl;

d1.c_data='a';

dl.i_data=5;

d1.f_data=3.7;

printf ("%c\t%d\t%.2f\n",dl.c._data,dl.i_data,dl. f,data);

printf("%d\n',sizeof(dl));

printf(" %p\t%p\t%p\t%p\n",&dl.c_data,&dl.i_data,&dl.f.data,&dl);

}

执行该程序输出结果如下:

? ? 3.7(?表示无意义)

4

FFD6 FFD6 FFD6 FFD6

说明:

(1)该程序中,首先定义一个联合,其名为data,它有3个成员,分别是三种不同类型。又定义联合变量d3,并给它的三个成员分别赋值。当使用printf ()函数输出dl的三个成员的值时,前两个成员输出值是无意义的,只有最后一个成员是有意义的,其值为3. 7.这说明:某一时刻一个联合变量中只有一个成员起作用,其他成员不起作用。

(2)输出,SizeoE(dl )的值为4,这说明联合变量d1占内存4个字节。在多个联合成员共占一个内存地址时,该地址所指向的内存空间是所有成员中占内存空间最大的成员所占的内存空间。该例中的三个成员所占内存字节数分别为1.2和4,最大的是4,因此,联合变量dl所占内存空间为4个字节。

(3)使用printf ()函数分别输出联合变量dl的三个成员的内存地址都是相同的,并且与联合变量dl的地址值也是相同的,可见联合变量各成员是共址的。

[例9. 2] 分析下列程序的输出结果,并指出该结果说明了什么间题。

main()

{

union{

int ig[6],

char s[12];

}try;

try. ig[0]=0x4542;

try. ig[1]=0x2049;

try. ig[2]=Ox494a;

try. igt3]=0x474e;

try. ig[4]=Ox0a21;

try. ig[5]=0x0000:

prints("%s\n" ,try. s),

执行该程序输出如下结果:

BEI JING

说明:该程序中定义一个无名联合,用它定义一个联合变量try,该联合有2个成员,每个成员都占内存12个字节。程序中对try的ig成员斌了值,ig是一个int型数组,分别对它的6个元素都赋了值。然后,程序中通过try的另一个成员。进行输出,所输出的字符串正是try的成员所被赋值的ASCII码所对应的字符组成的。由此可见,联合变量各个成员是共内存单元的,因此。按某个成员赋的值,可按其另一个成员进行输出,但要求输出的类型与效据类型相一致。

C语言基础教程9. 2 联合的应用

由联合的特征决定了它的应用远不如结构应用那样广泛。但是。在有些情况下也使用联合来解决问题。在实际应用中,常常会出现一些虽相互间排斥的情况,这时用联合就十分方便。例如,假定某学校一些学生在校内住宿,另一些学生在校外住宿。对于在校内和在校外住宿的学生的住址描述是不同的,可分别用下述两种结构来描述:

struct off__school

{

int strnucm

char strnamet[20];

char city(20];

}

struct in school

{

char collname[lO];

char dorm[l0];

int roomnum;

};

住在校外的学生可用off_school结构来描述地址,而住在校内的学生可用in.school 结构

来描述地址。而对每个学生来说,情况是唯一的,即二舌只可选择其一。于是,一个学生的地址

可用下述联合来描述:

union address

{

struct off_school town;

struct in school gown;

};

该联合中两个成员是结构变量,即结构变量可以作联合成员.相反,联合变量也可以作为结构成员,即联合与结构二者可以相互嵌套。例如:

struct student

{

char name[20};

int stunum;

int grade[3];

union address a;

}:

该结构中,有一个成员a是联合变量,而该联合中又有结构变量。这便是结构和联合的定义上的嵌套。

虽然,由于联合成员是共址的,而对联合变童应用作了一些限制,不像结构变量应用得那么广泛、但是联合变量除了可以作为结构成员外。还可以作为数组元素,即联合数组。另外,指向联合变量的指针可以作函数参数等。

[例9.3] 假定描述一个学生使用下面的内容:学号,姓名,三门功课的成绩和住址。其中,住址有两种情况:住在校内和住在校外。使用一个变量来标识一个学生住在校内或是校外,而学生住址用前面讲过的联合address来表示。于是描述学生的结构格式如下:

struct student

{

int stunum;

char name[20]

int grade[3]

char off in;

union address a;

};

其中,char型变量off_in用来标识该学生是住在校内(用n表示)还是住在校外(用'f'表示).编程输人每个学生的信息,并通过姓名来查找某个学生的住址和三门成绩总和。

程序内容如下:

struct off school

int strnum;

char s1rname[20];

char city[20];

};

strurt in school

{

char collname[10]:

char dorm[l0];

int roomnum;

};

union adclress

{

struct off.school town;

struct in_school gown;

};

strsscr student

r

int stunum

char name[20];

int grade[3];

char off in;

union address a;

}s[3]={{7001,"Li",{90,80,85},'f'}

{7002,"Ma",{85.95,87},'f'},

{7003,"Lu",{80,75,83},'n'}};

main()

{

int i;

char name[20];

for(i=0;i<3;i++)

{

printf("Input address--");

if(s[i].off_in=='f')

{

printf("strnum,strname,city:");

scanf("%d%s%s",&s[i].a.town.strnum.s[i].a.town.strname,

s[i].a.town.city);

}

else

{

printf("collname,dowm.roomnum:");

scanf("%s%s%d",s[i].a.gown,collname.s[i].a.gown.dorm,

&s[i].a.gown.roomnum);

}

}

printf("Input name:");

scanf("%s",name)

for(i=0;i<3;i||)

{

if(Istrcmp

if(s[i].off_in=='f')

{

printf("%d,%s,%s\n",s[i].a.town.strnum,s[i].a.town.strname. s[i].a.town.city);

printf("%d\n,s[i].grade[0]+s[i].grade[1]+s[i],grade[2]);

}

else

{

printf("%s,%s,%d\n,s[i].a.gown.collname,s[i].a,gown.dorm

s[i].a.gown.rommnum);

printf("%d\n",s[i],grade[0]+s[i].grade[1].grade[2];

}

}

}

执行该程序,屏幕上显示如下信息:

Input address-strnum,strname,city:101 Haidian Beijing Input address-strnum,strname,city:203 Haidian Beijing Input address-collnum,dorm,rommnum:Beida 35d 105

Input name:Ma

这时,屏幕上显示该程序的输出结果:

203,Haidian,Beijing

267

说明:该程序是结构和联合相互嵌套,结构中有联合变量,联合中又有结构变量。程序中定义的s是结构数组,它有三个元素。开始时对每个元素的前4个成员赋了初值,然后在程序中又通过键盘输入给S的3个元素中最后一个成员赋值,由〕几该成员的值有两种形式,或者是校外地址形式,或者是校内地址形式,因此使用了下列if语句:

if(s[i].off_in='f')

满足该if条件,则按校外地址格式输入地址,否则按校内地址格式输入地址。同样,在输出学生地址时,也有两种不同形式。

C语言基础教程9.3.1 枚举变量的定义和赋值

枚举也是一种构造的数据类型,具有这种类型的变量,称为枚举变量。枚举变量的定义形式与结构变量、联合变量有相似之处,但是枚举变量与它们都有很大的不同。

枚举是具有名字的若干个常量的有序集合,枚举变量的取值范围是该枚举表所对应的枚举符。枚举变量被赋值以后,它实际上是一个常量,因为枚举符是具有名字的常量,而枚举变量的值只能取某一个枚举符。因此,有人说,枚举变量是一种特殊的常量。

枚举变量在定义之前要先定义一种枚举模式,任何一枚举变量都是某种枚举模式的枚举变量。枚举模式定义格式如下:

enum<枚举名>{(枚举表)};

其中,enum是枚举关键字,(枚举名)的命名方法同标识符。<枚举表>是由若干个枚举符组成的,多个枚举符之间用逗号(,)分隔。枚举符又称为枚举元素或枚举常量,它是一种标识符,而且它具有确定的int型值。

枚举变量定义格式如下:

enurn<枚举名><枚举变量名表>;

其中,(枚举变量名表》是由逗号分隔的若干个枚举变量名组成的。例如:

ercam day{sun,Mon .Tue,Wed,The,Fri,Sac};

enum day d1,d2;

其中,day是枚举名,Sun, Mon,""",Sat是枚举符表,它由7个枚举符组成。dl和d2是被定义的具有day枚举模式的两个枚举变量。dl和d2的值只能选取day的枚举符。

另外,dl和d2的定义也可以写成如一F格式:

enum day{Sun,Mon, Tue,Wed,Thu . Fri,Sat)dl,d2;

定义后枚举变量应该先赋值,然后再引用,否则无意义。枚举变量应被赋一个它所对应的枚举符表中的一个枚举符。例如:

d1=Sun:

d2=Fri;

这时的d1和d2两个枚举变量被赋了值,而Sun和Fri都是dl和d2所对应的枚举模式的枚举表中的枚举符,因此这是合法的。这里必须指出一点,不能直接给枚举变量赋一个整型数值,例如,

dl=0;

这是非法的,而

dl=(enum day) 0

是合法的,它等价于

dl=Sun;

因为,Sun枚举符所隐含的int型数值为0,在给枚举变量赋int型数值时,前面必须加上强制类型运算符(enuxn<枚举名>)。

枚举表中的枚举符不是变量,而是具有名字的常量,它们都各自隐含一个int型值。在默认的情况下。枚举表巾枚举符的值从。开始,后一个总是比前面一个大1.例如,在上述的枚举表中,Sun的值是6,Mon的值是1 , Tue是2 . Wed是3,Thu是4 . Fri是;Sat是6.另外,在定义枚举模式时,可以通过显式赋值的方法来确定枚举符的值。例如:

enum day{Sun=7, Mnn=1,Tue, Wed,Thu,Fri,Sat};

这里,Sun的值是7, Mon的值是1,它们是通过显式赋值来确定其值的,Tue没有被显式赋值,它的值是前一个枚举符的值加1,即为2,同祥Web的值是3.",Sat的值是6.

下面再举一个枚举的例子。

enum coin {penny,nickel, dime,qunrrer,half dollar,dollar} money;

该枚举名是coin,它由6个枚举符组成一个枚举表。money是枚举变量名,它的取值范围在该枚举表中。例如,

money=dime;

是合法的,而

money-Fri;

是非法的,因为Fri不是money枚举变量所对应的枚举表的枚举符,而是day枚举名的枚举符,因此,任何一个枚举变量的值只能是它所对应的枚举表中的枚举符,而不能是其他枚举表中的枚举符。

C语言基础教程9.3.2 使用枚举变量时应注意的事项在编程中使用枚举变量应注意如下事项。

(1)枚举符不是整型变量。不能在程序中对它赋以数值。在上述day枚举例中,例如, Mon=2;

Sat=5;

都是错误的。

枚举符是按常量处理的,称为枚举常量。枚举符所隐含的int型值可以在定义枚举模式时对枚举表中的枚举符进行显式赋值来确定。

(2)枚举变量一般用它所对应的枚举表中的枚举符来赋值。如果用整型值来赋值时,前面需要加上强制类型运算符,而不能直接用int值来赋值。枚举变量的输出值是int型值,而不是字符串。枚举表中的枚举符只是一个有名字的int型值,把它赋给枚举变量,而使枚举变量获得了其名字所隐含的int型值。因此,输出枚举变量值时,要使用格式符%d.例如,dl是枚举名day的一个枚举变量,而被赋值为Wed,输出该变量值使用如下格式:

printf("%d\n,dl).

如果你希望输出Wed时,还需要做一些转换,其方法很多,可以用字符数组的方法,如本章后面的例子,也可以用switch语句的方法,读者可自行设计。

(3)枚举变量可以进行比较运算,比较时按其枚举符所隐含的枚举值进行。例如,

if (dl=Tue…

if (d1

都是合法的。

另外,枚举变量可以用作函数参数和函数的返回值。有关例子在后面章节中会看到。

使用枚举变量的好处主要是更加直观,用户可以选用一些"见名知意"的枚举符,使人看上去一目了然,使用枚举符可便于记忆。另外,枚举变量的值受到所对应的枚举表的限制,增加数据的安全性,一旦枚举变量所得到的值超过了相应的枚举表的范围,则会出现错误信息。枚举类型的数据在编译时作类型检查,增加了可靠性。

枚举变量的主要用途是可作为函数参数和函数返回值。枚举变量也可以作结构的成员。

[例9.4] 编一个程序,已知某天是星期几,计算出下一夭是星期几。要求使用枚举变量。

程序内容如下:

enum day (Sun,Mon,Tue,Wed,Thu,Fri,Sat)

enum day day _after(d)

enum d;

{

return((enum day)(((int)d+1)%7));

main()

(

enum day dl,d2;

static char,name[] = {"Sun" ,"Mon" ."Tue"

"Wed","Thu" ,"Fri","Sat")

dl=Sat;

d2=day .after(d1);

print(("%s\n",name}(int)d2]);

}

执行该程序输出结果如下

Sun

(1)本例中,被调用函数的参数使用了枚举变量,井且该函数的返回值也是枚举变量。因此,可见枚举变量可用来作函数参数和函数的返回值。

(2)枚举符是一个名字,它具有int型值。可用它直接给枚举变量赋值,但要求是对应枚举表中的枚举符。但是,不能使用%s格式直接输出枚举符的名字。如果需要输出枚举符的名字时,该例是通过字符数组进行转换的。

c语言中enum的使用

如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。 举个例子来说明一吧,为了让大家更明白一点,比如一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔,这里有两种可能,那么你就可以定义一个枚举类型来表示它! enum box{pencil,pen};//这里你就定义了一个枚举类型的变量叫box,这个枚举变量内含有两个元素也称枚举元素在这里是pencil和pen,分别表示铅笔和钢笔。 这里要说一下,如果你想定义两个具有同样特性枚举类型的变量那么你可以用如下的两种方式进行定义! enum box{pencil,pen}; enum box box2;//或者简写成box box2; 再有一种就是在声明的时候同时定义。 enum {pencil,pen}box,box2; //在声明的同时进行定义! 枚举变量中的枚举元素系统是按照常量来处理的,故叫枚举常量,他们是不能进行普通的算术赋值的,(pencil=1;)这样的写发是错误的,但是你可以在声明的时候进行赋值操作! enum box{pencil=1,pen=2}; 但是这里要特别注意的一点是,如果你不进行元素赋值操作那么元素将会被系统自动从0开始自动递增的进行赋值操作,说到自动赋值,如果你只定义了第一个那么系统将对下一个元素进行前一个元素的值加1操作,例如 enum box{pencil=3,pen};//这里pen就是4系统将自动进行pen=4的定义赋值操作! 前面说了那么多,下面给出一个完整的例子大家可以通过以下的代码的学习进行更完整的学习! #include using namespace std;

C语言共用体、枚举、typedef

一、typedef声明新的类型名 结构体类型名较长、有些类型名不直观或不习惯、不喜欢?可不可以重命名呢? 用typedef声明新的类型名来代替已有的类型名 例如: 1)typedef float single; 2) typedef struct STU SD; 则“float x,y;”与“single x,y;”等价;

“p=(struct STU*)malloc(sizeof(struct STU));”与 “p=( SD *)malloc(sizeof(SD));”等价。 二、共用体 1、共用体类型的定义 当若干变量每次只使用其中之一时,可以采用“共用体”数据结构。共用体数据中各成员存放到同一段内存单元,设置这种数据类型的主要目的就是节省内存。 共用体类型需要用户自己定义,然后才能用之来定义相应类

型的变量、数组、指针等。 定义共用体类型的格式为: union 共用体类型名 { 数据类型1 成员名1; 数据类型2 成员名2; …… 数据类型n 成员名n; }; 【注意】在右花括号}的后面有一个语句结束符“分号”。

2、共用体变量、数组的定义 有三种方法可以定义共用体变量、数组:先定义共用体类型,然后定义变量、数组;同时定义共用体类型和变量、数组;定义无名称的共用体类型的同时定义变量、数组。 例如:①union GYT {char a[2]; int b; }; GYT x ,y[5]; ②union GYT

{ char a[2]; int b; }x ,y[5]; ③union { char a[2]; int b; }x ,y[5]; 上述三种方法完全等价。 【注意】(1)共用体变量所占内存单元数目等于占用单元数目最多的那个成员的单元数目。 (2)共用体变量各成员占据相同的起始地址,每一瞬时

c语言中枚举类变量使用

#include void main() { printf("c语言中枚举类型变量的使用:\n"); printf("\n"); printf("实际问题说明:\n"); printf("口袋中有红、黄、蓝、白、黑5种颜色的球若干。每次从袋子中先后取出三个球,求得到3种不同颜色的球的可能取法:\n"); printf("\n"); enum color{red,yellow,blue,white,black }; enum color pri; int i,j,k,n,loop; n=0; for(i=red;i<=black;i++) { for(j=red;j<=black;j++) { if(i!=j) { for(k=red;k<=black;k++) { if((k!=i)&&(k!=j)) { n=n+1; printf("第%d个筛选组合\n",n); printf("%-4d",n); for(loop=1;loop<=3;loop++) {

switch(loop) { case 1: pri=(enum color)i;//此处需要进行强制类型转换,否则报错 break; case 2: pri=(enum color)j;//此处需要进行强制类型转换,否则报错 break; case 3: pri=(enum color)k;//此处需要进行强制类型转换,否则报错 break; default: break; } switch(pri) { case red: printf("%-10s","red"); break; case yellow: printf("%-10s","yellow"); break; case blue: printf("%-10s","blue"); break; case white: printf("%-10s","white");

C语言自定义数据类型

自定义数据类型 结构体 结构体是程序员在程序中自定义的一种数据类型,在说明和使用之前必须先定义它,也就是构造它。定义一个结构体的语法格式如下: Struct 结构体类型名 { 成员1的数据类型名成员1名称; 成员2的数据类型名成员2名称; . . 成员n的数据类型名成员n名称; }结构体变量表={成员初始化}; 注意成员可以由若干个不同的数据类型组成,每个成员也可以是结构体,即可以嵌套定义。 例如: Struct student { Long num; Char name; Char sex; Float score; }; 已经定义的某种结构体类型可以视为一种标准的数据类型,它的使用方法与标准数据类型使用方法相同,可以用来定义变量、数组、指针。 结构体变量说明 结构体变量的说明在程序的变量说明部分给出,一般在结构定义之后,它的语法格式如下: Struct 结构类型名结构变量名表; 例如: Struct student stu; 指出了结构变量stu是student类型的变量,它由四个成员组成,每个成员的数据类型和名字都与student结构定义中给出的相同。系统完全按照结构定义时制定的内存模式为结构变量分配内存空间。 可以在定义结构体类型的同时给出结构体变量。 Struct student { Long num; Cha name[20]; Cha sex; Float score; }stu1,stu2; 这种形式与前面给出的结构定义和结构说明分开处理效果相同。

结构体成员访问 结构体成员是通过结构体变量名和成员名进行访问的,不能把他作为一个整体进行访问。其访问格式如下: 结构体变量名.成员名 其中运算符.是成员访问运算符,其运算级别是最高的,和圆括号运算符()、下标运算符[]是同一级别的。如果结构体成员是指针变量,则访问格式为: *https://www.doczj.com/doc/925898201.html, 如果某个结构体变量的成员数据类型又是一个结构体,则访问方式为: 外层结构体变量名.外层成员名.内层成员名 可以在定义结构体变量的同时对结构体变量初始化。 {结构体成员}结构体变量={初始数据}; struct student { long num; char name[20]; char sex; float score; } stu1={200401L,"ZhangHong",'f',92.5f}; 对于嵌套的结构体类型数据,访问格式为: 结构体变量名1.结构体变量名2.成员名 结构体变量初始化的格式如下: struct 结构体名 {结构体成员}结构体变量={初始数据}; 初始数据类型必须与结构成员的数据类型相匹配,并且先后顺序一一对应赋值。 要对结构体变量的成员地址进行访问,其语法格式为: &结构体变量.成员名 当一个指针变量用来指向一个结构变量时,称为结构体指针变量。结构体指针变量中的值是所指向的结构体变量的首地址。 结构体指针变量: Struct 结构名*结构体指针变量名 Struct student *pstu; 必须先赋值后使用,把结构体变量的首地址赋给指针变量,不能把结构名或结构体变量名赋给指针变量。 pstu=&stu1; 结构体名和结构体变量是两个不同的概念,结构体名只能表示一个结构形式,编译系统并不对它分配内存空间,只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。这是因为结构体变量被定义后相当于标准数据类型被使用。 利用结构体指针变量访问成员如下: (*结构体指针变量).成员名 或者: 结构体指针变量->成员名 后一种形式较为方便,容易区分。

C语言基本数据类型

第2章基本数据类型 本章介绍常量与变量的概念,以及C语言基本数据类型中的整型、字符型、实型数据的基本知识,各种不同数据类型之间的转换及混合运算。 2.1 数据概述 一个完整的计算机程序,至少应包含两方面的内容,一方面对数据进行描述,另一方面对操作进行描述。数据是程序加工的对象,数据描述是通过数据类型来完成的,操作描述则通过语句来完成。 C语言不仅提供了多种数据类型,还提供了构造更加复杂的用户自定义数据结构的机制。C语言提供的主要数据类型有: 1.基本类型:包括整型、字符型、实型(浮点型)和枚举类型 2.构造类型:包括数组、结构体和共用体类型 3.指针类型 4.空类型 其中整型、字符型、实型(浮点型)和空类型由系统预先定义,又称标准类型。 基本类型的数据又可分为常量和变量,它们可与数据类型结合起来分类,即为整型常量、整型变量、实型(浮点型)常量、实型(浮点型)变量、字符常量、字符变量、枚举常量、枚举变量。在本章中主要介绍基本数据类型(除枚举类型外),其它数据类型在后续章节中再详细介绍。 2.1.1 常量与符号常量 在程序执行过程中,其值不发生改变的量称为常量。常量区分为不同的类型,如68、0、-12为整型常量,3.14,9.8为实型常量,‘a’,‘b’,‘c’则为字符常量。常量即为常数,一般从其字面即可判别。有时为了使程序更加清晰和便于修改,用一个标识符来代表常量,即给某个常量取个有意义的名字,这种常量称为符号常量。如: 【例2-1】 #define PI 3.14 main( ) { float aera; aera=10*10*PI; printf(“aera=%f\n”,aera); }

C语言基础教程经典100例

【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++)/*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } =========================================================== === 【程序2】

题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15;

51单片机C语言入门教程详细解说

单片机c语言入门 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没 什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大 家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想 学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候, 我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。 当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具 体选择C51还是A51呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上 书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学C51,毕竟C51和我们课上讲的C语言,有些类似, 编程的思想可以说是相通的。而且C51还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看,如果你选择了A51,那么你可以不要看了!因为下面讲 的全是C方面的,完全在浪费你的时间! 呵呵^_^ 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆拆的(但是在后期会介绍给大家一个很好用的硬件 仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某个特定的意义上来说是并不能代替硬件的),即使

C语言程序设计基础教程习题答案

习题答案 第1章 1.1 填空题 1.1.1 应用程序ONEFUNC.C中只有一个函数,这个函数的名称是__main 。 1.1.2 一个函数由__函数头__和__函数体__两部分组成。 1.1.3 在C语言中,输入操作是由库函数__scanf 完成的,输出操作是由库函数_printf_完 成的。 1.1.4 通过文字编辑建立的源程序文件的扩展名是_.c__;编译后生成目标程序文件,扩展 名是__.obj__;连接后生成可执行程序文件,扩展名是_.exe_;运行得到结果。 1.1.5 C语言程序的基本单位或者模块是__函数__。 1.1.6 C语言程序的语句结束符是_;___。 1.1.7 编写一个C程序,上机运行要经过的步骤:______________________________。 1.1.8 在一个C语言源程序中,注释部分两侧的分界符分别为_/*__和__*/__。 1.1.9 C语言中的标识符只能由三种字符组成,它们是字母、数字和下划线。 且第一个字符必须为字母或下划线。 1.1.10 C语言中的标识符可分为关键字、预定义标识符和用户标识符3类。 1.2 选择题 1.2.1 一个C程序的执行是从( A )。 A)本程序的main函数开始,到main函数结束 B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C)本程序的main函数开始,到本程序文件的最后一个函数结束 D)本程序文件的第一个函数开始,到本程序main函数结束 1.2.2 以下叙述不正确的是(C)。 A)一个C源程序可由一个或多个函数组成 B)一个C源程序必须包含一个main函数 C) 在C程序中,注释说明只能位于一条语句的后面 D) C程序的基本组成单位是函数 1.2.3 C语言规定:在一个源程序中,main函数的位置( C )。 A)必须在程序的开头B)必须在系统调用的库函数的后面 C)可以在程序的任意位置D)必须在程序的最后 1.2.4 C编译程序是(A)。 A)将C源程序编译成目标程序的程序 B)一组机器语言指令 C) 将C源程序编译成应用软件 D) C程序的机器语言版本 1.2.5 要把高级语言编写的源程序转换为目标程序,需要使用(D)。 A) 编辑程序B) 驱动程序C) 诊断程序D) 编译程序 1.2.6 以下叙述中正确的是(C)。 A) C语言比其他语言高级 B) C语言可以不用编译就能被计算机识别执行 C) C语言以接近英语国家的自然语言和数学语言作为语言的表达形式 D) C语言出现的最晚,具有其他语言的一切优点 1.2.7 以下叙述中正确的是(A)。 A) C程序中注释部分可以出现在程序中任意合适的地方 B) 花括号“{”和“}”只能作为函数体的定界符 C) 构成C程序的基本单位是函数,所有函数名都可以由用户命名 D) 分号是C语句之间的分隔符,不是语句的一部分 1.2.8 以下叙述中正确的是(B)。

C语言数据类型及转换

C语言的数据类型 C语言提供的数据结构,是以数据类型形式出现的。具体分类如下: 1.基本类型 分为整型、实型(又称浮点型)、字符型和枚举型四种。 2.构造类型 分为数组类型、结构类型和共用类型三种。 3.指针类型。在第9章中介绍。 4.空类型 C语言中的数据,有常量和变量之分,它们分别属于上述这些类型。 本章将介绍基本类型中的整型、实型和字符型三种数据。 2.3 常量和变量 2.3.1 常量 1.常量的概念 在程序运行过程中,其值不能被改变的量称为常量。 2.常量的分类 (1)整型常量 (2)实型常量 (3)字符常量。 (4)符号常量。 常量的类型,可通过书写形式来判别。 2.3.2 变量 1.变量的概念 在程序运行过程中,其值可以被改变的量称为变量。 2.变量的两个要素 (1)变量名。每个变量都必须有一个名字──变量名,变量命名遵循标识符命名规则。(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。 3.标识符命名规则 (1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。 (2)有效长度:随系统而异,但至少前8个字符有效。如果超长,则超长部分被舍弃。 例如,由于student_name和student_number的前8个字符相同,有的系统认为这两个变量,是一回事而不加区别。 在TC V2.0中,变量名(标识符)的有效长度为1~32个字符,缺省值为32。 (3)C语言的关键字不能用作变量名。 注意:C语言对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。 习惯上,变量名和函数名中的英文字母用小写,以增加可读性。 思考题:在C语言中,变量名total与变量名TOTAL、ToTaL、tOtAl等是同一个变量吗?标识符命名的良好习惯──见名知意: 所谓“见名知意”是指,通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。 例如,name/xm(姓名)、sex/xb(性别)、age/nl(年龄)、salary/gz(工资)。 4.变量的定义与初始化 在C语言中,要求对所有用到的变量,必须先定义、后使用;且称在定义变量的同时进行赋初值的操作为变量初始化。

c语言视频教程

C语言视频教程 C语言全套视频教程c语言入门,c语言视频教程的在线学习,相关课件软件的下载,知识点讲解入门,是您学习c语言程序设计教程的最佳选择。 1第一讲iOS开发必备之C语言基础--进制转换 包含知识点:进制定义、程序开发中常用进制介绍、n进制转换10进制、10进制转换n进制。 2第二讲iOS开发必备之C语言基础--数据类型、运算符 数据类型分类、常量、变量、运算符、表达式、语句、输入输出函数。 3第三讲iOS开发必备之C语言基础--分支结构-if 程序结构概述、关系运算符、逻辑运算符、if的三种形式、条件运算符。

4第四讲iOS开发必备之C语言基础--分支结构-switch...case switch case,if与switch case区别,break关键字 5第五讲iOS开发必备之C语言基础--循环结构 while、do while、for循环,三种循环的区别 6第六讲iOS开发必备之C语言基础--循环嵌套 循环的嵌套使用、break关键字、continue关键字。 7第七讲iOS开发必备之C语言基础--一维数组 构造数据类型、一维数组定义、数组元素使用、冒泡排序。 8第八讲iOS开发必备之C语言基础--字符数组 字符数组、字符数组的输入输出、字符数组常用函数(strlen、strcpy、strcat、strcmp等)。 9第九讲iOS开发必备之C语言基础--二维数组 二维数组定义、二维数组元素使用、二维数组与循环结构结合使用、二维数组使用场景。 10第十讲iOS开发必备之C语言基础--字符串数组

字符串数组定义、二维数组操作每个字符串、二维数组操作每个字符、字符串排序、多维数组。 11第十一讲iOS开发必备之C语言基础--函数定义 函数意义、函数分类、函数定义、函数使用、函数举例。 12第十二讲iOS开发必备之C语言基础--函数嵌套 形参、实参、数组名作为函数参数,函数嵌套调用,递归函数,变量作用域。 13第十三讲iOS开发必备之C语言基础--结构体 结构体特点、结构体定义、结构体变量、typedef关键字、结构体成员访问,结构体使用。 14第十四讲iOS开发必备之C语言基础--结构体与数组混合使用 结构体嵌套结构体、结构体作为数组成员、结构体数组冒泡排序。 15第十五讲iOS开发必备之C语言基础--指针初级 内存的两种方式、指针、指针变量、指针的类型、指针的重指向 16第十六讲iOS开发必备之C语言基础--指针作为函数参数

C语言枚举类型

C语言枚举类型 在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。 11.1.1枚举类型的定义和枚举变量的说明 1、枚举的定义枚举类型定义的一般形式为: enum 枚举名{ 枚举值表}; 在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。例如: 该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。 2、枚举变量的说明 如同结构和联合一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明。设有变量a,b,c被说明为上述的weekday,可采用下述任一种方式: enum weekday{ sun,mou,tue,wed,thu,fri,sat }; enum weekday a,b,c; 或者为: enum weekday{ sun,mou,tue,wed,thu,fri,sat }a,b,c; 或者为: enum { sun,mou,tue,wed,thu,fri,sat }a,b,c; 11.1.2枚举类型变量的赋值和使用 枚举类型在使用中有以下规定: 1、枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。例如对枚举weekday的元素再作以下赋值: sun=5; mon=2; sun=mon; 都是错误的。 2、枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1,…,sat值为6。 【例11.10】 main(){ enum weekday { sun,mon,tue,wed,thu,fri,sat } a,b,c; a=sun; b=mon; c=tue; printf("%d,%d,%d",a,b,c); } 说明:只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如: a=sum;

(1小时学会C语言51单片机)C语言入门教程

相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没 什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大 家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想 学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候, 我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。 当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具 体选择C51还是A51呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上 书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学C51,毕竟C51和我们课上讲的C语言,有些类似, 编程的思想可以说是相通的。而且C51还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看,如果你选择了A51,那么你可以不要看了!因为下面讲 的全是C方面的,完全在浪费你的时间! 呵呵^_^ 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆拆的(但是在后期会介绍给大家一个很好用的硬件 仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某个特定的意义上来说是并不能代替硬件的),即使 你每天捧着本书,把那本书翻烂,也永远学不会单片机的!刚接触单片机的朋友,看了资料,一定会对以下几个词见的比较多,但是具体的概 念还是比较模糊,现作如下说明: (1)编程器编程器是用来烧单片机芯片的,是把HEX或者BIN文件烧到单片机ROM里

C语言中enum类型的用法

11.10 枚举类型 在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。 11.10.1 枚举类型的定义和枚举变量的说明 1. 枚举的定义枚举类型定义的一般形式为: enum 枚举名{ 枚举值表}; 在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。 例如: 该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。 2. 枚举变量的说明 如同结构和联合一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明。 设有变量a,b,c被说明为上述的weekday,可采用下述任一种方式: enum weekday{ sun,mou,tue,wed,thu,fri,sat }; enum weekday a,b,c; 或者为: enum weekday{ sun,mou,tue,wed,thu,fri,sat }a,b,c; 或者为: enum { sun,mou,tue,wed,thu,fri,sat }a,b,c; 11.10.2 枚举类型变量的赋值和使用 枚举类型在使用中有以下规定: 1. 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。 例如对枚举weekday的元素再作以下赋值: sun=5; mon=2; sun=mon; 都是错误的。 2. 枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1,…,sat值为6。 【例11.10】 main(){ enum weekday { sun,mon,tue,wed,thu,fri,sat } a,b,c; a=sun; b=mon; c=tue; printf("%d,%d,%d",a,b,c); }

c语言基础教程 第九章 联合和枚举

C语言基础教程9.1.1 联合变量的定义和赋值 联合变量定义的形式与结构很相似,除关键字不同,其余几乎相同。下面是一个联合模式的定义格式: union(联合名) { (联合成员说明); }; 其中,union是联合的关键字。(联合名)的命名方法同标识符,<联合成员说明》是将组成该联合的所有成员进行类型说明。C:语言中,几乎所有类型都作为联合的成员,包含结构变量在内。 联合变量的定义如下所示: union<联合名)(联合变量名表); 定义一个联合变量之前要先定义一种联合模式,任何一种联合变量都是属于某种联合模 式的联合变量,这一点与结构变量很相似。<联合变量名表)中,可以是一个联合变量名,也可是多个联合变量名,多个变量用逗号分隔。这里的变量可以是一般联合变量,也可以是指向联合变量的指针。例如: union date { Char c_data; int idata; float f._data; double d_data; }; union data dl,d2.*pd. 其中,anion是关键字,data是联合名,该联合有4个成员,分别作了说明dl和d2是两个联合变量,pd是一个指向联合变量的指针。联合变量dl和d2都是具有联合名data 的联合变量。而联合变量指针pd也是指向具有data联合名的联合变量的指针。 与结构相类似,上述定义联合变量也可以写成如下形式: union data { char c_data; int i _data;

float f_data; double d_data; }d1,d2,*pd; 这里,也同样定义了联合变量dl和d2以及指向联合变量的指针pd。 联合变量的成员表示也与结构相似。联合变量的成员用"·"表示,指向联合变量的指针用"一>"表示。 联合变量的赋值主要是给联合变量的各成员赋值。例如,在上例中,对联合变量dl的几个成员赋值分别如下: dl.c_data='a'; dl.i_data=15; dl.f_data=10.5; dl.b_data=87.63; 对指向联合变量的指针pd赋值与给联合变量赋值相同,只是其成员表示不同。例如,给pd的最后一个成员赋值如下: Pd一>d_data =97.0 由于联合变量中的若干个成员共用内存单元,即一个联合变量的所有成员具有一个相同 的内存地址值,因此,在联合变量中起作用的成员是最近一次被赋值的成员,因为一个联合变量的若干个成员共用一个内存地址,存入了新的成员值时,原来的成员值便失去意义。 如果给联合变量赋初值,只能有一个值,并且指定斌给第一个成员,而不能用多个值赋给多个成员,其原因是由于联合变量所有成员共占一个内存地址。 C语言基础教程9.1.2联合与结构的区别 前面对联合变量的定义和联合变量成员的表示以及对联合变量的赋值作了描述,可以看出联合与结构有许多相似之处,但是也指出了两者的最大区别在于联合是共址的,结构是异址的。即联合的所有成员共同使用一个内存地址,而结构的每个成员都有自己的内存地址。 由于联合的共址特性使得它与结构产生了很大差别。例如,在斌初值时,联合变量只能给第一个成员赋初值;不能对联合变量名赋值;不能用联合变量作函数参数,也不能用联合变量作函数的返回值,只能用指向联合变量的指针作函数参数。 下面举出两个例子说明联合变量的使用和特点。 [例9.1] 分析下列程序的输出结果,进而说明联合变量的成员是共址的。

c和verilog的enum枚举类型

Verilog中的枚举类型与C语言中一样。 C语言中枚举类型 1、应用场合 在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作: #define MON 1 #define TUE 2 #define WED 3 #define THU 4 #define FRI 5 #define SAT 6 #define SUN 7 在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类型叫枚举型。以下代码定义了这种新的数据类型: enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; (1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开; (2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项; (3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1,如果把第一个改为1,后续成员依次为2,3,4…; (4)可以在定义枚举类型时初始化各个成员的值,从而自定义某个范围内的整数; (5) 枚举型是预处理指令#define的替代; (6) 类型定义以分号;结束。 2、引用方法 (1)定义后引用 enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY yesterday; enum DAY today; enum DAY tomorrow; //变量tomorrow的类型为枚举型enum DAY enum DAY good_day, bad_day; //变量good_day和bad_day的类型均为枚举型 其中任何一个枚举数据类型enum DAY都是在所以定义的enum DAY成员范围变化。 (2)定义时引用 e num week { Mon=1, Tue, Wed, Thu, Fri Sat, Sun} days; //变量days的类型为枚举型enum week (3)用typedef把枚举类型定义为别名 typedefenum workday

C语言基础教程

基础篇(1) 1.1Turbo C语言概述 1.1 C 语言的产生与发展 C 语言是1972年由美国的Dennis Ritchie设计发明的, 并首次在UNIX操作系统的DEC PDP-11计算机上使用。它由早期的编程语言BCPL( Basic Combind Programming Language) 发展演变而来。在1970年, AT&T 贝尔实验室的Ken Thompson根据BCPL语言设计出较先进的并取名为B的语言, 最后导了C 语言的问世。随着微型计算机的日益普及, 出现了许多C 语言版本。由于没有统一的标准,使得这些C 语言之间出现了一些不一致的地方。为了改变这种情况, 美国国家标准研究所(ANSI)为C 语言制定了一套ANSI标准, 成为现行的C语言标准。 1.2 C 语言的特点 C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。许多著名的系统软件, 如DBASE ⅢPLUS、DBASE Ⅳ都是由C 语言编写的。用C语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,象PC- DOS 、WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点: 1. C是中级语言 它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。 2. C是结构式语言 结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的信息交流外 彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向, 从而使程序完全结构化。 3. C语言功能齐全 C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大, 可以实现决策目的。 4. C语言适用范围大 C 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于多种机型。 基础篇(2) 1.3 Turbo C概述 1.3.1 Turbo C的产生与发展 Turbo C 是美国Borland 公司的产品,Borland公司是一家专门从事软件开发、研制的大公司。该公司相继推出了一套Turbo系列软件, 如Turbo BASIC, Turbo Pascal, Turbo Prolog, 这些软件很受用户欢迎。该公司在1987年首次推出Turbo C 1.0 产品, 其中使

C语言枚举类型应用

enum与typedef enum的用法 在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是: #define MON 1 #define TUE 2 #define WED 3 #define THU 4 #define FRI 5 #define SAT 6 #define SUN 7 在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类型叫枚举型。 1. 定义一种新的数据类型 - 枚举型 以下代码定义了这种新的数据类型 - 枚举型 enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; (1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。 (2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。 (3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。 (4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。 (5) 枚举型是预处理指令#define的替代。 (6) 类型定义以分号;结束。 2. 使用枚举类型对变量进行声明 新的数据类型定义完成后,它就可以使用了。我们已经见过最基本的数据类型,如:整型int, 单精度浮点型float, 双精度浮点型double, 字符型char, 短整型short等等。用这些基本数据类型声明变量通常是这样: char a; //变量a的类型均为字符型char char letter; int x, y, z; //变量x,y和z的类型均为整型int int number; double m, n; double result; //变量result的类型为双精度浮点型double

C语言入门教程

51 单片机 C 语言入门教程(磁动力工作室) 51 单片机 C 语言学习杂记
学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语 言,还有众多种类的单片机选择真是件让人头痛的事.在众多单片机中 51 架构的芯片风行 很久,学习资料也相对很多,是初学的较好的选择之一.51 的编程语言常用的有二种,一 种是汇编语言,一种是 C 语言.汇编语言的机器代码生成效率很高但可读性却并不强,复 杂一点的程序就更是难读懂,而 C 语言在大多数情况下其机器代码生成效率和汇编语言相 当,但可读性和可移植性却远远超过汇编语言,而且 C 语言还可以嵌入汇编来解决高时效 性的代码编写问题.对于开发周期来说,中大型的软件编写用 C 语言的开发周期通常要小 于汇编语言很多.综合以上 C 语言的优点,我在学习时选择了 C 语言.以后的教程也只是 我在学习过程中的一些学习笔记和随笔,在这里加以整理和修改,希望和大家一起分享,一 起交流,一起学习,一起进步. *注:可以肯定的说这个教程只是为初学或入门者准备的,笔者本人也只是菜鸟一只, 有望各位大侠高手指点错误提出建议. 明浩 2003-3-30 pnzwzw@https://www.doczj.com/doc/925898201.html,
第一课 建立您的第一个 C 项目
使用 C 语言肯定要使用到 C 编译器,以便把写好的 C 程序编译为机器码,这样单片机 才能执行编写好的程序.KEIL uVISION2 是众多单片机应用开发软件中优秀的软件之一, 它支持众多不同公司的 MCS51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持, PLM,汇编和 C 语言的程序设计,它的界面和常用的微软 VC++的界面相似,界面友好,易 学易用,在调试程序,软件仿真方面也有很强大的功能.因此很多开发 51 应用的工程师或 普通的单片机爱好者,都对它十分喜欢. 以上简单介绍了 KEIL51 软件,要使用 KEIL51 软件,必需先要安装它.KEIL51 是一个 商业的软件,对于我们这些普通爱好者可以到 KEIL 中国代理周立功公司的网站上下载一份 能编译 2K 的 DEMO 版软件,基本可以满足一般的个人学习和小型应用的开发. (安装的方 法和普通软件相当这里就不做介绍了) 安装好后,您是不是迫不及待的想建立自己的第一个 C 程序项目呢?下面就让我们一 起来建立一个小程序项目吧.或许您手中还没有一块实验板,甚至没有一块单片机,不过没 有关系我们可以通过 KEIL 软件仿真看到程序运行的结果. 首先当然是运行 KEIL51 软件.怎么打开?噢,天!那您要从头学电脑了.呵呵,开个 玩笑,这个问题我想读者们也不会提的了:P.运行几秒后,出现如图 1-1 的屏幕.
图 1-1 启动时的屏幕
-1-

相关主题
文本预览
相关文档 最新文档