实验8指针与引用(2)
请将自己报告部分,文字和程序代码,加粗
完成下面实验内容和实验要求。
自测题
1.编写函数实现字符串函数strcmp()的功能。
要求:使用指针操作完成题目
⑴程序代码如下,请补充完整,使程序能运行且运行正确。
#include
#include
using namespace std;
int My_strcmp(char *str1, char *str2) //声明两个字符指针变量str1和str2
{
while (*str1==*str2&&*str1!='\0'&&*str2!='\0') // 当对应字符相等且两个字符串未结束时循环,注意*str1和*str2之间是“==”不是“=”,并且两个字符串都要判断是否结束循环{
str1++;
str2++;// 将str2指针指向下一个字符
}
return (*str1-*str2); /*返回字符串比较结果,根据主函数中r的分支判断确定应该返回的结果*/不要写成str1-str2,这样变成指针值相减,没有意义,另外写成*str1>*str2?1:-1也是可以的
}
int main()
{
char s1[50], s2[50];
cout << "please input the first string : ";
cin >> s1;
cout << "please input the second string : ";
cin >> s2;
int r;
r = My_strcmp(s1, s2); // 函数调用返回值赋值给r
if (r>0)
cout << s1 << " is larger!" << endl;
else if (r<0)
cout << s2 << " is larger" << endl;
else
cout << s1 << " and " << s2 << " is eqaul" << endl;
return 0;
}
⑵运行结果截图
2.编写程序,以(999)99999-999的形式输入电话号码字符串。
要求:利用strtok()函数获取区号,电话号码的前五位是主机号,后三位是分机号,需将电话号码的八位数连接成一个字符串。程序将区号转化为整型,将电话号码字符串转化为长整型,并打印转化后的区号和电话号码。使用指针操作完成题目。
⑴程序代码如下,请补充完整,使程序能运行且运行正确。
#include
#include
using namespace std;
int main()
{
char phone_number[20];
char *qp = phone_number; //定义一个字符指针qp指向字符串phone_number
int quhao = 0; //区号
long int number = 0; // 电话号码
cout << "please input a phone number with the format(999)99999-999: ";
cin >> phone_number;
qp++; //去掉左括号
while (*qp != ')') // 获取区号
{
quhao = quhao * 10 + (*qp - '0');
qp++; // qp指针指向下一个字符
}
qp++;
while (*qp != '-')
{
number = number * 10 + (*qp - '0'); //获取主机号码,语句数量不限
qp++;
}
qp++;
while (*qp != '\0')
{
number = number * 10 + (*qp - '0'); //获取分机号码,语句数量不限
qp++;
}
cout << "区号是:" << quhao << endl;
cout << "电话号码是: " << number << endl;
return 0;
}⑵运行结果截图
3.使用指针编写程序:定义一个字符数组,并初始化为“hello world!”,编写程序逆序输出此字符数组。参考教材P142 例6-11
⑴程序代码:
#include
using namespace std;
int main()
{
char str[] = "hello world!";// 字符串可以这样定义,最好不要用每个字母来定义
char *p, *q, t;
for (p = str, q = p + strlen(str) - 1; p { t = *p; *p = *q; *q = t; } cout << "The reversed string is:" << str << endl; return 0; } ⑵运行结果截图 4.编写一个程序,管理一个班级的学生的c++课程的成绩。参考实验8练习题4 要求:用动态存储分配的方法。键盘输入学生人数n,使用new生成一个动态单精度实型数组,用于保存班级学生的成绩,输出各分数段学生的人数,班级学生的平均成绩及低于平均分的人数。 ⑴程序代码: #include using namespace std; int main() { int n, i, one = 0, two = 0, three = 0, four = 0, five = 0, lower = 0; float sum = 0, average; float *score; cout << "请输入班级学生的人数:"; cin >> n; cout << endl; cout << "请输入班级学生的成绩:" << endl; score = new float[n]; // 注意是单精度类型 for (i = 0; i { cin >> score[i]; sum += score[i]; if (score[i]<60) one++; else if (score[i]<70) two++; else if (score[i]<80) three++; else if (score[i]<90) four++; else five++; } average = sum / n; for (i = 0; i if (score[i] lower++; cout << "不及格的人数为:" << one << endl; cout << "60~69分的人数为:" << two << endl; cout << "70~79分的人数为:" << three << endl; cout << "80~89分的人数为:" << four << endl; cout << "90~100分的人数为:" << five << endl; cout << "班级平均成绩是:" << average << "分" << endl; cout << "成绩低于平均分的人数为:" << lower << endl; return 0; } ⑵运行结果截图 5.【程序调试】 下列程序运行均不正确。请改正其中的语法错误使得程序可以编译成功。程序编译后,请比较输出结果与实例输出,并对可能存在的逻辑错误进行修改。实例输出显示了程序如果正确应该输出的结果。 实例输出: 错误代码 1#include 2 3using namespace std; 4#include 5 6void initialize ( char [ ], int * ); 7void input ( const char [ ], int * ); 8void print ( const char *, const int ); 9void growOlder( const char [ ], int * ); 10bool comparePeople( const char *, const int *, 11const char *, const int *); 12 13int main() 14{ 15char name1[ 25 ], name2 [ 25 ]; 16int age1, age2; 17 18initialize (name1, &age1); 19initialize( name2, &age2 ); 20 21print ( name1, *age1 ); 22print ( name2, *age2 ); 23 24input( name1, &age1); 25input ( name2, &age2); 26 27print (& name1, &age1Ptr ); 28print (& name2, &age2Ptr ); 29 30growOlder ( name2, age2); 31 32if ( comparePeople( name1, &age1, name2, &age2 ) ) 33cout << “Both people have the same name and age”34<< endl; 35 36return 0; 37} 38 39void input( const char name [ ], int *age ) 40{ 41cout << “Enter a name: “; 42cin >> name; 43 44cout << “Enter an age: “; 45cin >> age; 46cout << endl; 47} 48 49void initialize( char name[ ], int * age ) 50{ 51name = “”; 52age = 0; 53} 54 55void print ( const char name[ ], const int age ) 56{ 57cout<< “ The value stored in variable name is: “ 58<< name << endl 59<< “The value stored in variable age is: “ 60<< age << endl << endl; 61} 62 63void growOlder( const char name[ ], int * age) 64{ 65cout << name << “ h as grown one year older\n\n”; 66*age++; 67} 68 69bool comparePeople( const char * name1, const int * age1, 70const char * name2, const int * age2 ) 71{ 72return ( age1 == age2 && strcmp ( name1, name2 ) ); 73} ⑴修改后程序代码,改过的语句标识红色,并添加注释。 #include #include using namespace std; void initialize(char[], int *); void input(char[],int *);// 去掉const,const保证数据在程序运行中无法改变,这导致我们无法输入数据,所以应去掉 void print(const char *, const int); void growOlder(const char[], int *); bool comparePeople(const char *, const int *, const char *, const int *); int main() { char name1[25], name2[25]; int age1, age2; initialize(name1, &age1); initialize(name2, &age2); print(name1, age1); print(name2, age2); // 定义中声明为整型,不能用整型指针 input(name1, &age1); input(name2, &age2); print(name1, age1); print(name2, age2);// name1和name2本身就是指针,age1Ptr和age2Ptr未定义 growOlder(name2, &age2);// 函数定义为地址变量,所以传递地址 if (comparePeople(name1, &age1, name2, &age2)) cout << "Both people have the same name and age" << endl; return 0; } void input(char name[], int *age)// 同函数定义去掉const { cout << "Enter a name : "; cin >> name; cout << "Enter an age : "; cin >> *age;// 此处为输入age,操作age地址无意义 cout << endl; } void initialize(char name[], int * age) { strcpy(name, "\0");// name=””相当于给数组地址赋值“”,无意义 *age = 0;// 此处为age赋值,非指针赋值 } void print(const char name[], const int age) { cout << "The value stored in variable name is : " << name << endl << "The value stored in variable age is : " << age << endl << endl; } void growOlder(const char name[], int * age) { cout << name << " has grown one year older\n\n"; (*age)++;// 将*age括起来,因为++优先级高于*,这样无法做到age加1的目的,只是指针变化 } bool comparePeople(const char * name1, const int * age1, const char * name2, const int * age2) { return (*age1 == *age2 && !strcmp(name1, name2));// 首先age1和age2前加上*,这样才能进行值操作,否则指针比较无意义,strcmp前加上!,因为两个字符串相同时strcmp返回0,这里需要返回非零才能让整个函数返回真值 } ⑵运行结果截图 实验三:交互式SQL语句的使用 1、实验目的 (1)掌握数据库对象的操作过程,包括创建、修改、删除 (2)熟悉表的各种操作,包括插入、修改、删除、查询 (3)熟练掌握常用SQL语句的基本语法 2、实验平台 使用SQL Server提供的Microsoft SQL Server Management Studio工具,交互式使用SQL语句。 3 实验容及要求 选择如下一个应用背景之一: ●学生选课系统 ●习题3、4、和5中使用的数据库 ●其它你熟悉的应用 (1)建立一个数据库和相关的表、索引、视图等数据库对象,练习对表、索引和视图的各种操作。 (2)要求认真进行实验,记录各实验用例及执行结果。 (3)深入了解各个操作的功能。 实验要求包括如下方面的容: 3.1 数据定义 1.基本表的创建、修改及删除 2.索引的创建 3.视图的创建 3.2 数据操作 完成各类更新操作包括: 1.插入数据 2.修改数据 3. 删除数据 3.3 数据查询操作 完成各类查询操作 1.单表查询 2.分组统计 3. 连接查询 4. 嵌套查询 5. 集合查询 3.4 数据操作 1.创建视图 2.视图查询 参考示例: 建立一个学生选课数据库,练习对表、视图和索引等数据库对象的各种操作。 一、数据定义 创建学生选课数据库ST,包括三个基本表,其中Student表保存学生基本信息,Course表保存课程信息,SC表保存学生选课信息,其结构如下表: 表1. Student表结构 表2. Course表结构 表3. SC表结构 1.创建、修改及删除基本表 (1)创建Student表 CREATE TABLE Student (Sno CHAR(8)PRIMARY KEY, Sname CHAR(8), Ssex CHAR(2)NOT NULL, Sage INT, Sdept CHAR(20) ); (2)创建Course表 CREATE TABLE Course (Cno CHAR(4)PRIMARY KEY, Cname CHAR(40)NOT NULL, Cpno CHAR(4), Ccredit SMALLINT, ); (3)创建SC表 CREATE TABLE SC (Sno CHAR(8)FOREIGN KEY (Sno)REFERENCES Student(Sno), Cno CHAR(4), Grade SMALLINT, ); (4)创建员工表Employee 生物(八上)实验报告册答案 P___1 观察与思考:水螅的形态与捕食 思考与联想:不能可以感知和捕捉来自各个方向的猎物。 思考与联想:水螅用刺细胞捕食水蚤,在内胚层消化。 P___3 实验:观察蚯蚓 材料用具:糙纸放大镜 方法步骤: 1(1)前端有环带。背面颜色比腹面深。 13 (2)粗糙刚毛后方 2.肌肉的收缩。 3. 粘滑 讨论:1.蚯蚓的身体呈两侧对称,可分出前后、左右、背腹。 2. 使运动灵活、自如。 3. 支撑身体、辅助运动。 4. 因为蚯蚓靠湿润的体壁呼吸,如果蚯蚓体表干燥,蚯蚓将窒息死亡。 P___6 观察与思考:双壳类动物的特点 思考与联想:保护 思考与联想:足鳃入水管获取水中的食物颗粒,出水管排出食物残渣。 P___7 观察与思考:节肢动物的特点 思考与联想: 2. 蝗虫和七星瓢虫的形态结构比较相似,体表较硬;身体分节,不同体节有差异;触角和足 都分节;有翅。 3. 体表较硬身体分节,不同体节有差异有分节的足 P___9观察与思考:鲫鱼的外形与运动 思考与联想:是流线形有利于减少鱼在水中运动时的阻力有 体验与联想:抓过粘滑粘液 再观察:交替张合水从鱼口流入,从鳃盖后缘流出。 思考:呼吸鳃丝中有血管 扩大了与水的接触面积,鱼在水中呼吸。 思考与联想:入鳃的水含氧较多,出鳃的水二氧化碳较多 当鱼离开水时,鱼不能从空气中得到足够的氧而窒息死亡。 讨论: 1. 鱼体呈流线形,有利于克服在水中运动时的阻力。 2.不全面。鱼在游泳时,主要靠躯干部和尾鳍的摆动进行运动,其他鳍起协调作用。 P___11观察与思考:青蛙的外形与运动 思考与联想:绿色有利于青蛙的生存。 体验与联想:湿滑 青蛙的前肢短小,可支撑身体;。后肢发达,趾间有蹼,便于跳跃和划水。P___12观察与思考:多种多样的鸟 思考与联想: 思考: 鸟喙的特征与鸟的食性相适应。如,啄木鸟的喙强直,尖锐,适于啄食树干中的昆虫。 鸟足的特征与鸟的生活环境相适应。如,丹顶鹤的腿细长,适于在浅水中行走、觅食。 体表覆盖羽毛,有翼、喙等结构。 P___14 探究:鸟类适于飞行的形态结构特点 第一组假设:鸟的体型和翼适于飞行 第二组假设:鸟的肌肉和骨骼适于飞行 第三组假设:鸟的消化系统和循环系统适于飞行 第四组假设:鸟的呼吸和视觉适于飞行 第一组结论:流线型的体型和翼适于鸟的飞行 第二组结论:发达的胸肌和薄、轻的骨骼适于鸟的飞行 第三组结论:强大的消化能力和循环系统适于鸟的飞行 第四组结论:旺盛的呼吸和发达视觉适于鸟的飞行 P___17观察与思考:哺乳动物的牙齿 思考与联想: 都有门齿和臼齿狼有犬齿,兔没有 狼是肉食动物,犬齿尖锐撕咬猎物。兔是草食动物,门齿切断食物,臼齿磨碎食物。 提高了动物摄取食物的能力,增强了对食物的消化能力。 山东大学数据库实验答案2—8 CREATE TABLE test2_01 AS SELECT SID, NAME FROM pub.STUDENT WHERE sid NOT IN ( SELECT sid FROM pub.STUDENT_COURSE ) CREATE TABLE test2_02 AS SELECT SID, NAME FROM PUB.STUDENT WHERE SID IN ( SELECT DISTINCT SID FROM PUB.STUDENT_COURSE WHERE CID IN ( SELECT CID FROM PUB.STUDENT_COURSE WHERE SID='200900130417' ) ) CREATE TABLE test2_03 AS select SID,NAME from PUB.STUDENT where SID in ( select distinct SID from PUB.STUDENT_COURSE where CID in (select CID from PUB.COURSE where FCID='300002') ) CREATE TABLE test2_04 AS select SID,NAME from PUB.STUDENT where SID in ( select distinct SID from PUB.STUDENT_COURSE where CID in (select CID from PUB.COURSE where NAME='操作系统') intersect select distinct SID from PUB.STUDENT_COURSE where CID in (select CID from PUB.COURSE where NAME='数据结构') ) create table test2_05 as with valid_stu(sid,name) as ( select SID,NAME from PUB.STUDENT where AGE=20 and SID in (select SID from PUB.STUDENT_COURSE) ) select sid,name as name,ROUND(avg(score)) as avg_score,sum(score) as sum_score from PUB.STUDENT_COURSE natural join valid_stu where SID in (select SID from valid_stu) group by SID,NAME create table test2_06 as 上机实验八二维数组与字符数组—参考答案 一.目的要求 1.掌握二维数组的基本概念,如何定义二维数组,如何初始化二维数组。 2.掌握二维数组的基本操作:引用数组元素、行(列)求和,行(列)最大最小值,整个数组的输入输出等。 3.掌握与二维数组有关的算法,如找最大最小值(或位置)、矩阵转置等。 4.掌握字符串与字符数组的基本应用方法 5.掌握字符串有关的算法,如字符转换、查询、统计和进制转换等 二.实验内容 【实验题1】程序填空:输入一个4×4矩阵,求出主对角线上的元素之和sum1、副对角线上的元素之和sum2,并输出结果。 提示:每一行只有一个主对角线元素a[i][i](特征:i==j),也仅有一个副对角线元素a[i][n-i-1](特征:i+j==n-1,即j=n-1-i) 源程序: #include 实验八 函 数(二) 参考答案 /*1.(sy8-1.c ) 请编写函数 fun ,其功能是:计算并输出给定数组(长度为 9)中每相邻两个元素之平均值的平方根之和。 例如,给定数组中的 9 个元素依次为 12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,输出应为:s=35.951014。 【解题思路】 在给出的参考程序中,由于函数要求的返回值为双精度型,所以先将变量 avg 、sum 定义为双精度型,初值为 0.0,然后通过 for 循环分别求出相邻两个元素的平均值放入变量 avg 中,再使用求平方根函数sqrt()对各平均值开方求和,最终结果输出到变量 sum 中并返回。 【参考答案】*/ double fun(double x[9]) { int i ; double avg=0.0,sum=0.0; //将变量avg 、sum 定义为双精度型,并给其赋初值为0.0 for (i=0;i< 8;i++) { avg=(x[i]+x[i+1])/2; //通过for 循环分别求出相邻两个元素的平均值放入变量avg 中 sum+=sqrt(avg); //使用求平方根函数sqrt()对各平均值开方求和,最终结果输出到变量 sum } return sum; /*返回计算结果*/ } 2.(sy8-2.c ) 编写函数fun ,实现矩阵(3行3列)的转置(即行列互换)。例如,输入下 面的矩阵:????? ??900800700600500 400300200 100,程序输出: ???? ? ??900600300800500200700400100。 【解题思路】 方阵转置,只需要将左下半三角元素和右上半三角元素对换即可。 【参考答案】 int fun(int array[3][3]) { int i,j,t ; for(i = 0 ; i < 3 ; i++) for(j = 0 ; j < i ; j++) {t=array[i][j]; array[i][j]=arrar[j][i]; array[j][i]=t ; } } 3.(sy8-3.c ) 请编写函数 fun ,函数的功能是:统计一行字符串中单词的个数作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。 【解题思路】I am a student! 在给出的参考程序中,若判断出当前字符为非空格,而它前面的字符是空格,则单词数累加 1;若当前字符为非空格,而其前面的字符也为非空格,则单词数不累加 1,程序细节可以参考程序的注释部分。 【参考答案1】 int fun( char s[]) 实验一SQL Server使用初步 一、实验目的 1、熟悉SQL Server2000的组成及基本功能。 2、掌握SQL Server2000的登录及注册。 3、掌握SQL Server2000企业管理器的使用方法。 4、熟悉查询分析器的基本使用。 二、实验预习 1、什么是数据库管理系统DBMS?你所知道的DBMS有哪些? 答:DBMS是位于用户和操作系统之间的一层数据管理软件。常见的DBMS主要有:Oracle、db2、SQL Server、MySQL、PostgreSQL、SQLite、Firebird等等。 2、SQL Server 2000(2005)的安装步骤? 答:以企业版安装为例,步骤为: 将企业版安装光盘插入光驱后,出现以下提示框。请选择“安装 SQL Server 2000 组件” 出现下面对话框后,选择 "安装数据库服务器" 。 选择 "下一步",然后选择 "本地计算机" 进行安装。 在 "安装选择" 窗口,选择 "创建新的SQL Server实例..."。对于初次安装的用户,应选用这一安装模式,不需要使用 "高级选项" 进行安装。 "高级选项" 中的内容均可在安装完成后进行调整。 在 "用户信息" 窗口,输入用户信息,并接受软件许可证协议。 在“安装定义”窗口,选择“服务器和客户端工具”选项进行安装。 在“实例名”窗口,选择“默认”的实例名称。 在“安装类型”窗口,选择“典型”安装选项,并指定“目的文件夹”。 在 "服务账号" 窗口,请选择 "对每个服务使用统一账户..." 的选项。 在 "身份验证模式" 窗口,选择 "混合模式..." 选项,并设置管理员"sa"账号的密码。 最后按“下一步”即可完成安装。 检测安装:如果安装成功,应该能成功启动SQL Server,并且能和SQL Server 客户端连接上。 可以通过服务管理器来进行启动。 《C程序设计上机指导》答案 实验一参考答案 四.1、Hello, world ! Welcome to the C language world! Everyone has been waiting for. 2、a+b=579 579 五.1、b=2; 2、int a; 3、area 六.x=5,y=8, 改为x=5,y=8; 七.写程序 1、编写程序输出用6颗星构成的等边三角形。 main() { printf(" * \n"); printf(" * * \n"); printf("* * *\n"); } 2、编写程序求25和5两个整数的和与差。 main() { int a,b,c,d; a=10; b=20; c=35; d=(a+b+c)/3; printf("%d\n",d); } 实验二参考答案: 一.1、A , 65 B, 66 2、x=1,y=1,z=5 3、a=%d,b=%d 二.1、char a;int b; 2、a,a,a 3、a=865 a,h,m 4、u=2*sqrt(a)+b-10; “%f\n” 三.1、第1行ch1=’a’; 改为char ch1=’a’; 第2行ch2=98; 改为char ch2=98; 2、第7行w=x%y; 改为w=x/y; 3、int u=v=89; 改为int u,v; u=v=89; 4、第3行改为scanf(“%d,%d”,&x,&y); //格式字符串有错。 第5行改为printf("The average is %d:"a); //格式字符串有错。四.写程序 1、编程求111 234 ++ 的和(精确到小数点后两位)。 main( ) { float i; i=1.0/2+1.0/3+1.0/4; 按照如下方式重新定义四张表: 定义新的books表,其所拥有的属性与属性类型与原有的books表一致 以列级完整性的方式定义属性bookId为主码,同时在定义的时候必须提供约束名 定义属性category为”非空” ,同时在定义的时候必须提供约束名 create table Books( bookId number(9,0) constraint BooksKey primary key, title varchar(80), author varchar(40), year integer, category varchar(15) constraint B1 not null ); commit; 定义新的customers表,其所拥有的属性与属性类型与原有的customers表一致 以表级完整性的方式定义属性cid为主码 以列级完整性的方式定义属性cname为”唯一”,同时在定义的时候必须提供约束名 create table Customers ( cid number(9,0), cname char(40) constraint C1 unique, age integer, primary key(cid) ); commit; 定义新的purchases表,其所拥有的属性与属性类型与原有的purchases表一致 定义属性cid与bookId为主码,同时在定义的时候必须提供约束名 以列级完整性的方式定义属性bookId为外码,它参照Books表的主码,同时在定义的时候必须提供约束名。当删除Books表中的某一本书时,级联删 除与它相关的购买记录 以表级完整性的方式定义属性cid为外码,它参照customers表,同时在定义的时候必须提供约束名。当删除customers表中的某个顾客时,如果存在 与该客户相关的购买记录,拒绝删除。 create table Purchases( cid number(9,0), bookId number(9,0) 实验报告_实验8 函数(1)(学号_姓名) 一、实验目的: 1、理解函数的功能 2、熟练掌握函数的定义、声明和调用方法; 二、实验内容 1、(基础题)根据海伦公式由三角形的三边长度a、b、c可以计算三角形面积,公式为:,其中:。请根据下列要求编写程序: (1)三角形面积的计算由函数triangle_area实现,函数原型为: double triangle_area(double a, double b, double c);当输入的a、b、c 值不能构成三角形时,返回0.0;(提示:构成三角形的三边条件:任意两边之和大于第三边,任意两边之差小于第三边。) (2)主函数的功能是输入三角形的三条边长,再调用triangle_area()得到面积,最后输出结果; (3)主函数在前,triangel_area()在后面定义。 程序代码: #include printf("三角形的面积=%.4lf\n\n",area); return 0; } double triangle_area(double a,double b, double c)//函数定义 { if ((a+b<=c)||(a+c<=b)||(b+c<=a))//不能构成三角形 return 0.0; double s,p; p=(a+b+c)/2.0; s=sqrt(p*(p-a)*(p-b)*(p-c)); return s; } 2、(基础题)定义一个求最大公约数函数int gcd(int x, int y),在主函数输入两个整数,然后调用gcd()输出这两个整数的最大公约数。提示:辗转相除法求最大公约数的原理: 先比较两个数的大小: (1)用较大数去除较小数,得到一个余数; (2)如果余数为0,则除数(较小数)就是最大公约数,结束运算; (3)如果余数不为0,则计算除数(较小数)和余数的最大公约数即可(舍去被 除数)。转向执行(1)。 程序运行结果如下图所示: 程序代码: #include 实验五 实验5.1 数据查询 1)要求 以School数据库为例,在该数据库中存在四表格,分别为: ●表STUDENTS(sid, sname, email, grade); ●表TEACHERS(tid, tname, email, salary); ●表COURSES(cid, cname, hour); ●表CHOICES(no, sid, tid, cid, score) 在数据库中,存在这样的关系:学生可以选择课程,一个课程对应一个教师。在表CHOICES中保存学生的选课记录。 按以下要求对数据库进行查询操作: (1)查询年级为2001的所有学生的名称并按编号升序排列。 程序:Select sname from students where grade='2001' order by sid asc; (2)查询学生的选课成绩合格的课程成绩。 程序:Select score from choices where score>'59'; (3)查询课时是48或60的课程的名称。 程序:select cname from courses where hour='48'or hour='60'; (4)查询所有课程名称中含有data的课程编号。 程序:select cid from courses where cname like'%data%'; (5)查询所有选课记录的课程号(不重复显示)。 程序:select distinct cid from choices; (6)统计所有教师的平均工资。 程序:select avg(salary) from teachers; SQL数据查询语句: 1: (选择表中的若干列) 求全体学生的学号、姓名、性别和年龄。 2: (不选择重复行) 求选修了课程的学生学号。 3: (选择表中的所有列) 求全体学生的详细信息。 4: (使用表达式) 求全体学生的学号、姓名和出生年份。 5: (使用列的别名) 求学生的学号和出生年份,显示时使用别名“学号”和“出生年份”。 6: (比较大小条件) 求年龄大于19岁的学生的姓名和年龄。 7: (比较大小条件) 求注册B1班或注册B2班年龄大于18岁的学生的姓名、班级号和年龄。 8: (确定范围条件) 求年龄在19岁与22岁(含20岁和22岁)之间的学生的学号和年龄。 9: (确定范围条件) 求年龄不在19岁与22岁之间的学生的学号和年龄。 10:(确定集合条件) 求在下列各班的学生信息:注册B1班、注册B2班。 11:(确定集合条件) 求不是注册B1班、注册B2班的学生信息。 12:(匹配查询) 求姓名是以“李”打头的学生。 13:(匹配查询) 求姓名中含有“志”的学生。 14:(匹配查询) 求姓名长度至少是三个汉字且倒数第三个汉字必须是“马”的学生。 15:(匹配查询) 求选修课程JC001或JC003,成绩在80至90之间,学号为2007xxx的学生的学号、课程号和成绩。 16:(涉及空值查询) 求缺少学习成绩的学生的学号和课程号。 17:(控制行的显示顺序) 求选修JC003课程或JC004课程的学生 的学号、课程号和分数。 18:(组函数) 求学生总人数。 19:(组函数) 求选修了课程的学生人数。 20:(组函数) 求注册B1班学生的平均年龄。 21:(组函数) 求选修了课程JC001的最高、最低与平均成绩以及 课程的名称。 22:(分组查询) 求各门课程的平均成绩与总成绩。 23:(分组查询) 求各班级的人数和平均年龄。 24:(分组查询) 输入以下查询语句并执行,观察出现的其结果并 分析其原因。 SELECT SNAME,SDEPT,COUNT(*)FROM STUDENT WHERE SDEPT=’CS’GROUP BY SDEPT; 25:(分组查询) 分析以下语句为什么会出现错误。并给出正确的 查询语句。 实验二 1.打开数据库SQL Server 2000的查询分析器,用SQL语言建表student,表结构如下图所示: 字段名类型长度含义 id varchar 17 学生编号 name varchar 10 姓名 sex varchar 2 性别 age integer 年龄 score numeric 6,2 总成绩 CREATE TABLE student( id varchar(17),name varchar(10),sex varchar(2),age integer,score numeric(6,2)) 2.用SQL语言向表student插入如下6条记录: A0001 赵一男24 480.00 insert into student values('A0001','赵一','男','24','480.00');.......... 3.把所有学生年龄加一岁。 update student set age=age+1 4.把吴六改名为吴九。 update student set name=‘吴九’where name=‘吴六’ 5.添加学生李梅,学号H0007。 in sert into student values(‘H0007’, ‘李梅’, ‘女’, 19, ‘435.00’); 6.删除1990年后出生的人。(获取当前年的函数为YEAR(GETDATE()))delet from student where age 计算机与信息学院 数据库实验报告 专业班级 学生姓名及学号 课程教学班号 任课教师 实验指导教师 实验地点 2012 ~2013 学年第二学期 实验1 使用向导创建和删除数据库 一、实验目的 1.熟悉SQL Server 中SQL Server Management Studio的环境 2.了解SQL Server 数据库的逻辑结构和物理结构 3.掌握使用向导创建和删除数据库的方法 二、实验要求 1.熟练使用SSMS进行数据库的创建和删除操作。 2.完成实验报告。 三、实验内容 设有一学籍管理系统,其数据库名为“EDUC”。 初始大小为10MB,最大为50MB,数据库自动增长,增长方式是按5%比例增长; 日志文件初始为2MB,最大可增长到5MB,按1MB增长。 数据库的逻辑文件名为“student_data”, 物理文件名为“student_data.mdf,存放路径为“E:\sql_data”。 日志文件的逻辑文件名为“student_log”, 物理文件名为“student_log.ldf”,存放路径为“E:\sql_data”。 四、实验步骤 1.使用SQL Server Management Studio(简称SSMS)创建数据库。 (1)启动SSMS 在开始菜单中:所有程序-SQL Server 2005 -SQL Server Management Studio单击“连接”按钮,便可以进入【SQL Server Management Studio】窗口。如果身份验证选择的是“混合模式”,则要输入sa的密码。 (2)建立数据库 在“对象资源管理器”窗口,建立上述数据库EDUC。在数据库节点上右击选择新建。同时建立一个同样属性的数据库EDUC1。 一、实验内容 P206第六题 function f=wuyan2(c) y=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.41 38.6 50.2 62.9 76.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5 251.4 281.4] t=[0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210] f=y-c(1)/(1+c(1)/3.9-1)*exp^(-c(2)*t) c0=[1 1] c=lsqnonlin('wuyan2',c0) P206第七题 function f=wuyan1(c) q=[0.4518 0.4862 0.5295 0.5934 0.7171 0.8964 1.0202 1.1963 1.4928 1.6909 1.8548 2.1618 2.6638 3.4634 4.6759 5.8478 6.7885 7.4463 7.8345 8.2068 8.9468 9.7315 10.5172 11.7390 13.6876 ]; k=[0.0911 0.0961 0.1230 0.1430 0.1860 0.2543 0.3121 0.3792 0.4754 0.4410 0.4517 0.5595 0.8080 1.3072 1.7042 2.0019 2.2914 2.4941 2.8406 2.9855 3.2918 3.7214 4.3500 5.5567 7.0477]; l=[4.2361 4.3725 4.5295 4.6436 4.8179 4.9873 5.1282 5.2783 5.4334 5.5329 6.4749 6.5491 6.6152 6.6808 6.7455 6.8065 6.8950 6.9820 7.0637 7.1394 7.2085 7.3025 7.3470 7.4432 7.5200]; f=q-c(1)*k.^c(2).*l.^c(3) c0=[1 1 1] c=lsqnonlin('wuyan1',c0) c = 0.4091 0.6401 1.1446 a=0.4091 α=0.6401 β=1.1446 P239第五题 c=[-20 -30]; A=[1 2;5 4]; b=[20 70]; v1=[0 0]; [x,f,ef,out,lag]=linprog(c,A,b,[],[],v1) z=-f x = 10.0000 5.0000 . 西安科技大学 《数据库原理及应用》课程设计报告 题目:寄宿学校管理信息系统的设计与实现 学院:计算机科学与技术学院 专业及班级:软件工程1202及1203班 学号:1208010206 1208010207 1208010303 姓名:李倩魏楠楠王青枝 日期:2014年7月9日 目录 1课程设计目的及意义 (2) 2设计内容及人员分工 (2) 3 需求分析 (2) 3.1 需求陈述 (2) 3.2 功能需求 (2) 3.3 数据需求 (3) 3.4 其它需求 (3) 4 数据库设计 (3) 4.1概念结构设计 (3) 4.2逻辑结构设计 (4) 4.3数据表结构设计 (4) 5 系统功能设计 (6) 6 系统实现 6.1 开发环境 (7) 6.2 数据库的创建与连接技术 (7) 4.3 主要功能的运行结果及代码 (9) 7 总结 (13) 参考文献 (13) 1、课程设计的目的和意义 课程设计目的:通过本课程设计,培养学生具有C/S模式的数据库应用软件系统的 设计和开发能力;熟练掌握SQL Server数据库的使用,熟练掌握使用VC、VB或其它开发工具开发数据库应用的能力;为毕业设计打下坚实的基础。学生根据所学的数据库原理与程序设计的知识, 通过对一个实际问题的分析,设计与实现,将原理与应用相结合,使学生学会如何把书本上学到的知识用于解决实际问题,培养学生的动手能力;另一方面,使学生能深入理解和灵活掌握教学内容。 课程设计的意义:通过对这个系统的设计,让我们更加熟悉SQL Sever 2008的相关操 作,也巩固了这学期学习的数据库的一些知识,让我们更懂得数据库的重要性无论是在生活中,还是在软件的设计和制作过程中。让我们学会了数据库的设计,经历了数据库设计的几个阶段,比如需求分析,概念结构设计,逻辑结构的设计,都让我们努力的去想,去做,懂得数据库的优化,想想怎么做才是最好的。做出一个比较满意的数据库设计。 2、设计内容及人员分工 魏楠楠:数据库的需求分析,概念设计 王青枝:数据库逻辑设计,表结构设计 李倩:数据库触发器创建实现 3、需求分析 3.1 需求陈述: 某寄宿学校需要开发一个信息管理系统,通过该管理系统可以对学生的日常事务进行管理: 校长助理:可以对学生的档案进行管理,可以进行新增、删除、查询、修改等操作。 财务人员:进行每月的收费和退费工作,每个学生的每月费用包括住宿费,伙食费220,在6-8月收取空调费20,在11-2月收取取暖费20,每个学期的开学初(3月、9月)收取书本费(不定)。住宿费分三种情况:双职工的子女为60,单职工的子女80元,父母均不在本单位工作为100元。每个班的老师在每天要申报本班学生的出勤表,由校长助理完成 create proc procA as select* from student exec proca create proc procB @_year char(4) as select* from student where year(birthday )=@_year declare @_year char(4) set @_year ='1994' exec procB@_year create proc procf @_Snum char(30) as select s.snum ,avg(score)as平均成绩,count(https://www.doczj.com/doc/3a13367609.html,um)as选秀门数,sum(1-score/60)as不及格门数 from student s,course c,sc,sections st where s.snum =sc.snum and sc.secnum =st.secnum and https://www.doczj.com/doc/3a13367609.html,um =https://www.doczj.com/doc/3a13367609.html,um and S.Snum =@_Snum group by S.Snum DECLARE @_SUNM char(30) set @_SUNM ='s001' exec procf@_sunm CREATE PROC Procd @_snum char(4),@_avg int out,@_selected_course int out,@_failed_course int out AS SELECT @_avg=AVG(score),@_selected_course=COUNT(cnum),@_failed_course=sum(1-score/60) FROM sc JOIN sections ON sc.secnum =sections.secnum WHERE snum=@_snum 实验八数组应用(一)答案 一、实验目的 1. 掌握一维数组的定义和使用; 2. 了解二维数组的定义和使用。 二、实验学时数 2学时 三、实验步骤 (一)阅读程序 1.#include 3. main() { int i , j ,x =0 ,y = 0 , m ; int a[3][3] = { 1, -2 , 0 , 4 , -5 , 6 , 2 , 4 }; m = a [0][0] ; for (i=0 ;i < 3 ;i++) for (j = 0 ; j<3 ; j++ ) if ( a[ i] [ j ] >m ) { m = a[ i ][ j ] ; x = i ; y = j ; } printf(“ ( % d , % d ) = % d \n“ , x , y,m ); (二)完成程序 要求:依据题目要求,分析已给出的语句,填写空白。但是不要增行或删行,改动程序的结构。 1.下面程序的功能是将十进制整数转换成二进制,请在_______上填写正确内容。 #include 实验3 使用T-SQL语言完成单表查询 一、实验目的 掌握使用T-SQL语言完成单表查询 掌握常用谓词的用法 掌握where子句的用法 掌握order by 子句的用法 掌握group by 子句和having短语的用法 实验环境 Microsoft SQL Server 2000。 实验内容和要求 查询全体学生的详细信息。 查询所有课程的详细信息。 查询所有选课记录的详细信息,要结果表中的列名以中文的形式显示,分别为:学号,课程号,成绩。 查询已被学生选修了的课程的编号。 查询系别编号为“d002”的学生的姓名和性别。 查询年龄在19至21岁或者性别为“女”的学生的学号和所在系别编号。 查询系别编号为d001、d002和d003的学生的学号和姓名。 查询课程名为“C_”开头的课程名和学分。 某些学生入学后还没有确定所在的系,查询还没有确定系的学生的姓名。 查询成绩大于60分的学生的学号、课程号和成绩,并将查询结果按课程编号升序排列,同一课程的成绩按分数降序排列。 查询学校所开设的总的课程数。 计算2号课的学生成绩总和以及平均成绩,对应的列名分别为“总成绩”和“平均成绩”。 查询选修了3号课程的学生的最高分和最低分,对应的列名分别为“最高分”和“最低分”。 求各个系别的编号以及各系的人数。 查询选课人数大于等于2人的课程编号以及选课的人数。 查询学生2选修课程的总成绩对应的列名为“总成绩”,并显示出学号。 查询有2门以上课程是80分以上的学生的学号及课程数。 查询选修了1号课的学生的学号和成绩,结果按成绩降序、学号升序排列。 实验1 使用T-SQL语言建库、建表 实验2 向表中增、删、改数据 实验目的 掌握使用T-SQL建库、建表、修改表; 掌握使用T-SQL对表中数据进行插入、删除和修改。 实验环境 Microsoft SQL Server 2000。 实验内容和要求 建立数据库STDB 在数据库STDB中建立四个表: 实验8机考环境测试题: 1、用循环结构编程计算下列算式的值 sum=2+4+6+8+10+… +100 要求: **输入格式为:无输入提示信息和输入数据 **输出格式为:"sum=%d\n" 2、编程计算2×3阶矩阵A和3×2阶矩阵B之积C。 矩阵相乘的基本方法是:矩阵A的第i行的所有元素同矩阵B第j列的元素对应相乘,并把相乘的结果相加,最终得到的值就是矩阵C的第i行第j列的值。要求: (1)从键盘分别输入矩阵A和B,输出乘积矩阵C (2) **输入提示信息为:输入矩阵A之前提示:"Input 2*3 matrix a:\n" 输入矩阵B之前提示:"Input 3*2 matrix b:\n" **输入矩阵中每个值的格式为:"%d" **输出格式为:输出矩阵C之前提示:"Results:\n" 输出矩阵C中每个值的格式:"%6d" 输出矩阵C各行结束时换行 例如: Input 2*3 matrix a: 1 2 3 0 1 2 Input 3*2 matrix b: 1 -2 2 3 1 3 Results: 8 13 4 9 参考答案: #include #define ROW 2 #define COL 3 void main() { int a[ROW][COL], b[COL][ROW], c[ROW][ROW], i, j,k; printf("Input 2*3 matrix a:\n"); for (i=0; i数据库实验3答案
新版实验报告册答案(八上)
山东大学数据库实验答案2—8
上机实验8 二维数组&字符数组--参考答案
大学生C语言程序设计(第四版 谭洪强)实验8答案
数据库实验1-6参考答案
c程序设计实验参考答案
数据库实验题目和答案
答案 实验报告_实验8 函数(1)(学号_姓名)
数据库实验五题目答案
实验8部分答案
数据库实验答案
数据库试验答案
大学数学数学实验(第二版)第7,8章部分习题答案
(完整word版)数据库实验报告8
同济大学数据库实验5答案
实验八数组应用一答案
数据库实验答案
实验8机考环境测试题及答案