c语言,急!!!
《数据结构课程设计》1.算术表达式求值2.一元稀疏多项式计算器3.航空客运订票系统4.电梯模拟5.迷宫问题6.长整数四则运算7.简单行编辑程序8.多维数组9.校园导游程序...
《数据结构课程设计》
1. 算术表达式求值 2. 一元稀疏多项式计算器 3. 航空客运订票系统 4. 电梯模拟 5. 迷宫问题 6. 长整数四则运算 7. 简单行编辑程序 8. 多维数组 9. 校园导游程序 10. 银行业务模拟 11. 教学计划编制问题 12. 全国交通咨询模拟 13. 在国际象棋盘上马遍历问题; 14. 银行业务活动的模拟; 15. 程序分析; 16. 哈夫曼编/译码器; 17. 学籍管理系统; 18. 图书管理系统(要求B树建立书号索引)。
一两个就行啊 展开
1. 算术表达式求值 2. 一元稀疏多项式计算器 3. 航空客运订票系统 4. 电梯模拟 5. 迷宫问题 6. 长整数四则运算 7. 简单行编辑程序 8. 多维数组 9. 校园导游程序 10. 银行业务模拟 11. 教学计划编制问题 12. 全国交通咨询模拟 13. 在国际象棋盘上马遍历问题; 14. 银行业务活动的模拟; 15. 程序分析; 16. 哈夫曼编/译码器; 17. 学籍管理系统; 18. 图书管理系统(要求B树建立书号索引)。
一两个就行啊 展开
5个回答
展开全部
我发了几个我以前学数据结构的时候做的程序,你自己看着选吧
许多程序只要你换点关键字(词)就可以变成你想要的,每个完整程序前我用一行星号隔开了并编号了,别搞错了说我程序不完整哈
1.
// sqlist.cpp : 定义控制台应用程序的入口点。
//学生成绩管理系统(简单版)
#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "process.h"
#include <malloc.h>
#define MAXSIZE 100
#define LISTNCREMENT 10
struct student
{
char sNo[10];
char sName[10];
float fScore1;
float fScore2;
float fScore3;
float fTotal;
};
typedef struct student ElemType;
//顺序表定义
struct sqlist
{
ElemType *elem;
int length;
};
struct statistic
{
int iA;
int iB;
int iC;
int iD;
int iE;
};
typedef struct statistic Level;
typedef int status;
/********************************************
形式:status Init(sqllist &sl)
功能:顺序表初始化函数。
输入:顺序表引用变量。
输出:返回1表示初始化成功,0表示失败。
*********************************************/
status Init(sqlist &sl)
{
sl.elem = new ElemType[MAXSIZE+1];
sl.length = 0;
if (!sl.elem) return 0;
else return 1;
}
status Creat(sqlist &sl)
{
if (!sl.elem) return 0;
printf("输入表的长度:");
scanf("%d",&sl.length);
if (sl.length > MAXSIZE)
{
sl.elem=(ElemType*)realloc(sl.elem,(sl.length+LISTNCREMENT)*sizeof(ElemType));
return 0;
}
for (int i=1; i<sl.length+1; i++)
{
printf("输入学号 名字 成绩1 成绩2 成绩3\n");
scanf("%s%s%f%f%f",sl.elem[i].sNo,sl.elem[i].sName,&sl.elem[i].fScore1,&sl.elem[i].fScore2,&sl.elem[i].fScore3);
}
return 1;
}
status OutPut(sqlist sl)
{
if (!sl.length)
{
printf("表为空!");
return 0;
}
else if (sl.length <= 0 || sl.length > MAXSIZE)
{
printf("表没有初始化!");
return 0;
}
printf("表如下(包含%d个记录):",sl.length);
printf("\n学号\t姓名\t成绩1\t成绩2\t成绩3\n");
for (int i=1; i<sl.length+1; i++)
{
printf("%s\t%s\t%f\t%f\t%f\n",sl.elem[i].sNo,sl.elem[i].sName,sl.elem[i].fScore1,sl.elem[i].fScore2,sl.elem[i].fScore3);
}
return 1;
}
status Insert(sqlist &sl,int iPos,ElemType elem)
{
if (sl.length == MAXSIZE)
{
printf("表满,不能插入");
return 0;
}
if (iPos >sl.length+1)
{
printf("插入位置不正确!");
return 0;
}
//如果是插入到最后一个
if (iPos == sl.length+1 )
{
sl.elem[sl.length+1] = elem;
sl.length++;
return 1;
}
//移动元素
for (int i=sl.length; i>=iPos; i--)
{
sl.elem[i+1] = sl.elem[i];
}
sl.elem[iPos] = elem;
sl.length++;
return 1;
}
status Delete(sqlist &sl,int iPos,ElemType &elem)
{
if (!sl.length)
{
printf("表空,不能删除");
return 0;
}
if (iPos > sl.length)
{
printf("删除位置不正确!");
return 0;
}
if (iPos == sl.length)
{
elem = sl.elem[sl.length];
sl.length--;
return 1;
}
elem = sl.elem[iPos];
for (int i=iPos+1; i<=sl.length; i++)
{
sl.elem[i-1] = sl.elem[i];
}
sl.length--;
return 1;
}
status Find(sqlist sl,char *no)
{
for (int i=1; i<=sl.length; i++)
if (strcmp(sl.elem[i].sNo,no)==0)
{
printf("找到的学生成绩信息\n%s\t%s\t%f\t%f\t%f\n",sl.elem[i].sNo,sl.elem[i].sName,sl.elem[i].fScore1,sl.elem[i].fScore2,sl.elem[i].fScore3);
return 1;
}
if (i>sl.length)
{
printf("没有该记录!");
return 0;
}
return 0;
}
/*void GetLevel(sqlist sl,int &iA,int &iB,int &iC,int &iD,int &iE)
{
for(int i=1;i<=sl.length;i++)
{
}
}*/
/*void SetTotalScore(sqlist &sl)
{
}
*/
int main()
{
char ch;
int flag;
sqlist sl;
int iPos;
ElemType elem;
char *name = new char[10];
printf("/******学生成绩管理系统*****/\n");
printf("\n/******本系统基本操作如下:\n/******0:退出\n/******1:初始化\n/******2: 创建\n/******3: 输出\n");
printf("/******4: 插入\n/******5: 删除\n/******6: 查找\n");
//printf("请输入操作提示:(0~6)");
while (1)
{
printf("请输入操作提示:(0~6)");
rewind(stdin);
ch = getchar();
switch (ch)
{
case '0':
break;
case '1':
flag = Init(sl);
if (flag) printf("初始化成功!");
else printf("初始化失败!");
break;
case '2':
flag = Creat(sl);
if (flag) printf("创建成功!");
else printf("创建失败!");
break;
case '3':
OutPut(sl);
break;
case '4':
printf("输入插入位置:");
scanf("%d",&iPos);
printf("输入插入元素:学号 姓名 成绩1 成绩2 成绩3\n");
scanf("%s%s%f%f%f",elem.sNo,elem.sName,&elem.fScore1,&elem.fScore2,&elem.fScore3);
flag = Insert(sl,iPos,elem);
if (flag) printf("插入成功!");
else printf("插入失败!");
break;
case '5':
printf("输入删除位置:");
scanf("%d",&iPos);
flag = Delete(sl,iPos,elem);
if (flag) printf("删除成功!");
else printf("删除失败!");
break;
case '6':
printf("输入学号:");
scanf("%s",name);
flag = Find(sl,name);
break;
default:
continue;
}
if (ch == '0')
{
if (sl.length >=0 && sl.length <= MAXSIZE)
delete []sl.elem;
_exit(1);
}
//printf("请输入操作提示:(0~6)");
}
return 0;
}
***************************************************************
2.
//四则运算.cpp
#include"stdio.h"
#include"stdlib.h"
#include"conio.h"
#include"string.h"
double fhe(double s);
double fcha(double s);
double fji(double s);
double fsh(double s);
double a,b,s;;
char c;
int main(void)
{
int n;
printf("\t\t\t***--------简单四则运算---------***\t\t\t\n");
printf("\t\t*-->1.求和\t\t*-->2.求差\t\t\n");
printf("\t\t*-->3.求积\t\t*-->4.求商\t\t\n");
printf("\t\t*-->0.退出\t\t\n\n");
printf("\t\t请输入选择(1~4):");
scanf("%d",&n);
switch(n)
{
case'1':double fhe(double s);break;
case'2':double fcha(double s);break;
case'3':double fji(double s);break;
case'4':double fsh(double s);break;
case'0':exit(0);
default:printf("Unknown operator!\n");break;
}
system("cls");
return 0;
}
double fhe(double s)
{
scanf("%lf%c%lf",&a,&c,&b);
s=a+b;
printf("%lf%c%lf=%.2f",a,c,b,s);
return s;
}
double fcha(double s)
{
scanf("%lf%c%lf",&a,&c,&b);
s=a-b;
printf("%lf%c%lf=%.2f",a,c,b,s);
return s;
}
double fji(double s)
{
scanf("%lf%c%lf",&a,&c,&b);
s=a*b;
printf("%lf%c%lf=%.2f",a,c,b,s);
return s;
}
double fsh(double s)
{
scanf("%lf%c%lf",&a,&c,&b);
s=a/b;
printf("%lf%c%lf=%.2f",a,c,b,s);
return s;
}
**********************************************************************
3.
//表达式求值转化并求值.cpp
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define maxsize 100
#define error -6
typedef struct //运算符栈
{
char *base;
char *top;
int stacksize;
}sqstack;
typedef struct //操作数栈
{
double *base;
double *top;
int stacksize;
}dbstack;
void creat_charstack_exp(sqstack &s)
{
s.base = new char[maxsize];
if(!s.base) exit(1);
s.top=s.base;
s.stacksize=maxsize;
}
int popchar_exp(sqstack &s,char &e)
{
if(s.top==s.base)
{
printf("栈已空!");
return 0;
}
e=*--s.top;
return 1;
}
int getchar_exp(sqstack s,char &e)
{
if(s.top==s.base)
{
printf("栈已空!");
return 0;
}
e=*(s.top-1);
return 1;
}
int emptychar_exp(sqstack s)
{
if(s.top==s.base)
{
printf("栈已空!");
return 1;
}
return 0;
}
int pushchar_exp(sqstack &s,char e)
{
if(s.top-s.base>=s.stacksize)
{
printf("栈已满!");
return 0;
}
*s.top++=e;
return 1;
}
void disp(sqstack s)//显示元素
{
char *p=s.top;
while(p!=s.base){
printf("%c ",*(p-1));p--;
}
printf("\n");
}
void creat_dbstack_exp(dbstack &l)
{
l.base=new double[maxsize];
if(!l.base) exit(1);
l.top=l.base;
l.stacksize=maxsize;
}
int pushdb_exp(dbstack &L,double e)
{
if(L.top>=L.stacksize+L.base)
{
printf("栈已满!");
return 0;
}
*L.top++=e;
return 1;
}
int popdb_exp(dbstack &L,double &e)
{
if(L.top==L.base)
{
printf("栈空!");
return 0;
}
e=*--L.top;
return 1;
}
int prior(char a)
{
if(a=='+'||a=='-') return 1;
if(a=='#') return -1;
if(a=='*'||a=='/') return 2;
if(a=='(') return 0;
else return error;
}
void input(char exp[],char expcl[]){
int i=0,j=0;
while(exp[i]){
if(i==0 && exp[i]=='-'){
expcl[j++]='0'; expcl[j++]='-'; i++;
}
else if(exp[i]=='(' && exp[i+1]=='-'){
expcl[j++]='(';
expcl[j++]='0';
expcl[j++]='-';
i=i+2;
}
else {expcl[j++]=exp[i++];}
}
expcl[j++]='#';
expcl[j]='\0';
}
void transform_exp(char exp[],char tran[])
{
int i=0,j=0,n=0;
char c;
sqstack s;
creat_charstack_exp(s);
pushchar_exp(s,'#');
while(!emptychar_exp(s))
{ printf("\n当前遇到的是:%c\n",exp[i]);
if(exp[i]>='0'&& exp[i]<='9'||exp[i]=='.')
tran[j++]=exp[i];
else {
if(exp[i]!='#')tran[j++]=' ';
switch(exp[i]){
case '(': pushchar_exp(s,'('); break;
case ')': popchar_exp(s,c);
while( c!='('){
tran[j++]=c;
popchar_exp(s,c);
}
break;
default: while(getchar_exp(s,c)&&prior(c)>=prior(exp[i])){
if(c!='#')tran[j++]=c;
popchar_exp(s,c);
}
if(exp[i]!='#')pushchar_exp(s,exp[i]);
}
}
i++;
printf("当前的后缀式是:");
for(n=0;n<j;n++)
putchar(tran[n]);
putchar('\n');
printf("当前的运算符栈是:");
disp(s);
getch();
}
tran[j]='\0';
}
double ctof(char c[]){
int i,j;
int x=0;
double y=0.0;
for(i=0;i<strlen(c);i++){
if(c[i]=='.')break;
else x=x*10+c[i]-48;
}
if(c[i]=='.')
for(j=strlen(c)-1;j>i;j--)y=(y+(c[j]-48))*0.1;
return x+y;
}
double calculate_exp(char exp[])
{
double x=0,y=0,t1,t2,temp;
int i=0;
int j=0;
int k=1;
char num[30];
dbstack t;
creat_dbstack_exp(t);
while(exp[i]!='\0')
{
if(exp[i]>='0'&&exp[i]<='9'||exp[i]=='.'){
for(j=0; exp[i]>='0'&&exp[i]<='9'||exp[i]=='.'; i++)
num[j++]=exp[i];
num[j]='\0';
x=ctof(num);
pushdb_exp(t,x);
}
if(exp[i]==' ')i++;
if(exp[i]=='+'||exp[i]=='-'||exp[i]=='*'||exp[i]=='/')
{
popdb_exp(t,t2);
popdb_exp(t,t1);
char m=exp[i];
switch(m)
{
case '+':temp=t1+t2;
pushdb_exp(t,temp);break;
case '-':temp=t1-t2;
pushdb_exp(t,temp);break;
case '*':temp=t1*t2;
pushdb_exp(t,temp);break;
case '/':temp=t1/t2;
pushdb_exp(t,temp);break;
}
i++;
}
}
popdb_exp(t,temp);
return temp;
}
void main()
{
char ch='y';
double result=0;
while(ch=='y'||ch=='Y')
{system("cls");
int b;
printf("\n 表达式计算\n");
printf("\n 1.将表达式转化为后缀表达式计算\n");
printf("\n 2.退出\n");
printf("\n 请选择(1/2):");
scanf("%d",&b);
switch(b)
{
case 1:
char *exp,*expcl,*tran;
exp=new char[maxsize];
expcl=new char[maxsize];
tran=new char[maxsize];
printf("请输入表达式:");
scanf("%s",exp);
input(exp,expcl);
puts(expcl);
transform_exp(expcl,tran);
printf("\n原表达式转化的后缀表达式为:%s\n",tran);
result=calculate_exp(tran);
printf("\n计算结果:%f",result);
break;
default:
exit(1);
break;
}
fflush(stdin);
printf("\n是否继续计算,输入(y/n):");
scanf("%c",&ch);
}
}
*****************************************************************
4.
//银行模拟
//bank.cpp
#include "stdio.h"
#include "conio.h"
/******************************************
定义数据结构
*******************************************/
typedef struct _CUSTOMER_INFO{//客户信息数据结构
int nNO;
_CUSTOMER_INFO *pNext;
}CUSTOMER_INFO,*CUSTOMER_INFO_PTR;
typedef struct{//链式队列数据结构
CUSTOMER_INFO_PTR pFront;
CUSTOMER_INFO_PTR pRear;
}QUEUE;
/********************************************
形式:bool InitQueue(QUEUE &Q)
功能:队列初始化函数。
输入:队列引用变量。
输出:返回true表示创建成功,false表示创建失败。
*********************************************/
bool InitQueue(QUEUE &Q)
{
Q.pFront = Q.pRear = new CUSTOMER_INFO;
if(Q.pFront == NULL)
return false;
else{
Q.pFront->pNext = NULL;
return true;
}
}
/********************************************
形式:void UnInitQueue(QUEUE &Q)
功能:队列清空函数。
输入:队列引用变量。
输出:无。
*********************************************/
void UnInitQueue(QUEUE &Q)
{
CUSTOMER_INFO_PTR p;
while(Q.pFront->pNext != NULL){
p = Q.pFront->pNext;
Q.pFront->pNext = p->pNext;
delete p;
}
delete Q.pFront;
Q.pFront = Q.pRear = NULL;
}
/********************************************
形式:void EnterQueue(QUEUE &Q, CUSTOMER_INFO_PTR pCustomer)
功能:元素入队。
输入:队列引用变量,欲入队元素的指针。
输出:无。
*********************************************/
void EnterQueue(QUEUE &Q, CUSTOMER_INFO_PTR pCustomer)
{
Q.pRear->pNext = pCustomer;//新元素入队
Q.pRear = pCustomer;//修改队列尾指针
}
/********************************************
形式:CUSTOMER_INFO_PTR* LeaveQueue(QUEUE &Q)
功能:获取队头元素。
输入:队列引用变量。
输出:返回NULL表示队列为空,否则返回指向队头元素的指针。
*********************************************/
CUSTOMER_INFO_PTR LeaveQueue(QUEUE &Q)
{
if(Q.pFront == Q.pRear)
return NULL;
else{
CUSTOMER_INFO_PTR p;
p = Q.pFront->pNext;//获取指向队头元素的指针
Q.pFront->pNext = p->pNext;//从队列中摘除队头元素
if(Q.pRear == p)//如果是最后一个元素,则设置为空队列
Q.pRear = Q.pFront;
p->pNext = NULL;
return p;
}
}
int main(int argc, char* argv[])
{
int nChoice;//选择功能
int nCount = 0;//排队序号计数器
int nIteration = 1;//模拟次数计数
QUEUE Q[4];
CUSTOMER_INFO_PTR pCustomer;
printf(" ****************************************\n");
printf(" * 银行排队服务模拟系统 *\n");
printf(" ****************************************\n");
for(int i = 0; i < 4; i++)
InitQueue(Q[i]);//initialize queue
for(; ;){
printf("\n\n==========第%d次模拟处理============\n",nIteration++);
for(int j = 0; j < 4; j++){
if(j == 0)
printf("正在等待服务的顾客: ");
else
printf("%d号柜台已服务顾客: ", j);
pCustomer = Q[j].pFront->pNext;
while(pCustomer != NULL){
printf("%3d", pCustomer->nNO);
pCustomer = pCustomer->pNext;
}
printf("\n");
}
printf("\n");
printf("1----1号柜台服务\n");
printf("2----2号柜台服务\n");
printf("3----3号柜台服务\n");
printf("4----新客户取号等待服务\n");
printf("0----退出排队服务模拟程序\n");
printf("请选择: ");
scanf("%d",&nChoice);
if(nChoice < 0 || nChoice >4){//处理输入非法的情况
getchar();
printf("\n>>>输入非法!\n");
}
if(nChoice == 0)
break;
else if(nChoice == 4){//新客户到来
pCustomer = new CUSTOMER_INFO;
pCustomer->nNO = nCount++;
pCustomer->pNext = NULL;
EnterQueue(Q[0], pCustomer);
}else if(nChoice >=1 && nChoice <=3){//为队头客户服务
pCustomer = LeaveQueue(Q[0]);
if(pCustomer != NULL)
EnterQueue(Q[nChoice], pCustomer);
else{
printf("\n>>>当前没有等待客户!\n");
}
}
}
return 0;
}
*********************************************************************
5.
//banklink.cpp
//银行叫号模拟
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//链队列类型描述
typedef struct lnode{
int bh;
struct lnode *next;
}Node,*Qulink;
typedef struct {
Qulink f;
Qulink r;
}QueueLink;
//函数说明
void initqueue(QueueLink &Q);//初始化
void enqueue(QueueLink &Q,int e);//进队列
void outqueue(QueueLink &Q,int &e);//出队列
void dispqueue(QueueLink Q);//显示队列
int emptyqueue(QueueLink Q);//判断队列是否为空
int menu();
//函数定义
void initqueue(QueueLink &Q){
Q.f=Q.r=new Node;
Q.f->next=NULL;
}
void enqueue(QueueLink &Q,int e){
Qulink p;
p=new Node;
p->bh=e;
p->next=NULL;
Q.r->next=p;
Q.r=p;
}
void outqueue(QueueLink &Q,int &e){
Qulink p;
if(Q.f!=Q.r){
p=Q.f->next;
e=p->bh;
Q.f->next=p->next;
if(Q.r==p)Q.r=Q.f;
delete p;
}
}
void dispqueue(QueueLink Q){
Qulink p=Q.f->next;
while(p){
printf("%d<-",p->bh); p=p->next;
}
printf("\n");
}
int emptyqueue(QueueLink Q){
if(Q.f==Q.r)return 1;
else return 0;
}
int menu(){
int num ;
while(1){
system("cls");
printf("\n\n **********银行排队模拟系统*********\n");
printf(" 1--拿号排队 2--1号窗口\n\n");
printf(" 3--2号窗口 4--查看等待排队的顾客\n\n");
printf(" 0--退出\n\n");
printf(" 请选择1/2/3/4/0:");
scanf("%d",&num);
printf("\n\n");
if(num==0) {return num;break;}
else if(num>=1&&num<=4)return num;
else {printf("请重新选择!\n");getch();}
}
}
//主函数
void main(){
QueueLink Q; int num,e,count=0;
initqueue(Q);
while(1){
num=menu();
if (num==0)exit(0);
switch(num){
case 1: count+=1;enqueue(Q,count);printf("你拿的是%d号,请等候\n",count);
getch(); break;
case 2: if(!emptyqueue(Q)){
outqueue(Q,e); printf("正在1号窗口办理业务的顾客是:%d\n",e);
}
else printf("目前没有顾客在排队!\n") ;
getch(); break;
case 3: if(!emptyqueue(Q)){
outqueue(Q,e); printf("正在2号窗口办理业务的顾客是:%d\n",e);
}
else printf("目前没有顾客在排队!\n") ;
getch(); break;
case 4: if(!emptyqueue(Q)){
printf("正在排队的顾客有:");dispqueue(Q);
}
else printf("目前没有顾客在排队!\n") ;
getch(); break;
}
}
}
许多程序只要你换点关键字(词)就可以变成你想要的,每个完整程序前我用一行星号隔开了并编号了,别搞错了说我程序不完整哈
1.
// sqlist.cpp : 定义控制台应用程序的入口点。
//学生成绩管理系统(简单版)
#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "process.h"
#include <malloc.h>
#define MAXSIZE 100
#define LISTNCREMENT 10
struct student
{
char sNo[10];
char sName[10];
float fScore1;
float fScore2;
float fScore3;
float fTotal;
};
typedef struct student ElemType;
//顺序表定义
struct sqlist
{
ElemType *elem;
int length;
};
struct statistic
{
int iA;
int iB;
int iC;
int iD;
int iE;
};
typedef struct statistic Level;
typedef int status;
/********************************************
形式:status Init(sqllist &sl)
功能:顺序表初始化函数。
输入:顺序表引用变量。
输出:返回1表示初始化成功,0表示失败。
*********************************************/
status Init(sqlist &sl)
{
sl.elem = new ElemType[MAXSIZE+1];
sl.length = 0;
if (!sl.elem) return 0;
else return 1;
}
status Creat(sqlist &sl)
{
if (!sl.elem) return 0;
printf("输入表的长度:");
scanf("%d",&sl.length);
if (sl.length > MAXSIZE)
{
sl.elem=(ElemType*)realloc(sl.elem,(sl.length+LISTNCREMENT)*sizeof(ElemType));
return 0;
}
for (int i=1; i<sl.length+1; i++)
{
printf("输入学号 名字 成绩1 成绩2 成绩3\n");
scanf("%s%s%f%f%f",sl.elem[i].sNo,sl.elem[i].sName,&sl.elem[i].fScore1,&sl.elem[i].fScore2,&sl.elem[i].fScore3);
}
return 1;
}
status OutPut(sqlist sl)
{
if (!sl.length)
{
printf("表为空!");
return 0;
}
else if (sl.length <= 0 || sl.length > MAXSIZE)
{
printf("表没有初始化!");
return 0;
}
printf("表如下(包含%d个记录):",sl.length);
printf("\n学号\t姓名\t成绩1\t成绩2\t成绩3\n");
for (int i=1; i<sl.length+1; i++)
{
printf("%s\t%s\t%f\t%f\t%f\n",sl.elem[i].sNo,sl.elem[i].sName,sl.elem[i].fScore1,sl.elem[i].fScore2,sl.elem[i].fScore3);
}
return 1;
}
status Insert(sqlist &sl,int iPos,ElemType elem)
{
if (sl.length == MAXSIZE)
{
printf("表满,不能插入");
return 0;
}
if (iPos >sl.length+1)
{
printf("插入位置不正确!");
return 0;
}
//如果是插入到最后一个
if (iPos == sl.length+1 )
{
sl.elem[sl.length+1] = elem;
sl.length++;
return 1;
}
//移动元素
for (int i=sl.length; i>=iPos; i--)
{
sl.elem[i+1] = sl.elem[i];
}
sl.elem[iPos] = elem;
sl.length++;
return 1;
}
status Delete(sqlist &sl,int iPos,ElemType &elem)
{
if (!sl.length)
{
printf("表空,不能删除");
return 0;
}
if (iPos > sl.length)
{
printf("删除位置不正确!");
return 0;
}
if (iPos == sl.length)
{
elem = sl.elem[sl.length];
sl.length--;
return 1;
}
elem = sl.elem[iPos];
for (int i=iPos+1; i<=sl.length; i++)
{
sl.elem[i-1] = sl.elem[i];
}
sl.length--;
return 1;
}
status Find(sqlist sl,char *no)
{
for (int i=1; i<=sl.length; i++)
if (strcmp(sl.elem[i].sNo,no)==0)
{
printf("找到的学生成绩信息\n%s\t%s\t%f\t%f\t%f\n",sl.elem[i].sNo,sl.elem[i].sName,sl.elem[i].fScore1,sl.elem[i].fScore2,sl.elem[i].fScore3);
return 1;
}
if (i>sl.length)
{
printf("没有该记录!");
return 0;
}
return 0;
}
/*void GetLevel(sqlist sl,int &iA,int &iB,int &iC,int &iD,int &iE)
{
for(int i=1;i<=sl.length;i++)
{
}
}*/
/*void SetTotalScore(sqlist &sl)
{
}
*/
int main()
{
char ch;
int flag;
sqlist sl;
int iPos;
ElemType elem;
char *name = new char[10];
printf("/******学生成绩管理系统*****/\n");
printf("\n/******本系统基本操作如下:\n/******0:退出\n/******1:初始化\n/******2: 创建\n/******3: 输出\n");
printf("/******4: 插入\n/******5: 删除\n/******6: 查找\n");
//printf("请输入操作提示:(0~6)");
while (1)
{
printf("请输入操作提示:(0~6)");
rewind(stdin);
ch = getchar();
switch (ch)
{
case '0':
break;
case '1':
flag = Init(sl);
if (flag) printf("初始化成功!");
else printf("初始化失败!");
break;
case '2':
flag = Creat(sl);
if (flag) printf("创建成功!");
else printf("创建失败!");
break;
case '3':
OutPut(sl);
break;
case '4':
printf("输入插入位置:");
scanf("%d",&iPos);
printf("输入插入元素:学号 姓名 成绩1 成绩2 成绩3\n");
scanf("%s%s%f%f%f",elem.sNo,elem.sName,&elem.fScore1,&elem.fScore2,&elem.fScore3);
flag = Insert(sl,iPos,elem);
if (flag) printf("插入成功!");
else printf("插入失败!");
break;
case '5':
printf("输入删除位置:");
scanf("%d",&iPos);
flag = Delete(sl,iPos,elem);
if (flag) printf("删除成功!");
else printf("删除失败!");
break;
case '6':
printf("输入学号:");
scanf("%s",name);
flag = Find(sl,name);
break;
default:
continue;
}
if (ch == '0')
{
if (sl.length >=0 && sl.length <= MAXSIZE)
delete []sl.elem;
_exit(1);
}
//printf("请输入操作提示:(0~6)");
}
return 0;
}
***************************************************************
2.
//四则运算.cpp
#include"stdio.h"
#include"stdlib.h"
#include"conio.h"
#include"string.h"
double fhe(double s);
double fcha(double s);
double fji(double s);
double fsh(double s);
double a,b,s;;
char c;
int main(void)
{
int n;
printf("\t\t\t***--------简单四则运算---------***\t\t\t\n");
printf("\t\t*-->1.求和\t\t*-->2.求差\t\t\n");
printf("\t\t*-->3.求积\t\t*-->4.求商\t\t\n");
printf("\t\t*-->0.退出\t\t\n\n");
printf("\t\t请输入选择(1~4):");
scanf("%d",&n);
switch(n)
{
case'1':double fhe(double s);break;
case'2':double fcha(double s);break;
case'3':double fji(double s);break;
case'4':double fsh(double s);break;
case'0':exit(0);
default:printf("Unknown operator!\n");break;
}
system("cls");
return 0;
}
double fhe(double s)
{
scanf("%lf%c%lf",&a,&c,&b);
s=a+b;
printf("%lf%c%lf=%.2f",a,c,b,s);
return s;
}
double fcha(double s)
{
scanf("%lf%c%lf",&a,&c,&b);
s=a-b;
printf("%lf%c%lf=%.2f",a,c,b,s);
return s;
}
double fji(double s)
{
scanf("%lf%c%lf",&a,&c,&b);
s=a*b;
printf("%lf%c%lf=%.2f",a,c,b,s);
return s;
}
double fsh(double s)
{
scanf("%lf%c%lf",&a,&c,&b);
s=a/b;
printf("%lf%c%lf=%.2f",a,c,b,s);
return s;
}
**********************************************************************
3.
//表达式求值转化并求值.cpp
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define maxsize 100
#define error -6
typedef struct //运算符栈
{
char *base;
char *top;
int stacksize;
}sqstack;
typedef struct //操作数栈
{
double *base;
double *top;
int stacksize;
}dbstack;
void creat_charstack_exp(sqstack &s)
{
s.base = new char[maxsize];
if(!s.base) exit(1);
s.top=s.base;
s.stacksize=maxsize;
}
int popchar_exp(sqstack &s,char &e)
{
if(s.top==s.base)
{
printf("栈已空!");
return 0;
}
e=*--s.top;
return 1;
}
int getchar_exp(sqstack s,char &e)
{
if(s.top==s.base)
{
printf("栈已空!");
return 0;
}
e=*(s.top-1);
return 1;
}
int emptychar_exp(sqstack s)
{
if(s.top==s.base)
{
printf("栈已空!");
return 1;
}
return 0;
}
int pushchar_exp(sqstack &s,char e)
{
if(s.top-s.base>=s.stacksize)
{
printf("栈已满!");
return 0;
}
*s.top++=e;
return 1;
}
void disp(sqstack s)//显示元素
{
char *p=s.top;
while(p!=s.base){
printf("%c ",*(p-1));p--;
}
printf("\n");
}
void creat_dbstack_exp(dbstack &l)
{
l.base=new double[maxsize];
if(!l.base) exit(1);
l.top=l.base;
l.stacksize=maxsize;
}
int pushdb_exp(dbstack &L,double e)
{
if(L.top>=L.stacksize+L.base)
{
printf("栈已满!");
return 0;
}
*L.top++=e;
return 1;
}
int popdb_exp(dbstack &L,double &e)
{
if(L.top==L.base)
{
printf("栈空!");
return 0;
}
e=*--L.top;
return 1;
}
int prior(char a)
{
if(a=='+'||a=='-') return 1;
if(a=='#') return -1;
if(a=='*'||a=='/') return 2;
if(a=='(') return 0;
else return error;
}
void input(char exp[],char expcl[]){
int i=0,j=0;
while(exp[i]){
if(i==0 && exp[i]=='-'){
expcl[j++]='0'; expcl[j++]='-'; i++;
}
else if(exp[i]=='(' && exp[i+1]=='-'){
expcl[j++]='(';
expcl[j++]='0';
expcl[j++]='-';
i=i+2;
}
else {expcl[j++]=exp[i++];}
}
expcl[j++]='#';
expcl[j]='\0';
}
void transform_exp(char exp[],char tran[])
{
int i=0,j=0,n=0;
char c;
sqstack s;
creat_charstack_exp(s);
pushchar_exp(s,'#');
while(!emptychar_exp(s))
{ printf("\n当前遇到的是:%c\n",exp[i]);
if(exp[i]>='0'&& exp[i]<='9'||exp[i]=='.')
tran[j++]=exp[i];
else {
if(exp[i]!='#')tran[j++]=' ';
switch(exp[i]){
case '(': pushchar_exp(s,'('); break;
case ')': popchar_exp(s,c);
while( c!='('){
tran[j++]=c;
popchar_exp(s,c);
}
break;
default: while(getchar_exp(s,c)&&prior(c)>=prior(exp[i])){
if(c!='#')tran[j++]=c;
popchar_exp(s,c);
}
if(exp[i]!='#')pushchar_exp(s,exp[i]);
}
}
i++;
printf("当前的后缀式是:");
for(n=0;n<j;n++)
putchar(tran[n]);
putchar('\n');
printf("当前的运算符栈是:");
disp(s);
getch();
}
tran[j]='\0';
}
double ctof(char c[]){
int i,j;
int x=0;
double y=0.0;
for(i=0;i<strlen(c);i++){
if(c[i]=='.')break;
else x=x*10+c[i]-48;
}
if(c[i]=='.')
for(j=strlen(c)-1;j>i;j--)y=(y+(c[j]-48))*0.1;
return x+y;
}
double calculate_exp(char exp[])
{
double x=0,y=0,t1,t2,temp;
int i=0;
int j=0;
int k=1;
char num[30];
dbstack t;
creat_dbstack_exp(t);
while(exp[i]!='\0')
{
if(exp[i]>='0'&&exp[i]<='9'||exp[i]=='.'){
for(j=0; exp[i]>='0'&&exp[i]<='9'||exp[i]=='.'; i++)
num[j++]=exp[i];
num[j]='\0';
x=ctof(num);
pushdb_exp(t,x);
}
if(exp[i]==' ')i++;
if(exp[i]=='+'||exp[i]=='-'||exp[i]=='*'||exp[i]=='/')
{
popdb_exp(t,t2);
popdb_exp(t,t1);
char m=exp[i];
switch(m)
{
case '+':temp=t1+t2;
pushdb_exp(t,temp);break;
case '-':temp=t1-t2;
pushdb_exp(t,temp);break;
case '*':temp=t1*t2;
pushdb_exp(t,temp);break;
case '/':temp=t1/t2;
pushdb_exp(t,temp);break;
}
i++;
}
}
popdb_exp(t,temp);
return temp;
}
void main()
{
char ch='y';
double result=0;
while(ch=='y'||ch=='Y')
{system("cls");
int b;
printf("\n 表达式计算\n");
printf("\n 1.将表达式转化为后缀表达式计算\n");
printf("\n 2.退出\n");
printf("\n 请选择(1/2):");
scanf("%d",&b);
switch(b)
{
case 1:
char *exp,*expcl,*tran;
exp=new char[maxsize];
expcl=new char[maxsize];
tran=new char[maxsize];
printf("请输入表达式:");
scanf("%s",exp);
input(exp,expcl);
puts(expcl);
transform_exp(expcl,tran);
printf("\n原表达式转化的后缀表达式为:%s\n",tran);
result=calculate_exp(tran);
printf("\n计算结果:%f",result);
break;
default:
exit(1);
break;
}
fflush(stdin);
printf("\n是否继续计算,输入(y/n):");
scanf("%c",&ch);
}
}
*****************************************************************
4.
//银行模拟
//bank.cpp
#include "stdio.h"
#include "conio.h"
/******************************************
定义数据结构
*******************************************/
typedef struct _CUSTOMER_INFO{//客户信息数据结构
int nNO;
_CUSTOMER_INFO *pNext;
}CUSTOMER_INFO,*CUSTOMER_INFO_PTR;
typedef struct{//链式队列数据结构
CUSTOMER_INFO_PTR pFront;
CUSTOMER_INFO_PTR pRear;
}QUEUE;
/********************************************
形式:bool InitQueue(QUEUE &Q)
功能:队列初始化函数。
输入:队列引用变量。
输出:返回true表示创建成功,false表示创建失败。
*********************************************/
bool InitQueue(QUEUE &Q)
{
Q.pFront = Q.pRear = new CUSTOMER_INFO;
if(Q.pFront == NULL)
return false;
else{
Q.pFront->pNext = NULL;
return true;
}
}
/********************************************
形式:void UnInitQueue(QUEUE &Q)
功能:队列清空函数。
输入:队列引用变量。
输出:无。
*********************************************/
void UnInitQueue(QUEUE &Q)
{
CUSTOMER_INFO_PTR p;
while(Q.pFront->pNext != NULL){
p = Q.pFront->pNext;
Q.pFront->pNext = p->pNext;
delete p;
}
delete Q.pFront;
Q.pFront = Q.pRear = NULL;
}
/********************************************
形式:void EnterQueue(QUEUE &Q, CUSTOMER_INFO_PTR pCustomer)
功能:元素入队。
输入:队列引用变量,欲入队元素的指针。
输出:无。
*********************************************/
void EnterQueue(QUEUE &Q, CUSTOMER_INFO_PTR pCustomer)
{
Q.pRear->pNext = pCustomer;//新元素入队
Q.pRear = pCustomer;//修改队列尾指针
}
/********************************************
形式:CUSTOMER_INFO_PTR* LeaveQueue(QUEUE &Q)
功能:获取队头元素。
输入:队列引用变量。
输出:返回NULL表示队列为空,否则返回指向队头元素的指针。
*********************************************/
CUSTOMER_INFO_PTR LeaveQueue(QUEUE &Q)
{
if(Q.pFront == Q.pRear)
return NULL;
else{
CUSTOMER_INFO_PTR p;
p = Q.pFront->pNext;//获取指向队头元素的指针
Q.pFront->pNext = p->pNext;//从队列中摘除队头元素
if(Q.pRear == p)//如果是最后一个元素,则设置为空队列
Q.pRear = Q.pFront;
p->pNext = NULL;
return p;
}
}
int main(int argc, char* argv[])
{
int nChoice;//选择功能
int nCount = 0;//排队序号计数器
int nIteration = 1;//模拟次数计数
QUEUE Q[4];
CUSTOMER_INFO_PTR pCustomer;
printf(" ****************************************\n");
printf(" * 银行排队服务模拟系统 *\n");
printf(" ****************************************\n");
for(int i = 0; i < 4; i++)
InitQueue(Q[i]);//initialize queue
for(; ;){
printf("\n\n==========第%d次模拟处理============\n",nIteration++);
for(int j = 0; j < 4; j++){
if(j == 0)
printf("正在等待服务的顾客: ");
else
printf("%d号柜台已服务顾客: ", j);
pCustomer = Q[j].pFront->pNext;
while(pCustomer != NULL){
printf("%3d", pCustomer->nNO);
pCustomer = pCustomer->pNext;
}
printf("\n");
}
printf("\n");
printf("1----1号柜台服务\n");
printf("2----2号柜台服务\n");
printf("3----3号柜台服务\n");
printf("4----新客户取号等待服务\n");
printf("0----退出排队服务模拟程序\n");
printf("请选择: ");
scanf("%d",&nChoice);
if(nChoice < 0 || nChoice >4){//处理输入非法的情况
getchar();
printf("\n>>>输入非法!\n");
}
if(nChoice == 0)
break;
else if(nChoice == 4){//新客户到来
pCustomer = new CUSTOMER_INFO;
pCustomer->nNO = nCount++;
pCustomer->pNext = NULL;
EnterQueue(Q[0], pCustomer);
}else if(nChoice >=1 && nChoice <=3){//为队头客户服务
pCustomer = LeaveQueue(Q[0]);
if(pCustomer != NULL)
EnterQueue(Q[nChoice], pCustomer);
else{
printf("\n>>>当前没有等待客户!\n");
}
}
}
return 0;
}
*********************************************************************
5.
//banklink.cpp
//银行叫号模拟
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//链队列类型描述
typedef struct lnode{
int bh;
struct lnode *next;
}Node,*Qulink;
typedef struct {
Qulink f;
Qulink r;
}QueueLink;
//函数说明
void initqueue(QueueLink &Q);//初始化
void enqueue(QueueLink &Q,int e);//进队列
void outqueue(QueueLink &Q,int &e);//出队列
void dispqueue(QueueLink Q);//显示队列
int emptyqueue(QueueLink Q);//判断队列是否为空
int menu();
//函数定义
void initqueue(QueueLink &Q){
Q.f=Q.r=new Node;
Q.f->next=NULL;
}
void enqueue(QueueLink &Q,int e){
Qulink p;
p=new Node;
p->bh=e;
p->next=NULL;
Q.r->next=p;
Q.r=p;
}
void outqueue(QueueLink &Q,int &e){
Qulink p;
if(Q.f!=Q.r){
p=Q.f->next;
e=p->bh;
Q.f->next=p->next;
if(Q.r==p)Q.r=Q.f;
delete p;
}
}
void dispqueue(QueueLink Q){
Qulink p=Q.f->next;
while(p){
printf("%d<-",p->bh); p=p->next;
}
printf("\n");
}
int emptyqueue(QueueLink Q){
if(Q.f==Q.r)return 1;
else return 0;
}
int menu(){
int num ;
while(1){
system("cls");
printf("\n\n **********银行排队模拟系统*********\n");
printf(" 1--拿号排队 2--1号窗口\n\n");
printf(" 3--2号窗口 4--查看等待排队的顾客\n\n");
printf(" 0--退出\n\n");
printf(" 请选择1/2/3/4/0:");
scanf("%d",&num);
printf("\n\n");
if(num==0) {return num;break;}
else if(num>=1&&num<=4)return num;
else {printf("请重新选择!\n");getch();}
}
}
//主函数
void main(){
QueueLink Q; int num,e,count=0;
initqueue(Q);
while(1){
num=menu();
if (num==0)exit(0);
switch(num){
case 1: count+=1;enqueue(Q,count);printf("你拿的是%d号,请等候\n",count);
getch(); break;
case 2: if(!emptyqueue(Q)){
outqueue(Q,e); printf("正在1号窗口办理业务的顾客是:%d\n",e);
}
else printf("目前没有顾客在排队!\n") ;
getch(); break;
case 3: if(!emptyqueue(Q)){
outqueue(Q,e); printf("正在2号窗口办理业务的顾客是:%d\n",e);
}
else printf("目前没有顾客在排队!\n") ;
getch(); break;
case 4: if(!emptyqueue(Q)){
printf("正在排队的顾客有:");dispqueue(Q);
}
else printf("目前没有顾客在排队!\n") ;
getch(); break;
}
}
}
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
解:用prime()函数判断是否素数,用穷举法.歌德巴赫猜想验证也用穷举法,在所有组合中找两个数均为素数者.
#include
#include
using
namespace
std;
bool
prime(int
m){
if(m==1||m==0)
return
false;
if(m==2)
return
true;
int
k=(int)sqrt(m);
for(int
i=2;ik)
return
true;
else
return
false;
}
int
main(){
for(int
n=4;n<=50;n+=2){
for(int
i=2;i<=n/2;i++)
if(prime(i)&&prime(n-i))
cout<
}
return
0;
}
#include
#include
using
namespace
std;
bool
prime(int
m){
if(m==1||m==0)
return
false;
if(m==2)
return
true;
int
k=(int)sqrt(m);
for(int
i=2;ik)
return
true;
else
return
false;
}
int
main(){
for(int
n=4;n<=50;n+=2){
for(int
i=2;i<=n/2;i++)
if(prime(i)&&prime(n-i))
cout<
}
return
0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对于你的问题,对于一个老练的程序员估计也需要几天几夜的时间吧,呵呵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
几天几夜倒也不至于。一天的功夫恐怕是要的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询