实验8 自定义数据类型1
C++自定义数据类型实验报告
实验名称:自定义数据类型一、实验目的和要求1、掌握结构体变量的定义和使用2、掌握结构体类型数组的概念和应用二、实验内容1、定义一个结构体变量,编程序,要求输入年、月、日,程序能计算并输出该日在本年中是第几天。
2、编写一个print函数,打印一个学生的成绩数组,该数组中有5个学生的数据,每个学生的数据包括num,name,score[3],用主函数输入这些数据,用print函数输出这些数据。
三、实验步骤每个实验内容的源代码:1、#include<<iostream.h>>Struct{int year,month,day;};dataint main(){int days,I;Int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};Cout<<”input year,month day:”;cin>>date.year>>data.month>>date.day;days=0;for(i=1;i<data.month;i++)days=days+day_tab[i];days=days+date.day;if((date.year%4==0&&date.year%100==0||date.year%400==0)&& date.month>=3)days=days+1;cout<<date.month<<”/”<<date.day<<”is the”<<days<<”the day in”<<date.year<<”.”<<endl;return 0;}2、#include<<iostream.h>>#include<<iomanip.h>>const int=5;struct student{char num[6],name[8];int score[4];}stu[n];Int main(){void print(student stu[]);int i,j;for(i=0;i<n;i++){cout<<”input scores of student”<<i+1<<”:”<<endl;cout<<”No.”;cin>>stu[i].num;cout<<”name:”;cin>>stu[i].name;for(j=0;j<3;j++){cout<<”score”<<j+1<<”:”;cin>>stu[i].score[j];}cout<<endl;}print(stu);return 0;}V oid print(student stu[]){int i,j;cout<<”No. name score1 score2 score3”<<endl; for(i=0;i<n;i++){cout<<stu[i].num<<””<<setw(10)<<stu[i].name<<””; for(j=0;j<3;j++)cout<<setw(3)<<stu[i].score[j]<<””;cout<<endl;}}四、实验总结通过本次实验,我掌握了结构体变量的定义和使用,掌握了结构体类型数组的概念和应用。
C谢丽聪-8自定义数据类型
第八章自定义数据类型8.1结构类型及其变量的定义8.2结构数组8.3结构和指针8.4联合类型8.5枚举类型8.6用typedef类型定义类型别名18.1 结构类型及其变量的定义在实际问题中,一组数据往往具有不同的数据类型,例如在学生登记表中:姓名,字符型学号,整型/字符型年龄,整型性别,字符型成绩,整型/实型用数组存放这一组数据,但数组中各元素的类型和长度都必须一致,不符合要求。
28.1.1 结构类型的定义“结构体”——相当于记录,由若干“成员”组成,每一个成员可以是一个基本数据类型或者又是一个构造类型。
它是一种“构造”而成的数据类型,在说明和使用之前必须先定义即构造它。
1、定义结构类型的一般格式:struct结构名{成员表列};成员表列由若干个成员组成,对每个成员也必须作类型说明:类型说明符成员名;结构定义之后,即可进行变量说明。
34例如:struct stu{int num;char name[20];char sex;float score;};结构名四个成员第一个成员为num ,整型变量;第二个成员为name ,字符数组;第三个成员为sex ,字符变量;第四个成员为score ,实型变量。
不可少2、结构类型的说明:(1)对于结构类型,系统是不会为之分配内存单元的。
只有在定义了结构变量后,系统才会分配内存单元给变量。
(2)结构是由若干个数据项组成的,每一个数据项都属于一种已有定义的类型。
每一个结构成员都不是独立的,它不是一般的变量,它是跟结构联系在一起的。
struct stu{ int number;char name[20];int age;char sex;};int age;char sex;结构成员名,结构类型struct Student的成员,要访问该成员,必须通过结构变量名;变量名,可以单独被引用。
56(3)成员也可以又是一个结构,即构成了嵌套的结构。
如以下结构定义:struct date {int month;int day;int year;};Struct stu{int num;char name[20];char sex;struct datebirthday;float score;}boy1,boy2;结构date ,由month 、day 、year 三个成员组成成员birthday 被说明为data 结构类型(4)允许省略结构类型名,也即允许定义无类型名的结构类型。
自定义数据类型
Ø 结构体数组的定义及初始化
u直接定义并初始化 struct Cat { char colour[10]; int weight; float length; }cat_arr[2]={{"white",525,60.4},{"yellow",237,28.9}};
高级程序设计C++
田秀霞
E-Mail:c_plusplus@
结构体变量定义的三种形式
Ø 直接定义法
u直接定义法是指在定义结构体类型的同时定义变量。其一 般形式为:
struct 结构体类型名 { 成员类型1 成员名1; 成员类型2 成员名2; … 成员类型n 成员名n; }变量名1,变量名2,… ,变量名n; struct Cat { char colour[10]; int weight; float length; }cat1,cat2;
Ø 经常需要将多个相关的、不同类型的数据包装成为 一个整体来使用:
u描述一本书的相关信息,其中包括书的书号、书名、出 版社和定价等。 struct是结构体类型关键字 Ø 结构体类型定义 struct 结构体类型名 { 成员类型1 成员名1; 符合标识符命名规则 成员类型2 成员名2; … 成员类型n 成员名n; }; 结构体类型的定义应视为一个完整的语句,因 此,在定义结束后需在结尾添加“ ;”
Ø结构体成员的引用
u结构体变量名.成员名 u“ 是成员运算符,它是所有运算符中优先级最 .” 高的 u如: cat1.weight=525;
Ø若成员本身也是一个结构体,则需要用若干 个成员运算符,一级一级地找到最低级成 员。
uBook book; ubook.pub_date.year=2010; ubook.pub_date.month=11; ubook.pub_date.day=11;
C语言第八章.用户自定义数据类型.ppt
int age; char sex;
stu1.number="0208103321" ;
}stu1;
例:以下程序输出结果是?
struct date1
结构体类型可
{
以嵌套定义
int x;
struct date2
{ int i;
two.x
21
char c1; }one;
two.one.i
1
char c2; }two={1,1,'A','B'}; main() {
C语言程序设计
用户自定义数据类型
结构体类型(struct)
数组由类型相同的元素组成,但有些数据类型 可能由性质不同的成员组成,这些成员相互关联组 成一个整体数据。
如一个学生的信息可能包括:
学号(number):char [11]
姓名(name): char [8] 年龄(age):int
结构体类型
结构体成员的引用
引用结构体变量成员的表示方式为:
结构体变量名.成员名
运算符“.”称为成员访问运算符,在C语言中它的运算符 优先级别是最高的。
struct Student {
char number[11]; char name[8];
stu1.age=20; printf("%d",stu1.age); 以下赋值语句是否正确?
main()
{
struct st x={10, 'A'};
fun(&x);
} printf("In main:x.n=%d,x.chIn=%mca\inn":,xx..nn,=x1.c5h,)x; .ch=a
实验八数据库安全管理
实验八 数据库安全管理一、目的与要求1.掌握创建用户和角色的方法2.掌握SQL授权命令和收回权限的命令二、实验准备1.了解SQL Server登录身份和登录模式的概念;2.了解用户、角色、登录三者的概念;3.了解权限授予和收回的的T-SQL语法。
三、实验内容(一)创建登录名1.创建新的登录名testlogin(1)在对象资源管理器的目录树中“安全性” “登录名”,点击右键选择“新建登录名”,设置登录名为testlogin,“SQL Server身份验证”密码为abc,默认数据,如图8-1所示。
库为“studentdb”图8-1提问:此时用testlogin登录名创建新的连接,登录到对象资源管理器,是否能登录成功?不能登陆成功(2)右击testlogin登录名,选择属性,设置“用户映射”,设置“映射到此登录名的,如图8-2所示。
这里即是创建和登录名同名的用户,该用户“为“studentdb”用户属于默认数据库。
这个用户具有的数据库角色是public。
(3)确定后再次以testlogin及其密码登录查ssms,在testlogin登录名下新建查询。
运行命令,查看并记录结果。
提问:此时是否查询命令能查询到st_info表中的数据?为什么?答:不能,因为未获得访问特定数据库中数据的权利。
图8-2(4)若要查询studentdb数据库中表的数据,则要在数据库角色成员身份中选择db_datareader角色(回到sa登录下设置该登录名的属性),再运行上题中的查询语句,查看结果。
(5)在查询编辑器中运行命令,查看是否允许。
若不允许,则要在数据库角色成员身份中选择db_datawriter角色。
重新运行该条更新语句,查看结果。
图8-32.提问:testlogin登录名登录后,允许访问服务器上所有的数据库吗?能访问哪些数据库?。
登录用户只能看到并访问它自己的数据库而不能看到其他的数据库(二)创建用户创建用户时选择映射到已有登录名,即令一个登录名可以访问多个数据库。
第七章 自定义数据类型1
第七章自定义数据类型例7.1 引用结构体变量中的成员。
#include <iostream>using namespace std;struct Date //声明结构体类型Date{int month;int day;Int year;};struct Student //声明结构体类型Student{int num;char name[20];char sex;Date birthday; //声明birthday为Date类型的成员float score;}student1,student2={10002,"Wang li",'f',5,23,1982,89.2};//定义Student类型的变量student1,student2,并对student2初始化int main( ){student1=student2;cout<<student1.num<<endl; //输出student1中的num成员的值cout<<<<endl; //输出student1中的name成员的值cout<<student1.sex<<endl;cout<<student1.birthday.month<<'/'<<student1.birthday.day<<'/'<<student1.birthday.year<<endl;cout<<student.score<<endl;return 0;}运行结果如下:10002Wang lif5/23/198298.2例7.2 对候选人得票的统计程序。
设有3个候选人,最终只能有1人当选为领导。
今有10个人参加投票,从键盘先后输入这10个人所投的候选人的名字,要求最后输出这3个候选人的得票结果。
visual studio学习第8章 自定义数据类型
一个类可能在构造函数中分配资源,当创建该类的对象时 就会该对象分配资源。如果不再需要该对象时,应该释放为 其分配的资源。例如,如果构造函数从堆中动态分配了内存, 这块内存在对象消失之前必须被释放,这就是析构函数的作 用。 析构函数也是特殊的类成员函数,它没有返回类型,没有 参数,不能被随意调用,也不能进行重载,当类对象不再有 效时由系统自动调用。类的析构函数与类名相同,只是在类 名前加个否定号“~”。
在创建类的对象时,会自动调用构造函数。如果没有为类 定义构造函数,是否还会调用构造函数呢?事实上,如果没 有为类定义构造函数,则编译器会提供一个默认的构造函数, 用于创建类的对象。 默认的构造函数没有参数的构造函数。在声明类时,只要 没有为类定义构造函数,则编译器就会自动提供一个默认的 构造函数。可是如果为类提供了构造函数,则编译器就会认 为该构造函数就是默认的构造函数,因此不再提供构造函数。
定义联合的方式与结构类似,只需要使用关键字 union替换struct即可。例如,下面的的定义了一个联 合: union Data { int iVal; double dVal; }; 这个语句定义了一个名为Data的联合类型,它包含 有两个成员,一个为int成员,一个为double型成员。 这个语句很像结构的声明,实际上,它就是一种结构, 只是所有的成员都占用相同的内存内间
在C++中可以为函数中的参数指定默认值,同样也可以为 类的成员函数指定参数的默认值,包括类的构造函数。如果 类的成员函数为内联函数,则可以把参数的默认值放在函数 头中。如果类的成员函数是在外部定义,则参数的默认值只 能放在函数的声明中,而不应该在函数的定义中。
以前,大部分使用显示赋值语句在构造函数中初始化对象 的成员。现在可以使用另一种初始化技术——初始化列表。 下面使用初始化列表对Cube进行初始化: Cube::Cube(double length,double width,double height): m_Length(length),m_Width(width),m_Height()height { cout<<"调用构造函数"<<endl; } 这种方法假设构造函数位于类定义的内部。现在,数据成 员的数值不是在函数内的赋值语句中设定的。因为在声明中 使用功能符号指定了初值,这样可能会比使用赋值语句的效 率高。
C语言教学之自定义数据类型
输出结果:
请输入投票人数: 10 请开始投票: li li zhang wang wang li li zhang wang li 投票统计结果: li: 5 zhang: 2 wang: 3
前一页 下一页
结 构 体 数 组 实 例
休息
§9.1 结构体 - struct
结 构 体 数 组 实 例
休息
结 构 变 量 说 明
前一页 下一页
11
§9.1 结构体 - struct
结构体变量的定义位置:
直接定义结构体类型的变量。
struct { int num; char name[20]; } a1, a2;
结 构 变 量 说 明
注意,用这种形式声明的结构体类型没有 类型名,不能再去定义新的变量
前一页 下一页
休息
9
§9.1 结构体 - struct
变量说明形式
结构名 结构变量名;
例:struct student man;
结 构 变 量 说 明
注意:
与int 地位相当
结构变量的存储类型概念、它的寿命、可 见性及使用范围与普通变量完全一致。 结构变量可以进行初始化。
例:struct student man = { 1001,″王平″, ´T´,18 , 600 , ″北京″};
前一页 下一页
休息
12
§9.1 结构体 - struct
说明:结构体的成员也可以是一个结构体变 量
struct date { int year; int month; int day; }; struct person { int id; char name[20]; struct date birthday; };
C语言第八章 自定义数据类型
29
8.2.3 结构体对象的使用
sizeof(struct B)的结果为7。
24
8.2.2 结构体对象的初始化
► 可以在结构体对象定义时进行初始化。第一种定义
初始化的一般形式为: struct 结构体类型名 结构体对象名1={初值序列1} ,...;
► 第二种定义初始化的一般形式为:
struct 结构体类型名 { 成员列表 } 结构体对象名1={初值序列1} ,...;
7
8.1 结构体ห้องสมุดไป่ตู้型
► (1)首先,需要理解struct本身是一种抽象的数据
类型。即struct笼统地代表结构体,但它究竟有哪 些数据成员是不定的,因此不能直接用struct去定 义变量。
► (2)结构体类型和内置数据类型名(如int、char、
double等)一样是类型名称,而不是该类型的一 个实体。因此尽管成员声明类似变量的定义,但类 型声明时并不会产生该成员的实体,即不会为它分 配存储空间。
18
8.2.1 结构体对象的定义
(1)A的第一个成员a为int,对齐值min(n,sizeof(int))为 4,成员a相对于结构体起始地址从0偏移开始,满足4字 节对齐要求;第二个成员b为char,对齐值 min(n,sizeof(char))为1,b紧接着a后面从偏移4开始, 满足1字节对齐要求;第三个成员c为short,对齐值 min(n,sizeof(short))为2,如果c紧接着b后面从偏移5开 始就不满足2字节对齐要求,因此需要补充1个字节,从 偏移6开始存储。结构体A的内存长度=4+1+1(补 充)+2=8。
跟我学易语言:自定义数据类型
跟我学易语言:自定义数据类型易语言-第二十章:自定义数据类型2008年11月18日星期二 15:00自定义数据类型分为支持库自定义数据类型(如:窗口、字体、编辑框等)和用户自定义数据类型。
在程序中的任何位置,只要可以使用系统基本数据类型(如:整数型、文本型等),就可以使用自定义数据类型。
所有的支持库自定义数据类型在支持库夹的“数据类型”分枝下可以找到,用户自定义数据类型由用户自行在自定义数据类型表中加入。
下面我们一起来写一个有一点意思的程序,该程序执行后将允许你在画板上涂抹各种随机颜色的方块。
请新建一个程序后进行以下输入:1、在_启动窗口上加入一个尽可能大的画板,将画板背景色属性改为白色,以便能够突出我们的显示;2、使用菜单功能“插入->新数据类型”加入一个用户自定义数据类型,将数据类型名修改为“坐标”,回车加入一个新成员,将成员名修改为“水平坐标”,类型改为整数型,再加入一个名为“垂直坐标”的整数型成员;3、再按下Ctrl + N 加入一个新数据类型,将数据类型名修改为“矩形”,回车加入一个新成员,将成员名修改为“起始坐标”,类型改为坐标(输入文本:zb),再加入一个名为“结束坐标”的坐标数据类型成员;4、使用菜单功能“插入->新Dll命令”加入一个Dll命令(Dll命令将在下一章中讲述,本章中仅作了解),将其名称改为“俘获鼠标”(此名称可以随意取),在“本Dll命令在Dll库中的对应命令名”栏中输入“SetCapture”(此名称对应Windows系统的一个API函数名,不能修改),回车后加入一个参数,将参数名改为“窗口句柄”,类型改为整数型;5、再按下 Ctrl + N 加入一个新Dll命令,将其名称改为“释放鼠标”,在“本Dll命令在Dll库中的对应命令名”栏中输入“ReleaseCapture”;6、跳转到_启动窗口,选中画板1,在其属性表底部的组合框中分别选择“鼠标左键被按下”、“鼠标左键被放开”、“鼠标位置被移动”加入三个事件处理子程序;7、在窗口程序集1中加入一个名为绘画矩形,数据类型为矩形(输入文本:jx)的程序集容器和一个名为绘画已开始的逻辑型程序集容器;8、在_画板1_鼠标左键被按下子程序中输入:连续赋值 (横向位置, 绘画矩形.起始坐标.水平坐标, 绘画矩形.结束坐标.水平坐标)输入文本:lxfz(hxwz,hhjx.qszb.spzb,hhjx.jszb.spzb)另注:事件处理子程序的参数(如本子程序中的横向位置、纵向位置)的内容由系统自动提供。
C语言程序设计自定义数据类型PPT课件
printf("%d\n",num[0].x/num[0].y*num
[1].y);
}
A. 0 B. 28 C. 20 D. 5
typedef的作用是( )。
A .用来定义一个新的数据类型
B .可以为已有类型取一个新的名字
C .可以用来定义一个变量
D .能为用户自定义类型取新的名字,但不能为原始数据
mem2 = mem1;
第7页/共21页
typedef的使用 • typedef声明,简称typedef,它的作用是为数据类型定义一个新的名
字。 typedef的用法是:
typedef 数据类型名 用户自定义名称
例: typedef int integer;
这个声明为int取了一个新的名字叫integer,在进行了这个声明后可以用 integer来定义变量。如:integer a;这个定义与 int a;是等价的。
char sex;
struct Date birthday;
int age;
int points;
}
第9页/共21页
结构体数组
• 同种结构数据的集合即结构体数源自 struct Member { int ID ; char name[10]; char sex; int age; int points; } mem[10];
• 成员的访问
变量名.成员名
.称为成员运算符
对成员的赋值与普通变量的赋值是一样的。
如:mem1.ID = 12500113; • 结构体变量的初始化
struct Member mem1 = {12500113, “John”, ‘M’, 26, 30};
• 结构体变量的整体赋值 结构体变量1 = 结构体变量2
8-自定义类型
A
B
结构变量的初始化
P258-259例: struct Student { int number; char name[9]; struct Date { int year; int month; int day; } birthday; char sex; } student1={1101,"liMing", 1985, 2, 20, 'M' }; birthday三成员的初值也可以 用大括号括起:{1985, 2, 20} 7
第八章 用户自定义数据类型
8.1 8.2 8.3 结构类型及其变量的定义 结构数组 结构和指针
8.4 联合类型 8.5 枚举类型 8.6 用typedef 定义类型别名
A B
1
8.1 结构类型及其变量的定义
z 数组是一种存放一组相关的同类型数据的构 造类型,但是不能将不同类型的数据放入同 一数组中。 z 如果需要把一个学生的学号、姓名、年龄、 性别等不同类型的数据作为一个有机的整 体,就需要一种新的构造类型--结构类 型,相当于其他高级语言中的“记录”。
number name age sex
A B
2
8.1.1 结构类型的定义
z 结构类型需要自定义-----定义各个成员的名称、类型 一般格式:
struct [结构类型名] { 类型 成员1; 类型பைடு நூலகம்成员2; …… 类型 成员n; }; 例8.1:struct Student { int number; char name[9]; int age; char sex; };
¾不允许对结构变量进行整体输入输出,而只能对 结构变量中各个成员分别进行输入输出。
如:scanf("…", &student1); 错误! printf("…", student1); 错误! 8
自定义数据类型
一个结构体指针的例子:
struct student { long num; char *name; char sex; float score; }; struct student stu_1; struct student *p; p=&stu_1; stu_1.num=89101; stu_="Li Lin"; stu_1.sex='M'; stu_1.score=80.5; printf("%s\n",stu_); printf("%s\n",(*p).name);
WEEKDAY
weekday; int iSize=sizeof(weekday);
枚举类型
枚举类型常量列表的第一个常量缺省为0
int i=sun;
如果没有显示指定,则每个常量依次在前一个常量 第值基础上加1
enum WEEKDAY { sun=4,mon=1,tue,wed,thu,fri,sat }; if(sun==thu) printf("sun==thu\n"); else printf("sun!=thu\n");
结构类型的声明和结构类型变量的定义
如果几个结构体的成员类型有相互引用的情况,必须先声明。如
struct STUDENT; struct CLASS { int iId; char szName[32]; int iCount; struct STUDENT *pStud; }; struct STUDENT { int iId; char szName[32]; int age; struct CLASS oClass; };
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验8 自定义数据类型三、实验思考1.有10名学生的数据,每个学生的数据包括学号、姓名、性别、三门课的考试成绩及平均成绩。
要求:(1)编写一个input函数,用来输入10个学生的信息。
(2)编写一个output函数,用来输出10个学生的信息。
(3)计算每个学生的平均成绩,并按平均成绩由小到大进行排序后输出。
2.设有5个学生和教师的数据。
学生的数据包括:姓名、年龄、性别、职业和年级。
教师的数据包括:姓名、年龄、性别、职业和职务。
现要求输入学生和教师的数据,并输出这些数据,要求当职业项为学生时,输出的最后一项为年级;当职业项为教师时,输出的最后一项为职务。
3.利用结构体数组和结构体指针,根据从键盘输入的学生姓名,查找已给出数据的结构体数组,若找到该名学生,则输出其所有信息;若找不到该名学生,则输出相应提示信息。
4.编程实现,从红、黄、蓝、绿四种颜色中任取三种不同的颜色,共有多少种取法,并请输出所有的排列?5.从键盘输入一批正整数(以-1作为输入结束标志),按插表尾形式把它们组成一个线性链表。
然后,从表头开始,遍历所有结点并输出各结点中的数据。
要求线性链表的生成与遍历均写成函数定义。
6.从键盘输入一系列非负整数,遇0时停止。
对于输入的所有偶数和奇数,分别建立一个偶数链表和一个奇数链表,然后输出两个链表中的数据。
答案1.#include<iostream>#include<iomanip>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<n;i++){ sum=0;cout<<"input the "<<i+1<<"th student's scores:"<<endl;cout<<"No.:";cin>>stu[i].num;cout<<"name:";cin>>stu[i].name;cout<<"sex:";cin>>stu[i].sex;for(j=0;j<3;j++){ cout<<"score"<<j+1<<":";cin>>stu[i].score[j+1];sum=sum+stu[i].score[j+1];}cout<<endl;stu[i].score[0]=sum/3;}}void output(student stu[]) //输出函数output{ int i,j;cout<<"NO. name sex average score1 score2 score3"<<endl;for(i=0;i<n;i++){ cout<<stu[i].num<<setw(7)<<stu[i].name<<setw(7)<<stu[i].sex<<setw(7);for(j=0;j<4;j++)cout<<setw(7)<<stu[i].score[j]<<" ";cout<<endl;}}void sort() //排序函数sort{ int i,j,max;student temp;for(i=0;i<n-1;i++){ max=i;for(j=i+1;j<n;j++)if (stu[max].score[0]<stu[j].score[0]) max=j;temp=stu[i];stu[i]=stu[max];stu[max]=temp;}}void main(){ input();output(stu);sort();cout<<"sort result:"<<endl;output(stu);}2.如果job项为st(学生),则第5项为grade(年级),如果job项为te(教师),则第5项为prof(教授)。
#include<iostream>#include<iomanip>using namespace std;const int n=2; //定义常量n,本例输入2人信息struct person{ char num[4]; // 号码char name[8]; // 姓名char sex[3]; // 性别char job; // 职业union p //共用体类型{ int grade; //年级char duty[8]; //职务}category; //共用体变量category}stte[n]; //结构体数组,n个元素void main(){ int i;cout<<"enter person's information:no,name,sex,job,grade/duty"<<endl;for(i=0;i<n;i++){ cin>>stte[i].num>>stte[i].name>>stte[i].sex>>stte[i].job;if(stte[i].job=='s') cin>>stte[i].category.grade; //若为学生,则输入所在年级elseif (stte[i].job=='t') cin>>stte[i].category.duty; //若为教师,则输入其职位}cout<<endl<<"NO. name sex job grade/duty"<<endl;for(i=0;i<n;i++){ if(stte[i].job=='s')cout<<stte[i].num<<setw(8)<<stte[i].name<<setw(6)<<stte[i].sex<<setw(6)<<stte[i].job<<setw(10)<<stte[i].category.grade<<endl;elsecout<<stte[i].num<<setw(8)<<stte[i].name<<setw(6)<<stte[i].sex<<setw(6)<<stte[i].job<<setw(10)<<stte[i].category.duty<<endl;}}3.学生信息包括学号、姓名、性别。
#include<iostream>#include<iomanip>#include<string>using namespace std;const int n=2; //设置人数常量n,本例为2人struct student{ char num[6]; // 学号char name[8]; // 姓名char sex[3]; // 性别}stu[n];void input() //输入函数input{ int i,sum;for(i=0;i<n;i++){ sum=0;cout<<"input the "<<i+1<<"th student's information:"<<endl;cout<<"No.:";cin>>stu[i].num;cout<<"name:";cin>>stu[i].name;cout<<"sex:";cin>>stu[i].sex;cout<<endl;}}void main(){ int i;char stname[8];input();cout<<"enter the searched name:";cin>>stname;for(i=0;i<n;i++)if (strcmp(stname,stu[i].name)==0 ){ cout<<"the searched information is:"<<endl;cout<<stu[i].num<<setw(7)<<stu[i].name<<setw(7)<<stu[i].sex<<setw(7);cout<<endl;break;}if (i==n) cout<<"sorry,no information found!"<<endl;}4.#include<iostream>#include<iomanip>using namespace std;void main(){ enum color{red,yellow,blue,green}; //声明枚举类型colorcolor test; //定义枚举类型变量testint i,j,k,n=0,loop;for(i=red;i<=green;i++)for(j=red;j<=green;j++)if(i!=j) //前两球颜色不同{for(k=red;k<=green;k++)if((k!=i)&&(k!=j)) //前三球颜色不同{ n=n+1;cout<<setw(3)<<n;for(loop=1;loop<=3;loop++) //对三个球进行处理{ switch(loop){case 1: test=color(i);break; //color(i)强制类型转换,将整型i所对应的枚举元素赋给testcase 2: test=color(j);break;case 3: test=color(k);break;default:break;}switch(test) //判断test的值,输出相应的颜色{case red: cout<<setw(8)<<"red";break;case yellow: cout<<setw(8)<<"yellow";break;case blue: cout<<setw(8)<<"blue";break;case green: cout<<setw(8)<<"green";break;default: break;}}cout<<endl;}}cout<<"total:"<<n<<endl;}5.#include<iostream>#include<iomanip>using namespace std;struct node{ int data;struct node *next;};void creat(node * &head)//建立以head为头指针的链表,head为引用参数,//以使对应的实参为该链表的表头指针{int i;node *last,*p;cout<<"enter positive integer,-1 to end:";cin>>i;if(i==-1) {head=NULL; return;} //置表头指针为空后返回last=head=NULL; //置表头、表尾指针为空,此时为空链表p=new node;p->data=i;p->next=last;head=p;last=p;cin>>i;while (i!=-1){p=new node; //产生一个p所指的动态结点p->data=i;last->next=p;p->next=NULL;last=p; //last 指针指向表尾结点}}void traverse (node *head){ node *p;p=head;cout<<"the result is:"<<endl;;while(p){cout<<p->data<<" ";p=p->next; //使p指针移动到下一个结点}cout<<endl;}void main(){node *head1=NULL;creat(head1);traverse(head1);}6.#include<iostream>#include<iomanip>using namespace std;struct node{ int data;struct node *next;};void creat(node * &head)//建立以head为头指针的链表,head为引用参数,//以使对应的实参为该链表的表头指针{int i;node *last,*p;cout<<"enter non negative integer,0 to end:"<<endl;cin>>i;if(i==0) {cout<<"The linked list is empty!"<<endl; return;} //链表为空,返回last=head;p=new node;p->data=i;p->next=last;head=p;cin>>i;while (i!=0){p=new node; //产生一个p所指的动态结点p->data=i;last->next=p;p->next=NULL;last=p; //last 指针指向表尾结点cin>>i;}return;}void cre_oddeven(node * &headodd,node * &headeven) //拆分偶数、奇数链表{node *p1,*p2,*even;if(headodd==NULL){cout<<"The linked list is empty!"<<endl;return ;}p1=headodd;even=new node;even->next=NULL;headeven=even;while( p1->next!=NULL) //删除链表中的偶数{ p2=p1;p1=p1->next;if ((p2->data%2==0)&& (p2==headodd) ) //将在第一节点中的偶数,插入偶数链中{ headodd=p1;even->next=p2;even=p2;}else if ((p1->data%2==0))//将不在第一节点中的偶数,插入偶数链中{ p2->next=p1->next;even->next=p1;even=p1;p1=p2;even->next=NULL;}}if (headodd->data%2==0) headodd=0;headeven=headeven->next;}void traverse (node *head){ node *p;p=head;if(p==NULL) cout<<"The linked list is empty!"<<endl;while(p){cout<<p->data<<" ";p=p->next; //使p指针移动到下一个结点}cout<<endl;}void main(){node *head=NULL,*headodd,*headeven=NULL; //headodd,headeven分别为奇、偶链表的头指针creat(head);headodd=head;cout<<"the result is:"<<endl;traverse(headodd);cre_oddeven(headodd,headeven);cout<<"the odd table is:"<<endl;traverse(headodd);cout<<"the even table is:"<<endl;traverse(headeven);}。