计算机软件实验报告 - 图文

更新时间:2024-07-11 11:48:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

计算机软件基础实验

实验一:

键盘输入一组无序数据,添加到线性表中;排序线性表并输出排序结果;键盘输入一个数,并插入到排好序的线性表中(要求插入后的表仍为有序表),输出结果;键盘输入一个数,并从线性表中删除相应的数据,输出结果。

程序清单:

// Experiment1.cpp : 定义控制台应用程序的入口点。 //#include \#include \#include

// 程序实现有各种方法,这里给出一个实例。

// 定义一个线性表

const int nMaxSize = 15; // 最大值 int nLen = 0; // 表中元素个数 int nLinearList[nMaxSize];

// 定义操作 void LSort(); void LOut();

void LInsert(int n); void LDelete(int n);

void main() { // 输入数据并放入线性表中 printf(\// std::cout << \ int nIn = 0; for (int i = 0; i <= 9; i++) { scanf(\// std::cin >> nIn; nLinearList[i] = nIn; nLen++; } LSort(); // 排序线性表 LOut(); // 输出结果 printf(\ scanf(\ LInsert(nIn); // 输入一个数字,并插入到线性表中 LOut();

printf(\ scanf(\ LDelete(nIn); // 输入一个数字,并从线性表中删除 LOut(); char chTmp; printf(\ chTmp = getch(); //return 0; }

void LSort() // 冒泡排序,由大到小 { int j,F,k,M; F=(nLen-1); while(F<16) { k=F-1;F=16; for(j=0;j<=k;j++) { if(nLinearList[j]

void LOut() { printf( \ for (int i = 0; i < nLen; i++) { printf( \ } printf( \}

void LInsert(int n) { int i,j; i=0; while (i

{ if (nLinearList[i]<=n) { nLen++; for (j=nLen;j>=i;j--) nLinearList[j+1]=nLinearList[j]; nLinearList[i]=n; break; } i++; } }

void LDelete(int n) { int i,j; for(i=0;i

运行结果:

实验二:键盘输入算数表达式,并放入队列当中;应用栈的概念设计表达式求值算法;输出表达式求值结果;

程序清单:

// Experiment2.cpp : 定义控制台应用程序的入口点。

//#include \#include \#include \#include #include

// 程序实现有各种方法,这里给出一个实例。

const int MAX_LEN = 10; // 字符串的长度 const int MAX_SIZE = 30; // 栈或队的最大元素个数 char pitem[10] = {'\\0'}; int numbers=0;

// 定义一个队列的结构 struct QUEUE { int nMaxSize; // 最大值 int nCount; // 个数 int nFront; // 头 int nRear; // 尾 char szQueue[MAX_SIZE][MAX_LEN]; };

//定义一个栈的结构 struct STACK { int nMaxSize; // 最大值 int nTop; // 栈顶 char szStack[MAX_SIZE][MAX_LEN]; };

// 队列的操作

void InitQueue(QUEUE *q,int nMaxSize); int InQueue(QUEUE *q, char *pItem); int OutQueue(QUEUE *q, char *pItem);

//栈的操作

void InitStack(STACK *s,int nMaxSize);

int PushStack(STACK *s, char *pItem); int PopStack(STACK *s, char *pItem);

void GetTopStack(STACK *s, char *pItem);

int Priority(char *op); // 获得操作符的优先级

void Compute(char *num1, char *num2, char *op, char *chResult);

int isdigit(char isnum);

int main() { // 声明一个队列 struct QUEUE que; InitQueue(&que,MAX_SIZE); // 声明OS栈和NS栈 struct STACK OS,NS; InitStack(&OS,MAX_SIZE); InitStack(&NS,MAX_SIZE); // 输入表达式,并放入到队列当中 printf(\ do { for(int j=0;j<10;j++) pitem[j] = '\\0'; gets(pitem); InQueue(&que, pitem); }while(pitem[0]!=';'); // 显示表达式 do { printf(\ numbers++; }while(que.szQueue[numbers][0]!=';'); // 表达式求值 char x[MAX_LEN]; // 扫描的表达式 char op[MAX_LEN]; // 栈顶运算符 char num1[MAX_LEN], num2[MAX_LEN]; // 两个操作数 char chResult[MAX_LEN]; // 运算结果 OutQueue(&que, x); // 扫描表达式 PushStack(&OS,\ // ;压栈 while (1) { if (isdigit(x[0])) // 是数 PushStack(&NS,x); // 数字压栈

// 计算表达式的值

else // 认为是运算符,没有考虑空格等 { GetTopStack(&OS, op); // 获得OS栈顶运算符 if (Priority(x) > Priority(op)) // 运算符的优先级〉栈顶运算符 PushStack(&OS,x); // 高优先级运算符压栈 if (x[0] == ';' && op[0] == ';') // 扫描结束 break; if (Priority(x) <= Priority(op)) // 不大于栈顶运算符 { PopStack(&OS,op); PopStack(&NS, num2); PopStack(&NS, num1); Compute(num1,num2,op,chResult); // 计算表达式的值 PushStack(&NS,chResult); // 数字压栈 continue; } } OutQueue(&que, x); // 扫描表达式 } printf(\ system(\ return 0; }

void InitQueue(QUEUE *q,int nMaxSize) { q->nMaxSize = nMaxSize; q->nCount = 0; q->nFront = 0; q->nRear = 0; for(int i=0;i<30;i++) for(int j=0;j<10;j++) q->szQueue[i][j] = '\\0'; }

int InQueue(QUEUE *q, char *pItem) { if(q->nFront > q->nMaxSize) { printf(\列队已满,不能插入!\\n\ return 0; } else { strcpy(q->szQueue[q->nFront],pItem);

q->nFront++; return 1; } }

int OutQueue(QUEUE *q, char *pItem) { if(q->nRear > q->nFront) { printf(\列队已空,不能出队!\\n\ return 0; } else { strcpy(pItem,q->szQueue[q->nRear]); q->nRear++; return 1; } }

void InitStack(STACK *s,int nMaxSize) { s->nMaxSize = nMaxSize; s->nTop = 0; for(int i=0;i<30;i++) for(int j=0;j<10;j++) s->szStack[i][j] = '\\0'; }

int PushStack(STACK *s, char *pItem) { if(s->nTop > s->nMaxSize) { printf(\栈已满,不能插入!\\n\ return 0; } else { strcpy(s->szStack[s->nTop],pItem); s->nTop++; return 1; } }

int PopStack(STACK *s, char *pItem) { if(s->nTop < 0)

{ printf(\列队已空,不能出队!\\n\ return 0; } else { strcpy(pItem,s->szStack[s->nTop-1]); s->nTop--; return 1; } }

void GetTopStack(STACK *s, char *pItem) { strcpy(pItem,s->szStack[s->nTop-1]); }

int isdigit(char isnum) { switch(isnum) { case '^': case '*': case '/': case '+': case '-': case ';': return 0; default: return 1; } }

int Priority(char *op ) { int nPriority = 0; switch (op[0]) { case '^': nPriority = 3; break; case '*': case '/': nPriority = 2; break; case '+':

case '-': nPriority = 1; break; case ';': nPriority = 0; } return nPriority; }

void Compute(char *num1, char *num2, char *op, char *chResult) { double fNum1,fNum2; double fResult = 0; fNum1 = atof(num1); fNum2 = atof(num2); switch (op[0]) { case '^': fResult = pow(fNum1,fNum2); break; case '*': fResult = fNum1*fNum2; break; case '/': fResult = fNum1/fNum2; break; case '+': fResult = fNum1+fNum2; break; case '-': fResult = fNum1-fNum2; break; } sprintf(chResult,\//把计算的结果转化为字符串 return; }

运行结果:

实验三:查询学生出生日期(Sno, Sname, BirthDay);按学号顺序查询一个班级的所有学生(Class, Sname);列出学生选择各门课程的成绩(Sname, Cname,

Grade) ;列出有过不及格成绩的学生名单(Sno, Sname, Class);求学生的平均成绩和总成绩(Sname, PJCJ, ZCJ);查找各科成绩都 >= 85 分的学生(Sname, Class);将课程号为“01”的课程名称修改为“软件技术”;修改一名学生的姓名、性别、年龄;将成绩为55~59分的男生的成绩修改为60分;删除90年以后、80年以前出生的学生的所有信息(包括选课和成绩);删除一个班级的所有学生;删除所有数据表和数据库。 程序清单及结果: 1.创建数据库 MyDB

IF EXISTS (SELECT *

FROM master..sysdatabases

WHERE name = N'') DROP DATABASE MyDB; GO

CREATE DATABASE MYDB; GO

2.创建对象:Stu,Course,Score。

CREATE TABLE Stu( );

CREATE TABLE Course( );

CREATE TABLE Score( );

Sno CHAR(4), Cno CHAR(2),

PRIMARY KEY(Sno,Cno), Grade NUMERIC,

Cno CHAR(2)PRIMARY KEY, Cname CHAR(10), Chour NUMERIC,

Sno CHAR(4)PRIMARY KEY, Sname CHAR(10), Sex CHAR(2), Age NUMERIC, BirthDay DATETIME, Class CHAR(10),

3.插入信息

Insert into Stu(Sno,Sname,Sex,Age,BirthDay,Class) values ('2561','王五','wm','10','1990-03-30','电子1002'); Insert into Stu(Sno,Sname,Sex,Age,BirthDay,Class) values ('2562', '李四','m','21','1992-03-23','电子1001'); Insert into Stu(Sno,Sname,Sex,Age,BirthDay,Class) values ('2563','陈七','wm','25','1987-05-14','电子1002'); Insert into Stu(Sno,Sname,Sex,Age,BirthDay,Class) values ('2564','赵八','m','20','1993-12-24','电子1002'); Insert into Stu(Sno,Sname,Sex,Age,BirthDay,Class)

values ('2565','陆游','m','20','1978-12-5','电子1002'); Select Sno,Sname,Sex,Age,BirthDay,Class from Stu;

Insert into Course (Cno,Cname,Chour) values ('01','语文','32');

Insert into Course (Cno,Cname,Chour) values ('02','数学','64');

Insert into Course (Cno,Cname,Chour) values ('03','英语','40');

Select Cno,Cname,Chour from Course;

Insert into Score (Sno,Cno,Grade) values ('2567','01','97');

Insert into Score (Sno,Cno,Grade) values ('2568','01','54');

Insert into Score (Sno,Cno,Grade) values ('2569','01','56');

Insert into Score (Sno,Cno,Grade) values ('2560','01','88');

Insert into Score (Sno,Cno,Grade) values ('2561','02','87');

Insert into Score (Sno,Cno,Grade) values ('2562','03','79');

Insert into Score (Sno,Cno,Grade) values ('2563','02','68');

Insert into Score (Sno,Cno,Grade) values ('2564','03','58');

Insert into Score (Sno,Cno,Grade) values ('2565','03','98');

Select Sno,Cno,Grade from Score;

1.查询学生出生日期(Sno, Sname, BirthDay);

Select Sno,Sname,BirthDay from Stu;

2.按学号顺序查询一个班级的所有学生(Class, Sname);

Select Class,Sname from Stu order by Sno;

3.列出学生选择各门课程的成绩(Sname, Cname, Grade) ;

Select Sname,Cname,Grade from Stu,Course,Score where Stu.Sno=Score.Sno and Course.Cno=Score.Cno;

4.列出有过不及格成绩的学生名单(Sno, Sname, Class);

Select distinct Stu.Sno,Sname,Class from Stu,Score where Stu.Sno=Score.Sno and Grade<60;

5.求学生的平均成绩和总成绩(Sname, 数学, 英语);

Select Sname,avg(Grade) 数学,sum(Grade) 英语 from Stu,Score where Score.Sno=Stu.Sno group by Stu.Sname;

6. 查找各科成绩都 >= 85 分的学生(Sname, Class);

Select Sname,Class from Stu where exists (Select * from Score where Stu.Sno=Score.Sno and Score.Cno='01' and Score.Grade>=85)

and exists(Select * from Score where Stu.Sno=Score.Sno and Score.Cno='02' and Score.Grade>=85 ) and exists(Select * from Score where Stu.Sno=Score.Sno and Score.Cno='03' and Score.Grade>=85 ) ;

7. 将课程号为“01”的课程名称修改为“软件技术”

Update Course set Cname='软件技术' where Cno='01';

Select Cno,Cname from Course;

8.修改一名学生的姓名、性别、年龄;

Update Stu set Sname='张三',Sex='m',age='22'where Sno='2561'; Select Sno,Sname,Sex,age from Stu order by Sno;

9.将成绩为55~59分的男生的成绩修改为60分

Update Score set Grade=60 where Sno in(Select Sno from Stu where Sex='m') and Grade between 55 and 59;

Select Sname,Cname,Grade from Stu,Course,Score where Stu.Sno=Score.Sno and Course.Cno=Score.Cno;

10.删除90年以后、80年以前出生的学生的所有信息(包括选课和成绩)

Delete Stu where Sno in(select Sno from Stu where BirthDay < '1980-01-01' or BirthDay>'1990-12-31') ;

Select Sname,Cname,Grade,BirthDay from Stu,Course,Score where Stu.Sno=Score.Sno and Course.Cno=Score.Cno;

11.删除一个班级的所有学生

Delete from Stu where Class='电子1001'; Select Class,Sname from Stu order by Sno;

12. 删除所有数据表和数据库 Drop database MYDB;

本文来源:https://www.bwwdw.com/article/mox.html

Top