第七章 自定义数据类型模板

第七章 自定义数据类型模板
第七章 自定义数据类型模板

第七章用户自定义数据类型

7.1 结构体类型

7.1.1 结构体的概述

一个学生的学号、姓名、性别、年龄、成绩、家庭住址 num name sex age score addr

10010 Li Fun M 18 87.5 BeiJing 声明一个新的结构体的类型:

struct Student

{ int num;

char name[20];

char sex;

int age;

float score;

char addr[30];

};

7.1.2 结构体类型变量的定义方法及其初始化

1.定义结构体变量的方法

(1)先声明结构体的类型再定义变量名

Student student1,student2;

(2)声明类型的同时定义变量

struct Student

{ int num;

char name[20];

char sex;

int age;

float score;

char addr[30];

}std1,std2;

(3)直接定义结构体类型变量

struct

{ int num;

char name[20];

char sex;

int age;

float score;

char addr[30];

}std1,std2;

(4)成员也可以是一个结构体变量

struct Date

{ int month;

int day;

int year;

};

struct Student

{ int num;

char name[20];

char sex;

int age;

Date birthday;

float score;

char addr[30];

};

2.结构体变量的初始化

struct Student

{ int num;

char name[20];

char sex;

int age;

float score;

char addr[30];

}student1={10001,"Zhang Xin",'M',19,90.5,"shanghai"}; Student student2={10002,"Wang Li",'F',20,98,"Beijing"};

7.1.3 引用结构体变量

(1)可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量。

student1=student2;

(2)可以引用一个结构体变量中的一个成员的值。

student1.num=10010; "."是成员运算符,它的优先级最高。(3)对于结构体嵌套,要逐级引用。

student1.birthday.month=11;(引用student1中birthday中的month成员)。

(4)不能将一个结构体变量作为一个整体进行输入和输出。(5)对于结构体变量的成员可以像普通变量一样进行各种运算。(6)可以引用结构体变量成员的地址,也可以引用结构体变量的地址。

cout<<&student1;

cout<<&student1.age;

例7.1 引用结构体变量中的成员 P199

#include

using namespace std;

struct Date

{ int month;

int day;

int year;

};

struct Student

{ int num;

char name[20];

char sex;

Date birthday;

float score;

char addr[30];

}student1,student2={10002,"Wang Li",'F',5,23,1982,89.5}; void main()

{

student1=student2;

cout<

cout<

cout<

cout<

<

<

cout<

}

10002

Wang Li

F

5/23/1982

89.5

7.1.4 结构体数组

1.定义结构体数组

struct Student

{ int num;

char name[20];

char sex;

int age;

float score;

char addr[30];

}stu[3];

Student x[8];

2.结构体数组的初始化

Student y[2]={{10101,"Li Lin",'M',18,87.5,"103 Beijing Road"} ,{10102,"Zhang Fun",'M'19,99,"130 Shanghai Road"}};

3.结构体数组应用举例

例7.2 对候选人得票统计程序.P202

#include

using namespace std;

struct Person

{

char name[20];

int count;

};

void main()

{ Person leader[3]={"Li",0,"Zhang",0,"Fun",0};

int i,j;

char leader_name[20];

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

{

cin>>leader_name;

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

if(strcmp(leader_name,leader[j].name)==0)

{ leader[j].count++;break;}

}

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

cout<

Zhang

Li

Fun

Li

Zhang

Li

Zhang

Li

Fun

Wang

Li:4

Zhang:3

Fun:2

7.1.5 指向结构体变量的指针

1.通过指向结构体变量的指针引用结构体变量中的成员

例7.3 指向结构体变量的指针的应用 P204

#include

#include

using namespace std;

void main()

{

struct Student

{

int num;

string name;

char sex;

float score;

};

Student stu;

Student *p=&stu;

stu.num=10301;

https://www.360docs.net/doc/161033317.html,="Wang Fun";

stu.sex='F';

stu.score=89.5;

cout<

<

cout<<(*p).num<<" "<<(*p).name<<" "<<(*p).sex<<" "

<<(*p).score<

cout<num<<" "<name<<" "<sex<<" "

<score<

}

10301 Wang Fun F 89.5

10301 Wang Fun F 89.5

10301 Wang Fun F 89.5

" ->"是指向运算符,即指向结构体变量运算符。请分析以下几种运算:

p->n

p->n++

++p->n

#include

#include

using namespace std;

void main()

{

struct Student

{

int num;

string name;

char sex;

float score;

};

Student stu;

Student *p=&stu;

stu.num=10301;

cout<num<

cout<num++<

cout<<++p->num<

cout<

}

10301

10301

10303

10303

2.用结构体变量和指向结构体变量的指针构成链表struct Student

{ int num;

float score;

Student *next;

};

利用指向自己的指针构成链表。

例7.4 P206

#define NULL 0

#include

using namespace std;

struct Student

{ int num;

float score;

Student *next;

};

void main()

{

Student a,b,c,*head,*p;

a.num=31001;a.score=89.5;

b.num=31003;b.score=90;

c.num=31007;c.score=85;

head=&a;

a.next=&b;

b.next=&c;

c.next=NULL;

p=head;

while(p!=NULL)

{ cout<num<<" "<score<next;} }

31001 89.5

31003 90

31007 85

7.1.6 结构体类型数据作为函数参数

例7.5

(1)用结构体变量作函数参数。

#include

#include

using namespace std;

struct Student

{ int num;

char name[20];

float score[3];

};

void main()

{ void print(Student);

Student stu;

stu.num=12345;strcpy(https://www.360docs.net/doc/161033317.html,,"Li Feng");

stu.score[0]=67.5;

stu.score[1]=89;

stu.score[2]=78.5;

print(stu);

}

void print(Student stu)

{

cout<

12345 Li Feng 67.5 89 78.5

(2)用指向结构体变量的指针作实参数。

#include

#include

using namespace std;

struct Student

{ int num;

char name[20];

float score[3];

};

void main()

{ void print(Student*);

Student stu={12345,"Li Feng",67.5,89,78.5};

print(&stu);

}

void print(Student *p)

{

cout<num<<' '<name<<' '<score[0] <<' '<score[1]<<' '<score[2]<

12345 Li Feng 67.5 89 78.5

(3)用结构体变量的引用做函数参数。

#include

#include

using namespace std;

struct Student

{ int num;

string name;

float score[3];

};

void main()

{ void print(const Student &);

Student stu;

stu.num=12345;https://www.360docs.net/doc/161033317.html,="Li Feng";

stu.score[0]=67.5;

stu.score[1]=89;

stu.score[2]=78.5;

print(stu);

}

void print(const Student &stu)

{

cout<

12345 Li Feng 67.5 89 78.5

7.1.7 用new和delete运算符进行动态分配和撤销内存空间int *p=new int;delete p;

int *p=new int(100);delete p;

char *pc=new char[10];delete []pc;//删除数组

int (*pp)[4]=new int[5][4];delete[]pp;//删除数组

例7.6 开辟空间存放一个结构体变量。

#include

using namespace std;

struct Student

{ int num;

string name;

char sex;

};

void main()

{

Student *p;p=new Student;

p->num=10123;p->name="Wang Fun";

p->sex='M';

cout<name<<' '<num<<' '<sex<

delete p;

}

Wang Fun 10123 M

new和delete运算符与含有指向自己的指针的结构体,就可以实现动态链表,在数据结构课中要详细介绍。

7.2 共用体类型

7.2.1 共用体的概念

几个不同的变量共占同一段内存的结构,称为共用体(有的书称之为联合)。

7.2.2 对共用体变量的访问方式

【例】演示联合的例子。

这里exam是个联合,为说明数据成员val和h开始于同一地址,考虑下面的程序:

#include

#include

union exam

{ short val;

char h[2];

};

void main()

{

exam var;

var.h[0]= 'A';

cout<<"The value of var.val:"<

cout<<"The value of var.h[0]:"<

var.val=66;

var.h[1]='A';

cout<

cout<

//65*256+66=16706

}

The value of var.val:65

The value of var.h[0]:A

16706

B

A

7.2.3 共用体类型数据的特点

(1)每一瞬时只有一个成员起作用,其它成员不起作用。

(2)共用体变量的地址和它的各个成员的地址都是同一地址。

不能对共用体变量赋值;不能企图引用变量名来得到一个值;不能在定义共用体变量时对它进行初始化;不能用共用体变量作为函数参数。

7.3 枚举类型

如果一个变量只有几中可能的值,可以定义为枚举类型

enum color{RED,BLUE,GREEN};

关键字enum标志枚举类型定义开始,分号标志其结束。在C++中允许不写enum;

enum后的标识符color称为枚举类型名。

枚举元素(枚举常量):花括号内用逗号隔开的标识符是为这个类型定义的常量,

枚举元素的缺省赋值:编译器为这些枚举常量赋予不同的值,第一个常量RED值为0,以后的常量的值是它前面常量的值增1,所以,BLUE为1,GREEN为2 。

声明枚举变量:枚举标记可以用类型名说明具有该类型的变量,例如:

color CorVariable;

上面的语句说明了变量CorVariable,可以将说明类型color时所列举的枚举常量中的任何一个置给变量CorVariable , 例如: CorVariable=GREEN;

cout<

#include

void main()

{

enum color{RED,BLUE,GREEN};

color CorVariable;

CorVariable=GREEN;

cout<

cout<

// CorVariable=1;//这样不行

CorVariable=(color)1;

}

2

4

枚举常量的自定义赋值:说明可在枚举常量名之后使用等号将一个(char或int类型的)常量置给一个枚举常量名,以改变编译的缺省赋值,例如:

enum color {RED=-1,BLUE,GREEN=6,YELLOW};

这里RED代表值-1,而BLUE为它前面的枚举常量的值加1,所以BLUE代表值0。同样,GREEN的值为6,而YELLOW的值为7。为枚举常量指定重复的值也是合法的,例如:

enum state {FALSE,TRUE,FAIL=0,BAD=0};

在这个说明中FALSE,FAIL和BAD的值都为0。

枚举常量的类型:枚举常量的类型隐含是unsigned char 或int 类型,但到底是何种类型取决于枚举常量的值。如果所有的值都可用unsigned char表示,则它就是每个枚举常量的类型。

例7.7 口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中任意取出3个球,问得到3种不同颜色球的可能取法,输出每种排列的情况。

#include

#include

using namespace std;

enum color{red,yellow,blue,white,black};

void main()

{ void print(color);

color pri;

int i,j,k,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))

{

cout<

pri=color(i);print(pri);

pri=color(j);print(pri);

pri=color(k);print(pri);

cout<

}

}

cout<<"total:"<

}

void print(color co)

{

cout<

switch(co)

{

case red:cout<<"red";break;

case yellow:cout<<"yellow";break;

case blue:cout<<"blue";break;

case white:cout<<"white";break;

case black:cout<<"black";break;

default:break;

}

}

38 white red blue

39 white red black

40 white yellow red

41 white yellow blue

42 white yellow black

43 white blue red

44 white blue yellow

45 white blue black

46 white black red

47 white black yellow

48 white black blue

49 black red yellow

50 black red blue

51 black red white

52 black yellow red

53 black yellow blue

54 black yellow white

55 black blue red

56 black blue yellow

57 black blue white

58 black white red

59 black white yellow

60 black white blue

total:60

7.4 用typedef声明类型

用typedef声明一个新的类型名来代替已有的类型名。

typedef int INTEGER;

typedef float REAL;

则,以下两行等价:

int i,j;float a,b;

INTEGER i,j;REAL a,b;

typedef int NUM[100];NUM n;//定义n为包含100整型元素数组。typedef char *STRING;//STRING为字符指针类型。

STRING p,s[10];//p为字符指针变量,s为字符指针数组.

typedef int (*POINTER)(); //POINTER为指向函数指针类型。函数返回整型值;函数没有参数。

POINTER p1;//p1为指向函数的指针变量。

使用typedef有利于程序的通用与移植。

1 实验目的:

(1)掌握结构体的变量的定义和使用。

(2)掌握结构体类型数组的概念和应用。

2 实验内容:

第七章习题1 习题3 习题5

3 实验结论:

(3)

例7.7 name num sex job grade/position

Li 1011 f s 3

Wang 2085 m t prof

#include

#include

#include

using namespace std;

struct

{ int num;

char name[10];

char sex;

char job;

union P

{ int grade;

char position[10];

}category;

}person[2];

void main()

{ int i;

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

{

cin>>person[i].num>>person[i].name

>>person[i].sex>>person[i].job;

if(person[i].job=='s')

cin>>person[i].category.grade;

else

cin>>person[i].category.position;

}

cout<<"No. Name sex job grade/position"<

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

{

cout<

<<" "<

if(person[i].job=='s')

cout<

else

cout<

cout<

}

}

101 Li f s 3

102 Wang m t prof

No. Name sex job grade/position

101 Li f s 3

102 Wang m t prof

C题库--自定义数据类型(精)

本题序号:118 当定义一个结构体变量时,系统分配给它的内存大小的理论值是__________。 A 各成员所需内存的总和 B 结构体中的第一个成员所需内存 C 成员中所需内存最大者的存储空间 D 结构体中的最后一个成员所需存储容量参考答案 A 本题序号:165 存放多个字符串,用________比较适合。 A 二维字符数组 B 一维字符数组 C 自定义结构体 D 自定义联合体 参考答案 A 本题序号:169 定义生成非静态变量时,将对变量进行_______。 A 自动赋初值 B 自动赋0 C 不会自动赋初值 D 自动赋-1 参考答案 C 本题序号:180 x为int型,s为float型,x=3,s=2.5。表达式s+x/2的值为________。 A 4 B 3.5 C 2.5 D 3 参考答案 B 本题序号:182 x、y为整数,x=15,y=-2。表达式x>10 and y<2 or x*y==10 and x的值为_________。 A 0 B 15 C 1 D 2 参考答案 C 本题序号:211 以下定义, struct st1{int a,b;float x,y;}; struct st2{int a,b;st1 s1; } ss; 对成员变量x的引用形式正确的是:_________ 。 A ss.s1.x B st2.st1.x C st2.s1.x D ss.x 参考答案 A 本题序号:215 对任意整型数据数据m,n(m>n>0), 则 C 语言表达式m-m/n*n的值为:_______________。 A 0 B m%n C 1 D n%m 参考答案 B 本题序号:223 设有以下定义: enum t1 {a1,a2=7,a3,a4=15} time; 则枚举常量a1和a3的值分别是 A 1和2 B 6和3 C 1和8 D 0和8 参考答案 D 本题序号:225 设有类型说明:enum color{red,yellow=3,white,black}; 则执行语句cout<

自定义数据类型习题及答案(C语言)

第7章自定义数据类型习题 一.选择题: 1.当定义一个结构体变量时,系统分配给它的内存空间是【】。 A) 结构中一个成员所需的内存量B) 结构中最后一个成员所需的内存量 C) 结构体中占内存量最大者所需的容量D) 结构体中各成员所需内存量的总和2.若有以下说明,对初值中整数2的正确引用方式是【】。 static struct { char ch; int i; double x; } a[2][3]={{…a?,1,3 .45,?b?,2,7.98,?c?,3,1.93I} {…d?,4,4.73,?e?,5,6.78,?f?,6,8.79 }}; A) a[1][1].i B) a[0][1].i C) a[0][0].i D) a[0][2].i 3.根据以下定义,能打印字母M的语句是【】。 struct p { char name[9]; int age; }c[10]={“Jobn”,17,”Paul”,19,”Mary”,18,”Adam”,16}; A) printf(“%c”,c[3].name);B) printf(“%c”,c[3].name[1]); C) printf(“%c”,c[2].name);D) printf(“%c”,c[2].name[0]); 4.以下说明和语句中,已知int型数据占两个字节,则以下语句的输出结果是【】。 struct st { char a[l0]; int b; double c; }; printf(“%d”,sizeof(struct st)); A) 0 B) 8 C) 20 D) 2 5.以下说明和语句中,对结构体变量std中成员id的引用方式不正确的是【】。 struct work { int id; int name; } std, *p; p=&std; A) std.id B) *p.id C) (*p).id D) &std.id 6.如设有如下定义,若要使px指向rec中的成员x,正确的赋值语句是【】。 struct aa

用户定义数据类型与自定义函数

数据库系统原理实验报告 实验名称:__用户定义数据类型与自定义函数_ 指导教师:_叶晓鸣刘国芳_____ 专业:_计算机科学与技术_ 班级:__2010级计科班_ 姓名:_文科_____学号: 100510107 完成日期:_2012年11月10日_成绩: ___ ___一、实验目的: (1)学习和掌握用户定义数据类型的概念、创建及使用方法。 (2)学习和掌握用户定义函数的概念、创建及使用方法。 二、实验内容及要求: 实验 11.1 创建和使用用户自定义数据类型 内容: (1)用SQL语句创建一个用户定义的数据类型Idnum。 (2)交互式创建一个用户定义的数据类型Nameperson。 要求: (1)掌握创建用户定义数据类型的方法。 (2)掌握用户定义数据类型的使用。 实验 11.2 删除用户定义数据类型 内容: (1)使用系统存储过程删除用户定义的数据类型Namperson。 (2)交互式删除用户定义的数据类型Idnum。 要求: (1)掌握使用系统存储过程删除用户定义的数据类型。 (2)掌握交互式删除用户定义的数据类型。 实验 11.3 创建和使用用户自定义的函数 内容: (1)创建一个标量函数Score_FUN,根据学生姓名和课程名查询成绩。 (2)创建一个内嵌表值函数S_Score_FUN,根据学生姓名查询该生所有选课的成绩。 (3)创建一个多语句表值函数ALL_Score_FUN,根据课程名查询所有选择该课程学生的成绩信息。

要求: (1)掌握创建标量值函数的方法。 (2)掌握创建内嵌表值函数的方法。 (3)掌握创建多语句表值函数的方法。 实验 11.4 修改用户定义的函数 内容: (1)交互式修改函数Score_FUN,将成绩转换为等级输出。 (2)用SQL修改函数S_Score_FUN,要求增加一输出列定义的成绩的等级。要求: (1)掌握交互式修改用户定义函数的方法。 (2)掌握使用SQL修改用户定义函数的方法。 实验 11.5 输出用户定义的函数 内容: (1)交互式删除函数Score_FUN。 (2)用SQL删除函数S_Score_FUN。 要求: (1)掌握交互式删除用户定义函数的方法。 (2)掌握使用SQL删除用户定义函数的方法。

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.360docs.net/doc/161033317.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; 结构体名和结构体变量是两个不同的概念,结构体名只能表示一个结构形式,编译系统并不对它分配内存空间,只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。这是因为结构体变量被定义后相当于标准数据类型被使用。 利用结构体指针变量访问成员如下: (*结构体指针变量).成员名 或者: 结构体指针变量->成员名 后一种形式较为方便,容易区分。

第10章 合理使用数据类型

第10章合理使用数据类型 在进一步讨论更深的主题之前,我们需要先停一停,快速地回顾一下可移植问题。Linux1.2版本和2.0版本之间的不同就在于额外的多平台能力;结果是,大多数源代码级的移植问题已经被排除了。这意味着一个规范的Linux驱动程序也应该是多平台的。 但是,与内核代码相关的一个核心问题是,能够同时存取各种长度已知的数据项(例如,文件系统数据类型或者设备卡上的寄存器)和利用不同处理器的能力(32位和64位的体系结构,也有可能是16位的)。 当把x86的代码移植到新的体系结构上时,核心开发者遇到的好几个问题都和不正确的数据类型相关。坚持强数据类型以及编译时使用-Wall-Wstrict-prototypes选项能够防止大部分的臭虫。 内核使用的数据类型划分为三种主要类型:象int这样的标准C语言类型,象u32这样的确定数据大小的类型和象pid_t这样的接口特定类型。我们将看一下这三种类型在何时使用和如何使用。本章的最后一节将讨论把驱动器代码从x86移植到其它平台上可能碰到的其它一些典型问题。 如果你遵循我提供的这些准则,你的驱动程序甚至可能在那些你未能进行测试的平台上编译并运行。 使用标准C类型 大部分程序员习惯于自由的使用诸如int和long这样的标准类型,而编写设备驱动程序就必须细心地避免类型冲突和潜在的臭虫。 问题是,当你需要“2个字节填充单位(filler)”或“表示4个字节字符串的某个东西”时,你不能使用标准类型,因为通常的C数据类型在不同的体系结构上所占空间大小并不相同。例如,长整数和指针类型在Alpha上和x86上所占空间大小就不一样,下面的屏幕快照表明了这一点: morgana%./datasize system/machine:Linux i486 sizeof(char)=1 sizeof(short)=2 sizeof(int)=4 sizeof(long)=4 sizeof(longlong)=8 sizeof(pointer)=4

数据结构1-10章习题

第1章绪论 1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。 3.简述逻辑结构的四种基本关系并画出它们的关系图。 4.存储结构由哪两种基本的存储方法实现? 5.选择题 (1)在数据结构中,从逻辑上可以把数据结构分成()。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 (2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的() A.存储结构B.存储实现C.逻辑结构D.运算实现 (3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。 A.数据具有同一特点 B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致 C.每个数据元素都一样 D.数据元素所包含的数据项的个数要相等 (4)以下说法正确的是()。 A.数据元素是数据的最小单位 B.数据项是数据的基本单位 C.数据结构是带有结构的各数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 (5)以下与数据的存储结构无关的术语是()。 A.顺序队列 B. 链表 C. 有序表 D. 链栈 (6)以下数据结构中,()是非线性数据结构 A.树B.字符串C.队D.栈 6.试分析下面各程序段的时间复杂度。 (1)x=90; y=100; while(y>0) if(x>100) {x=x-10;y--;} else x++; (2)for (i=0; i

补充练习第八章构造数据类型

补充练习第八章构造数据类型 第八章构造数据类型 一、单项选择题: 1.设有以下语句: struct st{int n; struct st *next;}; static struct st a[3]={5,&a[1],7,&a[2],9,?\0?},*p; p=&a[0]; 则表达式的值是6。 A. p++ ->n B. p->n++ C. (*p).n++ D. ++p->n 2.若有下面的说明和定义,则sizeof(struct aa)的值是。 struct aa{int r1; double r2; float r3;} mya; A. 8 B. 10 C. 12 D. 14 3. 若程序中有下面的说明和定义: struct abc{int x; char y;} struct abc s1,s2; 则会发生的情况是。 A. 编译出错 B. 程序将顺利编译、连接、执行 C. 能顺利通过编译、连接,但不能执行 D. 能顺利通过编译,但连接出错 4.选择出k的正确值。 enum {a,b=5,c,d=4,e} k; k=e; A.3 B. 4 C. 5 D. 6 5.选择出不正确的函数定义:。 A.struct tree func(s) B. int *func(s) struct tree s[]; char *s[]; { { ... ... } } C. struct tree *func(s) D. int *func(s) char **s; char *s[10][]; { {

... ... } } 6.若有以下的说明,则在scanf函数调用语句中对结构体变量成员的不正确引用方式为。 struct pupil { char name[20]; int age; int sex; } pup[5], *p; p=&pup[0]; A.scanf(“%s”, pup[0].name); B. scanf(“%d”, &pup[0].age); C. scanf(“%d”, &(p->sex)); D. scanf(“%d”, &p->age); 7. 设有100个学生的考试成绩数据表如下形式: 在下面结构体数组的定义中,不正确的是: A.struct student B. struct stud [100] { { int no; int no; char name [10]; char name [10]; float score; float score; }; }; struct student stud[100]; C. struct student D. struct { { int no; int no; char name [10]; char name [10]; float score; float score; } stud[100]; ]stud[100];

sql自定义数据类型

6.2 用户自定义数据类型 6.2.1 创建用户自定义数据类型 可以使用T-SQL语句或企业管理器来完成用户自定义数据类型的创建。 1. 使用T-SQL语句 可以使用系统存储过程sp_addtype来创建用户自定义数据类型。语法是:sp_addtype type_name[,system_type] {'NULL'|'NOT NULL'|'NONULL'}-默认为'NULL' 其中: type_name为用户定义数据类型名,这个名称在数据库中必须是惟一的。 system_type 为用户定义的数据类型所基于的系统数据类型,可以包括数据的长度、精度等。当系统数据类型中包括标点符号(例如括号、逗号)时,应用引号括起来。 例如,创建一个“号码”数据类型可使用如下代码: USE 学生图书借阅管理 EXEC sp_addtype 号码,'varchar(8)','NULL' 在查询分析器中执行上述语句,结果窗口显示如下信息: (所影响的行数为1行) 类型已添加。 2. 使用企业管理器 使用企业管理器创建用户自定义数据类型的操作步骤如下: (1)在企业管理器中展开要创建用户自定义数据类型的数据库,用鼠标右键单击“用户定义的数据类型”目录,在弹出的快捷菜单中选择“新建用户定义数据类型”命令,如图6-14所示。 图6-14 新建用户自定义数据类型 (2)打开的用户自定义数据类型属性对话框如图6-15所示。在图6-15所示对话框的名

称文本框中输入用户自定义数据类型的名称,如“号码”。 图6-15 用户自定义数据类型属性对话框 图6-16 创建用户自定义数据类型“号码” (3)在图6-15所示对话框的“数据类型”下拉列表框中,选择该用户自定义数据类型所基于的系统数据类型,如varchar。 (4)如果选择的基类型是可以设定长度的(如varchar、char等),则还需要在长度文本框中设定数据类型的长度。 (5)如果允许空值,则选中“允许NULL值”复选框。 (6)如果希望该数据类型与规则或默认值捆绑,则分别在“规则”和“默认值”下拉列表框中选择要绑定的规则和默认值,否则选择“无”,如图6-16所示。规则和默认值将在 6.3节和6.4节中介绍。 (7)单击“确定”按钮,关闭对话框。 6.2.2 查看用户自定义数据类型 要查看用户自定义数据类型,可以使用sp_help 系统存储过程来查看用户自定义数据

第十章-CO10-作业类型主数据维护流程.

第十章-CO10_作业类型主数据维护流程 1.流程说明 此流程描述对作业类型在SAP系统中之维护(创建、修改、删除、冻结),以利于成本进行分摊。 家具公司实际业务中,作业类型仅作为计算生产成本,不作其他任何用途。因此,作业类型只有与生产部门之工作中心相关。另外,哪一类成本中心之费用及该费用通过作业类型分摊至哪个次级成本要素中去均须于创建作业类型时予以确定。 作业类型编码原则以及作业类型与次级成本要素之对应关系(参见附件一),由主数据专职维护人员统一定义、维护。 维护时,财务主数据维护专职人员须填写“作业类型主数据维护申请表”,作为SAP系统维护之依据。 注意事项: 通常,作业类型于SAP上线后即可交付使用,一般不需要创建、修改、删除或冻结。 因系统的高度集成,故创建作业类型前,必须与生产部门(PP模组)达成共识后方可进行,否则将引起前端部门作业困扰,冻结时亦然(若仅在CO模组已创建作业类型但不能与PP模组集成,则该作业类型是无用的)。 修改作业类型时,亦应事先与生产部门取得共识后方可进行。 2.流程图

3.系统操作 3.1.操作范例 例1:因公司内部核算需要,生技部门于2000/12/01起实行独立核算,各生产车间凡涉及之维 修费用均透过生技部门进行,生技部门按实际维修工时(维修内部价格按公司制定标准执行)结 算各生产车间费用。为此,财务部门决定创建一个作业类型——维修工时(代码:AMAINT),以 满足依维修工时核算所需。 例2:上述作业类型创建后,发现中文名称定义不够恰当,变更为生技维修工时。 例3:生技部门试运行后,未能继续推行下去,故将作业类型冻结。 例4:将作业类型——维修工时(代码:AMAINT)删除 3.2.系统菜单及交易代码 案例1:会计→控制→成本中心会计→主数据→作业类型→单个处理→创建 交易代码:KL01 案例2:会计→控制→成本中心会计→主数据→作业类型→单个处理→更改 交易代码:KL02

AB PLC编程软件RSLOGIX5000入门7——UDT用户自定义数据类型

AB PLC编程软件RSLOGIX5000入门7——UDT用户自定义数据类型 在本章中,我们将介绍如何通过用户自定义数据类型和数据范围划定来规划标签数据库。这里将学到 § 了解使用 UDT 的优势 § 学习如何优化 UDT 规划 § 使用数据范围划定帮助简化并加快开发工作 我们现在将重点关注 Logix 控制器中的数据规划。 打开现有控制器文件 1. 在计算机桌面上,双击 Lab Files 文件夹。 2. 双击名为 Conveyor_Program_S 3.ACD 的现有项目。 这样将在 RSLogix 5000 中启动该项目。 为传送带创建用户自定义数据类型 您已重新组织了程序规划以更好地利用 Logix,现在已准备好开始对数据规划进行重新组织。可注意到,工程师规划数据的方式仍像使用带有整数、实数和定时器数据表的传统 PLC 一样。问题是,当与设备关联的数据分布到控制器内存中的各处时便很难进行跟踪。您已再次决定充分利用 Logix,使用用户自定义数据类型。 用户自定义数据类型 用户自定义数据类型也称为 UDT 或结构,借此按逻辑方式对数据进行组织或分组,以便所有与设备关联的数据都可组合在一起。 例如,每个传送带都有 8 个整数值、3 个实数值、2 个定时器和 11 个与其关联的布尔值。在传统PLC 中,可能需要 4 个不同的数据表。然后,当您具有多条传送带时,您可能需要详细地将传送带映射到各个数据表中。这样就会变得很难管理。 通过 UDT 能够实现的是将不同的数据类型(整数、实数、定时器、布尔等)组合到一起,共同作为用户自定义数据类型。然后便可创建该 UDT 类型的数组。这可使得编程工作、代码的记录和数据的跟踪都更加轻松。 1. 在控制器项目管理器中,双击"控制器标签"(Controller Tags)。

C++(练习)第5章,自定义数据类型

一,单选题 1. 已知枚举类型定义语句为: enum Token { NAME, NUMBER, PLUS=5, MINUS, PRINT=10 }; 则下列叙述中错误的是( )。 A 枚举常量NAME的值为1 B 枚举常量NUMBER的值为1 C 枚举常量MINUS的值为6 D 枚举常量PRINT的值为10 参考答案 A 2. 当定义一个结构体变量时,系统分配给它的内存大小的理论值是__________。 A 各成员所需内存的总和 B 结构体中的第一个成员所需内存 C 成员中所需内存最大者的存储空间 D 结构体中的最后一个成员所需存储容量 参考答案 A 3. 以下对枚举类型名的定义中正确的是()。 A enum a={“one”, “two”, “three”}; B enum a {“one”, “two”, “three”}; C enum a={one, two, three}; D enum a {one=9,two=-1,three}; 参考答案 D 4. 下面程序的正确的输出是()。 #include void main() { enum team{my,your=4,his,her=his+10}; cout<

5. 设有以下定义: enum t1 {a1,a2=7,a3,a4=15} time; 则枚举常量a1和a3的值分别是 A 1和2 B 6和3 C 1和8 D 0和8 参考答案 D 6. 设有类型说明: enum color{red, yellow=3, white, black}; 则执行语句cout<

数据结构作业系统_第十章答案

10.23②试以L.r[k+1]作为监视哨改写教材10.2.1节 中给出的直接插入排序算法。其中,L.r[1..k]为待排 序记录且k0;i--) { L.r[L.length+1]=L.r[i+1]; if(GT(L.r[i],L.r[i+1])) { L.r[L.length+1]=L.r[i]; L.r[i]=L.r[i+1]; } for(j=i+2;LT(L.r[j],L.r[L.length+1]);j++) L.r[j-1]=L.r[j]; L.r[j-1]=L.r[L.length+1]; } } 10.26②如下所述改写教科书1.4.3节中的起泡排序算法:将算法中用以起控制作用的布尔变量change改为一个整型变量,指示每一趟排序中进行交换的最后一个记录的位置,并以它作为下一趟起泡排序循环终止的控制值。 实现下列函数: void BubbleSort(SqList &L); /* 元素比较和交换必须调用以下比较函数和交换函数:*/ /* Status LT(RedType a, RedType b); 比较:"<" */

实验8--自定义数据类型1

实验8--自定义数据类型1

实验8 自定义数据类型 三、实验思考 1.有10名学生的数据,每个学生的数据包括学号、姓名、性别、三门课的考试成绩及平均成绩。要求: (1)编写一个input函数,用来输入10个学生的信息。 (2)编写一个output函数,用来输出10个学生的信息。 (3)计算每个学生的平均成绩,并按平均成绩由小到大进行排序后输出。 2.设有5个学生和教师的数据。学生的数据包括:姓名、年龄、性别、职业和年级。教师的数据包括:姓名、年龄、性别、职业和职务。现要求输入学生和教师的数据,并输出这些数据,要求当职业项为学生时,输出的最后一项为年级;当职业项为教师时,输出的最后一项为职务。3.利用结构体数组和结构体指针,根据从键盘输入的学生姓名,查找已给出数据的结构体数组,若找到该名学生,则输出其所有信息;若找不到该名学生,则输出相应提示信息。

4.编程实现,从红、黄、蓝、绿四种颜色中任取三种不同的颜色,共有多少种取法,并请输出所有的排列? 5.从键盘输入一批正整数(以-1作为输入结束标志),按插表尾形式把它们组成一个线性链表。然后,从表头开始,遍历所有结点并输出各结点中的数据。要求线性链表的生成与遍历均写成函数定义。 6.从键盘输入一系列非负整数,遇0时停止。对于输入的所有偶数和奇数,分别建立一个偶数链表和一个奇数链表,然后输出两个链表中的数据。 答案 1. #include #include using namespace std; const int n=2; //设置人数常量n,本例为2人 struct student { char num[6]; // 学号 char name[8]; // 姓名 char sex[2]; // 性别 int score[4]; // score[1]~score[3]存放3门课成绩,score[0]存放平均成绩 }stu[n]; void input() //输入函数input { int i,j,sum; for(i=0;i

程序设计教程(机械工业出版社)课后习题答案 第5章 构造数据类型

第5章构造数据类型 1、枚举类型有什么好处?C++对枚举类型的操作有何规定? 答:使用枚举类型有利于提高程序的易读性;使用枚举类型也有利于保证程序的正确性。 首先,可以对枚举类型实施赋值操作,但不同枚举类型之间不能相互赋值,而且不能把一个整型数直接赋值给枚举类型的变量。还可以对枚举类型实施比较运算。还可以对枚举类型实施算术运算,对枚举类型的运算前要转换成对应的整型值,且运算结果类型为算术类型,而且不能对枚举类型的值直接进行输入/输出。 2、指针类型主要用于什么场合?引用类型与指针类型相比,其优势在哪里? 答:指针类型主要用于参数传递和对动态变量的访问。在C++中,指针类型还用于访问数组元素,以提高访问效率。 引用类型与指针类型都可以实现通过一个变量访问另一个变量,但访问的语法形式不同:引用是采用直接访问形式,指针则采用间接访问形式。在作为函数参数类型时,引用类型参数的实参是一个变量,而指针类型参数的实参是一个变量的地址。 除了在定义时指定的被引用变量外,引用类型变量不能再引用其他变量;而指针变量定义后可以指向其他同类型的变量。因此,引用类型比指针类型要安全。 引用类型的间接访问对使用者而言是透明的。 3、写出下面程序的运行结果: #include using namespace std; void f(int &x,int y) { y = x + y; x = y % 3; cout << x << ‘\t’ << y << endl; } int main() { int x=10, y=19; f(y,x); cout << x << ‘\t’ << y << endl; f(x,x); cout << x << ‘\t’ << y << endl; return 0; } 答: 2 29 10 2 2 20 2 2 4、从键盘输入某个星期每一天的最高和最低温度,然后计算该星期的平均最低和平均最高 温度并输出之。 解: #include

SQL_用户自定义的数据类型规则默认

用户自定义的数据类型、默认值、规则 一、用户自定义的数据类型 用户自定义数据类型可看做是系统数据类型的别名。 在多表操作的情况下,当多个表中的列要存储相同类型的数据时,往往要确保这些列具有完全相同的数据类型、长度和为空性(数据类型是否允许为空)。例如,对于student数据库中表student、grade和course三张表的xh,kh两个列必须具有相同的数据类型。 创建用户自定义数据类型时首先应考虑如下三个属性: (1)数据类型名称 (2)新数据类型所依据的系统数据类型(又称为基类型) (3)为空性 如果为空性未明确定义,系统将依据数据库或连接的ANSI NULL默认设置进行指派。 1、创建用户自定义数据类型的方法如下: (1)利用企业管理器定义 (2)利用SQL命令定义数据类型 在SQL Server中,通过系统存储过程实现用户数据类型的定义。 语法格式如下: sp_addtype [@typename=] type, /*自定义类型名称*/ [@phystype=] system_data_type /*基类型*/ [,[@nulltype=] null_type /*为空性*/ [,[@owner=] owner_name] /*创建者或所有者*/ 其中: type:用户自定义数据类型的名称。 System_data_type:用户自定义数据类型所依据的基类型。如果参数中嵌入有空格或标点符号,则必须用引号将该参数引起来。 null_type:指明用户自定义数据类型处理空值的方式。取值可为’NULL’、’NOT NULL’、’NONULL’三者之一(注意:必须用单引号引起来)。如果没有用sp_addtype显式定义null_type,则将其设置为当前默认值,系统默认值一般为’NULL’。 例:定义学号字段的数据类型 sp_addtype ’student_xh’,’char(4)’,’not null’ 2、删除用户自定义数据类型 (1)利用企业管理器 (2)利用SQL语句 语法格式如下: sp_droptype [@typename=] type 其中type为用户自定义数据类型的名称,应用单引号括起来。 例:删除student_xh用户自定义数据类型 sp_droptype ’student_xh’ 说明: (1)如果在表定义内使用某个用户定义的数据类型,或者将某个规则或默认值绑定到这种数据类型,则不能删除该类型。 (2)要删除一用户自定义类型,该数据类型必须存在,否则返回一条错误信息。 3、执行权限

数据结构作业系统_第十章答案教学文稿

数据结构作业系统_第 十章答案

10.23②试以L.r[k+1]作为监视哨改写教材10.2.1节 中给出的直接插入排序算法。其中,L.r[1..k]为待排 序记录且k0;i--) { L.r[L.length+1]=L.r[i+1]; if(GT(L.r[i],L.r[i+1])) { L.r[L.length+1]=L.r[i]; L.r[i]=L.r[i+1]; } for(j=i+2;LT(L.r[j],L.r[L.length+1]);j++) L.r[j-1]=L.r[j]; L.r[j-1]=L.r[L.length+1]; } } 10.26②如下所述改写教科书1.4.3节中的起泡排序算法:将算法中用以起控制作用的布尔变量change改为一个整型变

量,指示每一趟排序中进行交换的最后一个记录的位置,并 以它作为下一趟起泡排序循环终止的控制值。 实现下列函数: void BubbleSort(SqList &L); /* 元素比较和交换必须调用以下比较函数和交换函数:*/ /* Status LT(RedType a, RedType b); 比较:"<" */ /* Status GT(RedType a, RedType b); 比较:">" */ /* void Swap(RedType &a, RedType &b); 交换 */ 顺序表的类型SqList定义如下: typedef struct { KeyType key; ... } RedType; typedef struct { RedType r[MAXSIZE+1]; // r[0]闲置或用作哨兵单元 int length; } SqList; 比较函数和交换函数: Status LT(RedType a, RedType b); // 比较函数:"<" Status GT(RedType a, RedType b); // 比较函数:">" void Swap(RedType &a, RedType &b); // 交换函数 void BubbleSort(SqList &L) /* 元素比较和交换必须调用如下定义的比较函数和交换函数:*/ /* Status LT(RedType a, RedType b); 比较:"<" */

第3章 创建数据类型和表

第3章创建数据类型和表 本章概述 在前面了解了SQL Server数据库的组成以及SQL Server数据库中的对象后,我们在本章中学习数据库中的数据类型和表的创建方法。通过本章的学习,我们已经能够利用SQL Server数据库为简单资料设计和实现最基本的存储方案了。 教学目标 ●了解SQL Server支持的数据类型 ●掌握创建和删除用户定义数据类型的方法 ●掌握创建和删除用户表的方法 ●掌握生成列值的方法 ●掌握生成脚本的方法 教学重点 ●SQL Server支持的类型,何时选用何种类型描述数据。用户定义类型的相关处理。 ●用户表的增删以及相关操作,包括生成脚本和数据列的定义。 教学难点 ●本章同样会设计到数据的底层存储结构,比如B树,为什么要这样设计,需要讲 清楚。 ●企业项目流程同课程内容的结合。比如设计表结构属于项目什么阶段的任务,该 任务的实际进行方式是如何的(结合案例)。又比如生成SQL脚本对项目的作用。

数据库程序设计—SQL Server 2000 数据库程序设计教师参考手册 教学资源 先修知识 在正式开始学习本章内容以前,学生须具备下列知识基础。 2

第3章创建数据类型和表 建议学时 课堂教学(3课时)+实验教学(3课时) 教学过程 3.1创建数据类型 教学提示: 本节主要达到三个目的。 ●掌握SQL Server支持的数据类型。(精讲) ●掌握用户自定义类型的创建。(精讲+演示) ●掌握选择数据类型的原则,这点在企业数据库应用中非常重要,因为正确的选择数据 列的类型将使数据库性能达到最优。(略讲) 3

数据库程序设计—SQL Server 2000 数据库程序设计教师参考手册 4

C++习题第05章 构造数据类型

第05章构造数据类型 1. 选择题 (1)已知P是一个指向结构体类型A的指针,a是结构体类型A的一个变量,如果要给a 变量的成员赋值为5,()是正确的。 (A)a.m=5 (B)p->m=5 (C) (*p).m=5 (D) A.m=5 (2)下列关于数组的描述错误的是() (A)数组的下标是从0开始的 (B)数组名是一个常量指针 (C)数组的每一个元素都是同一类型的 (D)数组元素只能赋初值,而不能在定义后赋值 (3)若有程序段如下: (A)int a[4]={4,10},*p (B)P=a; 则输出*(++P)的值为 (A)10 (B) 4 (C)0 (D)不定 (4).下列程序的输出结果是(B) #include Struct A {int a,b,c;}; Void main() { struct A s[2]={{1,2,3},{4,5,6}}; Int t; T=s[0].a+s[1].b; Cout<

相关文档
最新文档