A. 请给个c语言的500行左右的源代码
建议你用子函数的形式 实现各种功能 然后在主函数里面选择想执行的功能 这样代码自然就多了 !
B. c语言超过500行的程序
学生成绩管理是学校教务管理的重要组成部分,其处理信息量很大,本程序是对学生的成绩管理作一个简单的模拟,用菜单选择操作方式完成下列功能:
(1)学生成绩录入;
(2)查询学生成绩;
(3)插入学生成绩;
(4)删除学生成绩
(5) 打印学生成绩
其中学生信息有:学号,姓名,性别,及四科课程的成绩,我用了一个结构体来保存这些信息
typedef struct LNode
{ int number; //学号
char name[15]; //姓名
char sex[8]; //性别
float score[4]; //4门成绩数组分数
struct LNode *next;
}LNode,*Linklist;
采用单链表(linklist.h)来表示数据之间的关系,
linklist.h源程序如下:
/*******************************************************//linklist.h**************************************/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
char course[4][10]={"物理","化学","英语","语文"};
typedef struct LNode
{ int number; //学号
char name[15]; //姓名
char sex[8];
float score[4]; //4门成绩数组分数
struct LNode *next;
}LNode,*Linklist;
//函数声明如下:
Status CreateList(Linklist &L,int n); //创建链表
Status InitList(Linklist &L);
Status DeleteList(Linklist &L); //删除链表
Status DeleteNode(Linklist &L,Linklist p); //删除一个节点
Status InsertNode(Linklist &L,Linklist &q,Linklist p); //在q前面插入一个结点p
Status FindForName(Linklist &L,char *name,Linklist &p); //通过名字查询,用p返回
Status FindForNum(Linklist &L,int num,Linklist &p); //通过学号查询,用p返回
Status InitList(Linklist &L)
{
L=(LNode *)malloc(sizeof(LNode));
L->next=NULL;
return OK;
}
Status CreateList(Linklist &L,int n) //创建链表
{
Linklist p=NULL,q;
InitList(L);
q=L;
for(int i=1;i<=n;i++){
p=(LNode *)malloc(sizeof(LNode));
printf("请根据提示信息输入第%d个学生的信息\n",i);
printf("学号:");
scanf("%d",&p->number);
printf("姓名:");
scanf("%s",p->name);
printf("性别(male/female):");
scanf("%s",p->sex);
for(int j=0;j<4;j++){
printf("%s:",course[j]);
scanf("%f",&p->score[j]);
}
q->next=p;
q=p;
q->next=NULL;
}
return OK;
}
Status DeleteNode(Linklist &L,Linklist p) //删除一个节点
{
Linklist q=L;
while(q&&q->next!=p)
q=q->next;
if(q) q->next=p->next;
free(p);
return OK;
}
Status InsertNode(Linklist &L,Linklist &q,Linklist p) //在q前面插入一个结点p
{
p->next=q;
q=p;
return OK;
}
Status FindForName(Linklist &L,char *name,Linklist &p) //通过名字查询,用p返回
{
p=L->next;
while(p!=NULL&&(strcmp(p->name,name)!=0))
p=p->next;
return OK;
}
Status FindForNum(Linklist &L,int num,Linklist &p) //通过学号查询,用p返回
{
p=L->next;
while(p!=NULL&&(p->number!=num))
p=p->next;
return OK;
}
Status DeleteList(Linklist &L) //删除链表
{
Linklist p=L;
while(p){
L=p->next;
free(p);
p=L;
}
return OK;
}
/******************************************************************************/
这里又利用一个头文件包含基本功能实现的操作函数,如下:
/******************************************************************************************/
//operte.h
#include "linklist.h"
Status Create(Linklist &L){
int n;
printf("请输入要录入成绩的学生人数:");
scanf("%d",&n);
CreateList(L,n);
return OK;
}
Status Find(Linklist L){
int k;
int number;
char name[20]="";
Linklist p=NULL;
do{
printf("1————根据姓名查询\n2————根据学号查询\n");
scanf("%d",&k);
}while(k<1||k>2);
switch(k){
case 1: printf("请输入姓名:");
scanf("%s",name);
FindForName(L,name,p);
break;
case 2: printf("请输入学号:");
scanf("%d",&number);
FindForNum(L,number,p);
break;
}
if(p!=NULL){
printf("您查找的信息如下:\n");
printf("姓名:%s\n",p->name);
printf("性别:%s\n",p->sex);
printf("学号:%d\n",p->number);
printf("四科成绩如下:\n");
for(int i=0;i<4;i++)
printf("%s:%f ",course[i],p->score[i]);
printf("\n");
}
else
printf("没有找到要查找的数据,可能是你输入有误,请仔细察看!!!");
return OK;
}//find
Status Insert(Linklist &L){
Linklist p=(LNode*)malloc(sizeof(LNode));;
printf("\n插入一个学生成绩,请按照提示信息输入\n");
printf("学号:");
scanf("%d",&p->number);
printf("姓名:");
scanf("%s",p->name);
printf("性别(male/female):");
scanf("%s",p->sex);
for(int j=0;j<4;j++){
printf("%s:",course[j]);
scanf("%f",&p->score[j]);
}
InsertNode(L,L->next,p);
return OK;
}
Status delet(Linklist &L){
char key;
Linklist p=NULL;
char name[15];
printf("删除学生信息:\n请输入删除学生的姓名:");
scanf("%s",name);
FindForName(L,name,p);
if(p!=NULL){
printf("您要删除的学生的信息如下:\n");
printf("姓名:%s\n",p->name);
printf("性别:%s\n",p->sex);
printf("学号:%d\n",p->number);
printf("四科成绩如下:\n");
for(int i=0;i<4;i++)
printf("%s:%f ",course[i],p->score[i]);
printf("\n确定删除吗?(y or n)");
getchar();
scanf("%c",&key);
if(key=='y'||key=='Y')
DeleteNode(L,p);
}
else
printf("不能删除,因为没有找到要查找的数据,可能是你输入有误,请仔细察看!!!");
return OK;
}
Status print(Linklist L){
Linklist p=L->next;
printf("打印全班学生成绩如下:\n");
while(p!=NULL){
printf("姓名:%s\n",p->name);
printf("性别:%s\n",p->sex);
printf("学号:%d\n",p->number);
printf("四科成绩如下:\n");
for(int i=0;i<4;i++)
printf("%s:%f ",course[i],p->score[i]);
printf("\n");
p=p->next;
}//while
return OK;
}
主函数如下:
/**************************************************************************/
//Std_ScoreManage.c
#include"operate.h"
int main()
{
Linklist L;
int k; //控制循环的标志
Create(L);
while(1)
{
printf("*******************************************************************\n\n");
printf(" -----------------------------------\n");
printf(" | 学生成绩管理 |\n");
printf(" |__ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|\n");
printf(" | 1. 查询成绩 |\n");
printf(" | 2. 插入成绩 |\n");
printf(" | 3. 删除成绩 |\n");
printf(" | 4. 输出所有学生成绩 |\n");
printf(" | 0. 退出程序 |\n");
printf(" ------------------------------------\n");
printf(" 请输入你的选择: ");
scanf("%d",&k);
switch(k)
{
case 1: Find(L); break;
case 2: Insert(L);break;
case 3: delet(L);break;
case 4: print(L);break;
case 0: DeleteList(L); return TRUE;
default: printf("选择错误,重新开始!\n");
}
} //while
return TRUE;
}
C. 求一个c语言 通讯录 的500行代码,简单易懂点的
#include #include #include #include int chcode() {char pw[50],ch;char *syspw = "abc"; // 原始密码int i,m = 0; printf("请输入密码:"); while(m 0) {printf("\b \b");--i;}else if(ch != '\b') {pw[i++] = ch;printf("*");}}pw[i] = '\0';printf("\n");if(strcmp(pw,syspw) != 0) {printf("密码错误,请重新输入!\n");m++;}else {printf("密码正确!\n");system("pause");return 1;}}printf("连续3次输入错误,退出!\n");system("pause");return 0;}int main() {int login = chcode();if(login) printf("登录成功!\n");else printf("登录失败!\n");return 0;}
D. 求C语言程序,500行左右代码
什么样的都行啊?行的话就发了
E. 学了一学期的C语言,要做大作业。 求一个500行C语言程序代码。 可以在VC++6.0上运行的。
//户籍管理系统, 应该能满足你的要求。
//多给点财富吧
#include<stdio.h>
#include<stdlib.h>
typedef struct tagHuJiXinXi
{
char shfzhh[64]; //身份证号
char xm[16]; //姓名
char xb[8]; //性别
int nl; //年龄
char xl[64]; //学历
char zhzh[64]; //住址
char dh[32]; //电话
}HuJiXinXi,*PtHuJiXinXi;
void readfromfile();
void writetofile();
void tuichu();
void add();
void outputone();
void outputall();
void sortbyage();
void myrealloc();
void findbyagerange();
void del();
void alter();
void find();
void showmenu();
void processmenu(int m);
PtHuJiXinXi pt;
int count=0,capacity=16;
int main()
{
int m;
pt=(PtHuJiXinXi)calloc(capacity,sizeof(HuJiXinXi));
readfromfile();
while(1)
{
showmenu();
scanf("%d",&m);
processmenu(m);
}
system("PAUSE");
return EXIT_SUCCESS;
}
void processmenu(int m)
{
switch(m)
{
case 0:
tuichu();
break;
case 1:
add();
break;
case 2:
del();
break;
case 3:
alter();
break;
case 4:
outputall();
break;
case 5:
sortbyage();
break;
case 6:
findbyagerange();
break;
case 7:
writetofile();
break;
case 8:
find();
break;
default:
printf("不可识别的命令。\n");
}
}
//实现存储空间的自动扩充
void myrealloc()
{
if(count+1>=capacity)
{
int i;
capacity*=2;
PtHuJiXinXi temppt=(PtHuJiXinXi)calloc(capacity,sizeof(HuJiXinXi));
for(i=0;i<count;i++)
{
temppt[i]=pt[i];
}
free(pt);
pt=temppt;
}
}
void readfromfile()
{
char f[128];
FILE *inf;
HuJiXinXi hjxx;
printf("请输入包含户籍信息的文件的文件名,如果还没有文件,请输入omit(文件中每行一条户籍信息,");
printf("格式:身份证号 姓名 性别 年龄 学历 住址 电话)...\n");
gets(f);
if(!strcmp(f,"omit"))
{
return;
}
inf=fopen(f,"r");
if(NULL!=inf)
{
do
{
fscanf(inf,"%s %s %s %d %s %s %s",hjxx.shfzhh,hjxx.xm,hjxx.xb,&hjxx.nl,hjxx.xl,hjxx.zhzh,hjxx.dh);
myrealloc();
pt[count++]=hjxx;
}while(!feof(inf));
fclose(inf);
printf("信息已成功加载。\n");
}
else
{
printf("文件名无效或文件无数据。\n");
}
}
void writetofile()
{
char f[128]={'\0'};
FILE *outf;
int i;
printf("请输入保存户籍信息的文件的文件名:\n");
scanf("%s",f);
outf=fopen(f,"w");
if(NULL!=outf)
{
for(i=0;i<count;i++)
{
fprintf(outf,"%s %s %s %d %s %s %s",pt[i].shfzhh,pt[i].xm,pt[i].xb,pt[i].nl,pt[i].xl,pt[i].zhzh,pt[i].dh);
if(count-1!=i)
{
fprintf(outf,"%s","\n");
}
}
fclose(outf);
printf("文件保存成功。\n");
}
else
{
printf("文件名无效。\n");
}
}
void showmenu()
{
char menu[]="菜单:\n0、退出\n1、添加一条信息\n2、删除一条信息\n3、批量修改\n4、浏览全部信息\n5、按年龄排序 \n6、按年龄区间查询\n7、保存到文件\n8、随意查询\n请选择一个菜单:";
puts(menu);
}
void tuichu()
{
if(NULL==pt)
{
free(pt);
}
exit(0);
}
//判断身份证号是否重复
int isshfzhhchf(char s[64])
{
int i,r=0;
for(i=0;i<count;i++)
{
if(!strcmp(pt[i].shfzhh,s))
{
r=1;
break;
}
}
return r;
}
void add()
{
myrealloc();
printf("添加一条户籍信息。\n");
printf("请输入身份证号 姓名 性别 年龄 学历 住址 电话:\n");
scanf("%s %s %s %d %s %s %s",pt[count].shfzhh,pt[count].xm,pt[count].xb,&pt[count].nl,
pt[count].xl,pt[count].zhzh,pt[count].dh);
if(!isshfzhhchf(pt[count].shfzhh))
{
count++;
printf("添加成功。\n");
}
else
{
printf("身份证号重复,添加失败。\n");
}
}
//输出下标为n的一条户籍信息
void outputone(int n)
{
if(n>=0 && n<count)
{
printf("第%d条户籍信息:\n",n+1);
printf("%s %s %s %d %s %s %s。\n",pt[n].shfzhh,pt[n].xm,pt[n].xb,pt[n].nl,pt[n].xl,pt[n].zhzh,pt[n].dh);
}
else
{
printf("没有第%d条户籍信息存在。\n",n+1);
}
}
void outputall()
{
if(0==count)
{
printf("系统已空。\n");
}
else
{
int i;
for(i=0;i<count;i++)
{
outputone(i);
}
}
}
void sortbyage()
{
int i,j,px;
HuJiXinXi hjxx;
printf("子菜单:\n1、升序\n2、降序\n请选择:");
scanf("%d",&px);
if(1==px || 2==px)
{
for(i=0;i<count-1;i++)
{
for(j=0;j<count-i-1;j++)
{
if(1==px)
{
if(pt[j].nl>pt[j+1].nl)
{
hjxx=pt[j+1];
pt[j+1]=pt[j];
pt[j]=hjxx;
}
}
else
{
if(pt[j].nl<pt[j+1].nl)
{
hjxx=pt[j+1];
pt[j+1]=pt[j];
pt[j]=hjxx;
}
}
}
}
printf("排序完成。\n");
}
else
{
printf("无法处理的子菜单命令。\n");
}
}
void findbyagerange()
{
int i,min,max,c=0;
printf("请输入要查找的户籍信息的最小年龄和最大年龄:");
scanf("%d %d",&min,&max);
printf("查询结果如下:\n");
for(i=0;i<count;i++)
{
if(pt[i].nl>=min && pt[i].nl<=max)
{
outputone(i);
printf("符合你的要求。\n");
c++;
}
}
if(0==c)
{
printf("没有符合你的要求的户籍信息。\n");
}
}
//删除一条户籍信息
void del()
{
int i,n;
HuJiXinXi hjxx;
printf("请输入要删除的是第几条户籍信息:");
scanf("%d",&n);
if(n-1>=0 && n-1<count)
{
hjxx=pt[n-1];
for(i=n;i<count;i++)
{
pt[i-1]=pt[i];
}
printf("删除成功。\n第%d条户籍信息:\n",n);
printf("%s %s %s %d %s %s %s。",hjxx.shfzhh,hjxx.xm,hjxx.xb,hjxx.nl,hjxx.xl,hjxx.zhzh,hjxx.dh);
printf(",已删除。\n");
count--;
}
else
{
printf("删除失败。\n不存在第%d条户籍信息。\n",n);
}
}
//根据hjxx的值修改下标为n的户籍信息
//对于pt[n]的对应字段,如果在hjxx中是用*表示的,则不修改
void change(HuJiXinXi hjxx,int n)
{
//返回非0值,意味着hjxx.shfzhh(身份证号)不等于*,即需要修改pt[n].shfzhh字段,以下都类似
if(strcmp(hjxx.shfzhh,"*"))
{
strcpy(pt[n].shfzhh,hjxx.shfzhh);
}
if(strcmp(hjxx.xm,"*"))
{
strcpy(pt[n].xm,hjxx.xm);
}
if(strcmp(hjxx.xb,"*"))
{
strcpy(pt[n].xb,hjxx.xb);
}
//不等于-1表示需要修改pt[n].nl(年龄)
if(-1!=hjxx.nl)
{
pt[n].nl=hjxx.nl;
}
if(strcmp(hjxx.xl,"*"))
{
strcpy(pt[n].xl,hjxx.xl);
}
if(strcmp(hjxx.zhzh,"*"))
{
strcpy(pt[n].zhzh,hjxx.zhzh);
}
if(strcmp(hjxx.dh,"*"))
{
strcpy(pt[n].dh,hjxx.dh);
}
}
//对户籍信息进行批量修改
void alter()
{
int n;
HuJiXinXi hjxx;
char nl[16];
while(1)
{
printf("请输入要修改第几条户籍信息(-1退出循环):");
scanf("%d",&n);
if(-1==n)
{
break;
}
else if(n-1>=0 && n-1<count)
{
printf("修改...\n");
outputone(n-1);
printf("请输入将此户籍信息修改后的新的姓名 性别 年龄 学历 住址 电话(保持原值的用*代替):\n");
scanf("%s %s %s %s %s %s",hjxx.xm,hjxx.xb,nl,hjxx.xl,hjxx.zhzh,hjxx.dh);
//因为只有nl(年龄)是int型,故对nl作特殊处理,-1表示修改时年龄保持原值不变(不修改)
hjxx.nl=(strcmp(nl,"*") ? atoi(nl) : -1);
strcpy(hjxx.shfzhh,"*");
change(hjxx,n-1);
printf("修改完成。\n");
}
else
{
printf("无法修改,不存在第%d条户籍信息。\n",n);
}
}
}
//用于判断pt[n]是否匹配hjxx的模式
int ismatch(HuJiXinXi hjxx,int n)
{
int r=1;
if(strcmp(hjxx.shfzhh,"*") && strcmp(hjxx.shfzhh,pt[n].shfzhh))
{
r=0;
}
if(r && strcmp(hjxx.xm,"*") && strcmp(hjxx.xm,pt[n].xm))
{
r=0;
}
if(r && strcmp(hjxx.xb,"*") && strcmp(hjxx.xb,pt[n].xb))
{
r=0;
}
if(r && -1!=hjxx.nl && hjxx.nl!=pt[n].nl)
{
r=0;
}
if(r && strcmp(hjxx.xl,"*") && strcmp(hjxx.xl,pt[n].xl))
{
r=0;
}
if(r && strcmp(hjxx.zhzh,"*") && strcmp(hjxx.zhzh,pt[n].zhzh))
{
r=0;
}
if(r && strcmp(hjxx.dh,"*") && strcmp(hjxx.dh,pt[n].dh))
{
r=0;
}
return r;
}
//按模式查询户籍信息
void find()
{
int i,c=0;
char nl[16];
HuJiXinXi hjxx;
printf("请输入要查询的户籍信息的身份证号 姓名 性别 年龄 学历 住址 电话(只需提供关键信息以用于查询,不提供的信息请用*代替):\n");
scanf("%s %s %s %s %s %s %s",hjxx.shfzhh,hjxx.xm,hjxx.xb,nl,hjxx.xl,hjxx.zhzh,hjxx.dh);
//因为只有nl(年龄)是int型,故对nl作特殊处理,-1表示查询时不需比较年龄
hjxx.nl=(strcmp(nl,"*") ? atoi(nl) : -1);
for(i=0;i<count;i++)
{
if(ismatch(hjxx,i))
{
printf("找到第%d条满足你的模式要求的户籍信息如下:\n",c+1);
printf("%s %s %s %d %s %s %s。\n",pt[i].shfzhh,pt[i].xm,pt[i].xb,pt[i].nl,pt[i].xl,pt[i].zhzh,pt[i].dh);
c++;
}
}
if(!c)
{
printf("系统中没有满足你的模式要求的户籍信息。\n");
}
}
F. 编写个500行c语言程序,编什么好
可以做个俄罗斯方块 差不多500行
G. 急求一个C语言课程设计,代码在500行以上(万分紧急!!)
一看你的问题就知道你是大学生应付老师的作业而来的!
作为一个二十一世纪的大学生,要养成自己动手的习惯!不懂就去图书馆翻阅资料!虽然网上现在很方便!但是不能养成这种上网所要答案的坏习惯!这样做对自己完全没有好处!
你应该想到如何借助旁边的资料,学校的图书馆就是个很好的地方!去哪找你要的程序肯定找得到!自己动手,丰衣足食!
H. 源代码长度为500行的C语言编程怎么编
源代码500行多用几个函数来回调用就可以了,这样看起来既条理又易懂!
I. 求C语言代码 500-600行的,COPY别人的也可以
500行的代码很难找啊...
这里只有一个300多行的,关于商人过河的数学问题
#include <stdio.h>
#include <stdlib.h>
#define maxloop 100 //最大层数,对于不同的扩展方法自动调整取值
#define pristnum 3
#define slavenum 3
struct SPQ
{
int sr,pr; //船运行一个来回后河右岸的商人、仆人的人数
int sl,pl; //船运行一个来回后河左岸的商人、仆人的人数
int ssr,spr; //回来(由左向右时)船上的人数
int sst,spt; //去时(由右向左时)船上的人数
int loop; //本结点所在的层数
struct SPQ *upnode ,*nextnode;//本结点的父结点和同层的下一个结点的地址
}spq;
int loopnum;//记录总的扩展次数
int openednum;//记录已扩展节点个数
int unopenednum;//记录待扩展节点个数
int resultnum;
struct SPQ *opened;
struct SPQ *oend;
struct SPQ *unopened;
struct SPQ *uend;
struct SPQ *result;
void initiate();
void releasemem();
void showresult();
void addtoopened(struct SPQ *ntx);
int search();
void goon();
int stretch(struct SPQ* ntx);
void recorder();
void main()
{
int flag; //标记扩展是否成功
for( ; ; )
{
initiate();
flag = search ();
if(flag == 1)
{
recorder();
releasemem();
showresult();
goon();
}
else
{
printf("无法找到符合条件的解");
releasemem();
goon();
}
}
}
void initiate()
{
int x;
char choice;
uend = unopened = (struct SPQ*)malloc(sizeof(spq));
if(uend==NULL)
{
printf("\n内存不够!\n");
exit(0);
}
unopenednum=1;
openednum=0;
unopened -> upnode = unopened; //保存父结点的地址以成链表
unopened -> nextnode = unopened;
unopened -> sr = slavenum;
unopened -> pr = pristnum;
unopened -> sl = 0;
unopened -> pl = 0;
unopened -> sst = 0;
unopened -> spt = 0;
unopened -> ssr = 0;
unopened -> spr = 0;
unopened -> loop = 0;
printf("题目:设有n个商人和m个仆人来到河边,打算乘一只船从右岸到左岸去。\n");
printf("该船的负载能力为两人。在任何时候,如果仆人人数超过商人人数,仆人\n");
printf("就会把商人杀死。他们怎样才能用这条船安全的把所有人都渡过河去?\n");
printf("\n默认的n、m值皆为3\n");
for(;;)
{
printf("\n是否修改?(Y/N)");
scanf("%s",&choice);
choice=toupper(choice);
if(choice=='Y')
{
printf("\n请输入商人人数");
for(;;)
{
scanf("%d",&x);
if(x>0)
{
unopened -> pr = x;
break;
}
else printf("\n输入值应大于0!\n请重新输入");
}
printf("\n请输入仆人人数");
for(;;)
{
scanf("%d",&x);
if(x>0)
{
unopened -> sr = x;
break;
}
else printf("\n输入值应大于0!\n请重新输入");
}
break;
}
if(choice=='N')break;
}
}
int search()
{
int flag;
struct SPQ *ntx; //提供将要扩展的结点的指针
for( ; ; )
{
ntx = unopened; //从待扩展链表中提取最前面的一个
if(ntx->loop == maxloop)
return 0;
addtoopened(ntx); //将ntx加入已扩展链表,并将这个节点从待扩展链表中去掉
flag = stretch(ntx); //对ntx进行扩展,返回-1,0,1
if(flag == 1)
return 1;
}
}
int stretch(struct SPQ *ntx)
{
int fsr , fpr ; //在右岸上的人数
int fsl , fpl ; //在左岸上的人数
int sst , spt ; //出发时在船上的人数
int ssr , spr ; //返回时船上的人数
struct SPQ *newnode;
for (sst = 0 ; sst <= 2 ; sst++) //讨论不同的可能性并判断是否符合条件
{
fsr = ntx -> sr;
fpr = ntx -> pr;
fsl = ntx -> sl;
fpl = ntx -> pl;
if ((sst <= fsr) && (( 2 - sst) <= fpr))//满足人数限制
{
spt = 2 - sst;
fsr = fsr - sst;
fpr = fpr - spt;
if((fpr == 0) && (fsr == 0))//搜索成功
{
newnode = (struct SPQ*) malloc (sizeof(spq));
if(newnode==NULL)
{
printf("\n内存不够!\n");
exit(0);
}
newnode -> upnode = ntx; //保存父结点的地址以成链表
newnode -> nextnode = NULL;
newnode -> sr = 0;
newnode -> pr = 0;
newnode -> sl = opened -> sr;
newnode -> pl = opened -> pr;
newnode -> sst = sst;
newnode -> spt = spt;
newnode -> ssr = 0;
newnode -> spr = 0;
newnode -> loop = ntx -> loop + 1;
oend -> nextnode = newnode;
oend = newnode;
openednum++;
return 1;
}
else if ((fpr - fsr) * fpr >= 0) //判断是否满足商人人数必须大于或等于仆人人数
{
fsl = fsl + sst;
fpl = fpl + spt;
for (ssr = 0 ; ssr <= 1 ; ssr++) //返回
{
int ffsl , ffpl;
if ((ssr <= fsl) && ((1 - ssr) <= fpl))
{
spr = 1 - ssr;
ffsl = fsl - ssr;
ffpl = fpl - spr;
if ((ffpl - ffsl) * ffpl >= 0)
{ //若符合条件则分配内存并付值
int ffsr , ffpr;
ffsr = fsr + ssr;
ffpr = fpr + spr;
newnode = (struct SPQ*) malloc (sizeof(spq));
if(newnode==NULL)
{
printf("\n内存不够!\n");
exit(0);
}
newnode -> upnode = ntx; //保存父结点的地址以成链表
newnode -> sr = ffsr;
newnode -> pr = ffpr;
newnode -> sl = ffsl;
newnode -> pl = ffpl;
newnode -> sst = sst;
newnode -> spt = spt;
newnode -> ssr = ssr;
newnode -> spr = spr;
newnode -> loop = ntx -> loop + 1;
uend -> nextnode = newnode;
uend = newnode;
unopenednum++;
}
}
}
}
}
}
return 0;
}
void addtoopened(struct SPQ *ntx)
{
unopened = unopened -> nextnode;
unopenednum--;
if (openednum == 0 )
oend = opened = ntx;
oend -> nextnode = ntx;
oend = ntx;
openednum++;
}
void recorder()
{
int i , loop;
struct SPQ *newnode;
struct SPQ *ntx;
loop = oend -> loop;
ntx = oend;
resultnum = 0;
for( i = 0 ; i <= loop ; i++ )
{
newnode = (struct SPQ*) malloc (sizeof(spq));
if(newnode==NULL)
{
printf("\n内存不够!\n");
exit(0);
}
newnode -> sr = ntx -> sr;
newnode -> pr = ntx -> pr;
newnode -> sl = ntx -> sl;
newnode -> pl = ntx -> pl;
newnode -> sst = ntx -> sst;
newnode -> spt = ntx -> spt;
newnode -> ssr = ntx -> ssr;
newnode -> spr = ntx -> spr;
newnode -> nextnode = NULL;
ntx = ntx -> upnode;
if(i == 0)
result = newnode;
newnode -> nextnode = result;
result = newnode;
resultnum++;
}
}
void releasemem()
{
int i;
struct SPQ* nodefree;
for ( i = 1 ; i < openednum ; i++ )
{
nodefree = opened;
opened = opened -> nextnode;
free(nodefree);
}
for ( i = 0 ; i < unopenednum ; i++ )
{
nodefree = unopened;
unopened = unopened -> nextnode;
free(nodefree);
}
}
void showresult()
{
int i;
int fsr , fpr ; //在右岸上的人数
int fsl , fpl ; //在左岸上的人数
struct SPQ* nodefree;
printf("%d个商人",result -> pr);
printf("%d个仆人",result -> sr);
printf("%d个商人",result -> pl);
printf("%d个仆人",result -> sl);
for ( i = 1 ; i < resultnum ; i++ )
{
nodefree = result;
result = result -> nextnode;
free(nodefree);
printf("\n\n\t左岸人数 船上人数及方向 右岸人数\n");
printf("第%d轮\n",i);
fpl = result -> pl - result -> spt + result -> spr;
fpr = result -> pr - result -> spr;
fsl = result -> sl - result -> sst + result -> ssr;
fsr = result -> sr - result -> ssr;
printf("商 人%8d%8d\t<-\t%8d\n",fpl,result -> spt,fpr);
printf("仆 人%8d%8d\t<-\t%8d\n",fsl,result -> sst,fsr);
printf("商 人%8d%8d\t->\t%8d\n",result -> pl,result -> spr,result -> pr - result -> spr);
printf("仆 人%8d%8d\t->\t%8d\n",result -> sl,result -> ssr,result -> sr - result -> ssr);
}
printf("\n全体商人和仆人全部到达对岸");
free(result);
}
void goon()
{
char choice;
for(;;)
{
printf("是否继续?(Y/N)\n");
scanf ("%s" , &choice);
choice=toupper(choice);
if(choice=='Y')break;
if(choice=='N')exit(0);
}
}
J. 求C语言编程,要求500行,作业……感激不尽
我以前写的,贴给你有600行,学生管理程序
参见hi..com/mark063/blog/item/21ea0cb11e185cacd8335a60.html
#include<stdio.h>
#include <malloc.h>
#include<time.h>
#include<string.h>
typedef struct stu{
char id[20];
char name[14];
int age;
int year,month,day;
char sex[4];
int gpa;
struct stu*next;
}*student;
void out();
void insertStu();
void printStu();
void searchStu();
void dele();
void update();
void open();
void save();
int main()
{
student head=NULL;
int choose,ifopen=0;
printf("\n\t\tWellcome to student manger!\n\n\t\t\t\t\tmade by 马健(09080208)");
printf("\n\n1:insert a student:\n2:show all student\n3:search a student\n4:delete a student\n5:update\n6:open database from disk\n7:save database to disk\n8:exit\n");
printf("\n\nPlease choose:\n");
while(scanf("%d",&choose)!=EOF){
switch(choose){
case 1:insertStu(&head);printf("Press any key..\n");getch();system("cls");break;
case 2:printStu(&head);printf("Press any key..\n");getch();system("cls");break;
case 3:searchStu(&head);printf("Press any key..\n");getch();system("cls");break;
case 4:dele(&head);printf("Press any key..\n");getch();system("cls");break;
case 5:update(&head);printf("Press any key..\n");getch();system("cls");break;
case 6:open(&head,&ifopen);printf("Press any key..\n");getch();system("cls");break;
case 7:save(&head);printf("Press any key..\n");getch();system("cls");break;
case 8:out(&head);return 0;
}
printf("\n\t\tWellcome to student manger!\n\n\t\t\t\t\tmade by 马健(09080208)");
printf("\n\n1:insert a student:\n2:show all student\n3:search a student\n4:delete a student\n5:update\n6:open database from disk\n7:save database to disk\n8:exit\n");
printf("\n\nPlease choose:\n");
}
}
void insertStu(student*head)
{
student last=*head,tmp;
int flag=0;
char id[20];
if(*head==NULL){
*head=(student)malloc(sizeof(struct stu));
printf("Creating new table:\n\n");
printf("Please input id:");
scanf("%s",(*head)->id);
printf("Please intput name:");
scanf("%s",&(*head)->name);
printf("Please input age:");
scanf("%d",&(*head)->age);
printf("Please input year:");
scanf("%d",&(*head)->year);
printf("Please input month:");
scanf("%d",&(*head)->month);
printf("Please input day:");
scanf("%d",&(*head)->day);
printf("Please input sex:");
scanf("%s",&(*head)->sex);
printf("Please input gpa:");
scanf("%d",&(*head)->gpa);
(*head)->next=NULL;
}
else{
printf("Please input id:");
scanf("%s",id);
if(strcmp(id,(*head)->id)<0)flag=1;
while(flag!=1&&last->next!=NULL&&(strcmp(last-> next->id,id)<0)){//为排序做准备,找出应该插入的位置
last=last->next;
}
tmp=(student)malloc(sizeof(struct stu));
strcpy(tmp->id,id);
printf("Please intput name:");
scanf("%s",&tmp->name);
printf("Please input age:");
scanf("%d",&tmp->age);
printf("Please input year:");
scanf("%d",&tmp->year);
printf("Please input month:");
scanf("%d",&tmp->month);
printf("Please input day:");
scanf("%d",&tmp->day);
printf("Please input sex:");
scanf("%s",&tmp->sex);
printf("Please input gpa:");
scanf("%d",&tmp->gpa);
if(flag==1){//插在第一个
tmp->next=(*head);
(*head)=tmp;
}
else if(last->next==NULL){//判断是否该插在最后一个
last->next=tmp;
tmp->next=NULL;
}
else{//该插在中间
tmp->next=last->next;
last->next=tmp;
}
}
}
void printStu(student*head)
{
student last=*head;
float begin=clock(),end;
while(last!=NULL){
printf("id:%s name:%-10sage:%-5dbrithday:%4d-%2d-%2d sex:%-4sgpa:%-d\n"
,last->id,last->name,last->age,last->year,last->month,last->day,last->sex,last->gpa);
last=last->next;
}
end=clock();
printf("you spend:%.2f\n",(end-begin)/1000);
}
void searchStu(student*head)
{
float begin,end;
int flag=0;
student last=*head;
char id[20];
printf("Please input the student id you want to search:\n");
scanf("%s",id);
begin=clock();
while(last->next!=NULL){
if(strcmp(id,last->id)==0){
printf("id:%s name:%-10sage:%-5dbrithday:%4d-%2d-%2d sex:%-4sgpa:%-d\n"
,last->id,last->name,last->age,last->year,last->month,last->day,last->sex,last->gpa);
flag=1;
break;
}
last=last->next;
}
if(flag==0)printf("Not found!\n");
end=clock();
printf("you spend:%.2f\n",(end-begin)/1000);
}
void dele(student*head)
{
student last=(*head)->next,pre=(*head),tmp;//pre来记录last前一个节点
char id[20];
float begin,end;
while(1){
printf("Please input the student id you want to delete:");
scanf("%s",id);
begin=clock();
if(strcmp((*head)->id,id)==0){//检验是否在第一个
tmp=(*head);
(*head)=(*head)->next;
free(tmp);
end=clock();
printf("you spend:%.2f\n",(end-begin)/1000);
return;
}
else{//如果不在第一个
while(1){
if(strcmp(last->id,id)==0){
pre->next=last->next;
free(last);
end=clock();
printf("you spend:%.2f\n",(end-begin)/1000);
return;
}
if(last==NULL)printf("NO id=%.0f student",id);
pre=last;
last=last->next;
}
}
}
}
void update(student*head)
{
char id[20];
float begin=clock(),end;
student last=(*head);
printf("Please input the student id you want to update:");
scanf("%s",id);
while(last!=NULL)
if(strcmp(id,last->id)==0)break;
else last=last->next;
if(last==NULL){
printf("No such student!\n");
return;
}
end=clock();
printf("you spend:%.2f\n",(end-begin)/1000);
printf("\nid:%-13.0s name:%-10sage:%-5dbrithday:%4d-%2d-%2d sex:%-4sgpa:%-d\n"
,last->id,last->name,last->age,last->year,last->month,last->day,last->sex,last->gpa);
printf("\nPlease input the new info:\n");
strcpy(last->id,id);
printf("Please intput name:");
scanf("%s",&last->name);
printf("Please input age:");
scanf("%d",&last->age);
printf("Please input year:");
scanf("%d",&last->year);
printf("Please input month:");
scanf("%d",&last->month);
printf("Please input day:");
scanf("%d",&last->day);
printf("Please input sex:");
scanf("%s",&last->sex);
printf("Please input gpa:");
scanf("%d",&last->gpa);
}
void open(student*head,int*ifopen)
{
FILE*fp;
student tmp,last;
int flag=0;
char id[20];
double begin,end;
if(*ifopen==1){
out(&*head);
}
fp=fopen("database.dat","r");
if(fp==NULL){
printf("No file!\n");
return;
}
(*head)=NULL;
begin=clock();
printf("Loading please wait..\n");
while(fscanf(fp,"%s",&id)&&id[0]!='e'){
if((*head)==NULL){
(*head)=malloc(sizeof(struct stu));
strcpy((*head)->id,id);
fscanf(fp,"%s%d%d%d%d%s%d",(*head)->name,&(*head)->age,&(*head)->year
,&(*head)->month,&(*head)->day,(*head)->sex,&(*head)->gpa);
(*head)->next=NULL;
}
else{
flag=0;
last=(*head);
tmp=malloc(sizeof(struct stu));
if(strcmp(id,(*head)->id)<0)flag=1;//判断是否该插在在第一个
strcpy(tmp->id,id);
last=(*head);
while(flag!=1&&last->next!=NULL&&strcmp(last-> next->id,id)<0){//为排序做准备,找出应该插入的位置
last=last->next;
}
fscanf(fp,"%s%d%d%d%d%s%d",tmp->name,&tmp->age,&tmp->year
,&tmp->month,&tmp->day,tmp->sex,&tmp->gpa);
if(flag==1){//插在第一个
tmp->next=(*head);
(*head)=tmp;
}
else if(last->next==NULL){//判断是否该插在最后一个
last->next=tmp;
tmp->next=NULL;
}
else{//该插在中间
tmp->next=last->next;
last->next=tmp;
}
}
}
end=clock();
printf("you spend:%.2f(s)\n",(end-begin)/1000);
fclose(fp);
*ifopen=1;
}
void save(student*head)
{
FILE*fp;
student last=(*head);
fp=fopen("database.dat","w");
while(last){
fprintf(fp,"%s %s %d %d %d %d %s %d\n",last->id,last->name,last->age,last->year,last->month,last->day,last->sex,last->gpa);
last=last->next;
}
fprintf(fp,"%c\n",'e');
fclose(fp);
}
void out(student*head)
{
student last=*head,tmp;
char sav;
printf("if you want to save?(y/n)\n");
sav=getch();
if(sav=='y'||sav=='Y')save(&*head);
while(last){
tmp=last;
last=last->next;
free(tmp);
}
}
#include<stdio.h>
#include<time.h>
#include<malloc.h>
int main()
{
FILE*fp;
unsigned int id;
int n,k,i,name,age,year,month,day,sex,gpa;
int*out=NULL;
srand(time(NULL));
fp=fopen("database.dat","w");
printf("This is can help lab7 build a database to debug\n");
printf("Please input a number to limit the n:\n");
while(scanf("%d",&n)&&n>32768)printf("intput should less than int,input again:\n");
k=n;
if(fp==NULL)printf("ON FILE");
out=(int*)malloc(n*sizeof(int)+11);
for(i=0;i<n;i++)
out[i]=0;
if(out==NULL)printf("Not enough memoney!\n");
while(n--){
while(1){
id=rand()%k;
if(out[id]==0){
out[id]=1;
break;
}
}
age=rand()%5;
sex=rand()%2+1;
year=rand()%3;
month=rand()%12+1;
day=rand()%30+1;
gpa=rand()%40+61;
fprintf(fp,"%c%.0f ",'0',id+(float)9080201);
for(i=0;i<4;i++){
name=rand()%26;
fprintf(fp,"%c",name+'a');
}
fprintf(fp," %d",(int)16+age);
fprintf(fp," %d %d %d ",year+(int)1989,month,day);
if(sex%2==0)fprintf(fp,"%c",'f');
else fprintf(fp,"%c",'m');
fprintf(fp," %d\n",gpa);
}
fprintf(fp,"%c",'e');
printf("All build ok\n");
fclose(fp);
free(out);
return 0;
}