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;
}