实验8--自定义数据类型1
- 格式:doc
- 大小:52.00 KB
- 文档页数:11
c语言实验报告实验C 语言实验报告实验一、实验目的本次 C 语言实验的主要目的是通过实际操作和编程实践,加深对 C 语言基本语法、数据类型、控制结构、数组、指针等重要概念的理解和掌握,提高编程能力和解决实际问题的能力。
二、实验环境本次实验使用的编程环境为 Visual Studio 2019,操作系统为Windows 10。
三、实验内容1、基本数据类型和运算符的使用定义不同类型的变量,如整数型(int)、浮点型(float、double)、字符型(char)等,并进行赋值和运算操作。
熟悉各种运算符的优先级和结合性,包括算术运算符(+、、、/、%)、关系运算符(>、<、>=、<=、==、!=)、逻辑运算符(&&、||、!)、位运算符(&、|、^、~、<<、>>)等。
2、控制结构的应用使用ifelse 语句实现条件判断,根据不同的条件执行相应的代码块。
运用 switch 语句进行多分支选择,处理不同的情况。
利用 for 循环、while 循环和 dowhile 循环实现重复执行的操作,例如计算数列的和、打印特定的图案等。
3、数组和字符串的操作定义和使用一维数组、二维数组,进行数组元素的访问、赋值和遍历。
掌握字符串的存储和处理方式,使用字符数组和字符串函数(如strlen、strcpy、strcmp 等)进行字符串的操作。
4、指针的应用理解指针的概念和指针变量的定义,通过指针访问变量和数组元素。
实现指针与数组、指针与函数的结合使用,体会指针在程序中的灵活运用。
5、函数的定义和调用编写自定义函数,实现特定的功能,如计算阶乘、判断素数等。
掌握函数的参数传递方式(值传递和地址传递),理解函数的返回值。
6、结构体和共用体的使用定义结构体类型,创建结构体变量,访问结构体成员。
了解共用体的概念和使用场景,比较结构体和共用体的区别。
四、实验步骤1、实验准备打开 Visual Studio 2019 开发环境,创建一个新的 C 语言项目。
实验5 T-SQL编程1. 自定义数据类型新建一个数据类型ID_Type,用于描述员工编号。
新建一个表Employees3,表结构与Employees 表类似,EmployeeID列的数据类型使用自定义的数据类型。
方法1:使用系统内置的存储过程sp_addtype。
USE YGGLEXEC sp_addtype'ID_Type','char(6)','not null'GO方法2:使用CREATE TYPE语句USE YGGLGOCREATE TYPE ID_Type FROM char(6)NOT NULL;--查看可编程性-类型-用户定义数据类型中的变化IF EXISTS(SELECT name FROM sysobjects WHERE name='Employees3')DROP TABLE Employees3CREATE TABLE Employees3(EmployeeID ID_Type PRIMARY KEY,Name char(10)NOT NULL,Education char(4)NOT NULL,Birthday date NOT NULL,Sex bit NOT NULL DEFAULT 1,WorkYear tinyint NULL,Address varchar(40)NULL,PhoneNumber char(12)NULL,DepartmentID char(3)NOT NULL)GO2. 变量的使用(1)创建一个名为Female的用户变量,并在Employees表中查询所有女员工的编号、姓名、性别DECLARE@Female bit--定义变量,指定变量数据类型SET@Female=0 --为该变量赋初值SELECT EmployeeID,Name,Sex FROM Employees WHERE Sex=@Female;(2)定义一个变量,将员工编号为102201的员工的电话号码赋值给该变量DECLARE@Phone char(12)SET@Phone=(SELECT PhoneNumber FROM Employees WHERE EmployeeID='102201')SELECT a.*,@Phone FROM Employees a WHERE EmployeeID='102201';(3)定义一个变量,用于描述Salary表中000001号员工的实际收入,然后查询该变量DECLARE@RealIncome floatSET@RealIncome=(SELECT InCome-OutCome FROM Salary WHEREEmployeeID='000001')SELECT@RealIncome;3. 运算符的使用(1)查询员工的实际收入SELECT InCome-OutCome AS实际收入FROM Salary;(2)查询工作时间大于5年的员工信息SELECT*FROM Employees WHERE WorkYear>5;4.流程控制语句(1)判断Employees表中是否存在编号为111006的员工,如果存在,则显示该员工信息,如果不存在,则显示查无此人IF EXISTS(SELECT Name FROM Employees WHERE EmployeeID='111006') SELECT*FROM Employees WHERE EmployeeID='111006'ELSESELECT'查无此人'(2)判断姓名为“王林”的员工的实际收入是否高于3000元,如果是,则显示其收入,如果不是,则显示“收入不高于3000元”--先查找实际收入,再进行IF判断IF(SELECT b.InCome-b.OutCome AS实际收入FROM Employees a,Salary b WHERE a.EmployeeID=b.EmployeeID AND ='王林')>3000SELECT b.InCome-b.OutCome AS实际收入FROM Employees a,Salary b WHERE a.EmployeeID=b.EmployeeID AND ='王林'ELSESELECT'收入不高于元'(3)假设变量X的初始值为0,每次加1,直到X变为5,并打印输出DECLARE@X INTSET@X=0WHILE@X<5BEGINSET@X=@X+1PRINT'X='+CONVERT(char(1),@X)ENDGO(4)使用循环输出一个用’*’组成的三角形DECLARE@i INTDECLARE@n INTSET@n=10SET@i=1WHILE (@i<@n)BEGIN--SPACE函数:返回指定个数重复的空格组成的字符串--REPLICATE函数:以指定的次数重复字符表达式PRINT (SPACE((@n-@i)/2)+REPLICATE('*',@i))SET@i=@i+2ENDGO(5)使用CASE语句对Employees表按部门进行分类SELECT EmployeeID,DepartmentID=CASE DepartmentIDWHEN 1 THEN (SELECT DepartmentName FROM Departments b WHEREb.DepartmentID='1')WHEN 2 THEN (SELECT DepartmentName FROM Departments b WHEREb.DepartmentID='2')WHEN 3 THEN (SELECT DepartmentName FROM Departments b WHEREb.DepartmentID='3')WHEN 4 THEN (SELECT DepartmentName FROM Departments b WHEREb.DepartmentID='4')WHEN 5 THEN (SELECT DepartmentName FROM Departments b WHEREb.DepartmentID='5')ENDFROM Employees ORDER BY DepartmentID;5. 自定义函数的使用定义一个函数CHECK_ID:对于一个给定的DepartmentID值,查询该值在Departments表中是否存在,如果存在,则返回1,不存在,则返回0。
C语言程序设计及实验指导练习及习题参考答案(8--10) 8练习参考答案1、练习8-1.如果有定义:intm,n=5,某p=&m;与m=n等价的语句是BA.m=某p;B.某p=某&n;C.m=&n;D.m=某某p;8-2.设计一个程序计算输入的两个数的和与差,要求自定义一个函数um_diff(floatop1,floatop2,float某pum,float某pdiff),其中op1和op2是输入的两个数,某pum和某pdiff是计算得出的和与差。
解答:#includeintmain(void){floatop1,op2,um,diff;voidum_diff(floatop1,floatop2,float某pum,float某pdiff);printf(“inputop1andop2:“);canf(“%f%f”,&op1,&op2);um_d iff(op1,op2,&um,&diff);printf(“%f+%f=%f;%f-%f=%f\\n”,op1,op2,um,op1,op2,diff);return0;}voidum_diff(floatop1,floatop2,float某pum,float某pdiff){某pum=op1+op2;某pdiff=op1–op2;}8-3.两个相同类型的指针变量能不能相加?为什么?解答:不能。
因为指针变量是一种特殊的变量,指针变量的值存放的是所指向变量的地址,两个地址相加并不能保证结果为一个有效的地址值,因而在C语言中指针变量相加是非法的。
8-4.根据表8.2所示,这组数据的冒泡排序其实循环到第6遍(即n-2)时就已经排好序了,说明有时候并不一定需要n-1次循环。
请思考如何改进冒泡排序算法并编程实现(提示:当发现一遍循环后没有数据发生交换,说明已经排好序了)。
解答:设置一个标志变量flag,进入一轮循环前设置为0,在循环中有发生数据交换就改写flag值为1。
《VB程序设计》模拟试题●填空题1.窗体模块的文件扩展名为 ___FRM_________ 、标准模块的文件扩展名为____BAS______ 、类模块文件的扩展名为______CLS_______ 。
Basic中数据类型可分为 _____标准数据类型________和用户自定义数据类型两大类,前者根据其取值的不同,可分为_____整型_________、 ______长整型_____、布尔型和 ____字符型_________。
3. Abs= ;Int= ____-10_______。
4. "程序"& "设计"运算结果为 ___程序设计____ 。
5. Dim a, b as Boolean语句显式声明变量a是___变体___变量,b是___布尔__变量。
6. MsgBox函数的返回值中, VBRetry表示单击了____重试_____按钮,VBYes 表示单击了___是_____按钮,VBNo表示单击了_____否____按钮。
7. 要加载窗体,可以在代码中使用___________语句,要显示窗体,可以在代码中使用___________方法,要隐藏窗体,可以在代码中使用Hide方法,要卸载窗体,可以在代码中使用___________方法。
8.对话框分为_________对话框和________对话框两种类型,其中_____________ 对话框最常用。
9. 对象是Visual Basic应用程序的基本单元,它是由 ___类___创建的。
在Visual Basic中可以用属性、 __方法___、___事件___ 来说明和衡量一个对象的特性。
10. 条件判断语句可以使用___If…then____________语句、____If…Then…Else______语句和 ______If…Then…ElseIf______语句。
Select case 语句11. 声明一个值为的常量Pi的语句为___Const pi = 。
中山大学南方学院电子通信与软件工程系课程名称:高级语言程序设计实践实验题目:数据类型附:实验报告专业:年级:完成日期:学号:姓名:成绩:一、实验目的掌握C语言的数据类型,熟悉如何定义一个整型、字符型和实型变量,以及对其赋值的方法进一步熟悉C语言程序的编辑、编译、和运行的过程二、实验原理1,运用格式化输出变量的值2,以原进制、十进制格式输出整型变量3,以字符型格式、十进制ASCII格式输出字符型变量三、实验过程1整型、字符型、实型变量的定义及格式化输入输出实验代码如下#include<stdio.h>#include<stdlib.h>int main( ){int var1;double var2;char var 3;scanf("%d,%lf, %c", &var1, &var 2, &var3) ;printf("var 1=%d\n", var1);printf("var 2=%lf\n", var2);printf("var 3=%c\n", var3);return 0;}运算结果如图2整型,字符型的定义和格式化的输入与输出实验代码如下:#include<stdio.h>#include<stdlib.h>int main(){int x=010,y=10,z=0x10;char c1='M' ,c2='\x4d', c3='\115', c4=77,c;printf("x=0%o,y=%d,z=0x%d\n",x,y,z);printf("x=%o,y=%d,z=%d\n",x,y,z);printf("x=%d,y=%d,z=%d\n",x,y,z);printf("c1=%c,c2=%c,c3=%c,c4=%c\n",c1,c2,c3,c4); printf("c1=%d,c2=%d,c3=%d\n"c1, c2, c3);c=c1+32;printf("c=%c,c=%d\n", c, c);return 0;}运算结果如图四、思考并回答以下问题1、查阅资料或实践后,回答:字符常量在实际项目应用中的优点。
自动化生产线的安装与调试内江职业技术学院智慧树知到答案2024年第一章测试1.供料单元是生产线的单元。
()A:两端 B:中间 C:起始 D:最末答案:C2.在自动生产线中,电磁阀是直接用于控制动作。
()A:传送带 B:机械手 C:气缸 D:按钮答案:C3.3YL-335B自动生产线空气压力要求为 MPa。
()A:0.8 B:0.5 C:0.6 D:0.7答案:C4.YL335B生产线人机接口设备采用。
()A:普通电脑 B:遥控器 C:手机 D:HMI答案:D5.自动化生产线集合了等技术。
()A:机械 B:传感 C:控制 D:人机接口答案:ABCD6.YL-335B型自动化生产线主要涉及哪些关键技术?()A:自动检测技术 B:PLC控制技术 C:液压控制技术 D:电机驱动技术答案:ABD7.我国制造业当前面临这哪些考验()A:基础能力薄弱 B:人口红利消失 C:自主创新能力不强 D:资源利用率偏低答案:ABCD8.我国制造业面临的外部挑战有哪些?()A:自主创新能力不强 B:新兴发展中国家追赶竞争 C:资源利用率偏低 D:发达国家再工业化答案:BD9.《中国制造2025》的印发日期是?()A:2015年5月 B:2012年3月 C:2014年5月 D:2015年3月答案:A10.我国的制造业已经处于世界先进水平。
()A:对 B:错答案:B11.我们应该主动切合国家发展需要,做好职业生涯规划。
()A:错 B:对答案:B12.自动化生产线正往智能化化和网络化的方向发展。
()A:错 B:对答案:B13.《自动化生产线的安装与调试》是机电一体化技术、工业机器人技术专业的专业核心课程。
()A:错 B:对答案:B14.情境二供料单元的安装与调试学习包括以下哪些内容?()A:单元认知 B:工艺要求 C:硬件系统的安装与调试 D:控制系统编程与调试答案:ACD15.单元认知包括哪些内容?()A:单元组成 B:功能 C:工艺要求 D:工作过程答案:ABCD16.本课程采用的PLC为?()A:S7-200 B:FX-2N C:S7-1200 D:FX-3U答案:C17.本课程的教学方法是()A:实验法 B:任务驱动法 C:项目教学法 D:讲授法答案:C18.本课程的考核包括。
[1][单选题][3分][难度2]1、供料单元是生产线的单元。
(C)A. 两端B. 中间C. 起始D. 最末[1][单选题][3分][难度2]2、在自动生产线中,电磁阀是直接用于控制动作。
(D)A. 机械手B. 传送带C. 按钮D. 气缸[1][单选题][3分][难度3]3、3YL-335B自动生产线空气压力要求为MPa。
(B)A. 0.5B. 0.6C. 0.7D .0.8[1][单选题][3分][难度3]4、YL335B生产线人机接口设备采用。
(C)A. 手机B. 普通电脑C. HMID. 遥控器[1][多选题][3分][难度3]5、自动化生产线集合了等技术。
(ABCD)A. 传感B. 控制C. 人机接口D. 机械[1][多选题][3分][难度3]6、YL-335B型自动化生产线主要涉及哪些关键技术?(BCD)A. 液压控制技术B. 电机驱动技术C. 自动检测技术D. PLC控制技术[1][多选题][3分][难度3]7、我国制造业当前面临这哪些考验(ABCD)A. 人口红利消失B. 自主创新能力不强C. 基础能力薄弱D. 资源利用率偏低[1][多选题][3分][难度3]8、我国制造业面临的外部挑战有哪些?(AC)A. 发达国家再工业化B. 自主创新能力不强C. 新兴发展中国家追赶竞争D. 资源利用率偏低[1][单选题][3分][难度3]9、《中国制造2025》的印发日期是?(C)A. 2012年3月B. 2014年5月C. 2015年5月D. 2015年3月[1][判断题][2分][难度3]10、我国的制造业已经处于世界先进水平。
(错)[1][判断题][2分][难度3]11、我们应该主动切合国家发展需要,做好职业生涯规划。
(对)[1][判断题][2分][难度3]12、自动化生产线正往智能化化和网络化的方向发展。
(对)[1][判断题][2分][难度3]13、自动化生产线正往智能化化和网络化的方向发展。
c语言数据类型定义在C语言中,数据类型定义了变量或函数可以存储的数据的类型。
C语言有几种基本的数据类型,包括:1. 整型(Integer Types):•int: 通常为2字节,但大小可能因平台而异。
◦short: 通常为2字节。
◦long: 通常为4字节,但大小可能因平台而异。
◦long long: 通常为8字节,但大小可能因平台而异。
2. 字符型(Character Types):•char: 存储单个字符。
实际上,它是一个小的整型。
3. 浮点型(Floating Point Types):•float: 单精度浮点数。
◦double: 双精度浮点数。
◦long double: 扩展的双精度浮点数,但大小可能因平台而异。
4. 其他数据类型:•void: 表示无类型,主要用于指针和函数返回类型。
◦bool: 表示布尔值,可以是true或false。
但C99标准之前,C语言并没有内置的布尔类型。
5. 派生数据类型:•signed 和unsigned: 可以用在上述整型上,分别表示带符号和无符号整数。
例如,unsigned int表示无符号整数。
◦long 和short: 可以用在上述整型上,例如long int表示长整型。
6. 复数类型:•float complex 和double complex。
7. 枚举类型: 用户自定义的数据类型,其值只能是预定义的常量。
8. 指针类型: 如int *, char *, 等等,表示指向特定类型的指针。
9. 数组类型: 可以是任何基本数据类型或用户定义的数据类型的数组。
10. 结构体类型: 由多个不同数据类型的成员组成的数据类型。
11. 联合体类型: 在同一内存位置存储不同数据类型的变量。
12. 位字段: 在结构体中存储位字段的类型。
13. 函数类型: 表示函数返回值的类型。
14. 空类型: 用void表示,不存储任何值。
15. 自定义类型: 通过typedef关键字创建自定义类型名称。
实验8-1 指针基本概念【知识点回顾】1.指针和指针变量1)内存地址:内存存储单元的编号,从0开始,以字节为单位2)指针:一个内存地址有且仅有一个内存存储单元对应,即一个地址“指向”一个单元,故将地址称为指针3)指针变量:C语言中允许将地址作为数据值,用一个变量来存放。
存放指针的变量称为指针变量。
2.指针变量使用三步骤1)声明:一般形式如:类型说明符*指针变量名;2)初始化:一般形式如:指针变量=&变量;3)访问数据:一般形式如:*指针变量3.指针运算符1)间接访问运算符“*”2)取地址运算符“&”4.printf和scanf是否使用指针对比:假定有int x,y;int *px=&x,*py=&y;1)不使用指针的输入输出语句:scanf(“%d %d”,&x,&y);printf(“%d %d”,x,y);2)使用指针的输入输出语句:scanf(“%d %d”,px,py);printf(“%d %d”,*px,*py);5.打印地址信息:1)使用%p占位符2)使用%x占位符【典型例题】1.例题1,指针的基本使用方法#include <stdio.h>int main(){int data=100;//第一种指针变量定义方式:声明与初始化分两步完成int * pd; //声明指针变量pd=&data; //初始化指针变量,注意细节,data变量必须之前声明过//下面是第二种指针变量定义方式:声明与初始化一步完成//int * pd = &data; //声明指针变量,同时初始化指针变量printf("Direct access: data = %d\n", data); //变量的直接访问printf("Indirect access: data = %d\n",*pd); //变量的间接访问printf("The address of data is %p\n", &data);//变量的地址输出printf("The address of data is %p\n",pd); //指针变量的输出return 0;}程序运行效果如下:2.例题2,两数求和。
高等学校非计算机专业计算机基础课程教学基本要求(一)教育部高等学校计算机科学与技术教学指导委员会非计算机专业计算机基础课程教学指导分委员会一、大学计算机基础(一般要求)(一)课程简介“大学计算机基础”是大学计算机基础教学中的基础性课程。
通过比较全面、概括性地讲述计算机科学与技术学科中的一些基础性知识和重要概念,并配合必要的实践教学,使学生能够达到以下教学目标:●了解计算机的硬件结构与组成原理;●了解操作系统的功能与其中一些重要概念;●了解计算机网络、数据库、多媒体等技术基本概念、相关技术和应用领域;●掌握计算机基本应用技能。
开设“大学计算机基础”的目的是拓展学生的视野,为后续课程学习做好必要的知识准备,使他们在各自的专业中能够有意识地借鉴、引入计算机科学中的一些理念、技术和方法,期望他们能在一个较高的层次上利用计算机、认识并处理计算机应用中可能出现的问题。
“计算机基础课程教学基本要求”在国内第一次提出了“大学计算机基础”这门新课,并将其作为大学第一门计算机课程。
由于学生基础和教学目标的差异,显然这门课程要有一段时间的探索和试行,它的成型需要几轮教学实践,因此目前的教学内容与要求等属于建议性质,适当时候进行修订后正式执行。
(二)教学内容与要求下面提出的教学基本要求是理工科学生通过本课程的学习应该达到的要求。
各校可根据不同专业需求,适当增减相关内容。
本课程的基本要求拟按以下几个部分组织:●计算机发展与社会;●计算机系统;●计算机应用技术基础,含文字与表格处理、数据库、多媒体、网络、信息安全等方面的内容;●基本应用技能。
1.计算机发展与社会(1)了解计算机技术发展过程及发展趋势;(2)了解计算机的应用范围及不同应用领域的特点;(3)理解使用计算机时应该遵守的道德规范及应该具备的防护意识。
2.计算机系统(1)理解信息在计算机内的表示与存储方式;(2)理解计算机系统的基本组成:(3)理解软件的分类及常用软件的功能;(4)理解计算机基本工作方式(存储程序原理);(5)理解计算机各基本部件的功能与主要技术指标:(6)了解操作系统的发展及分类;(7)了解操作系统的主要管理功能(进程管理、存储管理、设备管理);(8)理解文件、目录与路径的概念、理解文件系统的工作方式:(9)了解计算机存储体系及地址变换的概念;(10)了解设备管理的基本概念及常见设备的工作方式。
实验八数据库综合设计
一、实验目的
(1) 培养学生数据库分析和设计能力,巩固课堂所学;
(2) 培养提高学生自学能力和团队协作能力;
(3) 培养学生的创新意识和协作精神;
(4) 培养学生文字论述规范、清晰、严谨的能力。
二、《数据库原理与应用》课程中的知识点应用
1. 根据需求分析设计概念模型、逻辑模型;
2. 合理设计数据库中所需要的表,包括列的数据类型、检查约束、缺省、主键约束、外键约束等属性;
3. 视图、存储过程或触发器;
4. 嵌入式SQL语言在高级语言当中的使用。
三、设计要求
1.3-4人自由组合为一组,进行数据库应用系统设计。
选择与实际应用结合紧密的较综合性的题目,学生可从老师提供的题目中选择,也可以自己选择题目,但题目必须经过教师的审核。
2.每小组要集体讨论,对课题进行分析,组长负责、责任分工、共同完成,具体分工答辩前需提交给老师。
3.每位同学按各自分工不同撰写自己所完成工作的实验内容,答辩时按分工进行答辩、每位同学需回答教师针对本人分工所提出的问题。
四、实验内容及要求
1. 根据所选题目进行系统的需求分析,给出概念结构设计模型,采用ER图表示;
2. 给出逻辑结构模型,说明设计了哪些数据库对象,设计这些数据库对象的目的,除基本表以外要求至少设计一个视图、一个存储过程和一个触发器(需按照实际项目的应用需求进行设计,答辩时需说明其作用),设计过程中考虑各类完整性约束,将以上内容在数据库中予以实现;
3. 建立数据库后,选用某种高级语言(不限种类,可以任意选择),至少设计两个功能模块(每个模块含增、删、改、查四个功能),给出每个功能模块的页面设计过程及运行效果。
1。
Qt信号之⾃定义数据类型【1】为什么需要⾃定义数据类型?内置类型毕竟很有局限性,否则为什么还需要类呢。
总之,有时候,我们多么希望信号能发送⾃定义数据类型。
幸哉~ Qt是⽀持⾃定义信号,且⾃定义信号可以发送⾃定义数据类型的对象。
【2】使⽤⽅法(声明和注册⾃定义数据类型)1)引⼊头⽂件:#include<QMetaType>2)添加声明:利⽤宏Q_DECLARE_METATYPE3)注册:利⽤⽅法 qRegisterMetaType【3】实例Demo1.⽂件⽬录(为了更好的模拟现实项⽬的需求,⽰例程序逻辑⽐较复杂)2.pro⽂件1 #-------------------------------------------------2 #3 # Project created by QtCreator 2017-06-27T21:34:464 #5 #-------------------------------------------------67 QT += core gui89 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets1011 TARGET = CustomDataType12 TEMPLATE = app1314 DEFINES += QT_DEPRECATED_WARNINGS1516 SOURCES += main.cpp\17 MyDialog.cpp \18 MainWindow.cpp1920 HEADERS += \21 MyDialog.h \22 MainWindow.h2324 FORMS += \25 MyDialog.ui \26 MainWindow.ui3.MyDialog.h(⾃定义数据类型CustomDataType,使⽤宏Q_DECLARE_METATYPE声明数据类型)1 #ifndef MYDIALOG_H2#define MYDIALOG_H34 #include <QDialog>5 #include <QMetaType>67namespace Ui8 {9class MyDialog;10 }1112class CustomDataType13 {14public:15 CustomDataType(int n = 100) : m_nValue(n) {}16 ~CustomDataType() {}17int getValue() const { return m_nValue; }18void setValue(int nValue) { m_nValue = nValue; }1920private:21int m_nValue;22 };2324class MyDialog : public QDialog25 {26 Q_OBJECT2728public:29explicit MyDialog(QWidget *parent = 0);30 ~MyDialog();3132public slots:33void onTextChanged(const QString &str);3435 signals:36void postData(const CustomDataType &data);3738protected:39void closeEvent(QCloseEvent *event);4041private:42 Ui::MyDialog *m_pUI;43 CustomDataType m_data;44 };4546 Q_DECLARE_METATYPE(CustomDataType)4748#endif// MYDIALOG_H4.MyDialog.cpp(构造函数中利⽤qRegisterMetaType注册⾃定义数据类型)1 #include "MyDialog.h"2 #include "ui_MyDialog.h"34 MyDialog::MyDialog(QWidget *parent) :5 QDialog(parent),6 m_pUI(new Ui::MyDialog)7 {8 m_pUI->setupUi(this);9 qRegisterMetaType<CustomDataType>("CustomDataType");1011 connect(m_pUI->lineEdit, &QLineEdit::textChanged, this, &MyDialog::onTextChanged);12 }1314 MyDialog::~MyDialog()15 {16if (m_pUI)17 {18delete m_pUI;19 m_pUI = Q_NULLPTR;20 }21 }2223void MyDialog::closeEvent(QCloseEvent *event)24 {25 emit postData(m_data);26 QDialog::closeEvent(event);27 }2829void MyDialog::onTextChanged(const QString & str)30 {31bool bOK = false;32int nNumber = str.toInt(&bOK);33 bOK ? m_data.setValue(nNumber) : m_data.setValue(-1);34 }5.MainWindow.h(业务类中直接定义槽函数,利⽤⾃定义数据类型作为参数类型即可) 1 #ifndef MAINWINDOW_H2#define MAINWINDOW_H34 #include <QDebug>5 #include <QMainWindow>6 #include "MyDialog.h"78namespace Ui9 {10class MainWindow;11 }1213class MainWindow : public QMainWindow14 {15 Q_OBJECT1617public:18explicit MainWindow(QWidget *parent = 0);19 ~MainWindow();2021public slots:22void onPostData(const CustomDataType &data);23void onPushButtonPress();2425private:26 MyDialog m_dialog;27 Ui::MainWindow *m_pUI;28 };2930#endif// MAINWINDOW_H6.MainWindow.cpp(connect正常连接信号与槽,并定义槽函数)1 #include "MainWindow.h"2 #include "ui_mainwindow.h"34 MainWindow::MainWindow(QWidget *parent)5 : QMainWindow(parent)6 , m_pUI(new Ui::MainWindow)7 {8 m_pUI->setupUi(this);9 connect(&m_dialog, &MyDialog::postData, this, &MainWindow::onPostData);10 connect(m_pUI->pushButton, &QPushButton::pressed, this, &MainWindow::onPushButtonPress);11 }1213 MainWindow::~MainWindow()14 {15if (m_pUI)16 {17delete m_pUI;18 m_pUI = Q_NULLPTR;19 }20 }2122void MainWindow::onPostData(const CustomDataType &data)23 {24 m_pUI->pushButton->setText(QString::number(data.getValue()));25 }2627void MainWindow::onPushButtonPress()28 {29 m_dialog.show();30 }7.main.cpp1 #include "MainWindow.h"2 #include <QApplication>34int main(int argc, char *argv[])5 {6 QApplication a(argc, argv);7 MainWindow w;8 w.show();910return a.exec();11 }8.ui⽂件请⾃理。
启动VFP,在命令窗口中输入并执行命令:set defa to d:\vfp\实验8\作业。
单击菜单项“文件\打开”,选择项目文件文件jxgl,单击“确定”打开该项目。
(1)①选择数据库jxsj中的“表”,单击“新建”按钮,新建ab表。
②打开ab表的表设计器,选择qk字段,设置默认值:.F.③打开ab表的表设计器,选择qk字段,设置显示类:checkbox④单击“索引”选项卡,输入索引名:abcd,索引类型:普通索引,索引表达式:bscj+sjcj(2)①打开js表的表设计器,选择gzrq字段,设置标题:工作日期②选择gzrq字段,设置字段有效性规则:year(gzrq)<=2011 and year(gzrq)>=1950,设置字段有效性信息:”工作日期的年份必须小于等于2011年且大于等于1950”③单击“表”选项卡,设置记录有效性规则:year(gzrq)-year(csrq)>=18④单击“字段”选项卡,选择zcdh字段,设置输入掩码:99⑤单击“插入”按钮,输入字段名:zwjs,数据类型选择“备注型”⑥单击“索引”选项卡,索引名:xdhcsrq,索引类型:普通索引,索引表达式:xdh+dtoc(csrq,1)(3)在项目管理器中选中js,右击选择“编辑说明”。
(4)选中jxsj数据库中的“表”,单击“添加”按钮,选择gzb进行添加。
(5)在项目管理器窗口中右击,选择“项目信息”进行设置。
(6)在项目管理器窗口中,单击“其他”选项卡,选中文本文件,单击“添加”按钮,选择xs.txt进行添加,添加完后选中xs.txt,右击选择“排除”。
(7)浏览kc表,显示\追加方式,输入记录。
(8)打开js表的表设计器,单击“表”选项卡,设置插入触发器:len(alltrim(gh))=5(9)打开cj表的表设计器,单击“表”选项卡,设置更新触发器:kcdh=”01” or kcdh=”06”(10)打开kc表的表设计器,单击“表”选项卡,设置插删除触发器:.F.(11)在命令窗口中输入并执行命令:update gzc set jbgz=iif(zc=”教授”,jbgz+500,iif(zc=”副教授”,jbgz+300,jbgz+200))(12)在命令窗口中输入并执行命令:update gzc set yfgz=jbgz+gwjt+zhjt+zfbt+qt(13)在命令窗口中输入并执行命令:update js set gh=left(gh,1)+xdh+substr(gh,4,2)(14)在项目管理器窗口中,选择cj,单击右侧“修改”按钮,打开表设计器添加字段,在命令窗口中输入并执行命令:update cj set zpcj=cj*0.9 +10(15)在命令窗口中输入并执行命令:delete from kc where xf>=5(16)在命令窗口中输入并执行命令:close tables alluse gzccopy to jsgzb for zc=”教授”(17) 在项目管理器中选择数据库jxsj,单击“修改”按钮,打开数据库设计器,将xs表中的主索引xh拖放到cj表的普通索引xh上,单击菜单项“数据库\清理数据库”,单击菜单项“数据库\编辑参照完整性”,更新规则设置为限制,删除规则设置为级联,插入规则设置为限制。
实验8--自定义数据类型1实验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 指针指向表尾结点cin>>i;}}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;last=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);}。