當前位置:首頁 » 編程語言 » 200行c語言代碼

200行c語言代碼

發布時間: 2022-06-25 23:15:09

⑴ 用c語言編寫的一個小程序,200行以上,急!!!

C語言課程設計報告-------學生成績簡單管理程序一、系統菜單的主要功能(1)輸入若干條記錄(2)顯示所有記錄(3)按學號排序(4)插入一條記錄(5)按姓名查找,刪除一條記錄(6)查找並顯示一條記錄(7)輸出統計信息 (新增)(8)從正文中添加數據到結構體數組中(9)將所有數據寫入文件中(0)退出程序二、題目分析該題主要考察學生對結構體,指針,文件的操作,以及C語言演算法的掌握,所以完成此道題目要求較強的設計能力,尤其是要有一種大局觀的意識。如何調程序也非常重要,通過這個程序可以學習到以前調試短程序沒有的的經驗。菜單中的每一個選項都對應一個子程序,子程序的演算法幾乎囊獲了所有C語言學過的技巧,下面就各個子程序中的功能進行說明:功能1和4的演算法相似,輸入一條記錄到結構體中去,其中有一部很關鍵,就是通過gets將所有的多餘的字元,回車讀去,否則就會出錯。功能2是顯示所有的記錄,通過循環輸出,格式也比較重要。功能3為按學號排序,因為學號定義成了字元數組的形式,因此在運用冒泡法進行排序的時候,要用到strcmp,strcpy等函數。功能5為按姓名刪除記錄,先輸入姓名,再一一比較,如果沒有則返回失敗信息,如果找到就將此記錄都向前移一位,返回n-1。功能6的演算法在5中就已經體現了,輸入姓名,一一比較。功能7為新增的功能,因為考慮到原來給出的函數中竟然沒有對學生成績的統計功能,因此新增此功能,可以得出所有的記錄個數,最高、最低、平均分,並輸出相關的學生信息等。功能8和9是對文件的操作,提前准備好數據。三、程序正文部分#include<stdio.h> /*引用庫函數*/#include<stdlib.h>#include<ctype.h>#include<string.h>typedef struct /*定義結構體數組*/{char num[10]; /*學號*/char name[20]; /*姓名*/int score; /*成績*/}Student;Student stu[80]; /*結構體數組變數*/int menu_select() /*菜單函數*/{char c;do{system("cls"); /*運行前清屏*/printf("\t\t****Students' Grade Management System****\n"); /*菜單選擇*/printf("\t\t | 1. Input Records |\n");printf("\t\t | 2. Display All Records |\n");printf("\t\t | 3. Sort |\n");printf("\t\t | 4. Insert a Record |\n");printf("\t\t | 5. Delete a Record |\n");printf("\t\t | 6. Query |\n");printf("\t\t | 7. Statistic |\n");printf("\t\t | 8. Add Records from a Text File|\n");printf("\t\t | 9. Write to a Text file |\n");printf("\t\t | 0. Quit |\n");printf("\t\t*****************************************\n");printf("\t\t\tGive your Choice(0-9):");c=getchar(); /*讀入選擇*/}while(c<'0'||c>'9');return(c-'0'); /*返回選擇*/}int Input(Student stud[],int n) /*輸入若干條記錄*/{int i=0;char sign,x[10]; /*x[10]為清除多餘的數據所用*/while(sign!='n'&&sign!='N') /*判斷*/{ printf("\t\t\tstudent's num:"); /*交互輸入*/scanf("\t\t\t%s",stud[n+i].num);printf("\t\t\tstudent's name:");scanf("\t\t\t%s",stud[n+i].name);printf("\t\t\tstudent's score:");scanf("\t\t\t%d",&stud[n+i].score);gets(x); /*清除多餘的輸入*/printf("\t\t\tany more records?(Y/N)");scanf("\t\t\t%c",&sign); /*輸入判斷*/i++;}return(n+i);}void Display(Student stud[],int n) /*顯示所有記錄*/{int i;printf("\t\t\t-----------------------------------\n"); /*格式頭*/printf("\t\t\tnumber name score\n");printf("\t\t\t-----------------------------------\n");for(i=1;i<n+1;i++) /*循環輸入*/{printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);if(i>1&&i%10==0) /*每十個暫停*/{printf("\t\t\t-----------------------------------\n"); /*格式*/printf("\t\t\t");system("pause");printf("\t\t\t-----------------------------------\n");}}printf("\t\t\t");system("pause");}void Sort_by_num(Student stud[],int n) /*按學號排序*/{ int i,j,*p,*q,s;char t[10];for(i=0;i<n-1;i++) /*冒泡法排序*/for(j=0;j<n-1-i;j++)if(strcmp(stud[j].num,stud[j+1].num)>0){strcpy(t,stud[j+1].num);strcpy(stud[j+1].num,stud[j].num);strcpy(stud[j].num,t);strcpy(t,stud[j+1].name);strcpy(stud[j+1].name,stud[j].name);strcpy(stud[j].name,t);p=&stud[j+1].score;q=&stud[j].score;s=*p;*p=*q;*q=s;}}int Insert_a_record(Student stud[],int n) /*插入一條記錄*/{char x[10]; /*清除多餘輸入所用*/printf("\t\t\tstudent's num:"); /*互動式輸入*/scanf("\t\t\t%s",stud[n].num);printf("\t\t\tstudent's name:");scanf("\t\t\t%s",stud[n].name);printf("\t\t\tstudent's score:");scanf("\t\t\t%d",&stud[n].score);gets(x);n++;Sort_by_num(stud,n); /*調用排序函數*/printf("\t\t\tInsert Successed!\n"); /*返回成功信息*/return(n);}int Delete_a_record(Student stud[],int n) /*按姓名查找,刪除一條記錄*/{ char s[20];int i=0,j;printf("\t\t\ttell me his(her) name:"); /*互動式問尋*/scanf("%s",s);while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判斷*/if(i==n){ printf("\t\t\tnot find!\n"); /*返回失敗信息*/return(n);}for(j=i;j<n-1;j++) /*刪除操作*/{strcpy(stud[j].num,stud[j+1].num);strcpy(stud[j].name,stud[j+1].name);stud[j].score=stud[j+1].score;}printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/return(n-1);}void Query_a_record(Student stud[],int n) /*查找並顯示一個記錄*/{ char s[20];int i=0;printf("\t\t\tinput his(her) name:"); /*互動式輸入*/scanf("\t\t\t%s",s);while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判斷*/if(i==n){ printf("\t\t\tnot find!\n"); /*輸入失敗信息*/return;}printf("\t\t\this(her) number:%s\n",stud[i].num); /*輸出該學生信息*/printf("\t\t\this(her) score:%d\n",stud[i].score);}void Statistic(Student stud[],int n) /*新增功能,輸出統計信息*/{ int i,j=0,k=0,sum=0;float aver; /*成績平均值*/for(i=0;i<n;i++) /*循環輸入判斷*/{sum+=stud[i].score;if(stud[j].score>stud[i].score) j=i;if(stud[k].score<stud[i].score) k=i;}aver=1.0*sum/n;printf("\t\t\tthere are %d records.\n",n); /*總共記錄數*/printf("\t\t\tthe hignest score:\n"); /*最高分*/printf("\t\t\tnumber:%s name:%s score:%d\n",stud[j].num,stud[j].name,stud[j].score);printf("\t\t\tthe lowest score:\n"); /*最低分*/printf("\t\t\tnumber:%s name:%s score:%d\n",stud[k].num,stud[k].name,stud[k].score);printf("\t\t\tthe average score is %5.2f\n",aver); /*平均分*/}int AddfromText(Student stud[],int n) /*從文件中讀入數據*/{ int i=0,num;FILE *fp; /*定義文件指針*/char filename[20]; /*定義文件名*/printf("\t\t\tInput the filename:");scanf("\t\t\t%s",filename); /*輸入文件名*/if((fp=fopen(filename,"rb"))==NULL) /*打開文件*/{ printf("\t\t\tcann't open the file\n"); /*打開失敗信息*/printf("\t\t\t");system("pause");return(n);}fscanf(fp,"%d",&num); /*讀入總記錄量*/while(i<num) /*循環讀入數據*/{fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,&stud[n+i].score);i++;}n+=num;fclose(fp); /*關閉文件*/printf("\t\t\tSuccessed!\n");printf("\t\t\t");system("pause");return(n);}void WritetoText(Student stud[],int n) /*將所有記錄寫入文件*/{int i=0;FILE *fp; /*定義文件指針*/char filename[20]; /*定義文件名*/printf("\t\t\tWrite Records to a Text File\n"); /*輸入文件名*/printf("\t\t\tInput the filename:");scanf("\t\t\t%s",filename);if((fp=fopen(filename,"w"))==NULL) /*打開文件*/{printf("\t\t\tcann't open the file\n");system("pause");return;}fprintf(fp,"%d\n",n); /*循環寫入數據*/while(i<n){fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score);i++;}fclose(fp); /*關閉文件*/printf("Successed!\n"); /*返回成功信息*/}void main() /*主函數*/{int n=0;for(;;){switch(menu_select()) /*選擇判斷*/{case 1:printf("\t\t\tInput Records\n"); /*輸入若干條記錄*/n=Input(stu,n);break;case 2:printf("\t\t\tDisplay All Records\n"); /*顯示所有記錄*/Display(stu,n);break;case 3:printf("\t\t\tSort\n");Sort_by_num(stu,n); /*按學號排序*/printf("\t\t\tSort Suceessed!\n");printf("\t\t\t");system("pause");break;case 4:printf("\t\t\tInsert a Record\n");n=Insert_a_record(stu,n); /*插入一條記錄*/printf("\t\t\t");system("pause");break;case 5:printf("\t\t\tDelete a Record\n");n=Delete_a_record(stu,n); /*按姓名查找,刪除一條記錄*/printf("\t\t\t");system("pause");break;case 6:printf("\t\t\tQuery\n");Query_a_record(stu,n); /*查找並顯示一個記錄*/printf("\t\t\t");system("pause");break;case 7:printf("\t\t\tStatistic\n");Statistic(stu,n); /*新增功能,輸出統計信息*/printf("\t\t\t");system("pause");break;case 8:printf("\t\t\tAdd Records from a Text File\n");n=AddfromText(stu,n); /*新增功能,輸出統計信息*/break;case 9:printf("\t\t\tWrite to a Text file\n");WritetoText(stu,n); /*循環寫入數據*/printf("\t\t\t");system("pause");break;case 0:printf("\t\t\tHave a Good Luck,Bye-bye!\n"); /*結束程序*/printf("\t\t\t");system("pause");exit(0);}}}四、函數調用關系圖註:「→」代表調用Input函數列印鏈表記錄Display函數輸入若干條記錄menu_select()函數選擇菜單Sort_by_num函數顯示所有記錄Delete_a_record函數按姓名查找,刪除一條記錄Query_a_record查找並顯示一條記錄Statistic函數輸出統計信息 (新增)AddfromText函數從正文中添加數據到結構體數組中Main函數Insert_a_record插入一條記錄WritetoText函數 將所有數據寫入文件中退出程序Reverse(head)函數按學號排序五、設計測試流程1、進入界面2、輸入選項1,回車;按提示輸入數據:3、回到主菜單;輸入選項7,回車;輸入文件名:data.txt,回車;出現成功提示,則讀入文件操作成功。4、回到主菜單,輸入2,回車每10個暫停顯示數據5、回到主菜單,輸入3,回車出現排序成功信息。6、回到主菜單,輸入4,回車按提示插入一組數據7、回到主菜單,輸入5,回車按提示輸入姓名,刪除數據出現刪除成功的信息8、回到主菜單,輸入6,回車輸入姓名進行查詢9、回到主菜單,輸入7,回車出現統計信息10、回到主菜單,輸入9,回車輸入result.txt,回車出現成功寫入文件的信息11、回到主菜單,輸入0,回車退出系統

⑵ 中分,緊急求個200行左右的C語言源代碼!

#include <iostream.h>
#include <fstream.h>
int mark[]; //右來保存走法的
int num[2][2];//棋盤
int temp;
int k ;
int q ;
string strAim = "123804765" //目標字元串,空格用0表示
string States[100];//字元竄數組
int iQuick; //有來退出遞歸的標志,1,表示找到走法,可以退出,0,怎麼沒有找到走法,繼續走
Hrd(int i,int j)//華龍道演算法,好像能找到結果,但是不能找到最少步數的結果,我不確定會不會還有漏洞。結果保存在mark[]中
{ string str1;
if (i!=0) //如果可以向上走,則向上走一步
{
temp=num[i-1][j];
num[i-1][j]=num[i][j];
num[i][j]=temp ; //交換空格和它上面的數字

// 保存交換後的狀態
str1=Change2Str(num[][]); //轉化成字元串,用來比較
if (CompState(str1)) //比較變換後的狀態是否在以前的狀態中出現過
{
//如果以前出現過,則返回
temp=num[i-1][j];
num[i-1][j]=num[i][j];
num[i][j]=temp ; // 把原來交換過的數字再交換過來
return ;
}
else//比較後,發現目前的狀態以前沒有出現過
{ mark[k++]=1 ;
if(strcmp(&strAim,& str1)=1)//跟目標比,看是否相等
{
iquick=1;
return;

}
else //不相等,沒有達到最後我們的要求
{
//1 代表向上走了一步
Add2States(str1); //保存現在的狀態到狀態數組中
Hrd(i-1,j);
if (iquick=1) //可以退出
{
return;
}
} //遞歸,繼續遍歷
}

}
if(j!=2)//如果可以向右走,則向右走一步
{
temp=num[i][j+1];
num[i][j+1]=num[i][j] ;
num[i][j]=temp;

// 保存交換後的狀態
str1=Change2Str(num[][]); //轉化成字元串,用來比較
if (CompState(str1)) //比較變換後的狀態是否在以前的狀態中出現過
{
//如果以前出現過,返回
temp=num[i][j+1];
num[i][j+1]=num[i][j] ;
num[i][j]=temp; // 把原來交換過的數字再交換過來
return;
}
else//比較後,發現目前的狀態以前沒有出現過
{ mark[k++]=2 ; //2 代表向右走了一步
if(strcmp(&strAim,& str1)=1)//跟目標比,看是否相等
{
iquick=1;
return;

}
else //沒有達到結果
{

Add2States(str1); //保存現在的狀態到狀態數組中
Hrd(i,j+1) ; //遞歸,繼續遍歷
if (iquick=1)
{
return;
}
}
}

}
if (i!=2)// 如果可以向下走,則向下走一步
{
temp=num[i+1][j];
num[i+1][j]=num[i][j];
num[i][j]=temp;

// 保存交換後的狀態
str1=Change2Str(num[][]); //轉化成字元串,用來比較
if (CompState(str1)) //比較變換後的狀態是否在以前的狀態中出現過
{
//如果以前出現過,則返回
temp=num[i+1][j];
num[i+1][j]=num[i][j];
num[i][j]=temp; // 把原來交換過的數字再交換過來
return ;
}
else//比較後,發現目前的狀態以前沒有出現過
{ mark[k++]=3 ; //3 代表向下走了一步
if(strcmp(&strAim,& str1)=1)//跟目標比,看是否相等
{
iquick=1;
return;

}
else //沒有達到最後我們的要求
{

Add2States(str1); //保存現在的狀態到狀態數組中
Hrd(i+1,j) ; //遞歸,繼續遍歷
if (iquick=1)
{
return;
}
}
}
}
if (j!=0)//如果可以向左走,則向左走一步
{
temp=num[i1][j-1];

num[i][j-1]=num[i][j];
num[i][j]=temp;

// 保存交換後的狀態
str1=Change2Str(num[][]); //轉化成字元串,用來比較
if (CompState(str1)) //比較變換後的狀態是否在以前的狀態中出現過
{
//如果以前出現過,則回溯
temp=num[i][j-1];
num[i][j-1]=num[i][j];
num[i][j]=temp; // 把原來交換過的數字再交換過來

return ;
}
else//比較後,發現目前的狀態以前沒有出現過
{ mark[k++]=4 ; //1 代表向右走了一步
if(strcmp(&strAim,& str1)=1)//跟目標比,看是否相等
{
iquick=1;
return;

}
else //沒有達到最後我們的要求
{
Add2States(str1); //保存現在的狀態到狀態數組中
Hrd(i,j-1) ; //遞歸,繼續遍歷
if (iquick=1)
{
return;
}
}
}

}
//如果都走過了,則返回
k--;
return;

}

void Change2Str(int arr[][])// 把二維數組轉換成一個字元串
{int i,j
string strState
for (i=0;i<3 ;i++ )
{ for (j=0;j<3 ;j++ )
{
strState= strState & arr[i][j];
}
}
return strState;
}

void CompState(string str1 )//比較當前的狀態是否再以前的狀態中出現過
{ int i;
for (i=0;i<len(states[])-1 ; i++)//len(states[]),取得數組的長度,有點忘了
{
if (strcmp(&States[i],&str1)!=0)//如果兩個字元串相等,則函數返回true
{
return true;
}
}
return false;
}
Add2States(string str1)
{
States[q++]=str1 ;
}

main()
{ num[0][0]=1;
num[0][1]=2;
num[0][2]=3;
num[1][0]=8;
num[1][1]=6;
num[1][2]=4;
num[2][0]=1;
num[2][1]=0;
num[2][2]=5;
hrd(2,1);
for(int i=0 ,i<100,i++)
{count<<mark[i]<<endl;
}
}
Dim moveup As Integer '蛇向上轉向的標志
Dim movedown As Integer
Dim moveleft As Integer
Dim moveright As Integer

Public u As Integer 'u,l,r,d為蛇轉向時的控制數值
Public d As Integer
Public l As Integer
Public r As Integer

Public score As Integer '游戲分數

Public speed As Integer '游戲速度

Public pause As Boolean '游戲暫停標志

Public gamebegin As Boolean '游戲開始標志

Public s As Integer '蛇的當前長度,開始時設為6

Public eatd As Boolean '蛇是否吃到食物的標志

Public lastx As Integer '若蛇吃到食物,lastx,lasty用來存放當前最後一個shape的運動狀態,以供設定新的shape運動狀態之用
Public lasty As Integer

Option Base 1
Dim X(100) As Long '數組存放蛇的長度
Dim Y(100) As Long

Public Sub eat() '判斷蛇是否吃到食物的函數

If X(1) = -200 Then
If Shape1(1).Left <= Shape2.Left And Shape1(1).Top = Shape2.Top Then
eatd = True
End If
End If

If Y(1) = -200 Then
If Shape1(1).Top <= Shape2.Top And Shape1(1).Left = Shape2.Left Then
eatd = True
End If
End If

If X(1) = 200 Then
If Shape1(1).Left >= Shape2.Left + 200 And Shape1(1).Top = Shape2.Top Then
eatd = True
End If
End If

If Y(1) = 200 Then
If Shape1(1).Top >= Shape2.Top + 200 And Shape1(1).Left = Shape2.Left Then
eatd = True
End If
End If
End Sub
Public Sub ensure_position() '此函數確定新的shape1(s)的位置
If X(s - 1) = -200 Then
Shape1(s).Left = Shape1(s - 1).Left + 200: Shape1(s).Top = Shape1(s - 1).Top
End If
If Y(s - 1) = -200 Then
Shape1(s).Left = Shape1(s - 1).Left: Shape1(s).Top = Shape1(s - 1).Top + 200
End If
If X(s - 1) = 200 Then
Shape1(s).Left = Shape1(s - 1).Left - 200: Shape1(s).Top = Shape1(s - 1).Top
End If
If Y(s - 1) = 200 Then
Shape1(s).Left = Shape1(s - 1).Left: Shape1(s).Top = Shape1(s - 1).Top - 200
End If
End Sub
Public Sub ensure_state() '此過程用來確定新的控制項的初始運動狀態

If X(1) = -200 Then
If moveleft = 1 Then
X(s) = X(s - 1): Y(s) = Y(s - 1)
Else
X(s) = lastx: Y(s) = lasty
End If
End If

If Y(1) = -200 Then
If moveup = 1 Then
X(s) = X(s - 1): Y(s) = Y(s - 1)
Else
X(s) = lastx: Y(s) = lasty
End If
End If

If X(1) = 200 Then
If moveright = 1 Then
X(s) = X(s - 1): Y(s) = Y(s - 1)
Else
X(s) = lastx: Y(s) = lasty
End If
End If

If Y(1) = 200 Then
If movedown = 1 Then
X(s) = X(s - 1): Y(s) = Y(s - 1)
Else
X(s) = lastx: Y(s) = lasty
End If
End If
End Sub

Public Sub strike_oneself() '測試蛇頭是否撞到自己

Dim i
Dim j: j = 0
If Y(1) = 200 Then '蛇頭向下撞到自己
For i = 7 To s '蛇頭只能和第六塊或以後的蛇身相撞
If Shape1(1).Top = Shape1(s).Top And Shape1(1).Left = Shape1(s).Left Then
Form1.initialize
Form1.outputmessage
Exit For
End If
Next i
End If

If X(1) = 200 Then '蛇頭向右撞到自己
For i = 7 To s
If Shape1(1).Left = Shape1(i).Left - 200 And Shape1(1).Top = Shape1(i).Top Then
Form1.initialize
Form1.outputmessage
Exit For
End If
Next i
End If

If Y(1) = -200 Then '蛇頭向上撞到自己
For i = 7 To s
If Shape1(1).Top = Shape1(i).Top + 200 And Shape1(1).Left = Shape1(i).Left Then
Form1.initialize
Form1.outputmessage
Exit For
End If
Next i
End If

If X(1) = -200 Then '蛇頭向左撞到自己
For i = 7 To s
If Shape1(1).Left = Shape1(i).Left + 200 And Shape1(1).Top = Shape1(i).Top Then
Form1.initialize
Form1.outputmessage
Exit For
End If
Next i
End If

End Sub
Public Sub strike_wall() '測試蛇頭是否撞到牆壁
If Shape1(1).Top < 0 Or Shape1(1).Top > Line1.Y1 - 200 Or Shape1(1).Left < 0 Or Shape1(1).Left > Form1.Width - 200 Then
Form1.outputmessage
Form1.initialize
End If
End Sub
Public Sub outputmessage() ' 游戲結束後的輸出信息
gameovermessage = "GAME OVER!"
dx = (8000 - TextWidth(gameovermessage)) / 2 '在窗體中間輸出"GAME OVER!"和得分
dy = (6000 - TextHeight(gameovermessage)) / 2
CurrentX = dx: CurrentY = dy
Form1.Print gameovermessage
scoremessage = "你的得分:" + Text1.Text
dx = (8000 - TextWidth(scoremessage)) / 2
dy = dy + TextHeight(scoremessage)
CurrentX = dx: CurrentY = dy
Form1.Print scoremessage
End Sub
Public Sub initialize() '游戲結束(失敗)後,游戲初始化函數
moveup = 0
movedown = 0
moveleft = 0
moveright = 0
u = 0: d = 0: l = 0: r = 0
Label5.Caption = "停止"

For i = 1 To s ' 初始化蛇的位置和狀態
Shape1(i).Left = 1200 + (6 - i) * 200
Shape1(i).Top = 5000
X(i) = 200
Y(i) = 0
Next i
If s > 6 Then
For i = 7 To s
Unload Shape1(i) '卸載多餘的shape,使初始的shape個數為六個
Next i
End If

'以下的這段是用來查看游戲初始化時的中的參數
'CurrentX = 0: CurrentY = 0
'Form1.FontSize = 10
'Print moveup: Print movedown: Print moveleft: Print moveright
'Print u: Print r: Print l: Print d
'For i = 1 To s
'Print X(i): Print Y(i)
'Next i

s = 6
Timer1.Enabled = False
gamebegin = False '游戲未開始
pause = False
HScroll1.Enabled = True
End Sub

Private Sub Command1_Click()
Timer1.Enabled = False
Dim r
r = MsgBox("你真的要退出嗎?", 33, "警告")
If r = 1 Then
Unload Form1
Else
Timer1.Enabled = True
End If

End Sub

Private Sub Form_KeyPress(keyascii As Integer)

If gamebegin = True And pause = False Then '只有游戲處於開始時方向鍵才有效
'下面四個if語句是蛇的方向控制函數
If keyascii = 119 Then
If Y(1) <> 200 Then '只有當蛇頭不正好向下運動時,按下向上才有效
moveup = 1 '向下上為w
End If
End If

If keyascii = 97 Then '向左為a
If X(1) <> 200 Then
moveleft = 1
End If
End If

If keyascii = 115 Then '向下為s
If Y(1) <> -200 Then
movedown = 1
End If
End If

If keyascii = 100 Then '向右為d
If X(1) <> -200 Then
moveright = 1
End If
End If
End If

If keyascii = 32 Then '判斷游戲是否在開始,按下空格鍵開始,否則按下空格鍵為暫停
If gamebegin = False Then
Timer1.Enabled = True
Label5.Caption = "開始"
Form1.Cls
score = 0
Text1.Text = Str$(score)
HScroll1.Enabled = False
gamebegin = True

Else
If pause = True Then '判斷暫停與否
Timer1.Enabled = True
Label5.Caption = "開始"
Else
Timer1.Enabled = False
Label5.Caption = "暫停"
End If
pause = Not pause
End If
End If

End Sub

Private Sub Form_Load() '對各參數的初始化
moveup = 0
moveleft = 0
moveright = 0
movedown = 0
u = 0: l = 0: d = 0: r = 0
s = 6 '蛇的初始長度
eatd = False
gamebegin = False
pause = False
speed = HScroll1.Value '初始速度
Label5.Caption = "停止"

Dim i
For i = 1 To s '蛇的初始運動方向
X(i) = 200
Y(i) = 0
Next i

Timer1.Enabled = False '沒開始游戲
Shape2.Left = 200 * Int(30 * Rnd) '貪吃蛇的食物的位置初始化
Shape2.Top = 200 * Int(30 * Rnd)

End Sub
Private Sub HScroll1_Change()
speed = HScroll1.Value
End Sub

Private Sub Timer1_Timer()

Timer1.Interval = 150 / speed '游戲速度

If movedown = 1 Then '按下下方向鍵,蛇向下轉向
d = d + 1
X(d) = 0: Y(d) = 200
If d = s Then
movedown = 0: d = 0
End If
End If

If moveup = 1 Then '按下向上方向鍵,蛇向上轉向
u = u + 1
X(u) = 0: Y(u) = -200
If u = s Then
moveup = 0: u = 0
End If
End If

If moveleft = 1 Then '向左
l = l + 1
X(l) = -200: Y(l) = 0
If l = s Then
moveleft = 0: l = 0
End If
End If

If moveright = 1 Then '向右
r = r + 1
X(r) = 200: Y(r) = 0
If r = s Then
moveright = 0: r = 0
End If
End If

Dim i '蛇的運動代碼
For i = 1 To s
Shape1(i).Left = Shape1(i).Left + X(i)
Shape1(i).Top = Shape1(i).Top + Y(i)
Next i

Form1.eat '調用過程eat(),判斷蛇是否吃了食物

If eatd = True Then
score = score + 5 * HScroll1.Value
Text1.Text = Str$(score)
Shape2.Left = 200 * Int(30 * Rnd) '如果食物被吃則隨機產生貪吃蛇的食物的位置
Shape2.Top = 200 * Int(30 * Rnd)
Shape2.FillColor = RGB(Int(255 * Rnd), Int(255 * Rnd), Int(255 * Rnd)) '隨機產生食物的顏色
If Shape2.FillColor = &H0& Then
Shape2.FillColor = RGB(100, 150, 200)
End If
lastx = X(s) '蛇吃到食物,lastx,lasty用來存放當前最後一個shape的運動狀態-
lasty = Y(s) '-以供設定新的shape運動狀態之用
s = s + 1
Load Shape1(s) '產生新的控制項shape1數組,使蛇的長度加長
Form1.ensure_state '調用設定新的shape控制項的運動狀態過程
Form1.ensure_position '設定新的shape1的位置
Shape1(s).Visible = True
eatd = False
End If

Form1.strike_oneself '測試游戲是否失敗的函數
Form1.strike_wall

End Sub

⑶ 200行的c語言代碼,51單片機運行完要多長時間,沒有循環結構

如果沒有調用子程序的話,12M晶振時那麼執行時間大概是200~600微妙

⑷ 急求啊,寫一個200行的C語言程序,什麼都可以,帶解釋,哪位大神幫幫忙

#include<stdio.h>
#defineOK1
#defineERROR0
#defineTRUE1
#defineFALSE0
#defineMAXSIZE100
#defineLElemTypeint
#defineStatusint
#defineBOOLint
typedefstruct
{
LElemTypedata;
intcur;
}Component,SLinkList[MAXSIZE];
intMalloc(SLinkListspace)
{
//若備用鏈表非空,則返回分配的結點下標(備用鏈表的第一個結點),否則返回0
inti=space[0].cur;
if(i)
space[0].cur=space[i].cur;
returni;
}
StatusFree(SLinkListspace,intk)
{
//將下標為空的空閑結點回收到備用鏈表(成為備用鏈表的第一個結點)
space[k].cur=space[0].cur;
space[0].cur=k;
returnOK;
}
StatusInitList(SLinkListL)
{
//構造一個空的鏈表L,表頭為L的最後一個單元L[MAXSIZE-1],其餘單元鏈成
//一個備用鏈表,表頭為L的第一個單元L[0],「0」表示空指針
inti;
L[MAXSIZE-1].cur=0;
for(i=0;i<MAXSIZE-2;i++)
L[i].cur=i+1;
L[MAXSIZE-2].cur=0;
returnOK;
}
StatusClearList(SLinkListL)
{
//初始條件:線性表L已存在。操作結果:將L重置為空表
inti,j,k;
i=L[MAXSIZE-1].cur;
L[MAXSIZE-1].cur=0;
k=L[0].cur;
L[0].cur=i;
while(i)
{
j=i;
i=L[i].cur;
}
L[j].cur=k;
returnOK;
}
BOOLListEmpty(SLinkListL)
{
//若L是空表,返回TRUE;否則返回FALSE
if(!L[MAXSIZE-1].cur)
returnTRUE;
else
returnFALSE;
}
intListLength(SLinkListL)
{
//返回L中數據元素個數
inti,len;
i=L[MAXSIZE-1].cur;
len=0;
while(i)
{
i=L[i].cur;
len++;
}
returnlen;
}
StatusGetElem(SLinkListL,inti,LElemType*e)
{
//用e返回L中第i個元素的值
intj,k=MAXSIZE-1;
if(i<1||i>ListLength(L))
returnERROR;
for(j=1;j<=i;j++)
k=L[k].cur;
*e=L[k].data;
returnOK;
}
intLocateElem(SLinkListL,LElemTypee)
{
//在靜態單鏈線性表L中查找第1個值為e的元素。若找到,則返回它在L中的
//位序,否則返回0。(與其它LocateElem()的定義不同)
inti=L[MAXSIZE-1].cur;
while(i&&L[i].data!=e)
i=L[i].cur;
returni;
}
StatusPriorElem(SLinkListL,LElemTypecur_e,LElemType*pre_e)
{
//初始條件:線性表L已存在
//操作結果:若cur_e是L的數據元素,且不是第一個,則用pre_e返回它的前驅,
//否則操作失敗,pre_e無定義
inti,j;
i=L[MAXSIZE-1].cur;
do{
j=i;
i=L[i].cur;
}while(i&&L[i].data!=cur_e);
if(i)
{
*pre_e=L[j].data;
returnOK;
}
returnERROR;
}
StatusNextElem(SLinkListL,LElemTypecur_e,LElemType*next_e)
{
//初始條件:線性表L已存在
//操作結果:若cur_e是L的數據元素,且不是最後一個,則用next_e返回它的後繼,
//否則操作失敗,next_e無定義
inti,j;
i=LocateElem(L,cur_e);
if(i)
{
j=L[i].cur;
if(j)
{
*next_e=L[j].data;
returnOK;
}
}
returnERROR;
}
StatusListInsert(SLinkListL,inti,LElemTypee)
{
//在L中第i個元素之前插入新的數據元素e
intj,k,l;
k=MAXSIZE-1;
if(i<1||i>ListLength(L)+1)
returnERROR;
j=Malloc(L);
if(j)
{
L[j].data=e;
for(l=1;l<=i-1;l++)
k=L[k].cur;
L[j].cur=L[k].cur;
L[k].cur=j;
returnOK;
}
returnERROR;
}
StatusListDelete(SLinkListL,inti,LElemType*e)
{
//刪除在L中第i個數據元素e,並返回其值
intj,k;
if(i<1||i>ListLength(L))
returnERROR;
k=MAXSIZE-1;
for(j=1;j<=i-1;j++)
k=L[k].cur;
j=L[k].cur;
L[k].cur=L[j].cur;
*e=L[j].data;
Free(L,j);
returnOK;
}
StatusListTraverse(SLinkListL,void(*visit)(LElemTypee))
{
inti=L[MAXSIZE-1].cur;
while(i)
{
visit(L[i].data);
i=L[i].cur;
}
returnOK;
}
voidVisit(LElemTypee)
{
printf("%d ",e);
}
intmain()
{
inti,j,k;
LElemTypee,e0;
SLinkListL;
InitList(L);
for(j=1;j<=5;j++)
i=ListInsert(L,1,j);
ListTraverse(L,Visit);
//判斷鏈表是否為空
i=ListEmpty(L);
printf("%d ",i);
//列印鏈表長度
printf("%d ",ListLength(L));
//清空靜態鏈表
ClearList(L);
ListTraverse(L,Visit);
for(j=1;j<=10;j++)
ListInsert(L,j,j);
//插入新節點後
ListTraverse(L,Visit);
//獲取鏈表中的第5個元素
GetElem(L,5,&e);
printf("%d ",e);
for(j=0;j<=1;j++)
{
k=LocateElem(L,j);
if(k)
printf("%d%d ",j,k);//j在鏈表中的序號k
else
printf("Can'tfind%d ",j);//鏈表中不存在j
}
for(j=1;j<=2;j++)//測試頭兩個數據
{
GetElem(L,j,&e0);//把第j個數據賦給e0
i=PriorElem(L,e0,&e);//求e0的前驅
if(!i)
printf("Noelembefore%d ",e0);
else
printf("Elembefore%dis%d ",e0,e);//數據e0的前驅
}
for(j=ListLength(L)-1;j<=ListLength(L);j++)//最後兩個數據
{
GetElem(L,j,&e0);//把第j個數據賦給e0
i=NextElem(L,e0,&e);//求e0的後繼
if(!i)
printf("Noelemafter%d ",e0);
else
printf("Theelemafter%is%d ",e0,e);//數據e0的後繼
}
k=ListLength(L);//k為表長
for(j=k+1;j>=k;j--)
{
i=ListDelete(L,j,&e);//刪除第j個數據
if(i)
printf("DeleteSuccussfully ");
else
printf("Can'tfindtheelem ",j);
}
ListTraverse(L,Visit);
return0;
}

給你找了個靜態鏈表的代碼,能編譯運行

⑸ 200行以上C語言程序舉例

無聊,粘著玩 657行

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <stdarg.h>
#include <ctype.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <Winsock2.h>
#include <ws2tcpip.h>
#include <io.h>

int raw2iframe(char *rawfile, char *ifile );
int Ts_pes(const char *src, const char *des ,unsigned short pid);
int pes_raw( char *pesfile, char *rawfile );
int es_pes(char *src, char *des);
int pes_ts(char *tsfile, char *pesfile);

static unsigned char m_buf[188 * 1024];
static unsigned char buf[188*1024];

/* 設置Dts時間戳(90khz) */
unsigned int SetDtsTimeStamp( unsigned char *buf, unsigned int time_stemp)
{

buf[0] = ((time_stemp >> 29) | 0x11 ) & 0x1f;
buf[1] = time_stemp >> 22;
buf[2] = (time_stemp >> 14) | 0x01;
buf[3] = time_stemp >> 7;
buf[4] = (time_stemp << 1) | 0x01;
return 0;
}

/* 設置Pts時間戳(90khz) */
unsigned int SetPtsTimeStamp( unsigned char *buf, unsigned int time_stemp)
{

buf[0] = ((time_stemp >> 29) | 0x31 ) & 0x3f;
buf[1] = time_stemp >> 22;
buf[2] = (time_stemp >> 14) | 0x01;
buf[3] = time_stemp >> 7;
buf[4] = (time_stemp << 1) | 0x01;
return 0;
}

/* 讀取時戳(45khz) */
unsigned int GetTimeStamp( unsigned char *buf )
{
unsigned int ts;
unsigned char *p = buf;

ts = ((*p>>1) & 0x7) << 30;
p++;
ts += (*p) << 22;
p++;
ts += ((*p)>>1) << 15;
p++;
ts += (*p) << 7;
p++;
ts += (*p) >> 1;
p++;

return ts;
}

/*主函數*/
int main(void)
{
Ts_pes("shoes.ts", "641.pes", 641); //提取PES
pes_raw("641.pes","641.raw"); //提取ES
raw2iframe( "641.raw", "641.iframe" ); //提取I幀
es_pes("641.iframe", "es.pes"); //打包成PES
pes_ts("pes.ts","es.pes"); //打包成TS
return 0;
}

/*從視頻中提取PES*/
int Ts_pes(const char *src, const char *des ,unsigned short pid)
{
unsigned char *p;
FILE *fpr, *fpw;
int size;
int ret;
unsigned short vpid;
unsigned char adaptation_field_control;
unsigned char continuity_counter;
unsigned char adaptation_field_length;
unsigned char *payload;
unsigned char payload_unit_start_indicator;
unsigned char last_counter = 0xff;
int start = 0;
fpr = fopen(src, "rb"); //打開文件
fpw = fopen(des, "wb"); //寫入文件
if(NULL == fpr || NULL == fpw)
{
return -1;
}
size = sizeof(m_buf);

while(!feof(fpr))
{
ret = fread(m_buf, 1, size, fpr ); //讀取文件
p = m_buf;
while(p < m_buf + ret)
{
vpid = (p[1] & 0x1f) << 8 | p[2];
if(pid == vpid)
{
adaptation_field_control = (p[3]>>4)&0x3; //判斷是否有可調整欄位
continuity_counter = p[3] & 0xf;
payload_unit_start_indicator = (p[1]>>6) & 0x1;
payload = NULL;
adaptation_field_length = p[4];
switch(adaptation_field_control)
{
case 0:
case 2:
break; /*0為保留,2為只有調整無負載*/
case 1:
payload = p + 4; /*無調整欄位*/
break;
case 3:
payload = p + 5 + p[4];/*凈荷*/
break;
}
if(1 == payload_unit_start_indicator)
{
start = 1;
}
if(start && payload)
{
fwrite(payload, 1, p + 188 - payload, fpw); //寫入文件
}
if( last_counter!= 0xff && ((last_counter +1 )&0xf) != continuity_counter )
{
printf( "data lost\n" );
}
last_counter = continuity_counter;
}
p = p + 188;
}
}

printf("ts_pes_END\n");

fclose(fpr); //關閉
fclose(fpw);
return 0;
}

/*從PES中提取ES*/
int pes_raw( char *pesfile, char *rawfile )
{
FILE *fpd, *fp;
unsigned char *p, *payload, *tmp;
int size, num, rdsize;
unsigned int last = 0;
__int64 total = 0, wrsize = 0;

fp = fopen( pesfile, "rb" );
fpd = fopen( rawfile, "wb" );
if( fp == NULL || fpd == NULL )
return -1;

num = 0;
size = 0;
p = m_buf;

while( true )
{
REDO:
if( m_buf + size <= p )
{
p = m_buf;
size = 0;
}
else if( m_buf < p && p < m_buf + size )
{
size -= p - m_buf;
memmove( m_buf, p, size );
p = m_buf;
}

if( !feof(fp) && size < sizeof(m_buf) )
{
rdsize = fread( m_buf+size, 1, sizeof(m_buf)-size, fp );
size += rdsize;
total += rdsize;
}
if( size <= 0 )
break;

tmp = p;
/* 尋找PES-HEADER: 0X000001E0 */
while( p[0] != 0 || p[1] != 0 || p[2] != 0x01 ||
( ( p[3] & 0xe0 ) != 0xe0 && ( p[3] & 0xe0 ) != 0xc0 ) )
{
p++;
if( m_buf + size <= p )
goto REDO;
}
if( p != tmp )
{
printf( "pes skip size=%d\n", p - tmp );
}
/* PES_packet_length */
unsigned short len = (p[4]<<8) | p[5];
if( len == 0 )
{
unsigned char *end = p + 6;
while( end[0] != 0 || end[1] != 0 || end[2] != 0x01 ||
( ( end[3] & 0xe0 ) != 0xe0 && ( end[3] & 0xc0 ) != 0xc0 ) )
{
if( m_buf + size <= end )
{
if( feof(fp) )
break;
goto REDO;
}
end++;
}
len = end - p - 6;
}
if( m_buf + size < p + 6 + len )
{
if( feof(fp) )
break;
continue;
}
p += 6;

{
unsigned char PES_scrambling_control = (*p>>4)&0x3;
unsigned char PES_priority = (*p>>3)&0x1;
unsigned char data_alignment_indicator = (*p>>2)&0x1;
unsigned char right = (*p>>1)&0x1;
unsigned char original_or_ = (*p)&0x1;
p++;
unsigned char PTS_DTS_flags = (*p>>6)&0x3;
unsigned char ESCR_flag = (*p>>5)&0x1;
unsigned char ES_rate_flag = (*p>>4)&0x1;
unsigned char DSM_trick_mode_flag = (*p>>3)&0x1;
unsigned char additional__info_flag = (*p>>2)&0x1;
unsigned char PES_CRC_flag = (*p>>1)&0x1;
unsigned char PES_extension_flag = (*p)&0x1;
p++;
unsigned char PES_header_data_length = *p;
p++;

payload = p + PES_header_data_length;

if (PTS_DTS_flags == 0x2 )
{
unsigned int pts;
pts = (*p>>1) & 0x7;
pts = pts << 30;
p++;
pts += (*p)<<22;
p++;
pts += ((*p)>>1)<<15;
p++;
pts += (*p)<<7;
p++;
pts += (*p)>>1;
p++;

p -= 5;

if( pts < last )
{
printf( "?\n" );
}
last = pts;
}
else if( PTS_DTS_flags == 0x3 )
{
unsigned int pts, dts;

pts = (*p>>1) & 0x7;
pts = pts << 30;
p++;
pts += (*p)<<22;
p++;
pts += ((*p)>>1)<<15;
p++;
pts += (*p)<<7;
p++;
pts += (*p)>>1;
p++;

dts = (*p>>1) & 0x7;
dts = dts << 30;
p++;
dts += (*p)<<22;
p++;
dts += ((*p)>>1)<<15;
p++;
dts += (*p)<<7;
p++;
dts += (*p)>>1;
p++;

p -= 10;
printf( "num=%d ra=%d size=%d pts-dts=%d\n", num, pts - last, len-3-PES_header_data_length, (int)(pts-dts) );
if( pts < last )
{
printf( "?\n" );
}
last = pts;
}
else if( PTS_DTS_flags != 0 )
{
printf( "error\n" );
}

if( fpd )
{
fwrite( p + PES_header_data_length, 1, len - 3 - PES_header_data_length, fpd );
wrsize += len - 3 - PES_header_data_length;
}
num++;
p += len - 3;
}

payload = p;
size -= p - m_buf;
memmove( m_buf, p, size );
p = m_buf;
}

fclose( fp );
fclose( fpd );

printf("pes_raw_END\n");
return 0;
}

/*提取I幀*/
int raw2iframe(char *rawfile, char *ifile )
{
unsigned char *temp_p;
unsigned char *p;
unsigned char picture_coding_type;
unsigned char buf[188*1024] = {0};
unsigned char pes_buf[32*1024] = {0};
unsigned short pid = 641;
unsigned short t_pid = 0;
int i = 0;
int j = 0;
int size = 0;
int iLen = 0;
int wiLen = 0;
int temp_queue = 0;
int temp_ifrem = 0;

void *fps = CreateFile(rawfile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); //打開讀文件
void *fpd = CreateFile(ifile, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0 , NULL); //打開寫文件

temp_p = NULL;

while(1)
{
if (0 == ReadFile(fps, buf+size, sizeof(buf)-size, (unsigned long *)&iLen, NULL)) //讀取文件內容
{
CloseHandle((HANDLE)fps);
return -1;
}

if (0 == iLen)
{
break;
}

p = buf;

while( p + 6 < buf + iLen +size)
{
if (p[0] == 0x0 && p[1] == 0x0 && p[2] == 0x1) //是頭進入
{

if (p[3] == 0x0 || p[3] == 0xB3 )
{
if ( (NULL != temp_p) && ((1 == temp_queue) || (1 == temp_ifrem)))
{
WriteFile(fpd, temp_p, p-temp_p, (unsigned long *)&wiLen, NULL); //寫文件,先寫序列頭,再寫I幀
temp_queue = 0;
temp_ifrem = 0;
temp_p = NULL;
}
}

if (p[3] == 0xB3) //判斷是視頻序列,則初始化
{
temp_queue = 1;
temp_p = p;
}

picture_coding_type = (p[5]>>3) & 0x7;
if (p[3] == 0x0 && 1 == picture_coding_type) //判斷是I幀,則初始化
{
temp_ifrem = 1;
temp_p = p;
}
}

p++;
}
/*把多出來的內容寫入下個BUF*/
if(NULL != temp_p)
{
size = buf + iLen + size - temp_p;
memmove(buf, temp_p, size);
}
else
{
size = buf + iLen + size - p;
memmove(buf, p, size);
}

temp_p = NULL;
}

CloseHandle((HANDLE)fps);
CloseHandle((HANDLE)fpd);

printf("raw_iframe_END\n");

return 0;
}

/*打包成PES*/
int es_pes(char *src, char *des)
{
FILE *iframe_fp, *pes_fp;
unsigned char *p;
unsigned char *temp_p = NULL;
unsigned char buf[188*1024] = {0};
unsigned char pes_header[19];
unsigned short int pes_packet_length = 0;
unsigned int framecnt = 0;
unsigned char flag = 0;
unsigned int Pts = 0;
unsigned int Dts = 0;
int i = 0;
int size = 0;
int iLen = 0;
int wiLen = 0;
int temp_que = 0;

iframe_fp = fopen( src, "rb" );
pes_fp = fopen( des, "wb" );
if( iframe_fp == NULL || pes_fp == NULL )
{
return -1;
}

while(!feof(iframe_fp))
{
iLen = fread(buf + size, 1, sizeof(buf) - size, iframe_fp);
p = buf;

while( p + 3 < buf + iLen +size)
{
memset(pes_header, 0, sizeof(pes_header));
if (p[0] == 0x0 && p[1] == 0x0 && p[2] == 0x1 && 0xB3 == p[3])
{
if ((NULL != temp_p) && (1 == temp_que))
{
LAST_I:
pes_packet_length = p - temp_p + 13;
pes_header[4] = (pes_packet_length&0xff00) >> 8;
pes_header[5] = pes_packet_length&0x00ff;
/*PES包頭的相關數據*/
pes_header[0] = 0;
pes_header[1] = 0;
pes_header[2] = 0x01;
pes_header[3] = 0xE0;
pes_header[6] = 0x81;
pes_header[7] = 0xC0;
pes_header[8] = 0x0A;

Dts = (framecnt + 1) * 40 * 90;
Pts = framecnt * 40 * 90;
SetPtsTimeStamp(&pes_header[9], Pts); //設置時間戳 PTS
SetDtsTimeStamp(&pes_header[14], Dts); //設置時間戳 DTS
framecnt++;
if (0 == flag)
{
fwrite(pes_header, 1, sizeof(pes_header), pes_fp); //把PES包頭寫入文件
fwrite(temp_p, 1, p-temp_p, pes_fp); //把I幀寫入文件
}
else
{
fwrite(pes_header, 1, sizeof(pes_header), pes_fp); //把PES包頭寫入文件
fwrite(temp_p, 1, p-temp_p+3, pes_fp); //把I幀寫入文件
}

temp_p = NULL;

}

if (p[3] == 0xB3) //判斷是否到了下一個序列頭
{
temp_p = p;
temp_que = 1;
}
}

p++;
}

/*把多出來的內容寫入下個BUF*/
if(NULL != temp_p)
{
if (feof(iframe_fp)) //把最後一幀寫入文件
{
// flag = 1;
goto LAST_I;
}

size = buf + iLen + size - temp_p;
memmove(buf, temp_p, size);
}
else
{
size = buf + iLen + size - p;
memmove(buf, p, size);
}

temp_p = NULL;
}

printf("es_pes_END\n");

fclose(iframe_fp);
fclose(pes_fp);

return 0;
}

/*打包成TS包*/
int pes_ts(char *tsfile, char *pesfile)
{
FILE *ts_fp, *pes_fp;
int flag = 0;
int iLen = 0;
int size = 0;
int temp_pes = 0;
int pes_packet_len = 0;
unsigned char *p;
unsigned char counter = 0;
unsigned char *temp_p = NULL;
unsigned char ts_buf[188] = {0};
unsigned char start_indicator_flag = 0;

pes_fp = fopen(pesfile, "rb");
ts_fp = fopen(tsfile, "wb");
if( ts_fp == NULL || pes_fp == NULL )
{
return -1;
}

/*設ts參數*/
ts_buf[0] = 0x47;
ts_buf[1] = 0x62;
ts_buf[2] = 0x81;

while(!feof(pes_fp))
{
iLen = fread(buf+size, 1, sizeof(buf)-size, pes_fp); //讀文件
p = buf;

while( p + 6 < buf + iLen +size)
{
if (0 == p[0] && 0 == p[1] && 0x01 == p[2] && 0xE0 == p[3]) //進入
{
if (flag == 0) //第一次找到PES包
{
temp_p = p;
flag = 1;
}
else
{
pes_packet_len = p - temp_p; //pes包長度
start_indicator_flag = 0;

while (1)
{
ts_buf[3] = counter;

if (1 != start_indicator_flag)
{
ts_buf[1] = ts_buf[1] | 0x40; //payload_unit_start_indicator置為1
start_indicator_flag = 1;
}
else
{
ts_buf[1] = ts_buf[1] & 0xBF; //payload_unit_start_indicator置為0
}

if (pes_packet_len > 184) //打包成TS包(188)
{
ts_buf[3] = ts_buf[3] & 0xDF;
ts_buf[3] = ts_buf[3] | 0x10;
memcpy(&ts_buf[4], temp_p, 184);
fwrite(ts_buf, 1, 188, ts_fp); //寫文件
pes_packet_len -=184;
temp_p += 184;
}
else //不夠184B的加入調整欄位,為空
{
ts_buf[3] = ts_buf[3] | 0x30;
ts_buf[4] = 183 - pes_packet_len;
memcpy(&ts_buf[4] + 1 + ts_buf[4], temp_p, pes_packet_len);
fwrite(ts_buf, 1, 188, ts_fp); //寫文件

break;
}

counter = (counter + 1) % 0x10; //ts包計數
}
}
temp_p = p;
}

p++;
}

if (1 == flag)
{
size = buf + iLen + size - temp_p;
memmove(buf, temp_p, size);
temp_p = NULL;
flag = 0;
}
else
{
size =buf + iLen + size - p;
memmove(m_buf , p , size);
}
}

printf("pes_ts_END\n");

fclose(pes_fp);
fclose(ts_fp);
return 0;
}

⑹ 高分求一個200行左右的C語言程序要簡單的我才學C語言

//C語言代碼
#include <stdio.h>
void main()
{
printf("hello!");//此行復制200遍即可
}

⑺ 求大一C語言課程設計200行的程序

C語言編寫的迷宮小游戲 源代碼

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#define N 20/*迷宮的大小,可改變*/
int oldmap[N][N];/*遞歸用的數組,用全局變數節約時間*/
int yes=0;/*yes是判斷是否找到路的標志,1找到,0沒找到*/
int way[100][2],wayn=0;/*way數組是顯示路線用的,wayn是統計走了幾個格子*/
void Init(void);/*圖形初始化*/
void Close(void);/*圖形關閉*/
void DrawPeople(int *x,int *y,int n);/*畫人工探索物圖*/
void PeopleFind(int (*x)[N]);/*人工探索*/
void WayCopy(int (*x)[N],int (*y)[N]);/*為了8個方向的遞歸,把舊迷宮圖拷貝給新數組*/
int FindWay(int (*x)[N],int i,int j);/*自動探索函數*/
void MapRand(int (*x)[N]);/*隨機生成迷宮函數*/
void PrMap(int (*x)[N]);/*輸出迷宮圖函數*/
void Result(void);/*輸出結果處理*/
void Find(void);/*成功處理*/
void NotFind(void);/*失敗處理*/
void main(void)/*主函數*/
{
int map[N][N]; /*迷宮數組*/
char ch;
clrscr();
printf("\n Please select hand(1) else auto\n");/*選擇探索方式*/
scanf("%c",&ch);
Init(); /*初始化*/
MapRand(map);/*生成迷宮*/
PrMap(map);/*顯示迷宮圖*/
if(ch=='1')
PeopleFind(map);/*人工探索*/
else
FindWay(map,1,1);/*系統自動從下標1,1的地方開始探索*/
Result();/*輸出結果*/
Close();
}
void Init(void)/*圖形初始化*/
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
}
void DrawPeople(int *x,int *y,int n)/*畫人工控制圖*/
{/*如果將以下兩句注釋掉,則顯示人工走過的路徑,*/
setfillstyle(SOLID_FILL,WHITE); /*設置白色實體填充樣式*/
bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);
/*恢復原通路*/
switch(n)/*判斷x,y的變化,8個方向的變化*/
{
case 1: (*x)--;break; /*上*/
case 2: (*x)--;(*y)++;break ;/*右上*/
case 3: (*y)++;break; /*右*/
case 4: (*x)++;(*y)++;break; /*右下*/
case 5: (*x)++;break; /*下*/
case 6: (*x)++;(*y)--;break; /*左下*/
case 7: (*y)--;break; /*左*/
case 8: (*x)--;(*y)--;break; /*左上*/
}
setfillstyle(SOLID_FILL,RED);/*新位置顯示探索物*/
bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);
}
void PeopleFind(int (*map)[N])/*人工手動查找*/
{
int x,y;
char c=0;/*接收按鍵的變數*/
x=y=1;/*人工查找的初始位置*/
setcolor(11);
line(500,200,550,200);
outtextxy(570,197,"d");
line(500,200,450,200);
outtextxy(430,197,"a");
line(500,200,500,150);
outtextxy(497,130,"w");
line(500,200,500,250);
outtextxy(497,270,"x");
line(500,200,450,150);
outtextxy(445,130,"q");
line(500,200,550,150);
outtextxy(550,130,"e");
line(500,200,450,250);
outtextxy(445,270,"z");
line(500,200,550,250);
outtextxy(550,270,"c");/*以上是畫8個方向的控制介紹*/
setcolor(YELLOW);
outtextxy(420,290,"Press 'Enter' to end");/*壓回車鍵結束*/
setfillstyle(SOLID_FILL,RED);
bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);/*入口位置顯示*/
while(c!=13)/*如果按下的不是回車鍵*/
{
c=getch();/*接收字元後開始各個方向的探索*/
if(c=='w'&&map[x-1][y]!=1)
DrawPeople(&x,&y,1);/*上*/
else
if(c=='e'&&map[x-1][y+1]!=1)
DrawPeople(&x,&y,2);/*右上*/
else
if(c=='d'&&map[x][y+1]!=1)
DrawPeople(&x,&y,3);/*右*/
else
if(c=='c'&&map[x+1][y+1]!=1)
DrawPeople(&x,&y,4);/*右下*/
else
if(c=='x'&&map[x+1][y]!=1)
DrawPeople(&x,&y,5);/*下*/
else
if(c=='z'&&map[x+1][y-1]!=1)
DrawPeople(&x,&y,6); /*左下*/
else
if(c=='a'&&map[x][y-1]!=1)
DrawPeople(&x,&y,7); /*左*/
else if(c=='q'&&map[x-1][y-1]!=1)
DrawPeople(&x,&y,8); /*左上*/
}
setfillstyle(SOLID_FILL,WHITE); /*消去紅色探索物,恢復原迷宮圖*/
bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);
if(x==N-2&&y==N-2)/*人工控制找成功的話*/
yes=1; /*如果成功標志為1*/
}
void WayCopy(int (*oldmap)[N],int (*map)[N])/*拷貝迷宮數組 */
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
oldmap[i][j]=map[i][j];
}
int FindWay(int (*map)[N],int i,int j)/*遞歸找路*/
{
if(i==N-2&&j==N-2)/*走到出口*/
{
yes=1;/*標志為1,表示成功*/
return;
}
map[i][j]=1;/*走過的地方變為1*/
WayCopy(oldmap,map); /*拷貝迷宮圖*/
if(oldmap[i+1][j+1]==0&&!yes)/*判斷右下方是否可走*/
{
FindWay(oldmap,i+1,j+1);
if(yes)/*如果到達出口了,再把值賦給顯示路線的way數組,也正是這個原因,所以具體路線是從最後開始保存*/
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
WayCopy(oldmap,map);
if(oldmap[i+1][j]==0&&!yes)/*判斷下方是否可以走,如果標志yes已經是1也不用找下去了*/
{
FindWay(oldmap,i+1,j);
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
WayCopy(oldmap,map);
if(oldmap[i][j+1]==0&&!yes)/*判斷右方是否可以走*/
{
FindWay(oldmap,i,j+1);
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
WayCopy(oldmap,map);
if(oldmap[i-1][j]==0&&!yes)/*判斷上方是否可以走*/
{
FindWay(oldmap,i-1,j);
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
WayCopy(oldmap,map);
if(oldmap[i-1][j+1]==0&&!yes)/*判斷右上方是否可以走*/
{
FindWay(oldmap,i-1,j+1);
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
WayCopy(oldmap,map);
if(oldmap[i+1][j-1]==0&&!yes)/*判斷左下方是否可以走*/
{
FindWay(oldmap,i+1,j-1);
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
WayCopy(oldmap,map);
if(oldmap[i][j-1]==0&&!yes)/*判斷左方是否可以走*/
{
FindWay(oldmap,i,j-1);
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
WayCopy(oldmap,map);
if(oldmap[i-1][j-1]==0&&!yes)/*判斷左上方是否可以走*/
{
FindWay(oldmap,i-1,j-1);
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
return;
}
void MapRand(int (*map)[N])/*開始的隨機迷宮圖*/
{
int i,j;
cleardevice();/*清屏*/
randomize(); /*隨機數發生器*/
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(i==0||i==N-1||j==0||j==N-1)/*最外面一圈為牆壁*/
map[i][j]=1;
else
if(i==1&&j==1||i==N-2&&j==N-2)/*出發點與終點表示為可走的*/
map[i][j]=0;
else
map[i][j]=random(2);/*其它的隨機生成0或1*/
}
}
}
void PrMap(int (*map)[N])/*輸出迷宮圖*/
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(map[i][j]==0)
{
setfillstyle(SOLID_FILL,WHITE);/*白色為可走的路*/
bar(100+j*15-6,50+i*15-6,100+j*15+6,50+i*15+6);
}
else
{
setfillstyle(SOLID_FILL,BLUE);/*藍色為牆壁*/
bar(100+j*15-6,50+i*15-6,100+j*15+6,50+i*15+6);
}
}
void Find(void)/*找到通路*/
{
int i;
setfillstyle(SOLID_FILL,RED);/*紅色輸出走的具體路線*/
wayn--;
for(i=wayn;i>=0;i--)
{
bar(100+way[i][1]*15-6,50+way[i][0]*15-6,100+
way[i][1]*15+6,50+way[i][0]*15+6);
sleep(1);/*控制顯示時間*/
}
bar(100+(N-2)*15-6,50+(N-2)*15-6,100+
(N-2)*15+6,50+(N-2)*15+6); /*在目標點標紅色*/
setcolor(GREEN);
settextstyle(0,0,2);/*設置字體大小*/
outtextxy(130,400,"Find a way!");
}
void NotFind(void)/*沒找到通路*/
{
setcolor(GREEN);
settextstyle(0,0,2);/*設置字體大小*/
outtextxy(130,400,"Not find a way!");
}
void Result(void)/*結果處理*/
{
if(yes)/*如果找到*/
Find();
else/*沒找到路*/
NotFind();
getch();
}
void Close(void)/*圖形關閉*/
{
closegraph();
}

⑻ 200行c語言代碼

printf()打星星玩打到200行!

⑼ 求一段vc下可用的C語言(非cpp)代碼 200行以上

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>

#define max 20

typedef struct student //學生
{
char sno[max]; // 學號
char sname[max]; //姓名
char sex[max]; //性別
char age[max]; //年齡
char depart[max]; //系
char classs[max]; //班
char grade[max]; //年級

struct student* next;
} student;

student* head;

int LogOn() //登錄模塊,已實現輸入密碼不回顯,如果中途發現輸錯某幾位,可退格鍵重輸
{
char username[max],password[max];
printf("\n請輸入用戶名:");
scanf("%s",username);
printf("\n請輸入密碼(最多15位):");

//開始以不回顯且支持退格方式獲取輸入密碼
int i=0;
while((i>=0)&&(password[i++]=getch())!=13)//條件i>=0是用於限制退格的范圍
{
if(password[i-1]=='\b')//對退格鍵的處理
{
printf("%c%c%c",'\b','\0','\b');
i=i-2;
}
else
printf("*");
}
password[--i]='\0';

//已獲取密碼。驗證用戶身份
if(!strcmp(username,"zhang")&&!strcmp(password,"8147086"))
{
printf("\n登錄成功!");
return 1;
}
else
return 0;

}

void regist()
{
char ch;
student *s,*ptr; //s用來建新結點,ptr用來暫存頭結點

do
{

s=(student*)malloc(sizeof(student)); // 新建一個學生結點

printf("\n開始注冊..."); //開始注冊
printf("\n請輸入該學生的學號:");
scanf("%s",s->sno);
printf("\n請輸入該學生的姓名:");
scanf("%s",s->sname);
printf("\n請輸入該學生的性別:");
scanf("%s",s->sex);
printf("\n請輸入該學生的年齡:");
scanf("%s",s->age);
printf("\n請輸入該學生的系:");
scanf("%s",s->depart);
printf("\n請輸入該學生所在的班:");
scanf("%s",s->classs);
printf("\n請輸入該學生所在的年級");
scanf("%s",s->grade);

ptr=head;
head=s;//將新結點插入隊頭
s->next=ptr;

fflush(stdin);
printf("\n請問是否繼續注冊?(Y/N)");
scanf("%c",&ch);
}while(ch=='Y'||ch=='y');

return;
}

void ElePrint(char str[]) //輸出單個元素
{
if(str==NULL) exit(0);
printf("%s",str);
for(unsigned int i=0;i<12-strlen(str);i++) printf(" ");//為了對齊輸出,需插入一些空格
return;
}

int LinePrint(student *ptr) //輸出一行
{
if(ptr==NULL) //檢查傳進來的指針
return 0;

printf("\n");
ElePrint(ptr->sno);
ElePrint(ptr->sname);
ElePrint(ptr->age);
ElePrint(ptr->sex);
ElePrint(ptr->depart);
ElePrint(ptr->classs);
ElePrint(ptr->grade);

return 1;
}

void print() //輸出全部學生信息
{
student *ptr=head;
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(ptr)
{
LinePrint(ptr);
ptr=ptr->next;
}
printf("\n");
return;
}
void search()//查詢模塊
{
int method;//查詢方式
char no[max],name[max],departm[max],clss[max],grades[max]; //用來接收查詢關鍵字
while(1)
{
printf("\n請選擇查詢方式");
printf("\n1.按學號查詢");
printf("\n2.按姓名查詢");
printf("\n3.按所在系查詢");
printf("\n4.按所在班級查詢");
printf("\n5.按所在年級查詢");
printf("\n6.列印全部學生信息");
printf("\n7.返回主菜單\n");

scanf("%d",&method);

student *p=head,*temp;

switch(method)
{
case 1:
printf("\n請輸入要查詢的學號:");
scanf("%s",no);
while(p)
{
if(!strcmp(p->sno,no))
break;
else
{
temp=p;
p=p->next;
}
}
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
LinePrint(p);
break;
case 2:
printf("\n請輸入要查詢的姓名:");
scanf("%s",name);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->sname,name))
LinePrint(p);
p=p->next;
}
break;
case 3:
printf("\n請輸入學生所在的系:");
scanf("%s",departm);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->depart,departm))
LinePrint(p);
p=p->next;
}
break;
case 4:
printf("\n請輸入學生所在的班:");
scanf("%s",clss);
printf("\n請輸入學生所在的年級:");
scanf("%s",grades);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->classs,clss)&&!strcmp(p->grade,grades))
LinePrint(p);
p=p->next;
}
break;

case 5:
printf("\n請輸入學生所在的年級:");
scanf("%s",grades);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->grade,grades))
LinePrint(p);
p=p->next;
}
break;

case 6:
print();
break;

case 7:
return;
default:
printf("很抱歉,暫無此查詢方式!");
break;
}
}

}

void modify()//修改學生信息
{
char num[max];
student *p=head;
printf("\n請輸入要修改的學生的學號:");
scanf("%s",num);
while(p)
{
if(!strcmp(p->sno,num))
break;
else
p=p->next;
}
if(p==NULL)
{
printf("\n錯誤:沒有此學生的信息!\n");
return;

}
LinePrint(p);

printf("\n請輸入要修改的該學生的信息:");
printf("\n1.姓名");
printf("\n2.性別");
printf("\n3.年齡");
printf("\n4.所在的系");
printf("\n5.所在的班");
printf("\n6.所在的年級");

char name1[max],sex1[max],age1[max],depart1[max],class1[max],grade1[max];
int select;
fflush(stdin);
scanf("%d",&select);
printf("\n請輸入新的信息:");

switch(select)
{
case 1:
scanf("%s",name1);
strcpy(p->sname,name1);
break;
case 2:
scanf("%s",sex1);
strcpy(p->sex,sex1);
break;
case 3:
scanf("%s",age1);
strcpy(p->age,age1);
break;
case 4:
scanf("%s",depart1);
strcpy(p->depart,depart1);
break;
case 5:
scanf("%s",class1);
strcpy(p->classs,class1);
break;
case 6:
scanf("%s",grade1);
strcpy(p->grade,grade1);
break;
default:
printf("\nError!");
break;
}

LinePrint(p);
return;
}

void del()// 刪除某學生的信息
{
student *p=head,*temp=head,*s;
char num1[max];
printf("\n請輸入要刪除的學生的學號:");
scanf("%s",num1);
while(p)//查找該學生所在的結點
{
if(!strcmp(p->sno,num1))
break;
else
{
temp=p;
p=p->next;
}

}//while
if(!p)
{
printf("\n不存在此學生的信息.");
return;
}
LinePrint(p);//輸出該學生的信息
printf("\n請問真的要刪除該學生的信息嗎?(Y/N)");
char ch;
fflush(stdin);
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
{
s=p->next;
temp->next=s;
free(p);
printf("\n已經刪除該學生的信息.");
}
return;
}

void sort() //排序模塊。將學生記錄按學號從小到大排列。用起泡排序演算法實現
{

student *ptr,*s=head,*p;
int count=0,count1;
while(s)//統計鏈表結點個數
{
count++;
s=s->next;
}

for(int i=1;i<count;i++)
{
ptr=head;
p=NULL;
count1=count-i; //用來控制每輪起泡排序的終點,即每次把學號最小的結點移到倒數第i個結點
while(ptr&&ptr->next&&(count1--))
{
if(strcmp(ptr->sno,ptr->next->sno)>0)
{
s=ptr->next;
ptr->next=s->next;
if(p==NULL) //ptr處於隊頭時
head=s;
else
p->next=s;
s->next=ptr;
p=s;
}
else
{
ptr=ptr->next;
if(p==NULL) //ptr處於隊頭時
p=head;
else
p=p->next;
}
}
}
return;
}

void quit()
{
char ch;
printf("\n真的要退出?(Y/N)");
fflush(stdin);
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
exit(0);
return;
}

int main()
{
int option;

printf("\nCopyright@2005 KongXinCai All rights reserved.");
printf("\n歡迎使用學生信息管理系統!\n");

//登錄模塊
int icheck=0;
while(icheck<3)
{
if(LogOn()==0)
icheck++;
else
break;

}
if(icheck==3)
{
printf("\n連續登錄三次不成功,退出!");
exit(0);
}

//系統界面

while(1)
{
printf("\n\n請選擇需要的服務:");
printf("\n1.注冊");
printf("\n2.查詢");
printf("\n3.修改");
printf("\n4.刪除");
printf("\n5.排序");
printf("\n7.求平均");
printf("\n6.退出\n");

scanf("%d",&option);

switch(option)
{
case 1:
regist();
break;
case 2:
search();
break;
case 3:
modify();
break;
case 4:
del();
break;
case 5:
sort();
break;
case 6:
quit();
break;
}

}

return 0;

}

⑽ 求C語言200行以上的程序一個 急!!~~

給你一個通訊錄管理系統程序 四百多行 夠你用了吧!!! #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #define N 100 void input();//添加新用戶函數 void amend();//修改用戶信息函數 void delete_client();//刪除用戶信息函數 void demand_client();//用戶信息查詢函數 void collect_telephone();//用戶信息匯總函數 void save_client(struct telephone message);//保存函數 void demand_name();//按用戶名查詢 void demand_telephone();//按電話號碼查詢 struct telephone { char client_name[20]; char client_address[30]; char client_telephone[15]; }; //添加新用戶函數 void input() { struct telephone message; char reply='y'; char save='y'; while (reply=='y') { printf("用戶姓名:"); scanf("%s",message.client_name); printf("電話號碼:"); scanf("%s",message.client_telephone); save_client(message); printf("要繼續嗎?(y/n):"); scanf(" %c",&reply); } printf("按任意鍵返回主菜單……\n"); getchar(); getchar(); } //保存函數 void save_client(struct telephone message) { FILE *fp; fp=fopen("message.dat","a+"); if (fp!=NULL) { fwrite(&message,sizeof(struct telephone),1,fp); } else { printf("\n打開文件時出現錯誤,按任意鍵返回……\n"); getchar(); return; } fclose(fp); } //修改用戶信息函數 void amend() { struct telephone message; FILE *fp; char amend_name[20]; char reply='y'; char found='y'; char save='y'; int size=sizeof(struct telephone); while (reply=='y') { found='n'; fp=fopen("message.dat","r+w"); if (fp!=NULL) { system("cls"); printf("\n請輸入要修改的姓名:"); scanf("%s",amend_name); while ((fread(&message,size,1,fp))==1) { if ((strcmp(amend_name,message.client_name))==0) { found='y'; break; } } if (found=='y') { printf("==========================================\n"); printf("\n用戶姓名:%s\n",message.client_name); printf("\n電話號碼:%s\n",message.client_telephone); printf("==========================================\n"); printf("修改用戶信息:\n"); printf("\n用戶姓名:"); scanf("%s",message.client_name); printf("\n電話號碼:"); scanf("%s",message.client_telephone); printf("\n要保存嗎?(y/n):"); scanf(" %c",&save); if (save=='y') { fseek(fp,-size,1); fwrite(&message,sizeof(struct telephone),1,fp); } } else { printf("無此人信息!\n"); } } else { printf("打開文件時出現錯誤,按任意鍵返回……\n"); getchar(); return; } fclose(fp); printf("要繼續嗎?(y/n):"); scanf(" %c",&reply); } printf("按任意鍵返回主菜單……\n"); getchar(); getchar(); } //刪除用戶信息函數 void delete_client() { struct telephone message[N]; struct telephone temp_str; struct telephone delete_str; int i=0,j=0; char reply='y'; char found='y'; char confirm='y'; char delete_name[20]; FILE *fp; while (reply=='y') { system("cls"); fp=fopen("message.dat","r"); if (fp!=NULL) { i=0; found='n'; printf("\n請輸入姓名:"); scanf("%s",delete_name); while ((fread(&temp_str,sizeof(struct telephone),1,fp))==1) { if ((strcmp(delete_name,temp_str.client_name))==0) { found='y'; delete_str=temp_str; }//查找要刪除的記錄 else { message[i]=temp_str; i++; }//將其它無關記錄保存起來 } } else { printf("打開文件時出現錯誤,按任意鍵返回……\n"); getchar(); return; } fclose(fp); if (found=='y') { printf("==========================================\n"); printf("用戶姓名:%s\n",delete_str.client_name); printf("電話號碼:%s\n",delete_str.client_telephone); printf("==========================================\n"); } else { printf("無此人信息,按任意鍵返回……\n"); getchar(); break; } printf("確定要刪除嗎?(y/n):"); scanf(" %c",&confirm); if (confirm=='y') { fp=fopen("message.dat","w"); if (fp!=NULL) { for(j=0;j<i;j++) { fwrite(&message[j],sizeof(struct telephone),1,fp); } printf("記錄已刪除!!!\n"); } else { printf("打開文件時出現錯誤,按任意鍵返回……\n"); getchar(); return; } fclose(fp); } printf("要繼續嗎?(y/n):"); scanf(" %c",&reply); } printf("按任意鍵返回主菜單……\n"); getchar(); } //用戶信息查詢函數 void demand_client() { int choice=1; while (choice!=3) { system("cls"); printf("電話查詢菜單\n"); printf(" 1 按聯系人姓名查詢\n"); printf(" 2 按聯系人電話號碼查詢\n"); printf(" 3 返回主菜單\n"); printf("請選擇(1-3):"); scanf("%d%*c",&choice); if (choice>3) { printf("請輸入1-6之間的整數\n"); printf("按任意鍵返回菜單……\n"); getchar(); continue; } if (choice==1) { demand_name(); } else if (choice==2) { demand_telephone(); } } } //按用戶名查詢 void demand_name() { struct telephone message; FILE *fp; char amend_name[20]; char reply='y'; char found='y'; while (reply=='y') { found='n'; fp=fopen("message.dat","r+w"); if (fp!=NULL) { system("cls"); printf("\n請輸入姓名:"); scanf("%s",amend_name); while ((fread(&message,sizeof(struct telephone),1,fp))==1) { if ((strcmp(amend_name,message.client_name))==0) { found='y'; break; } } if (found=='y') { printf("==========================================\n"); printf("用戶姓名:%s\n",message.client_name); printf("電話號碼:%s\n",message.client_telephone); printf("==========================================\n"); } else { printf("無此人信息!\n"); } } else { printf("打開文件時出現錯誤,按任意鍵返回……\n"); getchar(); return; } fclose(fp); printf("要繼續嗎?(y/n):"); scanf(" %c",&reply); } printf("按任意鍵返回主菜單……\n"); getchar(); getchar(); } //按電話號碼查詢 void demand_telephone() { struct telephone message; FILE *fp; char telephone[20]; char reply='y'; char found='y'; while (reply=='y') { found='n'; fp=fopen("message.dat","r+w"); if (fp!=NULL) { system("cls"); printf("\n請輸入電話號碼:"); scanf("%s",telephone); while ((fread(&message,sizeof(struct telephone),1,fp))==1) { if ((strcmp(telephone,message.client_telephone))==0) { found='y'; break; } } if (found=='y') { printf("==========================================\n"); printf("用戶姓名:%s\n",message.client_name); printf("電話號碼:%s\n",message.client_telephone); printf("==========================================\n"); } else { printf("無此電話號碼的有關信息!\n"); } } else { printf("打開文件時出現錯誤,按任意鍵返回……\n"); getchar(); return; } fclose(fp); printf("要繼續嗎?(y/n):"); scanf(" %c",&reply); } printf("按任意鍵返回主菜單……\n"); getchar(); getchar(); } //用戶信息匯總函數 void collect_telephone() { struct telephone message; FILE *fp; fp=fopen("message.dat","r"); if (fp!=NULL) { system("cls"); printf("\n用戶姓名\t\t電話號碼\n"); while ((fread(&message,sizeof(struct telephone),1,fp))==1) { printf("\n%-24s",message.client_name); printf("%-12s\n",message.client_telephone); } } else { printf("打開文件時出現錯誤,按任意鍵返回……\n"); getchar(); return; } fclose(fp); printf("按任意鍵返回主菜單……\n"); getch(); } void main() { char choice[10]=""; int len=0; while (choice[0]!='7') { printf("\t==========電話本號碼查詢系統=============\n"); printf("\t\t 1、添加新聯系人\n"); printf("\t\t 2、修改聯系人信息\n"); printf("\t\t 3、刪除聯系人信息\n"); printf("\t\t 4、聯系人信息查詢\n"); printf("\t\t 5、聯系人信息匯總\n"); printf("\t\t 7、退出\n"); printf("\t=========================================\n"); printf("請選擇(1-7):"); scanf("%s",choice); len=strlen(choice); if (len>1) { printf("請輸入1-6之間的整數\n"); printf("按任意鍵返回主菜單……\n"); getchar(); getchar(); continue; } switch (choice[0]) { case '1': input(); break; case '2': amend(); break; case '3': delete_client(); break; case '4': demand_client(); break; case '5': collect_telephone(); break; default: break; } } }

熱點內容
死鎖避免的演算法 發布:2025-02-05 04:43:07 瀏覽:579
python查文檔 發布:2025-02-05 04:27:49 瀏覽:496
javaxmldom 發布:2025-02-05 04:27:40 瀏覽:9
linux修改內存大小 發布:2025-02-05 04:26:05 瀏覽:997
ftp命令復制文件 發布:2025-02-05 04:26:00 瀏覽:303
python好用的ide 發布:2025-02-05 04:14:18 瀏覽:516
id密碼開頭是多少 發布:2025-02-05 04:11:51 瀏覽:101
數據結構c語言ppt 發布:2025-02-05 04:11:45 瀏覽:43
如何用學習機配置的筆寫字 發布:2025-02-05 04:09:15 瀏覽:395
5歲編程 發布:2025-02-05 04:06:21 瀏覽:653