数据库系统概论课程之试验二.docx
《数据库系统概论课程之试验二.docx》由会员分享,可在线阅读,更多相关《数据库系统概论课程之试验二.docx(38页珍藏版)》请在冰豆网上搜索。
数据库系统概论课程之试验二
高级语言程序设计
实验指导书
网络工程1401班
网络工程1402班
福建工程学院信息科学与工程学院
软件工程教研室唐郑熠
2014-2015学年第1学期
实验1程序设计入门
如果汽车能赶上计算机的发展速度的话,一辆今天的劳斯莱斯仅值100美元,每加仑汽油能跑100万英里,每年还得爆炸一次,把里面的人杀个精光。
—RobertX.Cringely
一、实验目的
●了解并掌握程序设计所必须的计算机基本操作技能
●了解并熟悉Code:
:
Blocks开发环境
●了解并掌握悉Code:
:
Blocks开发环境下的C程序的编译、连接与运行方法
●了解并掌握查找与排除程序编译错误的方法
●了解不同类型的程序错误
●熟悉并掌握数据输入函数的格式与应用
●熟悉并熟悉数据输出函数的格式与应用
二、实验环境
●个人计算机一台,PIII500(或同等性能)以上CPU,128MB以上内存,500MB以上硬盘剩余空间。
●Windows2000、WindowsXP或Win7操作系统
●Code:
:
Blocks(版本12.11或近似版本,英文版)
三、实验内容
1开发环境的使用
1.1安装Code:
:
Blocks。
1.2配置编译器。
1.3创建C程序文件,编写程序,实现两个固定整数的加法与减法运算(如10+20,10-20),并保存。
1.4编译并运行程序。
1.5查找并排除程序的编译错误。
1.6了解并掌握程序的语法错误、逻辑错误与运行错误。
2程序阅读与分析
注意:
以下在书写时,用“”代表空格,用“↙”代表回车换行。
2.1printf()函数
阅读以下程序,并分析预测程序的运行结果,然后上机验证。
/*exercise-1.c*/
#include
intmain()
{
inta=5,b=7;
floatx=67.8564,y=-789.124;
printf("%d%d\n",a,b);
printf("%3d%3d\n",a,b);
printf("%f,%f\n",x,y);
printf("%8.2f,%8.2f,%.4f,%.4f,%3f,%3f\n",x,y,x,y,x,y);
return0;
}
分析预测的运行结果:
上机验证的运行结果:
2.2scanf()函数
以下程序中的scanf语句用于输入数据,目标是使得a的值为3,b的值为7,m的值为5,n的值为9,x的值为8.5,y的值为71.82,c1的值为′A′,c2的值为′a′,即屏幕上应出现以下的输出结果:
a=3b=7
m=5n=9
x=8.500000y=71.820000
那么应该从键盘上怎样输入数据?
请上机验证,并把正确的结果写下来。
程序中的printf语句会把各个变量的值输出。
/*exercise-2.c*/
#include
intmain()
{
inta,b,m,n;
floatx,y;
/*以下scanf语句用于输入数据*/
scanf("a=%db=%d",&a,&b);
scanf("%d,%d",&m,&n);
scanf("%f%f",&x,&y);
/*以下printf语句用于输出各变量数据,验证结果*/
printf("\n以下是输出结果:
\n");
printf("a=%db=%d\n",a,b);
printf("m=%dn=%d\n",m,n);
printf("x=%fy=%f\n",x,y);
return0;
}
正确的输入格式是:
3程序编写
3.1数据交换
在花括号({})之间划线的部分填空,将程序补充完整实现下述功能,并上机运行验证。
数据交换是许多算法的基本操作,如排序、选取最值等。
以下程序的功能是从键盘上输入两个整数,分别存放在变量a和b中,然后将a与b中的数据交换。
例如,
输入:
1020
输出:
beforeswap:
a=10,b=20
afterswap:
a=20,a=10
/*exercise-3.c*/
#include
intmain()
{
/*定义变量*/
/*输入两个整数*/
/*输出数据交换前,a与b的值*/
printf("beforeswap:
");
/*数据交换*/
/*输出数据交换后,a与b的值*/
printf("Afterswap:
");
return0;
}
【解题提示】
两个整数的交换是十分重要的,一定要掌握
3.2学分绩点计算
平均学分绩点(GradePointAverage,即GPA)是以学分与绩点作为衡量学生学习的量与质的计算单位,平均学分绩点可以作为学生学习能力与质量的综合评价指标之一,能方便地与美国的GPA制挂钩。
国内大部分高校通用的课程绩点计算方法是:
绩点=分数/10-5,学分绩点=学分×绩点=学分×(分数/10-5)。
平均学分绩点绩点的计算,是将学生修过的每一门课程(包括重修的课程)的课程绩点乘以该门课程的学分,累加后再除以总学分。
用公式可以表示如下:
(1)课程学分绩点计算公式
gp=c(s10-5)
其中:
gp为课程学分绩点,c为课程学分,s为课程成绩
(2)平均学分绩点计算公式
agp=(p1+p2+...pn)(c1+c2+…+cn)
其中:
agp为平均学分绩点,pi为第i门课程的学分绩点,ci为第i门课程的学分。
要求编程实现:
从键盘上输入三门课程的学分和成绩,计算这三门课程的平均学分绩点,并输出。
*exercise-4.c*/
#include
intmain()
{
floatscore1,score2,score3
floatcredit1,credit2,credit3;
floatcreditPoint1,creditPoint2,creditPoint3;
floatgpa;
return0;
}
四、总结与思考
开发环境的使用是实践的基石,如果不能熟练地使用开发环境,那么编程能力根本无从提高。
因此,应该要反复练习开发环境的使用方法,并且用一些课本上的其它程序来进行实验。
尤其是“C编译错误的查找与排除”以及本实验附录中常见的编译错误,如果能够熟悉并掌握,能够对程序设计水平的提升起到很大的促进作用。
数据的输入和输出,以及数据的基本数学运算时整个程序设计的根基,因为程序设计的本质就是数据的获取以及数学运算。
因此,一定要熟练掌握几个数据输入输出函数的格式与应用方法,以及基本数学运算符的运算法则。
五、附录
1C程序的错误类型
1语法错误
语法错误是指不符合C语言的语法规定,例如左右括号数量不匹配、语句最后漏了分号等等,这些错误会在编译时被发现并指出。
这些错误都属于“致命错误”,不改正是无法通过编译的。
对一些在语法上有轻微毛病但不影响程序运行的问题(如定义了某个变量但始终未使用),编译时会发出“警告”。
但“警告”不属于“致命错误”,程序可以通过编译。
但是在程序的运行过程中,这些“警告”可能造成一些运行时错误。
2逻辑错误
程序没有语法错误,可以正常运行,但结果不对。
例如,要求a和b的和,可是却写成了“a-b;”。
语法上没有错,但求出的却是a和b的差。
这类错误可能是由于设计算法时的错误,也可能是由于在编写程序时出现的疏忽所致。
这类错误计算机是无法检查出来的。
3运行错误
有时程序既无语法错误,又无逻辑错误,但程序不能正常运行或结果不对。
多数情况下,是由于数据不正确,或数据类型不合适造成的。
例如:
要求a/b,如果b的值为非0程序不会有问题,而如果b的值为0就为造成溢出(over-flow)错误。
2常见的编译错误
1.
【错误信息】
fatalerrorC1010:
unexpectedendoffilewhilelookingforprecompiledheaderdirective
【错误原因】
寻找预编译头文件路径时遇到了不该遇到文件尾(一般是没有#include"stdafx.h"造成的)。
2.
【错误信息】
fatalerrorC1083:
Cannotopenfile:
\'R…….h\':
Nosuchfileordirectory
【错误原因】
能打开包含文件“R…….h”:
没有这样文件或目录。
3.
【错误信息】
errorC2011:
\'C……\':
\'\'typeredefinition
【错误原因】
类“C……”被重定义
4.
【错误信息】
errorC2018:
unknowncharacter\'0xa3\'
【错误原因】
不认识\'0xa3\'(一般是由于程序中出现了汉字或中文标点符号)。
5.
【错误信息】
errorC2057:
expectedconstantexpression
【错误原因】
希望是常量表达式(一般出现在switch语句分支中,是由于应该出现常量表达式的地方出现了非常量表达式)。
6.
【错误信息】
errorC2065:
\'IDD_MYDIALOG\':
undeclaredidentier
【错误原因】
“IDD_MYDIALOG”是未声明过的标识符。
7.
【错误信息】
errorC2082:
redefinitionofformalparameter\'bRe\'
【错误原因】
参数“bRe”在被重复定义。
8.
【错误信息】
errorC2143:
syntaxerror:
missing\':
\'before\'{\'
【错误原因】
语法错误:
“{”前缺少“;”。
9.
【错误信息】
errorC2146:
syntaxerror:
missing\';\'beforeidentier\'dc\'
【错误原因】
语法错误:
在“dc”前丢了“;”。
10.
【错误信息】
errorC2196:
value\'69\'alreadyused
【错误原因】
值69已经被使用过(一般出现在switch语句分支中)。
11.
【错误信息】
errorC2509:
\'OnTimer\':
memberfunctionnotdeclaredin\'CHelloView\'
【错误原因】
成员“OnTimer”没有在“CHelloView”中声明。
12.
【错误信息】
errorC2511:
\'re\':
overloadedmemberfunction\'void()\'notfoundin\'B\'
【错误原因】
重载“voidre()”在类“B”中找不到。
13.
【错误信息】
errorC2555:
\'B:
:
f1\':
overridingvirtualfunctiondfersfrom\'A:
:
f1\'_disibledevent=
【错误原因】
无效的运算符(一般是由于运算符使用不当造成的)。
14.
【错误信息】
warningC4700:
localvariable\'bRe\'usedwithouthavingbeeninitialized
【错误原因】
局部变量“bRe”没有初始化就使用
15.
【错误信息】
errorC4716:
\'CMyApp:
:
InitInstance\':
mustavalue
【错误原因】
“CMyApp:
:
InitInstance”必须有返回值
16.
【错误信息】
LINK:
fatalerrorLNK1168:
cannotopenDebug/P1.exeforwriting
【错误原因】
连接:
不能打开P1.exe文件以改写内容(一般是由于其它程序在运行未关闭造成的)。
实验2数据与运算
如果你认为你的价值在于自己所知道的多少,你就大错特错了。
要不了多少年,你今天的知识就没什么价值了。
你的价值体现在你能学多少,以及你对这个职业常常带来的改变的适应程度。
—JoseM.Aguilar
一、实验目的
●进一步熟悉Code:
:
Blocks开发环境
●进一步熟练掌握基本编程与程序调试技能
●熟练使用C语言的基本数据类型
●熟练使用C语言的基本运算
二、实验环境
●个人计算机一台,PIII500(或同等性能)以上CPU,128MB以上内存,500MB以上硬盘剩余空间。
●Windows2000、WindowsXP或Win7操作系统
●Code:
:
Blocks(版本12.11或近似版本,英文版)
三、实验内容
1温度度量转换
华氏度(Fahrenheit)和摄氏度(Centigrade)都是用来计量温度的单位,包括中国在内的世界上很多国家都使用摄氏度,美国和其他一些英语国家使用华氏度而较少使用摄氏度,这会在某些时候产生一些问题。
例如,由美国生成的温度传感器若以华氏度作为度量,而计算程序则被要求以摄氏度作为度量,此时就需要进行转换。
华氏度与摄氏度的关系为(C为摄氏温度,F为华氏温度):
编写程序,从键盘输入华氏温度,将其转换为摄氏温度并输出。
2皮革用量计算
在制作篮球或足球时,需要在外层包裹一层皮革,为此要估计一个球体大约需要多少面积的皮革,但皮革一般都是方形的,因此需要进行估算。
从键盘输入一个球的半径r,计算出其表面积大约相当于边长为多少的正方形。
计算结果精确到小数点后两位。
提示:
在C语言中,求平方根的函数为sqrt(),包含在函数库math.h中。
3数据保密
数据通信中的一个重要问题是数据保密,数据在送到通信线路前,应进行加密,以保证即使通信线路被窃听时,通信内容也不会泄露。
高级的加密算法可以保证很高的性,但也会带来过大的运算量。
因此在某些应用场景下,会使用一些简单的加密方法,以获得最低限度的安全性。
假设通信数据都已被切分,每一组数据被转化为一个4位整数,加密规则为:
将第1位和第4位上的数字互换,第2位和第3位上的数字互换(从左往右数,最高位为第1位)。
编程实现以上加密功能:
输入一个4位整数,将第1位和第4位上的数字互换,第2位和第3位上的数字互换,成为一个加密数据,并输出。
再将该加密数据进行解密,还原为原数据并输出。
四、总结与思考
程序设计的本质就是解决计算问题,因此熟练掌握C语言中的基本数据类型与运算符,是学好程序设计的重要基础。
实验3选择结构程序设计
1.计算机擅长接受指令,不擅长了解你的思想。
2.让我们改变一下对构建程序的态度:
不要把我们的主要工作想象为教计算机怎么做,相反,让我们集中精力向人们解释我们想让机器做什么。
—DonaldKnuth(算法巨匠)
一、实验目的
●了解并掌握C语言表示逻辑值的方法(以0代表“假”,以非0代表“真”)
●了解并掌握逻辑运算符的运算法则
●熟悉并掌握逻辑表达式的使用
●熟练掌握if语句及其嵌套形式的使用
●熟练掌握if-else语句及其嵌套形式的使用
●熟练掌握switch语句的使用
二、实验环境
●个人计算机一台,PIII500(或同等性能)以上CPU,128MB以上内存,500MB以上硬盘剩余空间。
●Windows2000、WindowsXP或Win7操作系统
●Code:
:
Blocks(版本12.11或近似版本,英文版)
三、实验内容
注意:
以下在书写时,用“”代表空格,用“↙”代表回车换行。
1switch语句的执行流程
阅读以下程序,并分析预测程序的运行结果,然后上机验证。
(在书写时,用“”代表空格,用“↙”代表回车换行)
1.1switch语句
阅读以下程序,并分析预测程序的运行结果,然后上机验证。
/*example-7.c*/
#include
main()
{
intn;
printf("Inputn:
");
scanf("%d",&n);
switch(n)
{
case1:
printf("Iamcase1.\n");
default:
printf("Iamdefault.\n");
case2:
printf("Iamcase2.\n");break;
case4:
switch(n)
{
case4:
printf("Iamcase4\n");break;
case5:
printf("Iamcase5\n");
}
case3:
printf("Iamcase3.\n");
}
}
分析预测的运行结果:
当输入1时,输出:
当输入2时,输出:
当输入3时,输出:
当输入4时,输出:
当输入5时,输出:
上机验证的运行结果:
当输入1时,输出:
当输入2时,输出:
当输入3时,输出:
当输入4时,输出:
当输入5时,输出:
2闰年与生肖的判定
从键盘上输入一个正整数,代表年份,然后判断这个正整数所代表的年份是否是闰年。
闰年满足以下两个条件中的任意一个:
(1)能被4整除但不能被100整除。
(2)能被400整除。
同时,再判定该年的生肖属相。
不考虑农历,例如认为1984年是鼠年,虽然在农历中其有一些天是在猪年中。
3一元二次方程求解器
一元二次方程ax2+bx+c=0(a0)的根存在的条件为b2–4ac0,其求根公式为:
从键盘上依次输入一元二次方程的三个系数,判定其根是否存在,若存在则求出其根
4个人所得税(薪金)计算器
我国的个人所得税的征收,采用超额累进税率。
超额累进税率是把征税对象的数额划分为若干等级,对每个等级部分的数额分别规定相应税率,分别计算税额,各级税额之和为应纳税额。
超额累进税率的“超”字,是指征税对象数额超过某一等级时,仅就超过部分,按高一级税率计算征税。
工资、薪金所得适用的累进税率表如下表所示:
上表中的应税额是指以每月收入额减除3500元(起征点)后的余额或者减除附加减除费用后的余额。
从键盘上输入月收入,根据上表计算出应缴纳的个人所得税。
5生成随机整数
本题为选做题。
C语言中的rand()函数能够生成一个长整型的随机整数(伪随机),但在使用前应使用srand(unsignedseed)函数设置随机种子。
请编写程序,生成一个随机整数。
在此基础上设计算法,能够以50%的概率生成一个0~99范围内的随机整数,另外50%的概率生成一个101到1000范围内的随机整数。
四、总结与思考
选择结构,又称为分支结构,是程序设计的三大基本控制结构之一,C语言中用于实现选择结构的语句有:
●if语句
●if-else语句
●switch语句
难点在于if-else语句的嵌套,以及在switch语句中,break语句的用法,同学们一定要多加练习。
实验4循环结构程序设计
好代码本身就是最好的文档。
—SteveMcConnell(Construx公司首席软件工程师)
一、实验目的
●熟练掌握while语句及其嵌套形式的使用
●熟练掌握do-while语句及其嵌套形式的使用
●熟练掌握for语句及其嵌套形式的使用
●了解并掌握continue与break语句在循环结构中的作用
●熟悉循环结构程序段中语句的的执行过程
●了解并掌握穷举算法
二、实验环境
●个人计算机一台,PIII500(或同等性能)以上CPU,128MB以上内存,500MB以上硬盘剩余空间。
●Windows2000、WindowsXP或Win7操作系统
●Code:
:
Blocks(版本12.11或近似版本,英文版)
三、实验内容
1数列求和
从键盘上输入一个整数n,并计算以下数列的前n项和:
请注意运算对象的类型对运算结果的影响。
2素数判定
编写程序,判定一个给定的整数是否为素数。
可以用以下算法用于判断某一个整数是否为素数:
给定一个整数n,从2开始至n-1(实际上只需要2~n1/2)逐一检查在这范围之内的整数是否可以被n整除。
如果可以,则说明整数n不是素数。
如果从2开始至n-1范围之内的所有整数都不可以被n整除,那说明整数n符合素数的定义,所以整数n是一个素数。
3百钱百鸡问题
“百钱百鸡”问题记载于中国古代约5~6世纪成书的《张邱建算经》中,是原书卷下第38题,也是全书的最后一题,该问题导致三元不定方程组的产生,其重要之处在于开创“一问多答”的先例,这是过去中国古算书中所没有的。
中古时,近东各国也有相仿问题流传,例如印度算书和阿拉伯学者艾布·卡米勒的著作内都有百钱买百禽的问题,且与《张邱建算经》的题目几乎全同。
该问题描述为:
一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少。
可以使用计算机程序设计中的“穷举法”来解决该问题,通过循环的嵌套可以描述“穷举”。
4双色球摇奖机
双色球是中国福利彩票的一种玩法,属于双区投注的乐透型彩票。
投注时需同时从两个号码区中分别选取号码,即从红色球号码区的33个号码(1~33)中选择6个号码,再从蓝色球号码区的16个号码(1~16)中选择1个号码,组合成一注进行投注。
现在请设计一个程序,实现双色球摇奖功能,即产生6个1~33之间的随机整数,以及一个1~16之间的随机整数。
为了增强摇奖的刺激性,产生每个随机数时应有一段时间的延迟。
5进制转换器
进制也就是进位制,是人们规定的一种进位方法。
对于任何一种进制—X进制,就表示某一位置上的数运算时是逢X进一位。
十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,X进制就是逢X进位。
编写程序,实现将N进制的整数,转换为M进制的整数。
可以使用以下算法:
(1)先将N进制整数各个位上的数字与该位的权值相乘然后累加求和,从而将N进制整数转换为十进制整数。
(2)再使用短除法将十进制整数转换为M进制整数。
注意:
由于还没有学习数据暂存的方法,因此测试程序时不要使用太小的进制,否则可能会造成数据溢出。
四、总结与思考
循环结构是程序设计的三大基本控制结构之一,C语言中用于实现选择结构的语句有:
●while语句
●do-while语句
●for语句
此外,还要注意continue语句和break语句在循环结构中的作用。
实验5数组与字符串的使用
好的规范总能够比任何编程工具或技术更好地改进程序员的生产力。
—MiltBryce(系统方法论之父)
一、实验目的
●了解并掌握一维数组与二维数组的定义方法
●了解并掌握一维数组与二维数组的初始化方法及元素的引用方法
●了