C语言课程设计源程序.docx
《C语言课程设计源程序.docx》由会员分享,可在线阅读,更多相关《C语言课程设计源程序.docx(47页珍藏版)》请在冰豆网上搜索。
C语言课程设计源程序
C语言课程设计源程序
第一天
1输入学生成绩并显示
#include
structstudent
{
charnumber[6];
charname[6];
intscore[3];
}stu[2];
voidoutput(structstudentstu[2]);
voidmain()
{
inti,j;
for(i=0;i<2;i++)
{
printf("请输入学生%d的成绩:
\n",i+1);
printf("学号:
");
scanf("%s",stu[i].number);
printf("姓名:
");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{
printf("成绩%d.",j+1);
scanf("%d",&stu[i].score[j]);
}
printf("\n");
}
output(stu);
}
voidoutput(structstudentstu[2])
{
inti,j;
printf("学号姓名成绩1成绩2成绩3\n");
for(i=0;i<2;i++)
{
printf("%-6s%-6s",stu[i].number,stu[i].name);
for(j=0;j<3;j++)
printf("%-8d",stu[i].score[j]);
printf("\n");
}
}
2显示输入数据
#include
#defineA"***"
#defineB"**"
#defineC"*"
#defineD"*"
main()
{staticchar*head[5][10]={{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}};
intnum,i,j;
charstr[5];
scanf("%d",&num);
itoa(num,str,10);
for(i=0;i<5;i++)
{printf("%10s","");
for(j=0;j<4;j++)
printf("%s",head[i][str[j]-'0']);
putchar('\n');
}}_
3日历源程序
#include
main()
{intweek,day,month,maxday;
intyear;
inti;
printf("inputyearandmonth");
scanf("%d%d",&year,&month);
printf("inputweekdayanddaysum:
");
scanf("%d%d",&week,&maxday);
printf("\n============%dyear%2dmonth================\n",year,month);
printf("SUNMONTUEWEBTURFRISAT\n");
for(i=0;iprintf("%4c",'');
for(day=1;day<=maxday;day++)
{printf("%4d",day);
week=(week+1)%7;
if(week==0)
printf("\n");
}
}
第二天
字符排序
输入一个字符串,可将字符串中的字符由小到大排列
#include
#include
bubble(strings,count)
char*strings;
intcount;
{
registerintm,n;
registerchars;
for(m=1;mfor(n=count-1;n>=m;--n)
{
if(strings[n-1]>strings[n])
{
s=strings[n-1];
strings[n-1]=strings[n];
strings[n]=s;
}
}
}
intmain(void)
{
intcount;
charstr[200];
printf("请输入字符串:
\n");
gets(str);
count=strlen(str);
bubble(str,count);
printf("排序之后的字符串是:
\n");
printf("%s.\n",str);
return0;
}
第三天
指法练习
/*模拟指法测试程序:
完成输入文字后,统计输入的正确率和输入速度。
*/
#include
#include
#include
#defineSIZE30
win()
{
clrscr();
gotoxy(20,2);printf("*------------------------------*");
gotoxy(20,3);printf("*FingeringTrainingSystem*");
gotoxy(20,4);printf("*DesignedByPrOve*");
gotoxy(20,5);printf("*2005-09-06*");
gotoxy(20,6);printf("*------------------------------*");
gotoxy(16,7);printf("...PressanykeytoentrytheSystem...");
getch();
clrscr();
gotoxy(5,2);printf("Inputoriginaltext:
\n");
gotoxy(5,22);printf("------------------------------------------------------");
gotoxy(5,23);printf("CorrectRate:
%");
gotoxy(33,23);printf("Speed:
w/s");
}
main()
{
charo1[150],o2[SIZE],o3[SIZE],o4[SIZE];/*每一行原文,最多150字符*/
chari1[150],i2[SIZE],i3[SIZE],i4[SIZE];/*每一行输入*/
inti;
longerror=0,correct=0;
floatcrate;
doublespeed;
doubleti;
charflag;
structtimet1,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("StartNow!
\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{
if(o1[i]!
=i1[i])
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("ContinueorNot(Y/N)?
");
flag=getch();
if(flag=='y'||flag=='Y')
gotostart;
else
{
clrscr();
gotoxy(26,7);printf("Welcometouse!
");
gotoxy(19,8);printf("...Pressanykeytoexit...");
getch();
exit
(1);
}
getch();
}
第四天
汉诺塔
(2)
#include
#include
chardd[10][20],space[20];
inta[11],b[11],c[11];
init()
{
inti,j;
for(i=0;i<20-1;i++)space[i]='';
space[i]='\0';
for(i=0;i<10;i++)
{for(j=0;j<20-1;j++)dd[i][j]='';
dd[i][j]='\0';
for(j=9-i;j<=9+i;j++)dd[i][j]='a'+i;
}
for(i=0;i<10;i++)a[i]=i,b[i]=-1,c[i]=-1;
a[10]=2,b[10]=25,c[10]=50;
for(i=0;i<10;i++)
{gotoxy(a[10],10+i);
cprintf("%s",dd[i]);
}
}
move(int*s,int*d)
{inti,j;
for(i=0;s[i]==-1&&i<10;i++);
gotoxy(s[10],10+i);
cprintf("%s",space);
for(j=0;d[j]==-1&&j<10;j++);
j--;
gotoxy(d[10],10+j);
cprintf("%s",dd[s[i]]);
d[j]=s[i];s[i]=-1;
getche();
}
voidhanoi(intn,int*s,int*w,int*d)
{inti;
if(n==1)move(s,d);
else
{hanoi(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
structH
{
intdata[15];/*存放每个盘的代号*/
inttop;/*每个塔的具体高度*/
}num[3];/*三个塔*/
voidmove(charx,chary,structHnum[3]);/*移动的具体过程*/
voidhanoi(charx,chary,charz,intn,structHnum[3]);/*递归*/
voidInit(void);/*初始化*/
voidClose(void);/*图形关闭*/
intcomputer=1;/*自动控制与手动控制的标志*/
intspeed=0;/*全局变量speed主要是演示过程的速度*/
voidmain(void)
{
Init();/*初始状态*/
Close();/*图形关闭*/
exit(0);
}
voidInit(void)/*初始化*/
{
intgd=DETECT,gm;
inti,n,color;
clrscr();
printf("pleaseinputn(n<=10):
");/*输入要演示的盘子数*/
scanf("%d",&n);
printf("Pleaseinput1or2:
\puter2.people\n");
scanf("%d",&i);
if(i==2)/*选择手动控制标志为0*/
computer=0;
if(n<1||n>10)
n=10;/*越界的话n当10处理*/
if(computer)/*如果是自动控制的话输入速度*/
{
printf("pleaseinputspeed:
");/*输入速度*/
scanf("%d",&speed);
}
initgraph(&gd,&gm,"c:
\\tc");
cleardevice();
for(i=0;i<3;i++)
num[i].top=-1;/*三个地方的高度开始都为-1*/
for(i=0;i{
num[0].top++;/*栈的高度加1*/
num[0].data[num[0].top]=i;/*最大的盘子代号为0,依次为1,2,…n-1*/
color=num[0].data[num[0].top]+1;/*盘子的颜色代码为栈顶盘子代号加1*/
setfillstyle(SOLID_FILL,color);
bar(100-(33-3*num[0].data[num[0].top]),400-20*i-8,100+
(33-3*num[0].data[num[0].top]),400-20*i+8);/*画矩形*/
}
setcolor(YELLOW);
outtextxy(180,450,"anykeytocontinue");
settextstyle(0,0,2);
outtextxy(90,420,"A");/*塔座标志*/
outtextxy(240,420,"B");
outtextxy(390,420,"C");
getch();/*接收字符后就执行递归操作*/
hanoi('a','b','c',n,num);
}
voidmove(charx,chary,structHnum[3])/*移动的具体过程*/
{
inti;
charnum1[3],num2[3];
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*num[x-97].data[num[x-97].top]),
400-20*num[x-97].top-8,100+150*(x-97)+(33-3*
num[x-97].data[num[x-97].top]),400-20*num[x-97].top+8);
num[y-97].top++;/*入栈,目标点的top加1*/
num[y-97].data[num[y-97].top]=num[x-97].data[num[x-97].top];/*在目标点盘子的代号与源点盘子的代号相同*/
num[x-97].top--;/*出栈,原来地方的top减1*/
setfillstyle(SOLID_FILL,num[y-97].data[num[y-97].top]+1);/*盘子颜色代码是栈顶盘子代号加1*/
bar(100+150*(y-97)-(33-3*num[y-97].data[num[y-97].top]),
400-20*num[y-97].top-8,100+150*(y-97)+
(33-3*num[y-97].data[num[y-97].top]),400-20*num[y-97].top+8);
if(computer)/*自动控制就用delay*/
delay(speed);/*延时函数*/
else
getch();/*手动控制的话就自己按键盘来控制*/
}
voidhanoi(charone,chartwo,charthree,intn,structHnum[3])/*递归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*/
}
}
voidClose(void)/*图形关闭*/
{
getch();
closegraph();
}
_
第五天
排序
(2)
/*1.源程序*/--------------------------冒泡排序法
#include
#include
#defineN8/*定义排序数据为8个*/
voidInit(inta[]);/*初始状态*/
voidClose(void);/*图形模式结束*/
voidPr(inta[],intn);/*输出数组*/
voidDrawChange(inti,intj);/*画交换箭头*/
voidBubble_sort(inta[],intn);/*冒泡排序*/
voidmain(void)
{
inti,a[N];
printf("Pleaseenter8intnumber\n");/*输入8个整数*/
for(i=0;iscanf("%d",&a[i]);
Init(a);/*初始状态*/
Bubble_sort(a,8);/*具体排序*/
Close();/*图形模式结束*/
exit(0);
}
voidInit(inta[])/*初始状态*/
{
intgd=DETECT,gm,i;
initgraph(&gd,&gm,"");/*初始化图形系统*/
cleardevice();/*清屏*/
setcolor(YELLOW);/*设置颜色*/
outtextxy(210,10,"anykeytocontinue");/*显示压任意键继续*/
Pr(a,40);/*第一次输出数组*/
getch();/*等待压任意键*/
}
voidClose(void)/*图形模式结束*/
{
getch();/*等待压任意键*/
closegraph();/*关闭图形模式*/
}
voidPr(inta[],intn)/*输出数组*/
{
inti;
charnum[5];
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);/*输出字符串*/
}
}
voidDrawChange(inti,intj)/*画交换箭头,画五根线组成一双向箭头线*/
{
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);
}
voidBubble_sort(inta[],intn)/*冒泡排序*/
{
inti,j,t,flag;