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'
CREATE DATABASE MYDB; GO