[计算机类论文精品]C语言课程设计源程序.doc
C语言课程设计源程序第一天21输入学生成绩并显示22显示输入数据33日历源程序3第二天4字符排序4第三天5指法练习5第四天7汉诺塔(2)7第五天11排序(2)11第六天17模拟时钟(3)17第七、八、九天261贪吃蛇游戏262学生管理系统31第一天1输入学生成绩并显示 # include <stdio.h>struct studentchar number6;char name6;int score3; stu2;void output(struct student stu2);void main()int i, j;for(i=0; i<2; i+)printf("请输入学生%d的成绩:n", i+1);printf("学号:");scanf("%s", stui.number);printf("姓名:");scanf("%s", stui.name);for(j=0; j<3; j+)printf("成绩 %d. ", j+1);scanf("%d", &stui.scorej);printf("n");output(stu);void output(struct student stu2)int i, j;printf("学号 姓名 成绩1 成绩2 成绩3n"); for(i=0; i<2; i+)printf("%-6s%-6s", stui.number, stui.name);for(j=0; j<3; j+)printf("%-8d", stui.scorej);printf("n");2显示输入数据#include<stdio.h>#define A "* * *"#define B "* *"#define C "* "#define D " *"main()static char *head510=A,D,A,A,B,A,A,A,A,A,B,D,D,D,B,C,C,D,B,B,B,D,A,A,A,A,A,D,A,A,B,D,C,D,D,D,B,D,B,D,A,D,A,A,D,A,A,D,A,A;int num,i,j;char str5;scanf("%d",&num);itoa(num,str,10);for(i=0;i<5;i+)printf("%10s"," ");for(j=0;j<4;j+) printf("%s ",headistrj-'0'); putchar('n'); 3日历源程序#include<stdio.h>main()int week,day,month,maxday;int year;int i;printf("input year and month");scanf("%d%d",&year,&month);printf("input weekday and daysum:");scanf("%d%d",&week,&maxday);printf("n=%d year%2d month=n",year,month);printf(" SUN MON TUE WEB TUR FRI SATn");for(i=0;i<week;i+)printf("%4c",'');for(day=1;day<=maxday;day+) printf("%4d",day); week=(week+1)%7; if(week=0) printf("n"); 第二天字符排序输入一个字符串,可将字符串中的字符由小到大排列#include <stdio.h>#include <string.h>bubble(strings,count)char *strings;int count;register int m,n;register char s;for(m = 1;m<count;m+)for(n = count-1;n >= m;-n)if(stringsn-1>stringsn)s = stringsn-1;stringsn-1 = stringsn;stringsn = s;int main(void)int count;char str200;printf("请输入字符串:n");gets(str);count = strlen(str);bubble(str,count);printf("排序之后的字符串是:n");printf("%s.n",str);return 0;第三天指法练习/*模拟指法测试程序: 完成输入文字后,统计输入的正确率和输入速度。*/#include<string.h>#include<alloc.h>#include<dos.h>#define SIZE 30win() clrscr(); gotoxy(20,2);printf("*-*"); gotoxy(20,3);printf("* Fingering Training System *"); gotoxy(20,4);printf("* Designed By PrOve *"); gotoxy(20,5);printf("* 2005-09-06 *"); gotoxy(20,6);printf("*-*"); gotoxy(16,7);printf(".Press any key to entry the System."); getch(); clrscr(); gotoxy(5,2);printf("Input original text:n"); gotoxy(5,22);printf("-"); gotoxy(5,23);printf(" CorrectRate:%"); gotoxy(33,23);printf("Speed: w/s");main() char o1150,o2SIZE,o3SIZE,o4SIZE;/*每一行原文,最多150字符*/ char i1150,i2SIZE,i3SIZE,i4SIZE;/*每一行输入*/ int i; long error = 0,correct = 0; float crate; double speed; double ti; char flag; struct time t1,t2; start:win(); gotoxy(5,4);printf("-"); gotoxy(5,3);gets(o1); gotoxy(5,6);printf("-"); gotoxy(5,5);gets(o2);strcat(o1,o2); gotoxy(5,8);printf("-"); gotoxy(5,7);gets(o3);strcat(o1,o3); gotoxy(5,10);printf("-"); gotoxy(5,9);gets(o4);strcat(o1,o4); gotoxy(5,11);printf("Start Now!n"); gotoxy(5,13);printf("-"); gettime(&t1); /*计时开始*/ gotoxy(5,12);gets(i1); gotoxy(5,15);printf("-"); gotoxy(5,14);gets(i2);strcat(i1,i2); gotoxy(5,17);printf("-"); gotoxy(5,16);gets(i3);strcat(i1,i3); gotoxy(5,19);printf("-"); gotoxy(5,18);gets(i4);strcat(i1,i4); gettime(&t2);/*计时结束*/ for(i = 0;i <strlen(o1);i+) if(o1i != i1i) error+; else correct+; crate =(float) correct / (float)strlen(i1) * 100; ti = (double)(t2.ti_hour * 3600 + t2.ti_min * 60 + t2.ti_sec ) - (t1.ti_hour * 3600 + t1.ti_min * 60 + t1.ti_sec ); speed = (double)strlen(i1) / (double)ti; gotoxy(20,23);printf("%f",crate); gotoxy(40,23);printf("%lf",speed); gotoxy(5,20);printf("Continue or Not(Y/N) ?"); flag = getch(); if(flag = 'y' | flag = 'Y') goto start; else clrscr(); gotoxy(26,7);printf("Welcome to use!"); gotoxy(19,8);printf(".Press any key to exit."); getch(); exit(1); getch(); 第四天汉诺塔(2)#include <conio.h>#include <string.h>char dd1020,space20;int a11,b11,c11;init()int i,j;for(i=0;i<20-1;i+) spacei=' 'spacei='0'for(i=0;i<10;i+) for(j=0;j<20-1;j+)ddij=' ' ddij='0' for(j=9-i;j<=9+i;j+)ddij='a'+i;for(i=0;i<10;i+) ai=i,bi=-1,ci=-1;a10=2,b10=25,c10=50;for(i=0;i<10;i+)gotoxy(a10,10+i);cprintf("%s",ddi);move(int *s,int *d) int i,j; for(i=0;si=-1&&i<10;i+); gotoxy(s10,10+i); cprintf("%s",space); for(j=0;dj=-1&&j<10;j+); j-; gotoxy(d10,10+j); cprintf("%s",ddsi); dj=si;si=-1; getche();void hanoi(int n,int *s,int *w,int *d)int i;if(n= =1)move(s,d);elsehanoi(n-1,s,d,w);move(s,d);hanoi(n-1,w,s,d);main()clrscr();init();getche();hanoi(10,a,b,c);getche();/* 源程序2*/*汉诺塔2*/#include <graphics.h>struct H int data15;/*存放每个盘的代号*/ int top;/*每个塔的具体高度*/num3;/*三个塔*/void move(char x,char y,struct H num3);/*移动的具体过程*/void hanoi(char x,char y,char z,int n,struct H num3);/*递归*/void Init(void);/*初始化*/void Close(void);/*图形关闭*/int computer=1;/*自动控制与手动控制的标志*/int speed=0;/*全局变量speed主要是演示过程的速度*/void main(void) Init();/*初始状态*/ Close();/*图形关闭*/ exit(0);void Init(void)/*初始化*/ int gd=DETECT,gm; int i,n,color; clrscr(); printf("please input n(n<=10): ");/*输入要演示的盘子数*/ scanf("%d",&n); printf("Please input 1 or 2:puter 2.peoplen"); scanf("%d",&i); if(i=2)/*选择手动控制标志为0*/ computer=0; if(n<1|n>10) n=10;/*越界的话n当10处理*/ if(computer)/*如果是自动控制的话输入速度*/ printf("please input speed: ");/*输入速度*/ scanf("%d",&speed); initgraph(&gd,&gm,"c:tc"); cleardevice(); for(i=0;i<3;i+) numi.top=-1;/*三个地方的高度开始都为-1*/ for(i=0;i<n;i+)/*画一开始的塔座A上的盘子*/ num0.top+;/*栈的高度加1*/ num0.datanum0.top=i; /*最大的盘子代号为0,依次为1,2,n-1*/ color=num0.datanum0.top+1;/*盘子的颜色代码为栈顶盘子代号加1*/ setfillstyle(SOLID_FILL,color); bar(100-(33-3*num0.datanum0.top),400-20*i-8,100+(33-3*num0.datanum0.top),400-20*i+8); /*画矩形*/ setcolor(YELLOW); outtextxy(180,450,"any key to continue"); settextstyle(0,0,2); outtextxy(90,420,"A"); /*塔座标志*/ outtextxy(240,420,"B"); outtextxy(390,420,"C"); getch();/*接收字符后就执行递归操作*/ hanoi('a','b','c',n,num);void move(char x,char y,struct H num3)/*移动的具体过程*/ int i; char num13,num23; sprintf(num1,"%c",x-32);/*将小写变成大写,并转换成字符串输出*/ sprintf(num2,"%c",y-32); setfillstyle(SOLID_FILL,BLACK);/*把原来的地方移去涂黑*/ bar(0,0,640,60); setcolor(RED); outtextxy(150,30,num1);/*输出移动过程*/ outtextxy(200,30,"->"); outtextxy(310,30,num2); settextstyle(0,0,2); setfillstyle(SOLID_FILL,BLACK);/*把原来的地方移去涂黑*/ bar(100+150*(x-97)-(33-3*numx-97.datanumx-97.top),400-20*numx-97.top-8,100+150*(x-97)+(33-3*numx-97.datanumx-97.top),400-20*numx-97.top+8); numy-97.top+;/*入栈,目标点的top加1*/ numy-97.datanumy-97.top=numx-97.datanumx-97.top;/*在目标点盘子的代号与源点盘子的代号相同*/ numx-97.top-;/*出栈,原来地方的top减1*/ setfillstyle(SOLID_FILL,numy-97.datanumy-97.top+1);/*盘子颜色代码是栈顶盘子代号加1*/ bar(100+150*(y-97)-(33-3*numy-97.datanumy-97.top),400-20*numy-97.top-8,100+150*(y-97)+(33-3*numy-97.datanumy-97.top),400-20*numy-97.top+8); if(computer)/*自动控制就用delay*/ delay(speed);/*延时函数*/ else getch();/*手动控制的话就自己按键盘来控制*/void hanoi(char one,char two,char three,int n,struct H num3)/*递归n为盘子数,num为堆栈*/ if(n=1) move(one,three,num);/*如果盘子为1,将这个盘子从塔座A移动到塔座C*/ else hanoi(one,three,two,n-1,num);/*将塔座A的前n-1个盘子移到塔座B*/ move(one,three,num);/*将塔座A的第n个盘子移到塔座C*/ hanoi(two,one,three,n-1,num); /*将塔座B的n-1个盘子移到塔座C*/ void Close(void)/*图形关闭*/ getch(); closegraph();第五天排序(2)/*1. 源程序*/-冒泡排序法#include <graphics.h># include <dos.h>#define N 8 /*定义排序数据为8个*/void Init(int a);/*初始状态*/void Close(void);/*图形模式结束*/void Pr(int a,int n);/*输出数组*/void DrawChange(int i,int j);/*画交换箭头*/void Bubble_sort(int a,int n);/*冒泡排序*/void main(void) int i,aN; printf("Please enter 8 int numbern"); /*输入8个整数*/ for(i=0;i<N;i+) scanf("%d",&ai); Init(a);/*初始状态*/ Bubble_sort(a,8);/*具体排序*/ Close();/*图形模式结束*/ exit(0);void Init(int a)/*初始状态*/ int gd=DETECT,gm,i; initgraph(&gd,&gm,"");/*初始化图形系统*/ cleardevice(); /*清屏*/ setcolor(YELLOW); /*设置颜色*/ outtextxy(210,10,"any key to continue"); /*显示压任意键继续*/ Pr(a,40);/*第一次输出数组*/ getch(); /*等待压任意键*/void Close (void) /*图形模式结束*/ getch(); /*等待压任意键*/ closegraph(); /*关闭图形模式*/void Pr(int a,int n)/*输出数组*/ int i; char num5; settextstyle(0,0,2); /*设置输出样式*/ setcolor(GREEN); /*设置输出颜色*/ for(i=100;i<500;i+=50)/*i控制显示位置和计算数组下标*/ sprintf(num,"%d",a(i-100)/50); /*将数值转化为字符串*/ outtextxy(i,n,num); /*输出字符串*/ void DrawChange(int i,int j)/*画交换箭头,画五根线组成一双向箭头线*/ setcolor(6); line(j*50+120,i+8,j*50+140,i+8); /*按给出的坐标位置画直线*/ line(j*50+120,i+8,j*50+120+5,i+4); line(j*50+120,i+8,j*50+120+5,i+12); line(j*50+140,i+8,j*50+140-5,i+4); line(j*50+140,i+8,j*50+140-5,i+12);void Bubble_sort(int a,int n)/*冒泡排序*/ int i,j,t,flag; char num15,num25; for(i=0;i<n-1;i+)/*冒泡排序*/ flag=0; /*设置数据交换标志*/ for(j=0;j<n-1-i;j+) Pr(a,i*40+80);/*输出数*/ setcolor(BLUE);/*输出要比较的两个数*/ sprintf(num1,"%d",aj);/*将两个数字转成字符串输出*/ outtextxy(100+j*50,i*40+80,num1); sprintf(num2,"%d",aj+1); outtextxy(100+(j+1)*50,i*40+80,num2); sleep(1);/*暂停运行一秒*/*setfillstyle(SOLID_FILL,BLACK); bar(0,i*40+60,640,i*40+100);*/ /*只显示当前两个要交换的数据*/ if(aj>aj+1)/*如果前面的大于后面的*/ flag=1; /*置交换标志*/ DrawChange(i*40+80,j);/*画交换箭头*/ setcolor(RED); outtextxy(100+j*50,i*40+80,num1); outtextxy(100+(j+1)*50,i*40+80,num2); t=aj;/*交换*/ aj=aj+1; aj+1=t; sleep(1); setfillstyle(SOLID_FILL,BLACK);/*黑巨型的方式把这行给删除*/ bar(0,i*40+60,640,i*40+100); Pr(a,i*40+80); /*输出数*/ sleep(1); if(flag=0)break; /*如果本次比较没有发生交换则跳出循环*/ /*2. 源程序*/-/*二分查找程序*/#include <graphics.h>#include <stdlib.h>#define N 15 /*结点数设为15*/void find(int x,int y,int z);/*具体查找过程*/void Init(int x,int *n);/*图形初始化*/void Close();/*图形关闭*/void Put(int x,int y);/*输出数值*/void Up(int x);/*画上箭*/void Down(int x);/*画下箭*/void Mid(int x);/*画中间箭*/void Clr(int x);/*擦除画面上的一些内容*/void Sort(int x,int n);/*对随机数组排序*/void main(void) int aN,x; Init(a,&x);/*x为要查找的数*/ Put(a,N); find(a,x,N); Close(); exit(0);void Mid(int n)/*画中间键*/ setcolor(WHITE);/*中间箭的颜色为白色,以下三条线画成了箭头,以下两个函数一样*/ line(25+n*40,120,25+n*40,80); line(25+n*40,120,20+n*40,110); line(25+n*40,120,30+n*40,110);void Down(int n)/*画上箭*/ setcolor(6); line(25+n*40,120,25+n*40,80); line(25+n*40,120,20+n*40,110); line(25+n*40,120,30+n*40,110);void Up(int n)/*画下箭*/ setcolor(6); line(25+n*40,180,25+n*40,220); line(25+n*40,180,20+n*40,190); line(25+n*40,180,30+n*40,190);void Clr(int y)/*擦除画面上的一些内容*/ setfillstyle(SOLID_FILL,0);/*每次演示的时候先将下面显示的文字给去处掉*/ bar(0,y+50,640,y-50);/*这里是用矩形的方式*/void Put(int a,int n)/*输出数值*/ int i; char num5; setcolor(GREEN); settextstyle(0,0,2);/*设置字体的大小*/ for(i=0;i<n;i+) sprintf(num,"%d",ai);/*将数字转换成字符串输出*/ outtextxy(20+i*40,150,num); settextstyle(0,0,1); setcolor(BLUE); outtextxy(250,250,"anykey to continue"); getch();void find(int a,int y,int n)/*具体的查找*/ int low,high,mid,i; char str15,str25; sprintf(str1,"%d",y); low=0; high=n-1; setcolor(RED); settextstyle(0,0,2); outtextxy(200,10,"FIND"); outtextxy(330,10,str1); while(low<=high) Clr(250); Clr(80); Clr(230);/*这里三个Clr是为了把屏幕上的箭头和文字删了*/ mid=(high+low)/2;/*计算中间位置*/ Up(high); /*显示上边箭头*/ Down(low); /*显示右边箭头*/ Mid(mid);/*画好了三个箭头后开始查找*/ if(amid=y) /*如果找到跳出循环*/ break; if(amid<y) low=mid+1; /*修改左边界*/ sprintf(str2,"%d",amid); outtextxy(250,250,str2); /*显示比较数据的情况*/ outtextxy(300,250,"<"); outtextxy(350,250,str1); else high=mid-1;/*修改右边界*/ sprintf(str2,"%d",amid); outtextxy(250,250,str2); /*显示比较数据的情况*/ outtextxy(300,250,">"); outtextxy(350,250,str1); sleep(2);/*间隔一秒好执行下一次*/ setcolor(11); if(low<=high)/*找到*/ outtextxy(250,350,"FIND"); else/*没找到*/ outtextxy(250,350,"NOT FIND");void Sort(int a,int n)/*冒泡排序,自上而下*/ int i,j,t; for(i=0;i<n-1;i+) for(j=0;j<n-1-i;j+) if(aj>aj+1) t=aj; aj=aj+1; aj+1=t; /*数据交换*/void Init(int a,int *x)/*图形驱动*/ int i; int gd=DETECT,gm; randomize();/*随机函数*/ for(i=0;i<N;i+)/*随机生成数组*/ ai=random(100); /*生成100以内的数*/ Sort(a,N);/*排序*/ for(i=0;i<N;i+) printf("%-3d",ai); /*输出数据*/ printf("n"); printf("please input a num you want to find: ");/*输入要找的数*/ scanf("%d",x); initgraph(&gd,&gm,"c:tc");/*tc所在目录的路径*/ clearde