① 高分懸賞求一個c語言100行左右的程序代碼,希望有詳細的注釋,在線等!
#include <errno.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/fb.h>
#include "xorg-server.h"
#include "xf86.h"
#include "xf86cmap.h"
#include <xf86drm.h>
#include "xf86xv.h"
#include "xf86Crtc.h"
#include "micmap.h"
#include "mali_def.h"
#include "mali_fbdev.h"
#include "mali_exa.h"
#include "mali_dri.h"
#include "mali_lcd.h"
#include "compat-api.h"
#define MALI_VERSION 4000
#define MALI_NAME "MALI"
#define MALI_DRIVER_NAME "mali"
#define PAGE_MASK (~(getpagesize() - 1))
static const OptionInfoRec *MaliAvailableOptions(int chipid, int busid);
static void MaliIdentify(int flags);
static Bool MaliProbe(DriverPtr drv, int flags);
static Bool MaliPreInit(ScrnInfoPtr pScrn, int flags);
static Bool MaliScreenInit(SCREEN_INIT_ARGS_DECL);
static Bool MaliCloseScreen(CLOSE_SCREEN_ARGS_DECL);
static Bool MaliHWSwitchMode(SWITCH_MODE_ARGS_DECL);
static void MaliHWAdjustFrame(ADJUST_FRAME_ARGS_DECL);
static Bool MaliHWEnterVT(VT_FUNC_ARGS_DECL);
static void MaliHWLeaveVT(VT_FUNC_ARGS_DECL);
static ModeStatus MaliHWValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode, Bool verbose, int flags);
static int pix24bpp = 0;
static int malihwPrivateIndex = -1;
static int global_drm_fd = -1;
_X_EXPORT DriverRec MALI =
{
MALI_VERSION,
MALI_DRIVER_NAME,
MaliIdentify,
MaliProbe,
MaliAvailableOptions,
NULL,
0,
NULL,
NULL,
NULL,
};
/* Supported "chipsets" */
static SymTabRec MaliChipsets[] =
{
{ 0, "mali" },
{ -1, NULL }
};
/* Supported options */
typedef enum
{
OPTION_DRI2,
OPTION_DRI2_PAGE_FLIP,
OPTION_DRI2_WAIT_VSYNC,
OPTION_UMP_CACHED,
OPTION_UMP_LOCK,
} FBDevOpts;
static const OptionInfoRec MaliOptions[] =
{
{ OPTION_DRI2, "DRI2", OPTV_BOOLEAN, {0}, TRUE },
{ OPTION_DRI2_PAGE_FLIP, "DRI2_PAGE_FLIP", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_DRI2_WAIT_VSYNC, "DRI2_WAIT_VSYNC", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_UMP_CACHED, "UMP_CACHED", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_UMP_LOCK, "UMP_LOCK", OPTV_BOOLEAN, {0}, FALSE },
{ -1, NULL, OPTV_NONE, {0}, FALSE }
};
#ifdef XFree86LOADER
#ifndef PACKAGE_VERSION_MAJOR
#define PACKAGE_VERSION_MAJOR 0
#endif
#ifndef PACKAGE_VERSION_MINOR
#define PACKAGE_VERSION_MINOR 1
#endif
#ifndef PACKAGE_VERSION_PATCHLEVEL
#define PACKAGE_VERSION_PATCHLEVEL 1
#endif
MODULESETUPPROTO(MaliSetup);
static XF86MoleVersionInfo MaliVersRec =
{
"mali",
MODULEVENDORSTRING,
MODINFOSTRING1,
MODINFOSTRING2,
XORG_VERSION_CURRENT,
PACKAGE_VERSION_MAJOR, PACKAGE_VERSION_MINOR, PACKAGE_VERSION_PATCHLEVEL,
ABI_CLASS_VIDEODRV,
ABI_VIDEODRV_VERSION,
NULL,
{0, 0, 0, 0}
};
② c語言2000行代碼求助
思路:定義一個判斷素數的函數,接著依次從1000到2000遍歷判斷,如果是則輸出,每輸出是8次輸出換行。參考代碼:#include int isp(int n){//判斷一個數是否是素數 int i; for(i=2;i
③ 求100多行的C語言源代碼,最好有流程圖,我初學者,什麼都不會
……啥代碼都行》? 隨便貼了個
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream>
using namespace std;
class coordinate
{
public:
double x;
double y;
};
coordinate function(int n, coordinate *cor)
{
coordinate result;
int i;
double sumy=0, sumx=0, sumx2=0, sumxy=0;
for(i=0; i<n; i++)
{
sumy += cor[i].y;
}
for(i=0; i<n; i++)
{
sumx += cor[i].x;
}
for(i=0; i<n; i++)
{
sumxy += cor[i].y * cor[i].x;
}
for(i=0; i<n; i++)
{
sumx2 += cor[i].x * cor[i].x;
}
result.x = (n*sumxy - sumx*sumy) / (n*sumx2 - sumx*sumx);
result.y = (sumxy*sumx - sumy*sumx2) / (sumx*sumx - n*sumx2);
return result;
}
int main ()
{
cout<<"Please input the 9 y coordinate"<<endl;
coordinate * cor = new coordinate [9];
coordinate result;
for(int i=0; i<9; i++)
{
cin >> cor[i].y;
}
for(i=0; i<9; i++)
{
cor[i].x = (double)i;
}
result = function(9, cor);
cout<< "最小二乘斜率為:"<<result.x<<endl;
cout<< "最小二乘截距為:"<<result.y<<endl;
return 0;
}
④ 學了一學期的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");
}
}
⑤ 求c語言程序設計的程序代碼 要一百行左右的 哪有啊 指導一下
//學生成績管理系統C代碼
/*頭文件*/
#include <stdio.h>
#include<dos.h>
#include<stdlib.h> /*其它說明*/
#include<string.h> /*字元串函數*/
#include<mem.h> /*內存操作函數*/
#include<ctype.h> /*字元操作函數*/
#include<alloc.h> /*動態地址分配函數*/
#define LEN sizeof(STUDENT)
typedef struct stu /*定義結構體數組用於緩存數據*/
{
char num[6];
char name[5];
int score[3];
int sum;
float average;
int order;
struct stu *next;
}STUDENT;
/*函數原型*/
STUDENT *init(); /*初始化函數*/
int menu_select(); /*菜單函數*/
STUDENT *create(); /*創建鏈表*/
void print(STUDENT *head); /* 顯示全部記錄*/
void search(STUDENT *head); /*查找記錄*/
STUDENT *delete(STUDENT *head); /*刪除記錄*/
STUDENT *sort(STUDENT *head); /*排序*/
STUDENT *insert(STUDENT *head,STUDENT *newnode); /*插入記錄*/
void save(STUDENT *head); /*保存文件*/
STUDENT *load(); /*讀文件*/
/*主函數界面*/
main()
{
STUDENT *head,newnode;
head=init(); /*鏈表初始化,使head的值為NULL*/
for(;;) /*循環無限次*/
{
switch(menu_select())
{
case 1:head=create();break;
case 2:print(head);break;
case 3:search(head);break;
case 4:head=delete(head);break;
case 5:head=sort(head);break;
case 6:head=insert(head,&newnode);break; /*&newnode表示返回地址*/
case 7:save(head);break;
case 8:head=load(); break;
case 9:exit(0); /*如菜單返回值為9則程序結束*/
}
}
}
/*初始化函數*/
STUDENT *init()
{
return NULL; /*返回空指針*/
}
/*菜單選擇函數*/
menu_select()
{
int n;
struct date d; /*定義時間結構體*/
getdate(&d); /*讀取系統日期並把它放到結構體d中*/
printf("press any key to enter the menu......"); /*按任一鍵進入主菜單*/
getch(); /*從鍵盤讀取一個字元,但不顯示於屏幕*/
clrscr(); /*清屏*/
printf("********************************************************************************\n");
printf("\t\t Welcome to\n");
printf("\n\t\t The student score manage system\n");
printf("*************************************MENU***************************************\n");
printf("\t\t\t1. Enter the record\n"); /*輸入學生成績記錄*/
printf("\t\t\t2. Print the record\n"); /*顯示*/
printf("\t\t\t3. Search record on name\n"); /*尋找*/
printf("\t\t\t4. Delete a record\n"); /*刪除*/
printf("\t\t\t5. Sort to make new a file\n"); /*排序*/
printf("\t\t\t6. Insert record to list\n"); /*插入*/
printf("\t\t\t7. Save the file\n"); /*保存*/
printf("\t\t\t8. Load the file\n"); /*讀取*/
printf("\t\t\t9. Quit\n"); /*退出*/
printf("\n\t\t Made by Hu Haihong.\n");
printf("********************************************************************************\n");
printf("\t\t\t\t%d\\%d\\%d\n",d.da_year,d.da_mon,d.da_day); /*顯示當前系統日期*/
do{
printf("\n\t\t\tEnter your choice(1~9):");
scanf("%d",&n);
}while(n<1||n>9); /*如果選擇項不在1~9之間則重輸*/
return(n); /*返回選擇項,主函數根據該數調用相應的函數*/
}
/*輸入函數*/
STUDENT *create()
{
int i,s;
STUDENT *head=NULL,*p; /* 定義函數.此函數帶回一個指向鏈表頭的指針*/
clrscr();
for(;;)
{p=(STUDENT *)malloc(LEN); /*開辟一個新的單元*/
if(!p) /*如果指針p為空*/
{printf("\nOut of memory."); /*輸出內存溢出*/
return (head); /*返回頭指針,下同*/
}
printf("Enter the num(0:list end):");
scanf("%s",p->num);
if(p->num[0]=='0') break; /*如果學號首字元為0則結束輸入*/
printf("Enter the name:");
scanf("%s",p->name);
printf("Please enter the %d scores\n",3); /*提示開始輸入成績*/
s=0; /*計算每個學生的總分,初值為0*/
for(i=0;i<3;i++) /*3門課程循環3次*/
{
do{
printf("score%d:",i+1);
scanf("%d",&p->score[i]);
if(p->score[i]<0 || p->score[i]>100) /*確保成績在0~100之間*/
printf("Data error,please enter again.\n");
}while(p->score[i]<0 || p->score[i]>100);
s=s+p->score[i]; /*累加各門成績*/
}
p->sum=s; /*將總分保存*/
p->average=(float)s/3; /*先用強制類型轉換將s轉換成float型,再求平均值*/
p->order=0; /*未排序前此值為0*/
p->next=head; /*將頭結點做為新輸入結點的後繼結點*/
head=p; /*新輸入結點為新的頭結點*/
}
return(head);
}
/* 顯示全部記錄函數*/
void print(STUDENT *head)
{
int i=0; /* 統計記錄條數*/
STUDENT *p; /*移動指針*/
clrscr();
p=head; /*初值為頭指針*/
printf("\n************************************STUDENT************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
while(p!=NULL)
{
i++;
printf("| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("-------------------------------------------------------------------------------\n");
printf("**************************************END**************************************\n");
}
/*查找記錄函數*/
void search(STUDENT *head)
{
STUDENT *p; /* 移動指針*/
char s[5]; /*存放姓名用的字元數組*/
clrscr();
printf("Please enter name for searching.\n");
scanf("%s",s);
p=head; /*將頭指針賦給p*/
while(strcmp(p->name,s) && p != NULL) /*當記錄的姓名不是要找的,或指針不為空時*/
p=p->next; /*移動指針,指向下一結點*/
if(p!=NULL) /*如果指針不為空*/
{printf("\n*************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
}
else
printf("\nThere is no num %s student on the list.\n",s); /*顯示沒有該學生*/
}
/*刪除記錄函數*/
STUDENT *delete(STUDENT *head)
{int n;
STUDENT *p1,*p2; /*p1為查找到要刪除的結點指針,p2為其前驅指針*/
char c,s[6]; /*s[6]用來存放學號,c用來輸入字母*/
clrscr();
printf("Please enter the deleted num: ");
scanf("%s",s);
p1=p2=head; /*給p1和p2賦初值頭指針*/
while(strcmp(p1->num,s) && p1 != NULL) /*當記錄的學號不是要找的,或指針不為空時*/
{p2=p1; /*將p1指針值賦給p2作為p1的前驅指針*/
p1=p1->next; /*將p1指針指向下一條記錄*/
}
if(strcmp(p1->num,s)==0) /*學號找到了*/
{printf("**************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
printf("Are you sure to delete the student Y/N ?"); /*提示是否要刪除,輸入Y刪除,N則退出*/
for(;;)
{scanf("%c",&c);
if(c=='n'||c=='N') break; /*如果不刪除,則跳出本循環*/
if(c=='y'||c=='Y')
{
if(p1==head) /*若p1==head,說明被刪結點是首結點*/
head=p1->next; /*把第二個結點地址賦予head*/
else
p2->next=p1->next; /*否則將一下結點地址賦給前一結點地址*/
n=n-1;
printf("\nNum %s student have been deleted.\n",s);
printf("Don't forget to save.\n");break; /*刪除後就跳出循環*/
}
}
}
else
printf("\nThere is no num %s student on the list.\n",s); /*找不到該結點*/
return(head);
}
/*排序函數*/
STUDENT *sort(STUDENT *head)
{int i=0; /*保存名次*/
STUDENT *p1,*p2,*t,*temp; /*定義臨時指針*/
temp=head->next; /*將原表的頭指針所指的下一個結點作頭指針*/
head->next=NULL; /*第一個結點為新表的頭結點*/
while(temp!=NULL) /*當原表不為空時,進行排序*/
{
t=temp; /*取原表的頭結點*/
temp=temp->next; /*原表頭結點指針後移*/
p1=head; /*設定移動指針p1,從頭指針開始*/
p2=head; /*設定移動指針p2做為p1的前驅,初值為頭指針*/
while(t->average<p1->average&&p1!=NULL) /*作成績平均分比較*/
{
p2=p1; /*待排序點值小,則新表指針後移*/
p1=p1->next;
}
if(p1==p2) /*p1==p2,說明待排序點值大,應排在首位*/
{
t->next=p1; /*待排序點的後繼為p*/
head=t; /*新頭結點為待排序點*/
}
else /*待排序點應插入在中間某個位置p2和p1之間,如p為空則是尾部*/
{
t->next=p1; /*t的後繼是p1*/
p2->next=t; /*p2的後繼是t*/
}
}
p1=head; /*已排好序的頭指針賦給p1,准備填寫名次*/
while(p1!=NULL) /*當p1不為空時,進行下列操作*/
{
i++; /*結點序號*/
p1->order=i; /*將結點序號賦值給名次*/
p1=p1->next; /*指針後移*/
}
printf("Sorting is sucessful.\n"); /*排序成功*/
return (head);
}
/*插入記錄函數*/
STUDENT *insert(STUDENT *head,STUDENT *newnode)
{STUDENT *p0,*p1,*p2;
int n,sum1,i;
p1=head; /*使p1指向第一個結點*/
p0=newnode; /*p0指向要插入的結點*/
printf("\nPlease enter a newnode record.\n"); /*提示輸入記錄信息*/
printf("Enter the num:");
scanf("%s",newnode->num);
printf("Enter the name:");
scanf("%s",newnode->name);
printf("Please enter the %d scores.\n",3);
sum1=0; /*保存新記錄的總分,初值為0*/
for(i=0;i<3;i++)
{
do{
printf("score%d:",i+1);
scanf("%d",&newnode->score[i]);
if(newnode->score[i]>100||newnode->score[i]<0)
printf("Data error,please enter again.\n");
}while(newnode->score[i]>100||newnode->score[i]<0);
sum1=sum1+newnode->score[i]; /*累加各門成績*/
}
newnode->sum=sum1; /*將總分存入新記錄中*/
newnode->average=(float)sum1/3;
newnode->order=0;
if(head==NULL) /*原來的鏈表是空表*/
{head=p0;p0->next=NULL;} /*使p0指向的結點作為頭結點*/
else
{while((p0->average<p1->average)&&(p1->next!=NULL))
{p2=p1; /*使p2指向剛才p1指向的結點*/
p1=p1->next; /*p1後移一個結點*/
}
if(p0->average>=p1->average)
{if(head==p1)head=p0; /*插到原來第一個結點之前*/
else p2->next=p0; /*插到p2指向的結點之後*/
p0->next=p1;}
else
{p1->next=p0;p0->next=NULL;} /*插到最後的結點之後*/
}
n=n+1; /*結點數加1*/
head=sort(head); /*調用排序的函數,將學生成績重新排序*/
printf("\nStudent %s have been inserted.\n",newnode->name);
printf("Don't forget to save the newnode file.\n");
return(head);
}
/*保存數據到文件函數*/
void save(STUDENT *head)
{FILE *fp; /*定義指向文件的指針*/
STUDENT *p; /* 定義移動指針*/
char outfile[10];
printf("Enter outfile name,for example c:\\score\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL) /*為輸出打開一個二進制文件,為只寫方式*/
{
printf("Cannot open the file\n");
return; /*若打不開則返回菜單*/
}
printf("\nSaving the file......\n");
p=head; /*移動指針從頭指針開始*/
while(p!=NULL) /*如p不為空*/
{
fwrite(p,LEN,1,fp); /*寫入一條記錄*/
p=p->next; /*指針後移*/
}
fclose(fp); /*關閉文件*/
printf("Save the file successfully!\n");
}
/* 從文件讀數據函數*/
STUDENT *load()
{STUDENT *p1,*p2,*head=NULL; /*定義記錄指針變數*/
FILE *fp; /* 定義指向文件的指針*/
char infile[10];
printf("Enter infile name,for example c:\\score\n");
scanf("%s",infile);
if((fp=fopen(infile,"rb"))==NULL) /*打開一個二進制文件,為只讀方式*/
{
printf("Can not open the file.\n");
return(head);
}
printf("\nLoading the file!\n");
p1=(STUDENT *)malloc(LEN); /*開辟一個新單元*/
if(!p1)
{
printf("Out of memory!\n");
return(head);
}
head=p1; /*申請到空間,將其作為頭指針*/
while(!feof(fp)) /*循環讀數據直到文件尾結束*/
{
if(fread(p1,LEN,1,fp)!=1) break; /*如果沒讀到數據,跳出循環*/
p1->next=(STUDENT *)malloc(LEN); /*為下一個結點開辟空間*/
if(!p1->next)
{
printf("Out of memory!\n");
return (head);
}
p2=p1; /*使p2指向剛才p1指向的結點*/
p1=p1->next; /*指針後移,新讀入數據鏈到當前表尾*/
}
p2->next=NULL; /*最後一個結點的後繼指針為空*/
fclose(fp);
printf("You have success to read data from the file!\n");
return (head);
}
⑥ 求100行左右的代碼(C語言,c++,數據結構編寫的均可)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 10
struct library {
int num;
char book_name[30];
char writer[30];
char sort_num[3];
char pub_company[30];
char pub_time[30];
char prise[30];
};
typedef struct library LIB; /*結構體的定義用於存放書籍及借書的信息*/
LIB lib[N];
FILE *fp; int all=0;
int menu(void);
void input(void);
void output(void);
void save(void);
void del(void);
void search(void);
void xiugai(void);
main()
{
for(;;)
{
switch(menu()) {
case 1:input();break;
case 2:output();break;
case 3:save();break;
case 4:search();break;
case 5:xiugai();break;
case 6:del();break;
case 7:sort();break;
case 0:exit(1);break;
} /*SWITCH定義函數輸出*/
}
}
int menu(void)
{
char m[3];
int n; printf(" *********************WELCOME**********************\n\n\n\n\n");
printf("\t\t\t-----圖書信息管理系統----\n");
printf("\t\t1:輸入\n");
printf("\t\t2:輸出\n");
printf("\t\t3:保存\n");
printf("\t\t4:查找\n");
printf("\t\t5:修改\n");
printf("\t\t6:刪除\n");
printf("\t\t7:統計\n");
printf("\t\t0:退出\n");
printf("\t\tplease choose a operation(0-6):\n");
scanf("%s",m);
n=atoi(m);
return(n);
} /*主要界面*/
void input(void)
{
int i;
char m[3];
for(i=all;i<N;i++)
{
all++;
printf("請輸入信息:\n");
printf("\t\t號碼:\n");
scanf("%d",&lib[i].num);
printf("\t\t書名:\n");
scanf("%s",lib[i].book_name);
printf("\t\t作者:\n");
scanf("%s",lib[i].writer);
printf("\t\tsort_num:\n");
scanf("%s",lib[i].sort_num);
printf("\t\t出版商:\n");
scanf("%s",lib[i].pub_company);
printf("\t\t出版時間:\n");
scanf("%s",lib[i].pub_time);
printf("\t\t價格:\n");
scanf("%s",lib[i].prise);
a: printf("\t\tyes/哦了?\n");
printf("\t\t1:yes\n");
printf("\t\t2:no\n");
scanf("%s",m);
if(atoi(m)==1)
continue;
else if(atoi(m)==2)
return;
else
{
printf("\t\t錯誤!\n");
goto a;
} /* 輸入條件查找*/
}
}
void output(void)
{
int i;
for(i=0;i<all;i++)
{
printf("\t\t%d\n",lib[i].num);
printf("%s\t\t%s\t\t%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("%s\t\t%s\t\t%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
}
} /*輸出書名作者出版時間價格等*/
void save(void)
{
int i;
if((fp=fopen("file.c","wb"))==NULL)
{
printf("can not open the file");
exit(1);
}
for(i=0;i<all;i++)
{
if(fwrite(&lib[i],sizeof(LIB),1,fp)!=1)
{
printf("can not write!");
exit(1);
}
} /*條件不符合時拒絕存儲*/
fclose(fp);
}
void search(void)
{
int i,flag;
char m[3];
char name[30];
printf("\t\t請選擇您的存儲方式:\n");
printf("\t\t1:按書名!\n");
printf("\t\t2:按作者!\n");
scanf("%s",m);
i=atoi(m);
switch(i)
{
case 1:{
printf("\t\t請輸入書名:\n");
scanf("%s",name);
flag=0;
for(i=0;i<N;i++)
{
if(strcmp(name,lib[i].book_name)==0)
{
printf("\t\t%d\n",lib[i].num);
printf("%s\t\t%s\t\t%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("%s\t\t%s\t\t%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
flag=1;break;
}
}
if(flag==0)
printf("\t\t沒有這本書!\n");
}
case 2:{
printf("\t\t請輸入作者:\n");
scanf("%s",name);
flag=0;
for(i=0;i<N;i++)
{
if(strcmp(name,lib[i].writer)==0)
{
printf("\t\t%d\n",lib[i].num);
printf("%s\t\t%s\t\t%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("%s\t\t%s\t\t%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
flag=1;break;
}
}
if(flag==0)
printf("\t\t沒有這個作者!\n");
}
} /*查找圖書按書名或作者並輸出*/
}
void xiugai(void)
{
int i,flag;
char name[30],n[3];
printf("\t\t請輸入要修改的書名 :\n");
scanf("%s",name); /*修改書名*/
flag=0;
for(i=0;i<N;i++)
{
if(strcmp(name,lib[i].book_name)==0)
{
printf("\t\t%d\n",lib[i].num);
printf("%s\t\t%s\t\t%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("%s\t\t%s\t\t%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
printf("\t\tplease input xiugai's the informations:\n");
printf("\t\tnum:\n");
scanf("%d",&lib[i].num);
printf("\t\tbook_name:\n");
scanf("%s",lib[i].book_name);
printf("\t\twriter:\n");
scanf("%s",lib[i].writer);
printf("\t\tsort_num:\n");
scanf("%s",lib[i].sort_num);
printf("\t\tpub_company:\n");
scanf("%s",lib[i].pub_company);
printf("\t\tpub_time:\n");
scanf("%s",lib[i].pub_time);
printf("\t\tprise:\n");
scanf("%s",lib[i].prise);
flag=1;break;
}
} /*增加圖書*/
if(flag==0)
printf("\t\t沒有找到啊!\n");
}
void del(void)
{
int i,j,flag;
char name[30];
printf("\t\t請輸入要刪除的書名:\n");
scanf("%s",name);
flag=0;
for(i=0;i<N;i++)
{
if(strcmp(name,lib[i].book_name)==0)
{
printf("\t\t%d\n",lib[i].num);
printf("%s\t\t%s\t\t%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("%s\t\t%s\t\t%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
for(j=N;j>i;j--)
{
lib[j-1].num=lib[j].num;
strcpy(lib[j-1].book_name,lib[j].book_name);
strcpy(lib[j-1].writer,lib[j].writer);
strcpy(lib[j-1].sort_num,lib[j].sort_num);
strcpy(lib[j-1].pub_company,lib[j].pub_company);
strcpy(lib[j-1].pub_time,lib[j].pub_time);
strcpy(lib[j-1].prise,lib[j].prise);
flag=1;
printf("\t\t已經刪除!\n");
break;
}
}
}
if(flag==0)
printf("\t\t沒有這本書!\n");
} /*刪除圖書*/
⑦ 急求一百行左右的C語言編程!
#include<stdio.h>
#include<windows.h>
#defineN100000
voidmake_num(intt[],intx,inty)//產生100000位小數,存在數組a中
{
inti,k=0,m,temp;
temp=x;
for(i=0;i<N;i++)
{
temp=temp%y*10;//分子除以分母再余
t[i]=temp/y;//余數除以分母,得到一位小數
if(temp==0)
k++;
if(k>=100)//如果除盡100次以上,就認為是有限小數
{
system("cls");
printf("%d/%d不是循環小數為%d.",x,y,x/y);
for(i=0;i<=20;i++)
printf("%d",t[i]);
printf(" ");
exit(0);
}
}
}
intstart(intt[])//找循環體的起始位置
{
inti,j,m=0,n=0,b[1000];
for(i=0,j=N-1000;i<1000;j++,i++)//將a中後1000位放在數組b中
b[i]=t[j];
for(i=0;i<N-1000;i++)//將b中元素與a中元素比較,直到找到能使它們對應元素完全相等為止
//此時得到n的值就是,使它們相等的初始位置
{
if(t[i]==b[m])
{
if(m==0)n=i;
m++;
}
elseif(m!=0&&t[i]!=b[m])
m=0;
if(m==999)
break;
}
for(i=n-1,j=N-1001;i>=0;i--,j--)//從a[n-1]與a[N-1001]的位置開始比較,當不相等時的位置即為
//循環體的起始位置
{
if(t[i]!=t[j])
break;
}
returni+1;
}
intfind(intt[],intx)//找循環體的結束位置
{
inti,j,k,m;
for(i=x+1,k=x;i<N;i++)//找到一個位置,使此位置後的所有元素都等於從第一個元素開始對應往下都
//相等,則此位置就是循環體的結束位置
{
if(t[i]==t[k])
{
k++;
m=i-k+x;
}
else
k=x;
}
returnm;
}
main()
{
inti,m1,start_n,end,son,mon,a[N];
printf("請輸入分子和分母:");
scanf("%d%d",&son,&mon);
make_num(a,son,mon);
start_n=start(a);//循環體的起始位置
system("cls");
printf(" 循環的起始的小數位為:%d ",start_n+1);
end=find(a,start_n);//循環體的結束位置
if(end-start_n>=1000)//如果結束位置減去起始位置大於1000位,則認為此分數為無限不循環
//理論上沒有無限不循環的分數,本人也不大清楚,可能這個if可以不要
{
system("cls");
printf("%d/%d為無限不循環小數為: %d.",son,mon,son/mon);
for(i=0;i<=1000;i++)
printf("%d",a[i]);
printf(" ");
exit(0);
}
printf("%d/%d的無限循環小數如下: %d.",son,mon,son/mon);//輸出分數的整數部分和小數點
for(i=0;i<start_n;i++)//輸出不循環的部分
printf("%d",a[i]);
printf("[");
for(i=start_n;i<=end;i++)//輸出循環的部分
printf("%d",a[i]);
printf("] 說明:[]中的數字是循環體 ");
}
找無限循環小數的循環體及循環的起始位置,如下:
⑧ 跪求100行左右的c語言簡單代碼,大一水平就行,什麼類型都可以。
//學生成績管理系統C代碼
/*頭文件*/
#include<stdio.h>
#include<dos.h>
#include<stdlib.h>/*其它說明*/
#include<string.h>/*字元串函數*/
#include<mem.h>/*內存操作函數*/
#include<ctype.h>/*字元操作函數*/
#include<alloc.h>/*動態地址分配函數*/
#defineLENsizeof(STUDENT)
typedefstructstu/*定義結構體數組用於緩存數據*/
{
charnum[6];
charname[5];
intscore[3];
intsum;
floataverage;
intorder;
structstu*next;
}STUDENT;
/*函數原型*/
STUDENT*init();/*初始化函數*/
intmenu_select();/*菜單函數*/
STUDENT*create();/*創建鏈表*/
voidprint(STUDENT*head);/*顯示全部記錄*/
voidsearch(STUDENT*head);/*查找記錄*/
STUDENT*delete(STUDENT*head);/*刪除記錄*/
STUDENT*sort(STUDENT*head);/*排序*/
STUDENT*insert(STUDENT*head,STUDENT*newnode);/*插入記錄*/
voidsave(STUDENT*head);/*保存文件*/
STUDENT*load();/*讀文件*/
/*主函數界面*/
main()
{
STUDENT*head,newnode;
head=init();/*鏈表初始化,使head的值為NULL*/
for(;;)/*循環無限次*/
{
switch(menu_select())
{
case1:head=create();break;
case2:print(head);break;
case3:search(head);break;
case4:head=delete(head);break;
case5:head=sort(head);break;
case6:head=insert(head,&newnode);break;/*&newnode表示返回地址*/
case7:save(head);break;
case8:head=load();break;
case9:exit(0);/*如菜單返回值為9則程序結束*/
}
}
}
/*初始化函數*/
STUDENT*init()
{
returnNULL;/*返回空指針*/
}
/*菜單選擇函數*/
menu_select()
{
intn;
structdated;/*定義時間結構體*/
getdate(&d);/*讀取系統日期並把它放到結構體d中*/
printf("pressanykeytoenterthemenu......");/*按任一鍵進入主菜單*/
getch();/*從鍵盤讀取一個字元,但不顯示於屏幕*/
clrscr();/*清屏*/
printf("******************************************************************************** ");
printf(" Welcometo ");
printf(" Thestudentscoremanagesystem ");
printf("*************************************MENU*************************************** ");
printf(" 1.Entertherecord ");/*輸入學生成績記錄*/
printf(" 2.Printtherecord ");/*顯示*/
printf(" 3.Searchrecordonname ");/*尋找*/
printf(" 4.Deletearecord ");/*刪除*/
printf(" 5.Sorttomakenewafile ");/*排序*/
printf(" 6.Insertrecordtolist ");/*插入*/
printf(" 7.Savethefile ");/*保存*/
printf(" 8.Loadthefile ");/*讀取*/
printf(" 9.Quit ");/*退出*/
printf(" MadebyHuHaihong. ");
printf("******************************************************************************** ");
printf(" %d\%d\%d ",d.da_year,d.da_mon,d.da_day);/*顯示當前系統日期*/
do{
printf(" Enteryourchoice(1~9):");
scanf("%d",&n);
}while(n<1||n>9);/*如果選擇項不在1~9之間則重輸*/
return(n);/*返回選擇項,主函數根據該數調用相應的函數*/
}
/*輸入函數*/
STUDENT*create()
{
inti,s;
STUDENT*head=NULL,*p;/*定義函數.此函數帶回一個指向鏈表頭的指針*/
clrscr();
for(;;)
{p=(STUDENT*)malloc(LEN);/*開辟一個新的單元*/
if(!p)/*如果指針p為空*/
{printf(" Outofmemory.");/*輸出內存溢出*/
return(head);/*返回頭指針,下同*/
}
printf("Enterthenum(0:listend):");
scanf("%s",p->num);
if(p->num[0]=='0')break;/*如果學號首字元為0則結束輸入*/
printf("Enterthename:");
scanf("%s",p->name);
printf("Pleaseenterthe%dscores ",3);/*提示開始輸入成績*/
s=0;/*計算每個學生的總分,初值為0*/
for(i=0;i<3;i++)/*3門課程循環3次*/
{
do{
printf("score%d:",i+1);
scanf("%d",&p->score[i]);
if(p->score[i]<0||p->score[i]>100)/*確保成績在0~100之間*/
printf("Dataerror,pleaseenteragain. ");
}while(p->score[i]<0||p->score[i]>100);
s=s+p->score[i];/*累加各門成績*/
}
p->sum=s;/*將總分保存*/
p->average=(float)s/3;/*先用強制類型轉換將s轉換成float型,再求平均值*/
p->order=0;/*未排序前此值為0*/
p->next=head;/*將頭結點做為新輸入結點的後繼結點*/
head=p;/*新輸入結點為新的頭結點*/
}
return(head);
}
/*顯示全部記錄函數*/
voidprint(STUDENT*head)
{
inti=0;/*統計記錄條數*/
STUDENT*p;/*移動指針*/
clrscr();
p=head;/*初值為頭指針*/
printf(" ************************************STUDENT************************************ ");
printf("------------------------------------------------------------------------------- ");
printf("|Rec|Num|Name|Sc1|Sc2|Sc3|Sum|Ave|Order| ");
printf("------------------------------------------------------------------------------- ");
while(p!=NULL)
{
i++;
printf("|%3d|%4s|%-4s|%3d|%3d|%3d|%3d|%4.2f|%-5d| ",
i,p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("------------------------------------------------------------------------------- ");
printf("**************************************END************************************** ");
}
/*查找記錄函數*/
voidsearch(STUDENT*head)
{
STUDENT*p;/*移動指針*/
chars[5];/*存放姓名用的字元數組*/
clrscr();
printf("Pleaseenternameforsearching. ");
scanf("%s",s);
p=head;/*將頭指針賦給p*/
while(strcmp(p->name,s)&&p!=NULL)/*當記錄的姓名不是要找的,或指針不為空時*/
p=p->next;/*移動指針,指向下一結點*/
if(p!=NULL)/*如果指針不為空*/
{printf(" *************************************FOUND************************************ ");
printf("------------------------------------------------------------------------------- ");
printf("|Num|Name|sc1|sc2|sc3|Sum|Ave|Order| ");
printf("------------------------------------------------------------------------------- ");
printf("|%4s|%4s|%3d|%3d|%3d|%3d|%4.2f|%-5d| ",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("------------------------------------------------------------------------------- ");
printf("***************************************END************************************** ");
}
else
printf(" Thereisnonum%sstudentonthelist. ",s);/*顯示沒有該學生*/
}
/*刪除記錄函數*/
STUDENT*delete(STUDENT*head)
{intn;
STUDENT*p1,*p2;/*p1為查找到要刪除的結點指針,p2為其前驅指針*/
charc,s[6];/*s[6]用來存放學號,c用來輸入字母*/
clrscr();
printf("Pleaseenterthedeletednum:");
scanf("%s",s);
p1=p2=head;/*給p1和p2賦初值頭指針*/
while(strcmp(p1->num,s)&&p1!=NULL)/*當記錄的學號不是要找的,或指針不為空時*/
{p2=p1;/*將p1指針值賦給p2作為p1的前驅指針*/
p1=p1->next;/*將p1指針指向下一條記錄*/
}
if(strcmp(p1->num,s)==0)/*學號找到了*/
{printf("**************************************FOUND************************************ ");
printf("------------------------------------------------------------------------------- ");
printf("|Num|Name|sc1|sc2|sc3|Sum|Ave|Order| ");
printf("------------------------------------------------------------------------------- ");
printf("|%4s|%4s|%3d|%3d|%3d|%3d|%4.2f|%-5d| ",
p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);
printf("------------------------------------------------------------------------------- ");
printf("***************************************END************************************** ");
printf("AreyousuretodeletethestudentY/N?");/*提示是否要刪除,輸入Y刪除,N則退出*/
for(;;)
{scanf("%c",&c);
if(c=='n'||c=='N')break;/*如果不刪除,則跳出本循環*/
if(c=='y'||c=='Y')
{
if(p1==head)/*若p1==head,說明被刪結點是首結點*/
head=p1->next;/*把第二個結點地址賦予head*/
else
p2->next=p1->next;/*否則將一下結點地址賦給前一結點地址*/
n=n-1;
printf(" Num%sstudenthavebeendeleted. ",s);
printf("Don'tforgettosave. ");break;/*刪除後就跳出循環*/
}
}
}
else
printf(" Thereisnonum%sstudentonthelist. ",s);/*找不到該結點*/
return(head);
}
/*排序函數*/
STUDENT*sort(STUDENT*head)
{inti=0;/*保存名次*/
STUDENT*p1,*p2,*t,*temp;/*定義臨時指針*/
temp=head->next;/*將原表的頭指針所指的下一個結點作頭指針*/
head->next=NULL;/*第一個結點為新表的頭結點*/
while(temp!=NULL)/*當原表不為空時,進行排序*/
{
t=temp;/*取原表的頭結點*/
temp=temp->next;/*原表頭結點指針後移*/
p1=head;/*設定移動指針p1,從頭指針開始*/
p2=head;/*設定移動指針p2做為p1的前驅,初值為頭指針*/
while(t->average<p1->average&&p1!=NULL)/*作成績平均分比較*/
{
p2=p1;/*待排序點值小,則新表指針後移*/
p1=p1->next;
}
if(p1==p2)/*p1==p2,說明待排序點值大,應排在首位*/
{
t->next=p1;/*待排序點的後繼為p*/
head=t;/*新頭結點為待排序點*/
}
else/*待排序點應插入在中間某個位置p2和p1之間,如p為空則是尾部*/
{
t->next=p1;/*t的後繼是p1*/
p2->next=t;/*p2的後繼是t*/
}
}
p1=head;/*已排好序的頭指針賦給p1,准備填寫名次*/
while(p1!=NULL)/*當p1不為空時,進行下列操作*/
{
i++;/*結點序號*/
p1->order=i;/*將結點序號賦值給名次*/
p1=p1->next;/*指針後移*/
}
printf("Sortingissucessful. ");/*排序成功*/
return(head);
}
/*插入記錄函數*/
STUDENT*insert(STUDENT*head,STUDENT*newnode)
{STUDENT*p0,*p1,*p2;
intn,sum1,i;
p1=head;/*使p1指向第一個結點*/
p0=newnode;/*p0指向要插入的結點*/
printf(" Pleaseenteranewnoderecord. ");/*提示輸入記錄信息*/
printf("Enterthenum:");
scanf("%s",newnode->num);
printf("Enterthename:");
scanf("%s",newnode->name);
printf("Pleaseenterthe%dscores. ",3);
sum1=0;/*保存新記錄的總分,初值為0*/
for(i=0;i<3;i++)
{
do{
printf("score%d:",i+1);
scanf("%d",&newnode->score[i]);
if(newnode->score[i]>100||newnode->score[i]<0)
printf("Dataerror,pleaseenteragain. ");
}while(newnode->score[i]>100||newnode->score[i]<0);
sum1=sum1+newnode->score[i];/*累加各門成績*/
}
newnode->sum=sum1;/*將總分存入新記錄中*/
newnode->average=(float)sum1/3;
newnode->order=0;
if(head==NULL)/*原來的鏈表是空表*/
{head=p0;p0->next=NULL;}/*使p0指向的結點作為頭結點*/
else
{while((p0->average<p1->average)&&(p1->next!=NULL))
{p2=p1;/*使p2指向剛才p1指向的結點*/
p1=p1->next;/*p1後移一個結點*/
}
if(p0->average>=p1->average)
{if(head==p1)head=p0;/*插到原來第一個結點之前*/
elsep2->next=p0;/*插到p2指向的結點之後*/
p0->next=p1;}
else
{p1->next=p0;p0->next=NULL;}/*插到最後的結點之後*/
}
n=n+1;/*結點數加1*/
head=sort(head);/*調用排序的函數,將學生成績重新排序*/
printf(" Student%shavebeeninserted. ",newnode->name);
printf("Don'tforgettosavethenewnodefile. ");
return(head);
}
/*保存數據到文件函數*/
voidsave(STUDENT*head)
{FILE*fp;/*定義指向文件的指針*/
STUDENT*p;/*定義移動指針*/
charoutfile[10];
printf("Enteroutfilename,forexamplec:\score ");
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL)/*為輸出打開一個二進制文件,為只寫方式*/
{
printf("Cannotopenthefile ");
return;/*若打不開則返回菜單*/
}
printf(" Savingthefile...... ");
p=head;/*移動指針從頭指針開始*/
while(p!=NULL)/*如p不為空*/
{
fwrite(p,LEN,1,fp);/*寫入一條記錄*/
p=p->next;/*指針後移*/
}
fclose(fp);/*關閉文件*/
printf("Savethefilesuccessfully! ");
}
/*從文件讀數據函數*/
STUDENT*load()
{STUDENT*p1,*p2,*head=NULL;/*定義記錄指針變數*/
FILE*fp;/*定義指向文件的指針*/
charinfile[10];
printf("Enterinfilename,forexamplec:\score ");
scanf("%s",infile);
if((fp=fopen(infile,"rb"))==NULL)/*打開一個二進制文件,為只讀方式*/
{
printf("Cannotopenthefile. ");
return(head);
}
printf(" Loadingthefile! ");
p1=(STUDENT*)malloc(LEN);/*開辟一個新單元*/
if(!p1)
{
printf("Outofmemory! ");
return(head);
}
head=p1;/*申請到空間,將其作為頭指針*/
while(!feof(fp))/*循環讀數據直到文件尾結束*/
{
if(fread(p1,LEN,1,fp)!=1)break;/*如果沒讀到數據,跳出循環*/
p1->next=(STUDENT*)malloc(LEN);/*為下一個結點開辟空間*/
if(!p1->next)
{
printf("Outofmemory! ");
return(head);
}
p2=p1;/*使p2指向剛才p1指向的結點*/
p1=p1->next;/*指針後移,新讀入數據鏈到當前表尾*/
}
p2->next=NULL;/*最後一個結點的後繼指針為空*/
fclose(fp);
printf("! ");
return(head);
}
⑨ 求C語言編程很長的程序100多行的
C語言寫的21點程序!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NULL 0
int compare(char sum1,char sum2)
{
if(sum1>=sum2)
return 1;
else
return 0;
}
int breakal(int sum)
{
if(sum>21)
return 0;
else
return 1;
}
char change(int card)
{
char ch,n,m,x;
switch(card)
{
case 1: ch='A';
break;
case 10:
{
n=1+int(rand()/(RAND_MAX+1.0));
if(n==1)
ch='K';
else
{
m=1+int(rand()/(RAND_MAX+1.0));
if(m==1)
ch='Q';
else
{
x=1+int(rand()/(RAND_MAX+1.0));
if(x==1)
ch='J';
}
}
break;
}
} //以上switch語句用於將數字轉換成字元
return ch;
}
void game()
{
int i,k,n;
char host_ch,player_ch,host_card[15],player_card[15];
int host_sum=0,player_sum=0;
srand(time(NULL));
for(i=0;i<2;i++)
{
int (10.0*rand()/(RAND_MAX+1.0));
player_card[i]=1+int (10.0*rand()/(RAND_MAX+1.0));
player_ch=change(player_card[i]);
if(player_card[i]>1 && player_card[i]<10) //輸出玩家抽到的牌的點數
printf("您抽到的第%d張牌是%d\n",i+1,player_card[i]);
else if(player_card[i]==10)
printf("您要到的第%d張牌是%c\n",i+1,player_ch);
else
printf("您要到的第%d張牌是A\n",i+1);
if(player_ch=='A') //詢問判斷玩家的A的點值為1或11
{
printf(" 您有一張A,您想要A作1還是11?\n");
printf(" 1. 1\n" );
printf(" 2. 11\n");
if(scanf("%d",&n) && n==1)
player_card[i]=1;
else
player_card[i]=11;
}
host_card[i]=1+int (10.0*rand()/(RAND_MAX+1.0));
host_ch=change(host_card[i]);
if(host_ch=='A') //電腦自動判斷莊家的A的點值為1或11
{
k=1+int(rand()/(RAND_MAX+1.0));
if(k==1)
host_card[i]=11;
else
host_card[i]=1;
}
player_sum+=player_card[i]; //分別對莊家和玩家的點數求和
host_sum+=host_card[i];
}
printf("您現在的總面值為%d\n",player_sum);//輸出玩家的總面值
for(i=2;i<5;i++)
{
if(host_sum<18 && host_sum>0)//電腦自動判斷莊家是否要牌
{
host_card[i]=1+int (10.0*rand()/(RAND_MAX+1.0));
host_ch=change(host_card[i]);
if(host_ch=='A') //電腦自動判斷莊家的A的點值為1或11
{
k=1+int(rand()/(RAND_MAX+1.0));
if(k==1)
host_card[i]=11;
else
host_card[i]=1;
}
host_sum+=host_card[i];
}
printf("您還要繼續要牌嗎?\n");
printf(" 1.要\n");
printf(" 2.不要\n");
scanf("%d",&k);
if(k==1)
{
{
player_card[i]=1+int (10.0*rand()/(RAND_MAX+1.0));
player_ch=change(player_card[i]);
if(player_ch=='A') //詢問判斷玩家的A的點值為1或11
{
printf("您有一張A,您想要A作1還是11?\n");
printf(" 1. 1\n" );
printf(" 2. 11\n");
if(scanf("%d",&n) && n==1)
player_card[i]=1;
else
player_card[i]=11;
printf("您要到的第%d張牌是A\n",i+1);
}
else
printf("您要到的第%d張牌是%d\n",i+1,player_card[i]);
player_sum+=player_card[i];
if(i==4)
printf("您手中已有5張牌,一決勝負的時刻到啦!\n");
if(breakal(host_sum)==0)
{
if(breakal(player_sum)==0)
{
printf("莊家爆牌了,您也爆牌了!莊家的牌面值是%d,您的牌面值是%d\n",host_sum,player_sum);
printf("\nYou lose..\n");
break;
}
}
else
if(breakal(player_sum)==0)
{
printf("您爆牌了!您的牌面值是%d\n \nYou lose..\n",player_sum);
break;
}
}
if(breakal(host_sum)==0)
{
printf("莊家爆牌了!莊家的牌面值是%d\n",host_sum);
printf("\nCongratulations! YOu win!\n");
break;
}
}
else
{
printf("莊家的牌面值是%d,您的牌面值是%d\n",host_sum,player_sum);
if(compare(host_sum,player_sum)==1)
printf("\nYou lose..\n");
else
printf("\nCongratulations! You win!\n");
break;
}
}
}
int main()
{
kaishi:
int n;
printf(" 歡迎進入21點游戲!\n");
printf(" ************************************\n");
printf(" 1.開始游戲\n");
printf(" 2.退出遊戲\n");
printf(" ************************************\n");
if(scanf("%d",&n)&&n==1)
game();
else if(n==2)
{
printf(" ******************************\n");
printf(" 游戲結束!祝您愉快!\n");
printf("\n\n");
printf(" 再見!\n");
printf(" ******************************\n");
return 0;
}
goto kaishi;
}
⑩ 誰能給我一個C語言四五百行的程序代碼,結業設計用
//學生信息管理系統
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct student
{
char num[20];
char name[20];
int score1;
int score2;
int score3;
}stu[100]={"01","zhangmingming",67,78,82,"02","lichengyou",78,91,88,"03","zhanghuican",68,82,56,"04","wanglu",56,45,77,"05","chendongming",67,38,47};
int main()
{
int i;
int s=5;
void cjtj();
void xxwh();
void xxcx();
void cjpx();
FILE *fp1;
if((fp1=fopen("stu_list","w"))==NULL) /*以只寫的方式打開一個文件stu_list*/
{
printf("Can not open file!\n");
exit(1);
}
fwrite(&stu,sizeof(struct student),5,fp1); /*將stu中的數據寫到文件中*/
fclose(fp1);
do
{
printf("\n");
printf("\n");
printf(" +--------------------+\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",&i);
if(i==1)
{
xxwh();
}
else if(i==2)
{
xxcx();
}
else if(i==3)
{
cjtj();
}
else if(i==4)
{
cjpx();
}
else
break;
}while(i!=0);
printf("謝謝使用!\n");
return 0;
}
void cjtj() /*成績統計子函數*/
{
char name[20];
system("cls");
printf("請輸入您想統計的課程名稱:\n");
scanf("%s",name);
int q,w,u,s,g,p,k,l,m;
if(strcmp(name,"yuwen")==0)
{
printf("請輸入您想統計的分數段(例60,70):\n");
scanf("%d,%d",&q,&w);
for(u=0;u<5;u++)
{
if((stu[u].score1>=q)&&(stu[u].score1<=w))
printf("%s %s %d %d %d\n",stu[u].num,stu[u].name,stu[u].score1,stu[u].score2,stu[u].score3);
}
}
if(strcmp(name,"shuxue")==0)
{
printf("請輸入您想統計的分數段(例60,70):\n");
scanf("%d,%d",&s,&g);
for(p=0;p<5;p++)
{
if(stu[p].score2>=s&&g>=stu[p].score2)
printf("%s %s %d %d %d\n",stu[p].num,stu[p].name,stu[p].score1,stu[p].score2,stu[p].score3);
}
}
if(strcmp(name,"yingyu")==0)
{
printf("請輸入您想統計的分數段(例60,70):\n");
scanf("%d,%d",&k,&l);
for(m=0;m<5;m++)
{
if(stu[m].score3>=k&&stu[m].score3<=l)
printf("%s %s %d %d %d\n",stu[m].num,stu[m].name,stu[m].score1,stu[m].score2,stu[m].score3);
}
}
return;
}
void xxwh() /* 信息維護子函數*/
{
int y;
int s=5;
void zengjia();
void shanjian();
void xiugai();
do
{
printf(" --------------------\n");
printf(" 歡迎進入信息維護模塊\n");
printf(" 1.增加學生信息 \n");
printf(" 2.刪減學生信息 \n");
printf(" 3.修改學生信息 \n");
printf(" 4.退出本模塊 \n");
printf(" --------------------\n");
printf(" 請輸入您要進行的操作(1-4):");
scanf("%d",&y);
if(y==1)
{
zengjia();
s=s+1;
}
else if(y==2)
{
shanjian();
s=s-1;
}
else if(y==3)
{
xiugai();
}
else
break;
}while(y!=4);
printf("謝謝使用!\n");
return;
}
void zengjia() /*增加學生信息*/
{
struct student student1;
FILE *fp1;
int n=5;
printf("輸入您想添加的學生信息:\n");
scanf("%s %s%d%d%d",student1.num,student1.name,&student1.score1,&student1.score2,&student1.score3);
strcpy(stu[n+1].num,student1.num);
strcpy(stu[n+1].name,student1.name);
stu[n+1].score1=student1.score1;
stu[n+1].score2=student1.score2;
stu[n+1].score3=student1.score3;
if((fp1=fopen("stu_list","r+"))==NULL) /*以讀寫的方式打開一個文件stu_list*/
{
printf("Can not open file!\n");
exit(1);
}
fwrite(&stu,sizeof(struct student),6,fp1); /*將stu中的數據寫到文件中*/
fclose(fp1);
printf("\n");
printf("添加成功!\n");
printf("\n");
printf("\n");
return;
}
void shanjian() /*刪除學生信息*/
{
char a[20];
int h,j,e;
FILE *fp1;
printf("請輸入您想刪除的學生學號:\n");
scanf("%s",a);
for(h=0;h<5;h++)
{
if(strcmp(a,stu[h].num)==0)
j=h;
}
if(j!=4)
{
for(e=h-1;e<5;e++,j++)
{
strcpy(stu[j].num,stu[j+1].num);
strcpy(stu[j].name,stu[j+1].name);
stu[j].score1=stu[j+1].score1;
stu[j].score2=stu[j+1].score2;
stu[j].score3=stu[j+1].score3;
}
}
if((fp1=fopen("stu_list","r+"))==NULL) /*以讀寫的方式打開一個文件stu_list*/
{
printf("Can not open file!\n");
exit(1);
}
fwrite(&stu,sizeof(struct student),6,fp1); /*將stu中的數據寫到文件中*/
fclose(fp1);
printf("\n");
printf("刪除成功!\n");
printf("\n");
printf("\n");
return;
}
void xiugai() /*修改學生信息*/
{
char b[20];
int c,n=5;
FILE *fp1;
struct student student2;
printf("請輸入您想修改的學生學號:\n");
scanf("%s",b);
for(c=0;c<n;c++)
{
if(strcmp(b,stu[c].num)==0)
{
printf("請輸入修改後的學生信息:\n");
scanf("%s %s%d%d%d",student2.num,student2.name,&student2.score1,&student2.score2,&student2.score3);
strcpy(stu[c].num,student2.num);
strcpy(stu[c].name,student2.name);
stu[c].score1=student2.score1;
stu[c].score2=student2.score2;
stu[c].score3=student2.score3;
}
} if((fp1=fopen("stu_list","r+"))==NULL) /*以讀寫的方式打開一個文件stu_list*/
{
printf("Can not open file!\n");
exit(1);
}
fwrite(&stu,sizeof(struct student),6,fp1); /*將stu中的數據寫到文件中*/
fclose(fp1);
fclose(fp1);
printf("\n");
printf("修改成功!\n");
printf("\n");
printf("\n");
return;
}
void cjpx() /*排序函數*/
{
int z,x,c,v,o;
struct student t;
do
{
printf("\n");
printf("\n");
printf("[1]按升序排序:\n");
printf("[2]按降序排序:\n");
printf("[3]返回\n");
printf("請選擇:");
scanf("%d",&z);
if(z==1)
{
printf("選擇的科目:");
printf("[1]語文:[2]數學:[3]英語:");
scanf("%d",&x);
if(x==1)
{
for(c=1;c<5;c++)
for(v=0;v<5-c;v++)
if(stu[v].score1>stu[v+1].score1)
{
t=stu[v];
stu[v]=stu[v+1];
stu[v+1]=t;
}
for(o=0;o<5;o++)
printf("%s %s %d %d %d\n",stu[o].num,stu[o].name,stu[o].score1,stu[o].score2,stu[o].score3);
}
else if(x==2)
{
for(c=1;c<5;c++)
for(v=0;v<5-c;v++)
if(stu[v].score2>stu[v+1].score2)
{
t=stu[v];
stu[v]=stu[v+1];
stu[v+1]=t;
}
for(o=0;o<5;o++)
printf("%s %s %d %d %d\n",stu[o].num,stu[o].name,stu[o].score1,stu[o].score2,stu[o].score3);
}
else if(x==3)
{
for(c=1;c<5;c++)
for(v=0;v<5-c;v++)
if(stu[v].score3>stu[v+1].score3)
{
t=stu[v];
stu[v]=stu[v+1];
stu[v+1]=t;
}
for(o=0;o<5;o++)
printf("%s %s %d %d %d\n",stu[o].num,stu[o].name,stu[o].score1,stu[o].score2,stu[o].score3);
}
}
else
if(z==2)
{
printf("選擇的科目:");
printf("[1]語文:[2]數學:[3]英語:");
scanf("%d",&x);
if(x==1)
{
for(c=1;c<5;c++)
for(v=0;v<5-c;v++)
if(stu[v].score1<stu[v+1].score1)
{
t=stu[v+1];
stu[v+1]=stu[v];
stu[v]=t;
}
for(o=0;o<5;o++)
printf("%s %s %d %d %d\n",stu[o].num,stu[o].name,stu[o].score1,stu[o].score2,stu[o].score3);
}
else
if(x==2)
{
for(c=1;c<5;c++)
for(v=0;v<5-c;v++)
if(stu[v].score2<stu[v+1].score2)
{
t=stu[v+1];
stu[v+1]=stu[v];
stu[v]=t;
}
for(o=0;o<5;o++)
printf("%s %s %d %d %d\n",stu[o].num,stu[o].name,stu[o].score1,stu[o].score2,stu[o].score3);
}
else
if(x==3)
{
for(c=1;c<5;c++)
for(v=0;v<5-c;c++)
if(stu[v].score3<stu[v+1].score3)
{
t=stu[v+1];
stu[v+1]=stu[v];
stu[v]=t;
}
for(o=0;o<5;o++)
printf("%s %s %d %d %d\n",stu[o].num,stu[o].name,stu[o].score1,stu[o].score2,stu[o].score3);
}
}
else
break;
}while(z!=3);
printf("\n");
printf("\n");
return;
}
void xxcx() /*信息查詢子函數*/
{
int g,i;
char m[20];
system("cls");
do
{
printf("[1]查詢學生信息:\n");
printf("[2]退出查詢:\n");
printf("請選擇:");
scanf("%d",&g);
if(g==1)
{
printf("請輸入學號:");
scanf("%s",m);
for(i=0;i<5;i++)
{
if(strcmp(m,stu[i].num)==0)
{
printf("*********\n");
printf("學號:%s\n",stu[i].num);
printf("姓名:%s\n",stu[i].name);
printf("語文:%d\n",stu[i].score1);
printf("數學:%d\n",stu[i].score2);
printf("英語:%d\n",stu[i].score3);
printf("\n");
printf("\n");
}
}
}
else
break;
}while(g!=2);
printf("查找完畢!\n");
system("pause");
return;
}