
我的楼主可以自己玩一下
试试吧
#define N 200
#include <graphicsh>
#include <stdlibh>
#include <dosh>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
int i,key;
int score=0;/得分/
int gamespeed=50000;/游戏速度自己调整/
struct Food
{
int x;/食物的横坐标/
int y;/食物的纵坐标/
int yes;/判断是否要出现食物的变量/
}food;/食物的结构体/
struct Snake
{
int x[N];
int y[N];
int node;/蛇的节数/
int direction;/蛇移动方向/
int life;/ 蛇的生命,0活着,1死亡/
}snake;
void Init(void);/图形驱动/
void Close(void);/图形结束/
void DrawK(void);/开始画面/
void GameOver(void);/结束游戏/
void GamePlay(void);/玩游戏具体过程/
void PrScore(void);/输出成绩/
/主函数/
void main(void)
{
Init();/图形驱动/
DrawK();/开始画面/
GamePlay();/玩游戏具体过程/
Close();/图形结束/
}
/图形驱动/
void Init(void)
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
cleardevice();
}
/开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙/
void DrawK(void)
{
/setbkcolor(LIGHTGREEN);/
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/设置线型/
for(i=50;i<=600;i+=10)/画围墙/
{
rectangle(i,40,i+10,49); /上边/
rectangle(i,451,i+10,460);/下边/
}
for(i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10); /左边/
rectangle(601,i,610,i+10);/右边/
}
}
/玩游戏具体过程/
void GamePlay(void)
{
randomize();/随机数发生器/
foodyes=1;/1表示需要出现新食物,0表示已经存在食物/
snakelife=0;/活着/
snakedirection=1;/方向往右/
snakex[0]=100;snakey[0]=100;/蛇头/
snakex[1]=110;snakey[1]=100;
snakenode=2;/节数/
PrScore();/输出得分/
while(1)/可以重复玩游戏,压ESC键结束/
{
while(!kbhit())/在没有按键的情况下,蛇自己移动身体/
{
if(foodyes==1)/需要出现新食物/
{
foodx=rand()%400+60;
foody=rand()%350+60;
while(foodx%10!=0)/食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到/
foodx++;
while(foody%10!=0)
foody++;
foodyes=0;/画面上有食物了/
}
if(foodyes==0)/画面上有食物了就要显示/
{
setcolor(GREEN);
rectangle(foodx,foody,foodx+10,foody-10);
}
for(i=snakenode-1;i>0;i--)/蛇的每个环节往前移动,也就是贪吃蛇的关键算法/
{
snakex[i]=snakex[i-1];
snakey[i]=snakey[i-1];
}
/1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头/
switch(snakedirection)
{
case 1:snakex[0]+=10;break;
case 2: snakex[0]-=10;break;
case 3: snakey[0]-=10;break;
case 4: snakey[0]+=10;break;
}
for(i=3;i<snakenode;i++)/从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来/
{
if(snakex[i]==snakex[0]&&snakey[i]==snakey[0])
{
GameOver();/显示失败/
snakelife=1;
break;
}
}
if(snakex[0]<55||snakex[0]>595||snakey[0]<55||
snakey[0]>455)/蛇是否撞到墙壁/
{
GameOver();/本次游戏结束/
snakelife=1; /蛇死/
}
if(snakelife==1)/以上两种判断以后,如果蛇死就跳出内循环,重新开始/
break;
if(snakex[0]==foodx&&snakey[0]==foody)/吃到食物以后/
{
setcolor(0);/把画面上的食物东西去掉/
rectangle(foodx,foody,foodx+10,foody-10);
snakex[snakenode]=-20;snakey[snakenode]=-20;
/新的一节先放在看不见的位置,下次循环就取前一节的位置/
snakenode++;/蛇的身体长一节/
foodyes=1;/画面上需要出现新的食物/
score+=10;
PrScore();/输出新得分/
}
setcolor(4);/画出蛇/
for(i=0;i<snakenode;i++)
rectangle(snakex[i],snakey[i],snakex[i]+10,
snakey[i]-10);
delay(gamespeed);
setcolor(0);/用黑色去除蛇的的最后一节/
rectangle(snakex[snakenode-1],snakey[snakenode-1],
snakex[snakenode-1]+10,snakey[snakenode-1]-10);
} /endwhile(!kbhit)/
if(snakelife==1)/如果蛇死就跳出循环/
break;
key=bioskey(0);/接收按键/
if(key==ESC)/按ESC键退出/
break;
else
if(key==UP&&snakedirection!=4)
/判断是否往相反的方向移动/
snakedirection=3;
else
if(key==RIGHT&&snakedirection!=2)
snakedirection=1;
else
if(key==LEFT&&snakedirection!=1)
snakedirection=2;
else
if(key==DOWN&&snakedirection!=3)
snakedirection=4;
}/endwhile(1)/
}
/游戏结束/
void GameOver(void)
{
cleardevice();
PrScore();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(200,200,"GAME OVER");
getch();
}
/输出成绩/
void PrScore(void)
{
char str[10];
setfillstyle(SOLID_FILL,YELLOW);
bar(50,15,220,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"score:%d",score);
outtextxy(55,20,str);
}
/图形结束/
void Close(void)
{
getch();
closegraph();
}
#include<stdioh>
#include <stringh>
#define NULL 0
#define LEN sizeof(struct student)
struct date
{ int year;
int month;
int day;
};
struct xueke
{
int pingshi;
int shiyan;
int kaoshi;
float zchji;
};
struct student
{
int num;
char name[10];
char sex;
struct date birthday;
struct xueke xk[2];
struct student next; /指向下一个结构体数据类型/
};
typedef struct student score; /用score来代替类型struct student/
int n,k; /nk为全局变量,n表示结点个数,k表示人数/
score r=NULL; /定义一个全局变量指针/
score stu;
/菜单/
int caidan(k)
{
int i;
printf("\n\n\n\t\t\t\t考试成绩管理系统\n");
printf("\t\t\t作者:薛文波、魏文清、姚志浩\n");
for(i=1;i<79;i++)
printf("");
printf("\n");
printf("1输入学生资料\t\t2输出学生资料\t\t3统计学生资料\n");
printf("4删除学生资料\t\t5查询学生资料\t\t6排序学生资料\n");
printf("7插入学生资料\t\t8更新学生资料\t\t9保存学生资料\n");
printf("0退出!\n");
for(i=1;i<79;i++)
printf("");
printf("\n");
printf("请输入你所要 *** 作的选项:");
scanf("%d",&k);
printf("\n");
getchar();
return(k);
}
//
save(score head)
{
score q=head;
FILE fp; /调用fopen()函数打开磁盘文件/
char wjlj[90];
printf("请输入文件的路经:");
scanf("%s",wjlj);
if((fp=fopen(wjlj,"w"))==NULL) /为读、写建立一个新的二进制文件 /
{
printf("文件打开失败!\n");
return(0);
}
fprintf(fp,"\n");
fprintf(fp,"|学号|姓名|性别|生 日 |");
fprintf(fp,"C(平时实验考试综合)|");
fprintf(fp,"高数(平时实验考试综合)\n");
fprintf(fp,"\n");
while(q!=NULL)
{
fprintf(fp,"|%4d|%4s|%4c|%4d-%2d-%2d|",q->num,q->name,q->sex,q->birthdayyear,q->birthdaymonth,q->birthdayday);
fprintf(fp,"%5d|%5d|%5d|%1f|",q->xk[0]pingshi,q->xk[0]shiyan,q->xk[0]kaoshi,q->xk[0]zchji);
fprintf(fp,"%5d|%5d|%5d|%1f\n",q->xk[1]pingshi,q->xk[1]shiyan,q->xk[1]kaoshi,q->xk[1]zchji);
q=q->next;
}
fclose(fp); /关闭文件指针fP指向的文件/
printf("文件已保存\n");
return(0);
}
/输入模块/
score creat(void)
{
score head,p1,p2; /定义一个头指针和两个工作点/
int i;
head=NULL;
n=0;
p1=(struct student )malloc(LEN); /用P1开辟一个新单元/
printf("1请输入学生资料(输0退出):\n");
printf("a请输入学生学号(学号应大于0):");
scanf("%d",&p1->num);
while(p1->num<0)
{
printf("输入错误,请重新输入:"); / 学号小于零报错/
scanf("%d",&p1->num);
}
while(p1->num!=0)
{ printf("b请输入学生的姓名:");
scanf("%s",p1->name);
printf("请输入学生的性别(M&&F):");
scanf(" %c",&p1->sex);
while(p1->sex!='M'&&p1->sex!='F') /判断输入性别时的字母是否为M或F/
{
printf("输入错误,请重新输入学生的性别:");
scanf(" %c",&p1->sex);
}
printf("c请输入学生的生日(年月日):");
scanf(" %d%d%d",&p1->birthdayyear,&p1->birthdaymonth,&p1->birthdayday);
printf("d请输入学生的成绩!\n");
printf("1请输入 C 成绩(平时,实验,考试):");
scanf(" %d,%d,%d",&p1->xk[0]pingshi,&p1->xk[0]shiyan,&p1->xk[0]kaoshi);
p1->xk[0]zchji=p1->xk[0]pingshi01+p1->xk[0]shiyan02+p1->xk[0]kaoshi07;
printf("2请输入高数成绩(平时,实验,考试):");
scanf(" %d,%d,%d",&p1->xk[1]pingshi,&p1->xk[1]shiyan,&p1->xk[1]kaoshi);
p1->xk[1]zchji=p1->xk[1]pingshi01+p1->xk[1]shiyan02+p1->xk[1]kaoshi07;
n=n+1; /结点个数加一/
if(n==1) head=p2=p1; /若为首结点,则头指针指向本结点/
else p2->next=p1;
p2=p1; /若不是首结点 则把本结点链接到尾部/
p1=(struct student )malloc(LEN);
printf("\n");
printf("1请输入学生资料(输0退出):\n");
printf("a请输入学生的学号(学号应大于0):");
scanf("%d",&p1->num);
while(p1->num<0) /判断输入的学号是否小于0/
{
printf("输入错误,输入错误请重新输入学号:");
scanf("%d",&p1->num);
}
}
p2->next=NULL; / 最后结点不指向任何地址/
free(p1); /释放结点占用空间/
return(head);
}
/输出模块/
void print(score head)
{
score q=head;
printf("\n输出%d个学生的资料:\n",n);
printf("\n");
printf("|学号|姓名|性别|生 日 |");
printf("C(平时实验考试综合)|");
printf("高数(平时实验考试综合)\n");
printf("\n");
if(head==NULL)
{
printf("\n没有这个学生的资料!\n");
return;
}
while(q!=NULL)
{
printf("|%4d|%4s|%4c|%4d-%2d-%2d|",q->num,q->name,q->sex,q->birthdayyear,q->birthdaymonth,q->birthdayday);
printf("%5d|%5d|%5d|%1f|",q->xk[0]pingshi,q->xk[0]shiyan,q->xk[0]kaoshi,q->xk[0]zchji);
printf("%5d|%5d|%5d|%1f \n",q->xk[1]pingshi,q->xk[1]shiyan,q->xk[1]kaoshi,q->xk[1]zchji);
q=q->next; /q指针依次向下扫描/
}
printf("\n\n");
}
/统计模块/
score tongji(score head)
{
score q=head,max,min;
int i,k1[2]={0,0},k2[2]={0,0},k3[2]={0,0}; /将人数统计值的初始值赋为0/
float czong=0,gzong=0,caver,gaver;
q=head; /工作点首先指向头指针/
max=q;
min=q;
while(q!=NULL)
{
czong+=q->xk[0]zchji; /P1指向学生总成绩/
gzong+=q->xk[1]zchji;
for(i=0;i<2;i++)
{
if(q->xk[i]zchji>max->xk[i]zchji)
max=q; /将最大值的地址赋给P1/
if(q->xk[i]zchji<min->xk[i]zchji)
min=q;
if(q->xk[i]zchji>=80) k1[i]++; /k1[i]++为人数的统计/
else if(q->xk[i]zchji>=60) k2[i]++;
else k3[i]++; /分段成绩的人数统计/
}
q=q->next;
}
caver=czong/n; /计算C的平均成绩/
gaver=gzong/n; /计算math平均成绩/
printf("C 语言成绩的总分为:%2f C 语言成绩的平均分为:%2f\n",czong,caver);
printf("C 语言成绩的最高分为:%2f C 语言成绩的最低分为:%2f\n",max->xk[0]zchji,min->xk[0]zchji);
printf("C 语言成绩优秀的人数为:%d\n",k1[0]);
printf("C 语言成绩良好的成绩为:%d\n",k2[0]);
printf("C 语言成绩及格的人数为:%d\n",k1[0]+k2[0]);
printf("C 语言成绩不及格的人数为:%d\n",k3[0]);
printf("高数成绩的总分为:%2f 高数成绩的平均分为:%2f\n",gzong,gaver);
printf("高数成绩的最高分为:%2f 高数成绩的最低分为:%2f\n",max->xk[1]zchji,min->xk[1]zchji);
printf("高数成绩优秀的人数为:%d\n",k1[1]);
printf("高数成绩良好的人数为:%d\n",k2[1]);
printf("高数成绩及格的人数为:%d\n",k1[1]+k2[1]);
printf("高数成绩不及格的人数为:%d\n",k3[1]);
return(head);
}
/按学号查询模块/
void chaxun2(score head)
{
score q=head;
int sss=0;
char name[10];
printf("请输入要查询的学生姓名:");
scanf("%s",name);
while(q!=NULL)
{
if(strcmp(name,q->name)==0) /通过字符串的比较按姓名查找/
{
printf("\n");
printf("|学号|姓名|性别|生 日 |");
printf("C(平时实验考试综合)|");
printf("高数(平时实验考试综合)\n");
printf("\n");
printf("|%4d|%4s|%4c|%4d-%2d-%2d|",q->num,q->name,q->sex,q->birthdayyear,q->birthdaymonth,q->birthdayday);
printf("%5d|%5d|%5d|%1f|",q->xk[0]pingshi,q->xk[0]shiyan,q->xk[0]kaoshi,q->xk[0]zchji);
printf("%5d|%5d|%5d|%1f\n",q->xk[1]pingshi,q->xk[1]shiyan,q->xk[1]kaoshi,q->xk[1]zchji);
printf("\n");
sss=3; /定义变量不等于初始值则退出循环体/
}
q=q->next;
}
if(sss==0) printf("没有这个学生的资料!\n\n");
}
/按学号查询/
void chaxun1(score head)
{
score q=head;
int num,sss=0;
printf("请输入要查询的学生学号:");
scanf("%d",&num);
while(q!=NULL)
{
if(num==q->num)
{
printf("\n");
printf("|学号|姓名|性别|生 日 |");
printf("C(平时实验考试综合)|");
printf("高数(平时实验考试综合)\n");
printf("\n");
printf("|%4d|%4s|%4c|%4d-%2d-%2d|",q->num,q->name,q->sex,q->birthdayyear,q->birthdaymonth,q->birthdayday);
printf("%5d|%5d|%5d|%1f|",q->xk[0]pingshi,q->xk[0]shiyan,q->xk[0]kaoshi,q->xk[0]zchji);
printf("%5d|%5d|%5d|%1f\n",q->xk[1]pingshi,q->xk[1]shiyan,q->xk[1]kaoshi,q->xk[1]zchji);
printf("\n");
sss=3;
}
q=q->next;
}
if(sss==0) printf("没有这个学生的资料!\n\n");
}
/查询二级菜单/
chaxun_cd()
{
int m=0,i;
while(m==0)
{
printf("查询学生的资料\n");
printf("1按学号查询\n");
printf("2按姓名查询\n");
printf("请选择你所要 *** 作的选项(按0退出):");
scanf("%d",&i);
switch(i)
{
case 1:chaxun1(r);break; /break表示跳出循环结构结束循环退出包含break语句的那层循环体/
case 2:chaxun2(r);break;
case 0:m=1;break;
default:printf("错误,重新选择:");break;
}
}
}
/按学号删除/
score del1(score head)
{
score p1,p2;
int num;
printf("请输入要删除学生的学号:");
scanf("%d",&num);
if(head==NULL)
{
printf("没有这个学生的资料!\n\n");
return(head);
}
p2=p1=head;
while(num!=p1->num&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num==p1->num)
{
if(head==p1)
head=head->next;
else
p2->next=p1->next;
free(p1);
p1=p2;
printf("第%d 学生的资料已删除完毕!\n\n",num);
}
else printf("没有这个学生的资料!\n\n");
return(head);
}
//
score del2(score head)
{
score p1,p2;
char name[10];
printf("请输入要删除学生的姓名:");
scanf("%s",name);
if(head==NULL)
{
printf("没有这个学生的资料!\n\n");
return(head);
}
p2=p1=head;
while(strcmp(name,p1->name)!=0&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(strcmp(name,p1->name)==0)
{
if(head==p1)
head=head->next;
else
p2->next=p1->next;
free(p1);
p1=p2;
printf("名字叫%s的学生的资料已被删除!\n\n",name);
}
else printf("没有这个学生的资料!\n\n");
return(head);
}
//
del_cd()
{
int m=0,i;
while(m==0)
{
printf("删除学生的资料\n");
printf("1按学号删除\n");
printf("2按姓名删除\n");
printf("3查看删除结果\n");
printf("请选择你所要 *** 作的选项(按0退出):");
scanf("%d",&i);
switch(i)
{
case 1:r=del1(r);break;
case 2:r=del2(r);break;
case 3:print(r);break;
case 0:m=1;break;
default:printf("错误,重新选择:");break;
}
}
}
/按学号排序/
score paixu2(score head)
{
score p1,p2,k,h;
int i;
if(head==NULL)
{
printf("没有任何学生的资料!");
return(head);
}
p1=head;
p2=head->next;
k=p1;
for(i=0;i<n-1;i++)
{
while(p2!=NULL)
{
if(k->num>p2->num)
k=p2;
p2=p2->next;
}
if(k!=p1)
{
h=k;
k=p1;
p1=h;
hnext=k->next;
k->next=p1->next;
p1->next=hnext;
}
p1=p1->next;
p2=p1->next;
k=p1;
}
printf("排序成功!\n\n");
return(head);
}
//
score paixu1(score head)
{
score p1,p2,k,h;
int i;
if(head==NULL)
{
printf("没有任何学生的资料!");
return(head);
}
p1=head;
p2=head->next;
k=p1;
for(i=0;i<n-1;i++)
{
while(p2!=NULL)
{
if(k->xk[0]zchji>p2->xk[0]zchji)
k=p2;
p2=p2->next;
}
if(k!=p1)
{
h=k;
k=p1;
p1=h;
hnext=k->next;
k->next=p1->next;
p1->next=hnext;
}
p1=p1->next;
p2=p1->next;
k=p1;
}
printf("排序成功!\n\n");
return(head);
}
//
paixu_cd()
{
int m=0,i;
while(m==0)
{
printf("对学生的资料进行排序\n");
printf("1按C语言成绩排序\n");
printf("2按学号排序\n");
printf("请选择你所要 *** 作的选项(按0退出):");
scanf("%d",&i);
switch(i)
{
case 1:r=paixu1(r);break;
case 2:r=paixu2(r);break;
case 0:m=1;break;
default:printf("错误,重新选择:");break;
}
}
}
/按C成绩插入/
score charu1(score head,score stu)
{
score p1,p2;
int i;
p1=head;
r=paixu1(r);
stu=(score)malloc(LEN); /开辟一个新单元,用于保存要插入的信息/
printf("请输入要增加的学生资料:\n");
printf("请输入要增加的学生学号:");
scanf("%d",&stu->num);
while(stu->num<0) /判断学号是否小于0/
{
printf("输入错误,输入错误请重新输入学号:");
scanf("%d",&stu->num);
}
printf("b请输入要增加的学生姓名:");
scanf("%s",stu->name);
printf("请输入要增加的学生性别(F或M):");
scanf(" %c",&stu->sex);
while(stu->sex!='M'&&stu->sex!='F')
{
printf("输入错误,输入错误请重新输入性别:");
scanf(" %c",&stu->sex);
}
printf("c请输入要增加的学生生日(年月日):");
scanf(" %d%d%d",&stu->birthdayyear,&stu->birthdaymonth,&stu->birthdayday);
printf("d请输入要增加的学生成绩!\n");
printf("1请输入要增加的学生C语言成绩(平时,实验,考试):");
scanf(" %d,%d,%d",&stu->xk[0]pingshi,&stu->xk[0]shiyan,&stu->xk[0]kaoshi);
stu->xk[0]zchji=stu->xk[0]pingshi01+stu->xk[0]shiyan02+stu->xk[0]kaoshi07;
printf("2请输入要增加的学生高数成绩(平时,实验,考试):");
scanf(" %d,%d,%d",&stu->xk[1]pingshi,&stu->xk[1]shiyan,&stu->xk[1]kaoshi);
stu->xk[1]zchji=stu->xk[1]pingshi01+stu->xk[1]shiyan02+stu->xk[1]kaoshi07;
if(head==NULL) /判断头指针是否为空/
{
head=stu;
stu->next=NULL; /如果为空,直接插入头上/
n++; /人数加一/
return(head);
}
while(p1->xk[0]zchji<stu->xk[0]zchji&&p1->next!=NULL) /根据C成绩确定要插入的位置/
{
p2=p1;
p1=p1->next;
}
if(stu->xk[0]zchji<=p1->xk[0]zchji)
{
if(p1==head) /如果p1指向头指针 /
{
head=stu;
stu->next=p1;
n++;
}
else
{
stu->next=p2->next;
p2->next=stu;
n++;
}
}
else
{
p1->next=stu;
stu->next=NULL;
n++;
}
printf("增加学生资料成功!\n");
return(head);
}
/按学号插入/
score charu2(score head,score stu)
{
score p1,p2;
int i=0;
p1=head;
r=paixu2(r); /调用排序函数/
stu=(score)malloc(LEN); /开辟一个新单元,用于保存要插入的信息/
printf("请输入要增加的学生资料:\n");
printf("请输入要增加的学生学号:");
scanf("%d",&stu->num);
while(stu->num<0)
{
printf("输入错误,输入错误请重新输入学号:");
scanf("%d",&stu->num);
}
printf("b请输入要增加的学生姓名:");
scanf("%s",stu->name);
printf("请输入要增加的学生性别(F或M):");
scanf(" %c",&stu->sex);
while(stu->sex!='M'&&stu->sex!='F')
{
printf("输入错误,输入错误请重新输入性别:");
scanf(" %c",&stu->sex);
}
printf("c请输入要增加的学生生日(年月日):");
scanf(" %d%d%d",&stu->birthdayyear,&stu->birthdaymonth,&stu->birthdayday);
printf("d请输入要增加的学生的成绩!\n");
printf("1请输入要增加的学生C语言成绩(平时,实验,考试):");
scanf(" %d,%d,%d",&stu->xk[0]pingshi,&stu->xk[0]shiyan,&stu->xk[0]kaoshi);
stu->xk[0]zchji=stu->xk[0]pingshi01+stu->xk[0]shiyan02+stu->xk[0]kaoshi07;
printf("2请输入要增加的学生高数的成绩(平时,实验,考试):");
scanf(" %d,%d,%d",&stu->xk[1]pingshi,&stu->xk[1]shiyan,&stu->xk[1]kaoshi);
stu->xk[1]zchji=stu->xk[1]pingshi01+stu->xk[1]shiyan02+stu->xk[1]kaoshi07;
if(head==NULL) /判断头指针是否为空/
{
head=stu;
stu->next=NULL;
n++;
return(head);
}
while(p1->num<stu->num&&p1->next!=NULL) /根据学号确定要插入的位置/
{
p2=p1;
p1=p1->next;
}
if(stu->num<=p1->num)
{
if(p1==head)
{
head=stu;
stu->next=p1;
n++;
}
else
{
stu->next=p2->next;
p2->next=stu;
n++;
}
}
else
{
p1->next=stu;
stu->next=NULL;
n++;
}
printf("增加学生资料成功!\n");
printf("\n");
return(head); /返回头指针/
}
/插入的二级菜单/
charu_cd()
{
int m=0,i;
while(m==0)
{
printf("增加学生的人数\n");
printf("\n1按C语言成绩增加\n");
printf("2按学号增加\n");
printf("请选择你所要 *** 作的选项(按0退出):");
scanf("%d",&i);
switch(i)
{
case 1:r=charu1(r,stu);break;
case 2:r=charu2(r,stu);break;
case 0:m=1;break;
default:printf("错误,重新选择:");break;
}
}
}
#include <stdioh>
#include <stdlibh>
struct node
{
int num;
struct node next;
};
/建立链表/
struct node creat(int n)
{
int x, i;
struct node head, p, r;
head=(struct node)malloc(sizeof(struct node));
r=head;
printf("请输入数字\r\n");
for(i=0; i<n; i++)
{
scanf("%d", &x);
p=(struct node)malloc(sizeof(struct node));
p->num=x;
r->next=p;
r=p;
}
r->next=NULL;
return(head);
}
/删除重复结点/
void delet(struct node head)
{
struct node p, q, r;
p=head->next;
while(p!=NULL)
{
q=p;
while(q->next!=NULL)
{
r=q->next;
if(r->num==p->num)
{
if(r->next!=NULL)
{
q->next=r->next;
free(r);
}
else
{
q->next=NULL;
free(r);
}
}
else
{
q=r;
}
}
p=p->next;
}
}
/排序/
void sort(struct node head)
{
struct node p, q, small;
int temp;
for(p=head->next; p->next!=NULL; p=p->next)
{
small=p;
for(q=p->next; q!=NULL ;q=q->next)
{
if(q->num<small->num)
small=q;
}
if(small!=p)
{
temp=small->num;
small->num=p->num;
p->num=temp;
}
}
}
/输出/
void output(struct node head)
{
struct node pt;
pt=head->next;
while(pt!=NULL)
{
printf("%d\r\n", pt->num);
pt=pt->next;
}
}
main()
{
int n;
struct node head;
printf("输入数字的个数n\r\n");
scanf("%d", &n);
head=creat(n);
printf("输入的数字\r\n");
output(head);
delet(head);
printf("删除重复结点后输出数字\r\n");
output(head);
sort(head);
printf("排序后输出数字\r\n");
output(head);
free(head);
}
希望能对你有帮助,俺也学C不到两个月,共同进步啊!
这个一个VC中画圆的代码(可能你还需要配置编译环境):
#include <GL/gluth> // 设置头文件
#include <stdlibh>
#include <mathh>
/void setPixel ( int x, int y)
{
glBegin ( GL_POINTS);
glVertex2i (x, y);
glEnd ();
}
inline int round (const float a ) { return int (a + 05); }
void lineDDA (int x0, int y0, int xEnd, int yEnd)
{
int dx = xEnd - x0, dy = yEnd - y0, steps, k;
float xIncrement, yIncrement, x = x0, y = y0;
if (fabs (dx) > fabs (dy))
steps = fabs (dx);
else
steps = fabs (dy);
xIncrement = float (dx) / float (steps);
yIncrement = float (dy) / float (steps);
setPixel (round (x), round (y));
for (k = 0; k < steps; k++) {
x += xIncrement;
y += yIncrement;
setPixel (round (x), round (y));
}
} /
class screenPt
{
private:
GLint x,y;
public:
screenPt()
{
x=y=0;
}
void setCoords (GLint xCoordValue,GLint yCoordValue)
{
x=xCoordValue;
y=yCoordValue;
}
GLint getx() const{
return x;
}
GLint gety() const{
return y;
}
void incrementx()
{
x++;
}
void decrementy()
{
y--;
}
};
void setPixel(GLint xCoord,GLint yCoord)
{
glBegin (GL_POINTS);
glVertex2i(xCoord,yCoord);
glEnd();
}
void circleMidpoint(GLint xc,GLint yc,GLint radius)
{
screenPt circPt;
GLint p=1-radius; //决策参数
circPtsetCoords(0,radius);
void circlePlotPoints (GLint ,GLint,screenPt);
circlePlotPoints(xc,yc,circPt);
while(circPtgetx()<circPtgety())
{
circPtincrementx();
if(p<0)
p += 2circPtgetx() + 1;
else
{
circPtdecrementy();
p += 2(circPtgetx() - circPtgety()) + 1;
}
circlePlotPoints(xc,yc,circPt);
}
}
void circlePlotPoints(GLint xc,GLint yc,screenPt circPt)
{
setPixel (xc + circPtgetx(),yc + circPtgety());
setPixel (xc - circPtgetx(),yc + circPtgety());
setPixel (xc + circPtgetx(),yc - circPtgety());
setPixel (xc - circPtgetx(),yc - circPtgety());
setPixel (xc + circPtgety(),yc + circPtgetx());
setPixel (xc - circPtgety(),yc + circPtgetx());
setPixel (xc + circPtgety(),yc - circPtgetx());
setPixel (xc - circPtgety(),yc - circPtgetx());
}
void init (void) // 初始化函数
{
glClearColor (10, 10, 10, 00); // 设置清屏的颜色(Red,green,blue),但不能让该颜色在显示窗上
// 出现
glMatrixMode (GL_PROJECTION); // 设置投影矩阵
glLoadIdentity (); // 单位化上述投影矩阵
gluOrtho2D (00, 8000, 00, 6000); // 设置具体投影 矩阵为平面正交投影 4/3
}
void lineSegment (void) //绘图函数
{
glClear (GL_COLOR_BUFFER_BIT); // 按glClearColor (10, 10, 10, 00);指定的颜色刷新颜色
glColor3f (10, 00, 00); //设置前景色,即画图的颜色
circleMidpoint(400,300,200);
glFlush ( ); // 在每一画面或场景的结尾处调用,强制前面发出的OpenGL 命令开始执行
}
void main (int argc, char argv) // OpenGL 绘图主函数
{
glutInit (&argc, argv); // 初始化GLUT 库
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); // 设置 显示模式
glutInitWindowPosition (50, 100); // 窗口左上角像素坐标
glutInitWindowSize (800, 600); // 设置设备显示窗口大小 4/3
glutCreateWindow ("An Example OpenGL Program"); // 创建一个窗口,参数为窗口的标题
init ( ); // 函数调用
glutDisplayFunc (lineSegment); // 绘制当前窗口
glutMainLoop ( ); //通常用于程序的结尾,表示开始运行程序显示出所有创建的窗口
}
以上就是关于求C语言小游戏源程序全部的内容,包括:求C语言小游戏源程序、求一个C语言课程设计题的源程序代码,题目是:商品进销存管理程序。、求一个C语言链表源程序代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)