急求汉诺塔游戏演示 c语言程序 以最后演示效果为主 ...

1673人阅读
算法研究(5)
下面是西卡学院C语言汉诺塔演示程序。以前学习没有了解那里清楚,发现数据结构的应用很广啊。显示几个栈底是复制的别人的代码,再此表示感谢了。(VC++6.0下面可以运行)
stack.h内容
#define NULL 0
typedef int ElementT
typedef struct
ElementType *
Stack *InitStack(int n);
int Push(Stack *sp,ElementType *pdata);
int Pop(Stack *sp,ElementType *pdata);
int DestroyStack(Stack *sp);
int IsEmpty(Stack *sp);
int IsFull(Stack *sp);
int TravereStack(Stack *sp,int (*pfn)(ElementType *pdata,int ,int ),int x,int y);
stack.c内容
#include &stack.h&
#include &malloc.h&
#include &stdio.h&
#include &string.h&
Stack *InitStack(int n)
Stack *sp = NULL;
sp = (Stack *)malloc(sizeof(Stack));
sp-&pbuffer = (ElementType *)malloc(sizeof(ElementType)*n);
if(!sp-&pbuffer)
sp-&top = -1;
int Push(Stack *sp,ElementType *pdata)
if(IsFull(sp))
sp-&top++;
//sp-&pbuffer[sp-&top] = *
memcpy(sp-&pbuffer + sp-&top,pdata,sizeof(ElementType));
int Pop(Stack *sp,ElementType *pdata)
if(IsEmpty(sp))
*pdata = sp-&pbuffer[sp-&top];
sp-&top--;
int DestroyStack(Stack *sp)
free(sp-&pbuffer);
int IsEmpty(Stack *sp)
return sp-&top == -1;
int IsFull(Stack *sp)
return sp-&top == sp-&
int TravereStack(Stack *sp,int (*pfn)(ElementType *pdata,int x,int y),int x,int y)
for(i=0;i&sp-&top+1;i++)
pfn(sp-&pbuffer+i,x,y);
printf(&\n&);
汉诺塔主体函数,没有进行优化。
#include &stack.h&
#include &stdio.h&
#include &malloc.h&
#include &windows.h&
#include &conio.h&
int step = 0;
typedef struct
Stack * sp[3];
void gotoxy(int x,int y)
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),C);
void FreeThreeStack(Hannuota *han)
for(;i&3;i++)
if(han-&sp[i])
free(han-&sp[i]);
han-&sp[i] =0;
int DestroyHannuota(Hannuota *han)
FreeThreeStack(han);
free(han);
Hannuota * InitHannuota(int n)
Hannuota * han = NULL;
han = (Hannuota *)malloc(sizeof(Hannuota));
han-&total =
han-&y = 10;
for(i=0;i&3;i++)
han-&sp[i] = 0;
han-&x[i] = 10*i+10;
for(i=0;i&3;i++)
han-&sp[i] = InitStack(han-&total);
if(!han-&sp[i])
DestroyHannuota(han);
int ShowElement(ElementType *pdata,int x,int y)
gotoxy(x,y);
printf(&%d&,*pdata);
int ShowFace(Hannuota * ph)
gotoxy(8,3);
printf(&Hanio
Ver 0.1&);
for(i=0 ; i&3 ;i++)
gotoxy(ph-&x[i] - 2 , ph-&y + 1);
printf(&-----&);
gotoxy(ph-&x[i] , ph-&y + 2);
printf(&%c&,0x41 + i);
int ShowHannuota(Hannuota *han)
//clrscr();
system(&CLS&);
ShowFace(han);
for(;i&3;i++)
TravereStack(han-&sp[i],ShowElement,han-&x[i],han-&y);
gotoxy(8,14);
printf(&Step is No. %d &,step++);
int ChangeData(Hannuota *han,int a,int b)
Pop(han-&sp[a],&data);
Push(han-&sp[b],&data);
ShowHannuota(han);
//getchar();
void Mov(Hannuota *han,int num,int a,int b,int c)
Mov(han,num-1,a,c,b);
ChangeData(han,a,c);
Mov(han,num-1,b,a,c);
int GameStart(Hannuota *han)
int i = han-&
for(;i&0;i--)
Push(han-&sp[0],&i);
ShowHannuota(han);
Mov(han,han-&total,0,1,2);
int main()
Hannuota *han = InitHannuota(3);
GameStart(han);
DestroyHannuota(han);
具体效果如下:
面向对象的实现,请大牛赐教。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:278797次
积分:3287
积分:3287
排名:第7787名
原创:43篇
转载:161篇
评论:53条
(3)(2)(1)(2)(3)(3)(6)(2)(2)(2)(3)(14)(6)(1)(15)(2)(3)(4)(15)(8)(5)(14)(13)(25)(4)(4)(5)(6)(2)(4)(3)(2)(5)(3)(1)(3)(2)(2)(1)(1)(2)西卡C语言汉诺塔演示程序
下面是西卡学院C语言汉诺塔演示程序。以前学习没有了解那里清楚,发现数据结构的应用很广啊。显示几个栈底是复制的别人的代码,再此表示感谢了。(VC++6.0下面可以运行)
stack.h内容
#define NULL 0&
typedef int ElementT&
typedef struct&
&& ElementType *&
Stack *InitStack(int n);&
int Push(Stack *sp,ElementType *pdata);&
int Pop(Stack *sp,ElementType *pdata);&
int DestroyStack(Stack *sp);&
int IsEmpty(Stack *sp);&
int IsFull(Stack *sp);&
int TravereStack(Stack *sp,int (*pfn)(ElementType *pdata,int ,int ),int x,int y);&
stack.c内容
#include &stack.h&&
#include &malloc.h&&
#include &stdio.h&&
#include &string.h&&
Stack *InitStack(int n)&
&&& Stack *sp = NULL;&
&&& sp = (Stack *)malloc(sizeof(Stack));&
&&& if(!sp)&
&&& sp-&pbuffer = (ElementType *)malloc(sizeof(ElementType)*n);&
&&& if(!sp-&pbuffer)&
&&&&&& free(sp);&
&&&&&& sp=NULL;&
&&& sp-&max =&
&&& sp-&top = -1;&
int Push(Stack *sp,ElementType *pdata)&
&& if(IsFull(sp))&
&&&&&& return 0;&
&& sp-&top++;&
&& //sp-&pbuffer[sp-&top] = *&
&& memcpy(sp-&pbuffer + sp-&top,pdata,sizeof(ElementType));&
&& return 1;&
int Pop(Stack *sp,ElementType *pdata)&
&& if(IsEmpty(sp))&
&&&&&& return 0;&
&& *pdata = sp-&pbuffer[sp-&top];&
&& sp-&top--;&
&& return 1;&
int DestroyStack(Stack *sp)&
&& if(sp)&
&&&&& free(sp-&pbuffer);&
&&&&& free(sp);&
&&&&& return 1;&
&& return 0;&
int IsEmpty(Stack *sp)&
&& return sp-&top == -1;&
int IsFull(Stack *sp)&
&& return sp-&top == sp-&&
int TravereStack(Stack *sp,int (*pfn)(ElementType *pdata,int x,int y),int x,int y)&
&& int i =0;&
&& for(i=0;i&sp-&top+1;i++)&
&&&&& pfn(sp-&pbuffer+i,x,y);&
&&&&& y--;&
&& printf(&\n&);&
&& return 1;&
汉诺塔主体函数,没有进行优化。
#include &stack.h&&
#include &stdio.h&&
#include &malloc.h&&
#include &.h&&
#include &conio.h&&
int step = 0;&
typedef struct&
&& Stack * sp[3];&
&& int x[3];&
void gotoxy(int x,int y)&
&&& COORD C;&
&&& C.X =&
&&& C.Y =&
&&& SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),C);&
void FreeThreeStack(Hannuota *han)&
&&& int i =0;&
&&& for(;i&3;i++)&
&&&&&&& if(han-&sp[i])&
&&&&&&& {&
&&&&&&&&&&& free(han-&sp[i]);&
&&&&&&&&&&& han-&sp[i] =0;&
&&&&&&& }&
int DestroyHannuota(Hannuota *han)&
&&& if(han)&
&&&&&& FreeThreeStack(han);&
&&&&&& free(han);&
&&&&&& return 1;&
&&& return 0;&
Hannuota * InitHannuota(int n)&
&&& int i =0;&
&&& Hannuota * han = NULL;&
&&& han = (Hannuota *)malloc(sizeof(Hannuota));&
&&& if(!han)&
&&& han-&total =&
&&& han-&y = 10;&
&&& for(i=0;i&3;i++)&
&&&&&& han-&sp[i] = 0;&
&&&&&& han-&x[i] = 10*i+10;&
&&& for(i=0;i&3;i++)&
&&&&&& han-&sp[i] = InitStack(han-&total);&
&&&&& if(!han-&sp[i])&
&&&&&&&&&& DestroyHannuota(han);&
&&&&&&&&&&&
int ShowElement(ElementType *pdata,int x,int y)&
&& gotoxy(x,y);&
&& printf(&%d&,*pdata);&
&& return 1;&
int ShowFace(Hannuota * ph)&
&&&&&&& gotoxy(8,3);&
&&&&&&& printf(&Hanio&& Game&& Ver 0.1&);&
&&&&&&& for(i=0 ; i&3 ;i++)&
&&&&&&& {&
&&&&&&&&&&&&&&& gotoxy(ph-&x[i] - 2 , ph-&y + 1);&
&&&&&&&&&&&&&&& printf(&-----&);&
&&&&&&&&&&&&&&& gotoxy(ph-&x[i] , ph-&y + 2);&
&&&&&&&&&&&&&&& printf(&%c&,0x41 + i);&
&&&&&&& }&
&&&&&&& return 1;&
int ShowHannuota(Hannuota *han)&
&&& int i =0;&
&&& //clrscr();&
&&& system(&CLS&);&
&&& ShowFace(han);&
&&& for(;i&3;i++)&
&&&&& TravereStack(han-&sp[i],ShowElement,han-&x[i],han-&y);&
&&& gotoxy(8,14);&
&&& printf(&Step is No. %d &,step++);&
&&& getch();&
&&& return 1;&
int ChangeData(Hannuota *han,int a,int b)&
&&& ElementT&
&&& Pop(han-&sp[a],&data);&
&&& Push(han-&sp[b],&data);&
&&& ShowHannuota(han);&
&&& //getchar();&
&&& return 1;&
void Mov(Hannuota *han,int num,int a,int b,int c)&
&&& if(num&1)&
&&& Mov(han,num-1,a,c,b);&
&&& ChangeData(han,a,c);&
&&& Mov(han,num-1,b,a,c);&
int GameStart(Hannuota *han)&
&&&& int i = han-&&
&&&& for(;i&0;i--)&
&&&&&&&& Push(han-&sp[0],&i);&
&&&& ShowHannuota(han);&
&&&& Mov(han,han-&total,0,1,2);&
&&&& return 1;&
int main()&
&&& Hannuota *han = InitHannuota(3);&
&&& if(!han)&
&&&&&&& return 0;&
&&& }&&&&&
&&& GameStart(han);&
&&& DestroyHannuota(han);&
&&& return 1;&
具体效果如下:
面向对象的实现,请大牛赐教。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'查看: 3344|回复: 8
寒假,我们一起敲代码之第十二天汉诺塔问题
有事出去了几天, 出了两天的题目,发现题目质量很好,呵呵。好了,队列和栈的问题暂且告一段落,开始我们的递归之旅吧。说起递归,最著名的恐怕就是汉诺塔问题了吧:在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。   不管这个传说的可信度有多大,如果考虑一下把64片金片,由一根针上移到另一根针上,并且始终保持上小下大的顺序。这需要多少次移动呢?这里需要递归的方法。
现在有三根相邻的柱子,标号为A,B,C,A柱子从下到上按金字塔状(下面的盘中比上面的大)叠放着n个不同大小的圆盘,现在把所有盘子一个一个移动到柱子c上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问至少需要多少次移动,方法是什么?递归实现应该不难吧。另外大家能不能开动脑筋,想一想汉诺塔问题的非递归实现呢?另外群似乎满了,哎,想加入的同学等几天吧,看看有没有人退群。
下面是每天的问题,方便大家查阅
你还在坚持吗?
书上的算法实现 以前一直迷迷糊糊的 回来一看 原来如此 呵呵
#include &iostream&
int c=0;
void move(char x,int n,char z)
{
cout&&++c&&&.Move disk &&&n&&& from &&&x&&& to &&&z&&
}
void hanoi(int n,char x,char y,char z)
{
{
&&move(x,1,z);
{
&&hanoi(n-1,x,z,y);
&&move(x,n,z);
&&hanoi(n-1,y,x,z);
}
}
int main()
{
char a='x',b='y',c='z';
hanoi(n,a,b,c);
return 0;
}
复制代码
非递归加上点字符界面;呵呵#include &iostream&
#include &stack&
#include &cstring&
#include &vector&
#include &Windows.h&
static const int ConsoleWidth = 80-1;
static const int ConsoleHeight = 25-1;
struct HanoiStep
{
& &
& &
& &
& &
& &
& & HanoiStep():dump(false) {}
& & HanoiStep(int an,char astart,char aend,char auses)
& && &&&:n(an),start(astart),end(aend),uses(auses)
& & {
& & }
};
typedef void (*HanoiCallBack)(int BlockNo,char from,char to);
void hanoi(int n,char start,char end,char uses,HanoiCallBack func)
{
& & stack&HanoiStep &
& & HanoiStep s_
& & s_start.n =
& & s_start.start =
& & s_start.end =
& & s_start.uses =
& & steps.push(s_start);
& & while(steps.size()!=0)
& & {
& && &&&HanoiStep curStep = steps.top();
& && &&&steps.pop();
& && &&&if( curStep.dump )
& && &&&{
& && && && &func(curStep.n,curStep.start,curStep.end);
& && &&&}
& && &&&else if (curStep.n&=0)
& && &&&{
& && && && &
& && &&&}
& && &&&else
& && &&&{
& && && && &char tempStart = curStep.start,tempEnd = curStep.end,tempUses = curStep.
& && && && &int tempN = curStep.n-1;
& && && && &HanoiStep s1(tempN,tempStart,tempUses,tempEnd)
& && && && &,s2(curStep.n,tempStart,tempEnd,tempUses)
& && && && &,s3(tempN,tempUses,tempEnd,tempStart);
& && && && &s2.dump =
& && && && &steps.push(s3);
& && && && &steps.push(s2);
& && && && &steps.push(s1);
& && &&&}
& & }
}
void ConsoleDump(int BlockNo,char from, char to)
{
& & cout&&&Move &&&BlockNo&&& From &&&from&&& to &&&to&&
}
class Hanoi
{
public:
& & class Block
& & {
& & public:
& && &&&Block(int l=0):m_level(l) {}
& && &&&int getLevel()const
& && &&&{
& && && && &return m_
& && &&&}
& & private:
& && &&&int m_
& & };
& & Hanoi(int level)
& & {
& && &&&m_level =
& && &&&for(int i= i&0; --i)
& && &&&{
& && && && &A.push(Block(i));
& && &&&}
& & }
& & void start()
& & {
& && &&&display();
& && &&&hanoi(m_level,'a','b','c',CallBack);
& & }
& & static void CallBack(int bn,char from,char to)
& & {
& && &&&B
& && &&&if(from =='a')
& && &&&{
& && && && &b = A.top();
& && && && &A.pop();
& && &&&}
& && &&&else if(from == 'b')
& && &&&{
& && && && &b = B.top();
& && && && &B.pop();
& && &&&}
& && &&&else
& && &&&{
& && && && &b = C.top();
& && && && &C.pop();
& && &&&}
& && &&&if(to == 'a')
& && && && &A.push(b);
& && &&&else if(to == 'b')
& && && && &B.push(b);
& && &&&else
& && && && &C.push(b);
& && &&&display();
& & }
private:
& & static void display()
& & {
& && &&&memset(m_screen,' ',ConsoleWidth*ConsoleHeight);
& && &&&int XA = ConsoleWidth/4;
& && &&&int XB = 2*ConsoleWidth/4;
& && &&&int XC = 3*ConsoleWidth/4;
& && &&&int YA = ConsoleHeight-4;
& && &&&int YB = ConsoleHeight-4;
& && &&&int YC = ConsoleHeight-4;
& && &&&drawStick(XA,YA,A);
& && &&&drawStick(XC,YC,B);
& && &&&drawStick(XB,YB,C);
& && &&&print();
& && &&&Sleep(400);
& && &&&system(&cls&);
& & }
& & static int getSize(int l)
& & {
& && &&&float rate = float(l) / m_
& && &&&int retv =&&rate*ConsoleWidth/8;
& && &&&if(retv == 0)
& && && && &retv = 1;
& && &&&
& & }
& & static void drawStick(int x, int y, stack&Block& st)
& & {
& && &&&for(int i = x-9; i&x+9; ++i)
& && &&&{
& && && && &m_screen[i][y] = '=';
& && &&&}
& && &&&for(int i = i&5; --i)
& && &&&{
& && && && &m_screen[x][i] = '|';
& && &&&}
& && &&&vector&int &
& && &&&while(st.size()!=0)
& && &&&{
& && && && &sz.push_back(getSize(st.top().getLevel()));
& && && && &st.pop();
& && &&&}
& && &&&--y;
& && &&&for(int i=sz.size()-1; i!=-1; --i)
& && &&&{
& && && && &for(int j = x-sz[i]; j&x+sz[i]; ++j)
& && && && &{
& && && && && & m_screen[j][y]='#';
& && && && &}
& && && && &--y;
& && &&&}
& & }
& & static void print()
& & {
& && &&&for(int i=0; i&ConsoleH ++i)
& && &&&{
& && && && &for(int j=0; j&ConsoleW ++j)
& && && && &{
& && && && && & putchar(m_screen[j][i]);
& && && && &}
& && && && &printf(&\n&);
& && &&&}
& & }
& & static char m_screen[ConsoleWidth][ConsoleHeight];
& & static int m_
& & static stack&Block& A,B,C;
};
char Hanoi::m_screen[ConsoleWidth][ConsoleHeight];
stack&Hanoi::Block& Hanoi::A;
stack&Hanoi::Block& Hanoi::B;
stack&Hanoi::Block& Hanoi::C;
int Hanoi::m_
int main()
{
& & cout&&&输入汉诺塔阶数: &;
& &
& & cin&&l;
& & Hanoi h(l);
& & h.start();
& & return 0;
}
复制代码
//6个盘子的移动
#include&&&iostream.h&
#define N 6
void hano(int n,char a,char b,char c)
{& &
& & & & if(n==1)
& & & & {
& & & & & & & & cout&&a&&&-------&&&&c&&
& & & & }
& & & & else
& & & & {
& & & & & & & & hano(n-1,a,c,b);
& & & & & & & & cout&&a&&&-------&&&&c&&
& & & & & & & & hano(n-1,b,a,c);
& & & & }
}
int main()
{& &
& & & & char a,b,c;
& & & & a='a', b='b',c='c';
& & hano(N,a,b,c);
& & & & return 1;
}
复制代码
***的代码。恩,群里有篇pdf讲解这个算法的原理的。#include &stdio.h&
int st[30];
void mov(int n, int it)
{
& & int add[2] = {((n&1)+1), ((n&1)+1)^3},
& & for (i=0; i&n; ++i)
& && &&&if (it & (1 && i))
& & printf(&%d from %c to %c\n&, i+1, st[i] + 'A', (st[i] + add[i&1]) % 3 + 'A');
& & st[i] = (st[i] + add[i&1]) % 3;
}
void init(int n)
{
& &
& & for (i = 0; i & ++i) st[i] = 0;
}
int main()
{
& & int n,
& & scanf(&%d&, &n);
& & init(n);
& & for (i = 1; i & (1&&n); ++i)
& && &&&mov(n, i);
& & return 0;
}
复制代码
& & ***是?
& &群里的一个大姐,,他博客。
#include &stdio.h&
#define MAX 3
void print_proc(char a, char b, char c, int n,int*p);
int main()
{
char a='A',b='B',c='C';
int n=MAX;
int k=1;
print_proc(a,b,c,n,&k);
return 0;
}
void print_proc(char a, char b, char c, int n,int*p)
{
if(n&0)
{
print_proc(a, c, b,n-1,p);
printf(&(%d)%c ---& %c\n&,*p,a,c);
(*p)++;
print_proc(b,a,c,n-1,p);
}
每次贴代码都会发现大家的想法真的很好,自愧不如啊!!
尤其是这次的汉诺塔!!
Powered by&&/&&&&/&&
汉诺塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带到法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全部搬运完毕之时,此塔将毁损,而也就是世界末日来临之时。
如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘子,就将B当作辅助柱。如下图所示:
如果盘数超过2个,将第三个以下的盘子遮起来,就很简单了,每次处理两个盘子,也就是:A-&B、A -&C、B-&C 这三个步骤,而被遮住的部份,其实就可以用函数的递归来处理。
事实上,若有n个盘子,则移动完毕所需要的次数为2^n - 1,所以当盘数为64时,则所需次数为: 264 - 1 =
为5.82e+16年,也就是大约5000个世纪。如果你对这数字没什么概念,就假设每秒钟搬一个盘子好了,也要5850亿年左右。&
以下是代码实现:
void hanoi ( int n ,
printf ( &Move sheet from %c to %c\\n& , A , C );
hanoi ( n - 1 , A , C , B );
hanoi ( 1 , A , B , C );
hanoi ( n - 1 , B , A , C );
int main ()
printf ( &请输入盘数:& );
scanf ( &%d& ,
hanoi ( n ,
'A' ,
'B' ,
'C' );
推荐文章 TOP1013-14-2-13电本- C语言程序设计课程实践题目及要求-五星文库
免费文档下载
13-14-2-13电本- C语言程序设计课程实践题目及要求
导读:(2)功能要求:用c/c++设计一系统,(1)编写有一个程序,该程序输入职工工号和完成的产品数量,程序允许同一职工有多次输入,由程序对其完成的产品数量实现累计,程序按完成数量对他们排序,要求程序用有序链表存储数据信息,请编制一程序,(2)设计要求,(三)、单片机最小系统板相关题目(此类题目“难”题可两人合作),41、流水灯设计(难易程度:中),51、利用51单片机的定时器设计一个时钟(难易程度
(1) 编制一个学生籍贯信息记录簿,每个学生信息包括:学号、姓名、籍贯。
(2) 具体功能:
a. 创建信息链表并以磁盘文件保存;
b. 读取磁盘文件并显示输出所有学生的籍贯信息;
c. 按学号或姓名查询其籍贯;
d. 按籍贯查询并输出该籍贯的所有学生;
e. 能添加、删除和修改学生的籍贯信息;
f. 显示输出四川籍和非四川籍学生的信息并可分别存盘。
34. 车票管理系统 (难易程度:难 )
(1) 一车站每天有n个发车班次,每个班次都有一班次号(1、2、3…n),固定的发车时间,固定的
路线(起始站、终点站),大致的行车时间,固定的额定载客量。如
已定票人数
(2) 功能要求:用c/c++设计一系统,能提供下列服务:
a. 录入班次信息(信息用文件保存),可不定时地增加班次数据
b. 浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。
c. 查询路线:可按班次号查询 ,可按终点站查询
d. 售票和退票功能
A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数
B:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数
35. 职工工作量统计系统 (难易程度:中 )
(1) 编写有一个程序,该程序输入职工工号和完成的产品数量,程序允许同一职工有多次输入,由程序对其完成的产品数量实现累计。程序按完成数量对他们排序,并确定他们的名次。按完成的产品数量由多到少的顺序,输出名次、同一名次的职工人数及他们的工号(工号由小到大顺序输出)。要求程序用有序链表存储数据信息。
36. 值班安排系统 (难易程度:中 )
(1) 某公司有7名人员:赵、钱、孙、李、周、吴、陈。由于工作需要进行轮休制度,一星期中每人休息一天。预先让每一个人选择自己认为合适的休息日。请编制一程序,打印轮休的所有可能方案。当然使每个人都满意,例如每人选择的休息日如下:
赵:星期二、星期四
钱:星期一、星期六
孙:星期三、星期日
李:星期五
周:星期一、星期四、星期六
吴:星期二、星期五
陈:星期三、星期六、星期日
37. 职工工资管理系统(难易程度:中 )
(1) 数据结构
职工信息:编号;姓名;性别;年龄;职称;工资;
38. (1) 数据结构
图书信息:图书编号;书名;作者;书的价格;出版日期;是否借出;借阅者;借阅日期;归还日期
(239. (1) 信息: 宿舍号 楼号 系别 班级 班主任 宿舍成员 联系***
(2) 设计要求
a. 实现信息的录入、保存功能
b. 实现信息的查找功能
C. 实现信息的插入、删除、修改功能
40.班级信息管理系统 (难易程度:中 )
(1) 信息: 系别 班级 级别 专业 班级 班主任 人数 男生人数 女生人数 少数民族人数
(2) 设计要求
a. 实现信息的录入、保存功能
b. 实现信息的查找功能
C. 实现信息的插入、删除、修改功能
(三)、单片机最小系统板相关题目(此类题目“难”题可两人合作)
41、流水灯设计(难易程度:中 )
42、蜂鸣器发声(难易程度:中 )
43、继电器控制(难易程度:中 )
44、数码管的静态显示原理及实现(难易程度:中 )
45、数码管的动态显示原理及实现(难易程度:难 )
46、独立键盘、矩阵键盘的检测原理及实现(难易程度:难 )
47、AD、DA的工作原理及实现(难易程度:难 )
48、运放电路原理及实现(难易程度:难 )
49、串口通讯原理及实现(难易程度:难 )
50、1602液晶/12864液晶显示原理及实现(难易程度:难 )
51、利用51单片机的定时器设计一个时钟(难易程度:难 )
(四)游戏及其它设计
52. 俄罗斯方块(难易程度:难 可以两人合作)
(1) 设计要求:
a. 实现俄罗斯方块游戏的功能。
b. 正确使用系统提供的字符屏幕处理函数,图形系统的相关函数和其它函数。
53. 扫雷游戏(难易程度:难 可以两人合作)
(1) 设计要求:
a. 实现扫雷游戏的功能。
b. 正确使用系统提供的字符屏幕处理函数,图形系统的相关函数和其它函数
54. 汉诺塔游戏的演示(难易程度:难 可以两人合作)
(1) 设计要求:
a. 用图形演示汉诺塔游戏的过程。
b. 正确使用系统提供的各种函数帮助完成程序设计。
55. 简单图形处理系统 (难易程度:中 )
(1) 设某图形处理程序只考虑点、直线、圆三种基本图形。对于点,给出点的横纵坐标;对于直线,给出直线方程ax+by+c=0的三个系数a,b,c;对于圆,给出圆心坐标和半径。试说明图形的几何形状类型,并编写输入和输出图形数据、求两点矩离、求两直线交点、
已知点和半径形成圆、已知两点形成直线等函数。
56. 模拟时钟转动程序 (难易程度:难 )
要求: 能模拟机械钟表行走,还要准确地利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。
四 考查注意事项
1.考查与竞赛时间地点:于本学期末在北107进行,各参赛者演示及答辩时间不多于8分钟。
2.交付考查作品:各参赛者将要演示的作品及其支持软件提前装于指定演示的计算机上。 演示比赛之后各位同学即将作品统一上交于本班学习委员刻录在光盘上,然后交给任课教师备案复查。光盘内含实践题目及要求、全部作品(各位同学承担某序号题目的系统设计程序文件、演示文档、说明文档)、优秀作品、选题结果表、成绩分析表和支持工具软件等完整资料。不预交作品者无参赛资格,内容不完整者(或无法打开文件进行复评)将影响最终成绩。
3.系统演示和课件说明: 须准备3-5分钟以内的系统演示或制作演示PPT课件,即将
所设计的应用程序进行现场演示,制作说明包括:参赛题目(如:基于C语言设计的俄罗斯方块),作者(班级,学号,姓名),制作条件(软、硬件环境),提交计算或处理的成果(输入/输出系统,处理信号的对比,动画效果等),总结(制作特点,经验,体会等)。
4.支持演示或再制作的工具软件:支持各设计和演示的工具软件有可能不同,应尽可能在光盘上附录这些软件。
五 考查与竞赛作品评分标准(若无演示文档及说明报告,在备注中标注,在总分中扣10分)
2.演示效果:
3.基础理论:
4.陈述答辩:
5.制作特色:
6.选题难度:
7.应用创新:
附1:学年度第2学期《C语言程序设计》实践考查选题结果汇总表
附2:学年度第2学期《C语言程序设计》实践考查评分表
包含总结汇报、考试资料、IT计算机、文档下载、教学研究、教学教材、党团工作、外语学习以及13-14-2-13电本- C语言程序设计课程实践题目及要求等内容。本文共3页
相关内容搜索

参考资料

 

随机推荐