『壹』 求c語言說課稿
《C語言程序設計》說課教案
授課班級:07應用電子
授課課時:2課時
授課地點:計算機實驗室
課題 製作數字電子時鍾―――循環嵌套
一、教學目標
1、通過本次課教學,學生能進一步理解順序、分支和循環三種基本結構,特別是While、Do-While、for三種循環循環語句的使用;
2、掌握循環嵌套概念;
3、掌握多種循環程序設計方法並根據任務要求 「製作數字電子時鍾」;
4、通過本次任務,了解gotoxy()和Clrscr()函數的作用,並掌握這兩個函數在實際應用程序中的使用方法。
5、技能目標:培養學生邏輯思維能力、綜合運用知識的能力和自主學習能力;
二、教材分析
選用教材為李志球、劉昊編著的《C語言程序設計教程》(第二版),該教材由電子工業出版社出版,教材特點如下:
1、在內容上體現科學性、時代性、實用性,編排上面向應用,理論與實踐有機結合;
2、採用任務驅動、項目教學等教學手段,全書圍繞項目「學生成績管理系統」作為案例,貫穿整個課程進行難點講解,以實際應用作為突破口,使學生能夠真實體驗到知識的實際應用,提高興趣,促進理解;教學與項目開發融為一體,淺顯易懂,符合高職學生認知規律。
3、實驗實訓環節結合教學內容,實驗項目豐富。課程設計中案例學生熟悉。
本節課教學內容參考教材第4章的4.4節:循環嵌套。
三、學生分析
07應用電子是普招類(高中畢業生)學生,它們高中期間文化基礎較扎實,但計算機專業知識薄弱,C語言程序設計是他們學習的第一門計算機語言類課程,開始學習時較困難,但入門提高較快。本次課的教學內容中循環嵌套概念他們很容易理解,簡單的多重循環編程對他們不難,但循環嵌套在實際應用中的編程較為困難,如本次課的任務「製作數字電子時鍾」牽涉許多知識,如屏幕定位、輸入初始時間等。
另外,高職學生對於上機實際操作要比學習理論知識更為有興趣;簡單的實驗項目都能完成,但解決實際應用問題的能力也較差。因此,在教學中通過演示讓學生有感性認識,提高學習興趣;通過提出問題讓學生討論議一議,主動思考如何解決;通過一個教學任務讓學生動手做一做。
四、教學重點、難點及解決辦法
1、本次課教學重點
1)循環嵌套概念;
2)gotoxy()和Clrscr()函數使用方法;
3)循環嵌套結構程序設計方法及實際應用。
在教學過程的敘述中,要抓住教學的重點、最能體現教學理念的內容和最能展示教學藝術的環節,作較為詳細的敘述。
2、本次課教學難點
1)循環嵌套編程
2)演算法分析及程序結構
3)編程完成「製作數字電子時鍾」
3、難點解決辦法
1)通過演示讓學生有感性認識,並從for語句基本語法入手,逐步引入循環嵌套概念,弱化實用性不強的細節;
2)圍繞任務「製作數字電子時鍾」程進行難點講解,以實際應用作為突破口,使學生能理解循環嵌套在實際中的應用,提高學習興趣;
3)針對難點設置上機實際操作內容,進一步掌握循環嵌套程序設計方法。
4)在實驗實訓過程中布置任務項目,通過實踐環節進一步理解和掌握重點難點,達到學習目的。
五、教學理念、方法及手段
本次課採用理(論)實(踐)一體化教學理念通過任務驅動(項目教學)、講練結合等教學手段。
1、任務驅動:通過「製作數字電子時鍾」這一任務,掌握循環嵌套程序設計認方法。並掌握相應知識點,突出重點,分解難點。
2、講練結合:授課地點為計算機實驗室,採用邊講邊練的教學互動形式。教學過程中,適當安排學生在計算機上進行進行實際程序設計,通過運行調試自己設計的程序,讓學生親自觀察和體驗程序設計的成功感受,加深知識的理解。
六、教學設計(時間分配)
1、任務提出,演示成果程序,明確目標,提出要求。(2分鍾)
(1)演示成果程序,在屏幕固定位置顯示「製作數字電子時鍾」。
(2)任務分析:完成本次課的任務所需知識―――三種基本程序設計結構。
2、知識回顧(2分鍾)
循環結構概念、三種循環語句(while、do-while、for)、當型和直到型循環、重點語句for語句應用、注意事項。
3、上機實訓1(2分鍾)
簡單程序:用for語句編程,實現在屏幕上顯示0、1、2……59。
(上機技能訓練的操作、指導、輔導過程,以學生實際操作動手為主,教師進行輔導指導、師生共同探討完成,應充分體現學生的主體地位)
思考提問:如何讓0-59重復變化,以接近實際生活中秒的變化情況。
4、導入新課(6分鍾)
(1)通過練習1,分析在屏幕上顯示秒的變化程序中存在的問題。一是數字「0-59」以滾動卷屏方式顯示;二是每個數字顯示速度太快,如何實現以實際一秒時間顯示一個數。
第一個問題使用gotoxy()函數或clrscr()函數解決;第二個問題在程序中每顯示一秒後都設置一個時間延遲,時間延遲用方法空循環結構實現,它的位置在循環內屏幕每顯示一個數值後。通過講解解決第二個問題的程序結構,引入本次課新知識―――循環嵌套概念。
for(s=0;s<=59;s++)
{printf("\%2d",s);
for (i=1;i<=200000000;i++); }
(2)循環嵌套概念、結構和程序設計時注意事項。
5、上機實訓2(5分鍾)
使用循環嵌套結構編程,在屏幕固定位置能以分秒變化的時鍾:
10:11
編程和上機操作時要理解兩點:一是gotoxy()函數的使用,二是空循環實現延時循環終值的調試,以接近實際生活中時間變化。
本部分內容所用到知識是本次課的核心,是基本的能力目標,所以教學時要以重點內容處理。
6、程序設計講解(4分鍾)
編程完成本次課任務,製作一個帶有時、分、秒變化的數字電子時鍾。(四重循環)。
(1)演算法分析
(2)定義變數及類型
(3)程序結構設計
(3)源程序核心結構編程
7、上機實訓3(5分鍾)
(1)調試程序時要注意觀察程序運行情況,調整空循環變數i的終值,盡量與實際運轉時間一致。計算機運行速度越快,則這個數值越大。
(2)本程序需運行24小時才能結束,如果要停止程序運行,可以按Ctrl-C或連續按兩次Ctrl-Break強制中斷程序運行。
(3)修改變數i類型,將它定義為整形後再次運行程序,觀察運行結果,分析程序出錯原因,提醒以後編程時注意。
8、提出問題,任務完善―――源程序提高與擴展 之一(4分鍾)
前面的程序每次運行都從0點0分0秒開始,不能從當前實際時間開始運行。解決問題的辦法可以在程序第一次循環開始時輸入一次當前實際時間。為了只在開始運行時設置一次初始時間,可以引入一個邏輯變數first,其初始值為0 ,輸入初始時間後,將其值置為非0。在後面程序運行中,通過if語句控制不再需要輸入初始時間。
9、上機實訓4(5分鍾)
上機修改程序,使數字電子鍾能從指定時間(輸入初始時間)開始運轉。
10、思考和作業(5分鍾)
(1)源程序提高與擴展 之二:本程序只能運行24小時,請同學們將程序進一步改進,使它能顯示年、月、日、星期、時、分、秒等數據的電子鍾。
(2)「九九乘法表」。
10、課堂小結及作業(5分鍾)
11、Question & Answer(1-2分鍾)
七、學法指導
1、鼓勵學生自主探索和合作交流。引導學生自主地從事觀察、分析、交流等活動,使學生形成對計算機語言知識有效的學習策略。
2、鼓勵與提倡解決問題的多樣性,引導學生在與他人的交流中去選擇合適的策略,豐富自己的思維方式,獲得成功的體驗和不同的發展。
3、引導學生將所學計算機知識應用到其他學科中去,使學生覺得計算機有很用,同時也培養了學生邏輯思維能力。
『貳』 C語言課程設計
//我以前的作業
游戲說明
1.開始游戲
1)系統隨機產生一位不重復的N位數字。N的大小與等級有關。
初級:N=3 中級:N=4 高級:N=5
2)游戲者輸入所猜的不重復數字,並按回車提交。提交的數據
數應與N的大小一致,當數據位數大於N時,只取前N位。
3)系統將提交的數與它自動產生的數進行比較,輸出結果「*A*B」形式。其中A代表數字正確相應位置也正確,B代表數字正確但位置不正確。如:1A3B表示游戲者有1個數字的位置正確且數值也正確,除此以外,游戲者還猜對了3個數字,但位置不對,即游戲者已經猜出4位數據,但有3個數據位置不對!
4)游戲者有限定次數的猜測機會,在規定次數內完成,則游戲成功,否則,游戲失敗。其中,猜測次數與等級有關:
初級:10次 中級:9次 高級:8次。
5)按完成游戲所用的時間和次數計算游戲者所得分數,游戲等級越高,猜測所用的次數越少,得分越高!若游戲者得分比系統已經保存的分數的高,將提示要求輸入游戲者信息,並且保存在最佳排行之中。
2.等級設置
6)游戲者可以自行設置游戲等級:初級,中級和高級。
3.最佳排行
在最佳排行中,游戲者可以查看當前游戲的最佳排行。
4.游戲說明
在游戲說明中,游戲者可以查看游戲規則。
三.總體設計
本課程設計對模塊設計的要求如下:
(1)要求使用多文件方式實現設計;
(2)要求在各個文件內實現結構化設計;
(3)每個模塊作為一個單獨的C文件,每個文件內的函數如表所示,表中給出了各個函數的功能說明。
(4)宏和數據結構等放在頭文件中,並使用條件編譯。
(1)文件及函數組成
源文件 函數名或其他成分 功能
record.h
ASK 宏定義
結構聲明 結構聲明
庫函數及函數原型聲明
game_ control.c Game_rank 設置游戲等級
Game_explain 輸出遊戲說明
game_ register.c Tiptop_record 記錄最高分
Tiptop_output 輸出最佳排行
game.c Game_main 開始游戲中心
Build_number 獲取系統隨機數字
Game_in_out 獲取游戲者數據和輸出結果
Time_command 時間控制
Game_result 游戲結果處理輸出
record.c main 主函數
Menu_select 選擇菜單
manage_menu 處理菜單
(2)函數設計
1.頭部文件
文件名稱:record.h
功 能:聲明函數原型,包含文件及自定義宏和數據結構。
要 求:報告是否能正常打開文件執行操作。
2. 設置游戲等級函數
函數原型:void Game_rank(void)
功 能:可由游戲者自行設置游戲等級
參 數:void
返 回 值:void
要 求:如果游戲者沒有進行等級設定,則默認初級進行游戲。
3. 輸出遊戲說明函數
函數原型:void Game_ explain()
功 能:輸出遊戲規則說明
參 數:void
返 回 值:void
要 求:說明游戲相應的按鍵,保證游戲者按照說明。
4. 記錄最高分函數:
函數原型:void Tiptop_register(int)
功 能:把從Get_player函數得到的游戲者信息和游戲的積分信息一同保存到指定路徑的Tiptop_register.dat文件中
參 數:int S;S為游戲積分
返 回 值:void
要 求:要求把Tiptop1.txt(初級最高分) Tiptop2.txt(中級最高分) Tiptop3.txt(高
級最高分)原來有的信息替換為現在的信息,並且只有積分大於原有信息的第
十名,才會被以替換的方式記錄;並且是降序的方式排列的。
5. 輸出最佳排行函數:
函數原型:void Tiptop_out()
功 能:輸出最佳排行信息
參 數:void
返 回 值:void
要 求:沒有信息的時候輸出提示,有信息時按降序排列輸出全部信息。
6. 開始游戲中心函數
函數原型:void Game_main()
功 能:調用Time_ control 、Build_number等函數,進行游戲的整體控制
參 數:void
返 回 值:void
要 求:注意函數的完整性,保證游戲順利進行,注意沒有設置等級時候,默認C=1!
7. 獲取系統隨機數字函數
函數原型:int *Build_number()
功 能:系統調用<time.h>文件,利用srand((unsigned) time(&)產生1個N位隨機數字,供游戲者猜測
參 數:void
返 回 值:int 8=*i:指向產生的隨機數字構成的數組的指針
要 求:產生的數字是隨機的,並且是不重復的,總共產生N(依據游戲等級而定)位數字,組成數組[初級為3個數字]。
8. 獲取游戲者游戲數據和輸出遊戲進程結果函數
函數原型:void Course_in_out()
功 能:把游戲者猜的數據讀入內存,並且分析得出結果,並輸出結果
參 數:void
返 回 值:void
要 求:用A或B的代碼表示本次的結果,其中A表示數值對位置也對,B表示數值對,但位置錯了!每次得到游戲者的猜測數據都要分析得出結果並輸出結果,以便游戲者的下一次猜測。
9. 時間控制函數
函數原型:int Time_ control()
功 能:利用<dos.h>和<time.h>文件,得到玩游戲的總時間,計算游戲積分。
參 數:void
返 回 值:int Time:游戲前後的時間差異
要 求:得到的時間是以秒為單位,數據是整型數據。
10. 游戲結果處理輸出函數
函數原型:void Game_result(int m )
功 能:計算,得出最後游戲積分
參 數:int m:整個游戲的時間
返 回 值:void
要 求:按照游戲等級,設置不同的游戲積分方式。
11. 主函數:
函數原型:void main()
功 能:調用各個子函數,實現整體程序的運行
參 數:void
返 回 值: void
要 求:控制整個游戲的順利進行。
12. 選擇菜單函數:
函數原型:void Menu_select()
功 能:得到Handle_menu的返回值,由一個switch語句選擇開始,等級,最佳排行,游戲說明,結束等菜單操作。
參 數:void
返 回 值:void
要 求:由Handle_menu得到數據可循環得到,直到得到數字5時,選擇退出菜單,方可退出遊戲,否則一直循環程序!
13. 處理菜單函數:
函數原型:int Handle_menu()
功 能:輸出菜單選擇提示,並由cin語句實現游戲者的輸入,輸入選擇相應菜單對應的菜單序號,並把相應的值傳給Menu_select函數
參 數:void
返 回 值:int n:選擇相應菜單的菜單序號
要 求:輸入的值不是相應的菜單的序號時返回0值,否則返回遊戲者的輸入值,以選擇相應菜單。
四.程序代碼
1. record.h
#include"time.h"
#include<dos.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//結構體
#define MAXSIZE 20
typedef long int ElemType; //定義結構體tiptop,存放游戲者的最高分等信息
typedef struct tiptop
{
ElemType data;
char name[MAXSIZE];
char grade[MAXSIZE];
int year;
int month;
int day;
char week[MAXSIZE];
int hour;
int minute;
int second;
}tiptop;
//全局變數
int C; //C為等級設置變數
//函數聲明
void Menu_select(); //選擇菜單函數
int manage_menu(); //處理菜單函數
void Tiptop_record(int); //記錄最高分函數
void Tiptop_output(); //輸出最佳排行函數
void Game_rank(); //設置游戲等級函數
void Game_explain(); //輸出遊戲說明函數
void Game_main(); //開始游戲中心函數
int *Build_number(); //獲取系統隨機數字函數
void Game_in_out(); //獲取游戲數據和輸出遊戲進程結果函數
int Time_command(); //時間控制函數
void Game_result(int); //游戲結果處理輸出函數
2. game_ control.c
#include"record.h"
//**********************
// 設置游戲等級函數
//**********************
void Game_rank()
{
FILE *fp;
printf("\t******************************\n");
printf("\t************1:初級************\n");
printf("\t************2:中級************\n");
printf("\t************3:高級************\n");
printf("\t******************************\n");
printf("\t請選擇游戲等級:\t");
loop:
scanf("%d",&C);
if(C<1||C>3)
{
printf("\t輸入有誤!請重新輸入:\t");
goto loop;
}
if((fp=fopen("C.txt","w"))==NULL)
{
printf("打開C.txt文件失敗!");
exit(1);
}
fwrite(&C,sizeof(int),1,fp);
fclose(fp);
if(C==1)
printf("\t等級設置為初級!\n");
if(C==2)
printf("\t等級設置為中級!\n");
if(C==3)
printf("\t等級設置為高級!\n");
printf("\n");
}
//****************
//輸出遊戲說明函數
//****************
void Game_explain()
{
printf("游戲說明:\n");
printf("\t**********************************************************\n");
printf("\t**********************************************************\n");
printf("\t①:游戲開始,系統隨機產生一位不重復的N位數字。N的大小與等級\n");
printf("\t有關:\n");
printf("\t初級:N=3\t中級:N=4\t高級:N=5\t\n");
printf("\t②:游戲者輸入所猜的不重復數字,並按回車提交。\n");
printf("\t提交的數據位數應與N的大小一致,當數據位數大於N時,只取前N位;\n");
printf("\t③:系統將提交的數與它自動產生的數進行比較,輸出結果\n");
printf("\t「*A*B」形式。其中A代表數字正確相應位置也正確,B代\n");
printf("\t表數字正確但位置不正確。如:1A3B表示游戲者有1個數字的位置\n");
printf("\t正確且數值也正確,除此以外,游戲者還猜對了3個數字,但位置不\n");
printf("\t對,即游戲者已經猜出4位數據,但有3個數據位置不對!\n");
printf("\t④:游戲者有限定次數的猜測機會,在規定次數內完成,\n");
printf("\t則游戲成功。否則,游戲失敗。其中,猜測次\n");
printf("\t數與等級有關:\n");
printf("\t初級:10次\t中級:9次\t高級:8次。\t\n");
printf("\t⑤:按完成游戲所用的時間和次數計算游戲者所得分數,\n");
printf("\t游戲等級越高,猜測所用的次數越少,得分越高!\n");
printf("\t若游戲者得分比系統已經保存的分數的高,將提示要求\n");
printf("\t輸入游戲者信息,並且保存在最佳排行之中。\n");
printf("\t⑥:游戲者可以自行設置等級!\n");
printf("\t**********************************************************\n");
printf("\t**********************************************************\n");
printf("\n");
}
3. game_ register.c
#include"record.h"
//**************
//記錄最高分函數
//**************
void Tiptop_record(int S)
{
FILE *fp;
tiptop n;
char *week[]={"星期天","星期一","星期二","星期三","星期四","星期五",
"星期六"};
time_t timep;
struct tm *t;
printf("\t恭喜您!\n");
printf("\t您獲得本游戲的最高分!\n");
//獲取名字
printf("\t請輸入您的姓名:");
printf("\t");
scanf("%s",n.name);
//獲取時間
time(&timep);
t=gmtime(&timep);
t->tm_year=1900+t->tm_year;
t->tm_mon=1+t->tm_mon;
t->tm_hour=8+t->tm_hour;
n.year=t->tm_year;
n.month=t->tm_mon;
n.day=t->tm_mday;
strcpy(n.week,week[t->tm_wday]);
n.hour=t->tm_hour;
n.minute=t->tm_min;
n.second=t->tm_sec;
//獲取等級
if(C==1)
strcpy(n.grade,"初級");
if(C==2)
strcpy(n.grade,"中級");
if(C==3)
strcpy(n.grade,"高級");
//獲取分數
n.data=S;
if(C==1)
{
if((fp=fopen("tiptop1.txt","w"))==NULL)
{
printf("\t打開tiptop1.txt文件失敗!");
exit(1);
}
fwrite(&n,sizeof(struct tiptop),1,fp);
fclose(fp);
}
if(C==2)
{
if((fp=fopen("tiptop2.txt","w"))==NULL)
{
printf("\t打開tiptop2.txt文件失敗!");
exit(1);
}
fwrite(&n,sizeof(struct tiptop),1,fp);
fclose(fp);
}
if(C==3)
{
if((fp=fopen("tiptop3.txt","w"))==NULL)
{
printf("\t打開tiptop3.txt文件失敗!");
exit(1);
}
fwrite(&n,sizeof(struct tiptop),1,fp);
fclose(fp);
}
}
//****************
//輸出最佳排行函數
//****************
void Tiptop_output()
{
int i;
FILE *fp;
tiptop p,q,r;
if((fp=fopen("tiptop1.txt","r"))==NULL)
{
printf("還沒有最佳排行!");
exit(1);
}
fread(&p,sizeof(struct tiptop),1,fp);
fclose(fp);
if((fp=fopen("tiptop2.txt","r"))==NULL)
{
printf("還沒有最佳排行!");
exit(1);
}
fread(&q,sizeof(struct tiptop),1,fp);
fclose(fp);
if((fp=fopen("tiptop3.txt","r"))==NULL)
{
printf("還沒有最佳排行!");
exit(1);
}
fread(&r,sizeof(struct tiptop),1,fp);
fclose(fp);
if(p.data==0&&q.data==0&&r.data==0)
{
printf("\t暫無最高分信息!");
printf("\n");
printf("\t是否直接進入游戲?刷新最佳排行信息?\n");
printf("\t1:是\t2:否\n");
printf("\t");
i=0;
scanf("%d",&i);
if(i==1)
{
printf("\t請設置游戲等級: \n");
Game_rank();
Game_main();
}
else
Menu_select();
}
else
{
printf("\t最佳排行:\n");
printf("\t等級\t姓名\t分數\t游戲時間\n");
if(p.data!=0)
{
printf("\t%s\t%s\t%d\t",p.grade,p.name,p.data);
printf("%d—%d—%d\t",p.year,p.month,p.day);
printf("%s\t%d:%d:%d\n",p.week,p.hour,p.minute,p.second);
}
if(q.data!=0)
{
printf("\t%s\t%s\t%d\t",q.grade,q.name,q.data);
printf("%d—%d—%d\t",q.year,q.month,q.day);
printf("%s\t%d:%d:%d\n",q.week,q.hour,q.minute,q.second);
}
if(r.data!=0)
{
printf("\t%s\t%s\t%d\t",r.grade,r.name,r.data);
printf("%d—%d—%d\t",r.year,r.month,r.day);
printf("%s\t%d:%d:%d\n",r.week,r.hour,r.minute,r.second);
}
if(p.data==0)
printf("\t初級暫無最高分信息!\n");
if(q.data==0)
printf("\t中級暫無最高分信息!\n");
if(r.data==0)
printf("\t高級暫無最高分信息!\n");
//重置最佳排行榜
if(p.data!=0&&q.data!=0&&r.data!=0)
{
printf("\t是否重置最佳排行?\n");
printf("\t1:是\t2:否\t");
i=0;
scanf("%d",&i);
if(i==1)
{
p.data=0;
q.data=0;
r.data=0;
if((fp=fopen("tiptop1.txt","w"))==NULL)
{
printf("打開tiptop1.txt文件失敗!");
exit(1);
}
fwrite(&p,sizeof(struct tiptop),1,fp);
fclose(fp);
if((fp=fopen("tiptop2.txt","w"))==NULL)
{
printf("打開tiptop2.txt文件失敗!");
exit(1);
}
fwrite(&q,sizeof(struct tiptop),1,fp);
fclose(fp);
if((fp=fopen("tiptop3.txt","w"))==NULL)
{
printf("打開tiptop3.txt文件失敗!");
exit(1);
}
fwrite(&r,sizeof(struct tiptop),1,fp);
fclose(fp);
}
}
}
}
4.game.c
#include"record.h"
//全局變數
int *c1; //產生的數保存在指針c中
int A,B; // AB均為游戲重要參數
int N; //NUM為需要猜測的數據個數
int TIME; //TIME為猜數字共有的次數
long int S; //S為游戲積分
//****************
//開始游戲中心函數
//****************
void Game_main()
{
FILE *fp;
int time;
if((fp=fopen("C.txt","r"))==NULL)
{
printf("打開C.txt文件失敗!");
printf("\n");
exit(1);
}
fread(&C,sizeof(int),1,fp);
N=C+2;
TIME=11-C;
if(C==1)
{
printf("\t游戲等級為:初級!\n");
}
if(C==2)
{
printf("\t游戲等級為:中級!\n");
}
if(C==3)
{
printf("\t游戲等級為:高級!\n");
}
printf("\t需要猜測的數字位數數為:%d,共有%d次猜測機會!",N,TIME);
printf("\n");
time=Time_command();
Game_result(time);
}
//********************
//獲取系統隨機數字函數
//********************
int *Build_number()
{
int i,j,m;
time_t t;
c1=(int *)malloc(N*sizeof(int));
if(c1==NULL)
{
printf("分配內存錯誤!\n");
printf("\n");
exit(1);
}
srand((unsigned) time(&t));
for(i=0;i<N;i++)
{
m=rand()%10; //產生一個數字
if(i==0)
*c1=m;
else
{
for(j=0;j<i;j++)
{
if(m==*(c1+j)//若原有數據之中已經有了與m相同的數字,則重新產生數字
{
i--;
break;
}
*(c1+i)=m;
}
}
}
printf("\t系統產生的數據為:");
for(i=0;i<N;i++)
printf("*");
printf("\n");
printf("\t您可以開始游戲! 計時開始...\n");
printf("\t不能有重復的數字!\n");
printf("\t數字中間用空格隔開\n");
return c1;
}
//****************************************
//獲取游戲者游戲數據和輸出遊戲進程結果函數
//****************************************
void Game_in_out()
{
int i,j,m;
int n; //游戲者猜測的數字
int a[5]; //游戲者猜測的數據構成的數組
int c[5];
int *p;
p=Build_number();
for(i=0;i<N;i++)
{
c[i]=*(p+i);
}
for(m=0;m<TIME;m++)
{
if(m==(TIME-1))
{
printf("\t**請注意:**\n");
printf("\t**僅剩下一次機會了!**\n");
printf("\t**努力!加油!**\n");
}
printf("\t請輸入第%d次猜測的數字:\t",m+1);
for(j=0;j<N;j++)
{
scanf("%d",&n);
a[j]=n;
}
A=0;
B=0;
for(i=0;i<N;i++)
{
if(a[i]==c[i])
A++;
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(a[i]==c[j]&&i!=j)
B++;
}
}
printf("\t您本次猜測的結果為:\t");
printf("%d A %d B",A,B);
printf("\n");
//游戲成功控制退出猜測程序
if(A==N)
{
m=TIME;
}
}
//TIME改變,記錄游戲總次數的數據
TIME=i;
free(c1);
}
//************
//時間控制函數
//************
int Time_command()
{
int a; //游戲時間
time_t first, second;
first=time(NULL); //獲取系統時間
Game_in_out();
second=time(NULL); //再次獲取系統時間
a=(int)difftime(second,first);
return a;
}
//********************
//游戲結果處理輸出函數
//********************
void Game_result(int m)
{
FILE *fp;
tiptop p;
time_t t;
int S;
int n;
int i=0;
int minute,second;
if(A!=N)
{
S=0;
printf("\tGame over!\n");
printf("\t您本次游戲的積分為:\t%d",S);
printf("\t繼續努力!\n");
printf("\t是否繼續游戲?\n");
printf("\t1:是\t\t\t2:否");
printf("\n");
scanf("%d",&i);
if(i==1)
Game_main();
else
Menu_select();
}
else
{
printf("\t恭喜您游戲成功!");
printf("\n");
minute=m/60;
second=m%60;
printf("\t您本次游戲所用時間為:");
printf("%d分鍾%d秒\n",minute,second);
printf("\n");
//積分
if(C==1)
{
n=11-TIME;
S=n*n*n*10-m;
}
if(C==2)
{
n=10-TIME;
S=n*n*n*n*10-m;
}
if(C==3)
{
n=9-TIME;
S=n*n*n*n*n*10-m;
}
if(S<10)
{
srand((unsigned) time(&t));
S=rand()%100;
}
printf("\t您本次游戲的積分為:\t%d",S);
printf("\n");
}
//判斷是否符合最高分條件
if(C==1)
{
if((fp=fopen("tiptop1.txt","r"))==NULL)
{
printf("打開tiptop1.txt文件失敗!");
printf("\n");
exit(1);
}
fread(&p,sizeof(struct tiptop),1,fp);
fclose(fp);
}
if(C==2)
{
if((fp=fopen("tiptop2.txt","r"))==NULL)
{
printf("打開tiptop2.txt文件失敗!");
printf("\n");
exit(1);
}
fread(&p,sizeof(struct tiptop),1,fp);
fclose(fp);
}
if(C==3)
{
if((fp=fopen("tiptop3.txt","r"))==NULL)
{
printf("打開tiptop3.txt文件失敗!");
printf("\n");
exit(1);
}
fread(&p,sizeof(struct tiptop),1,fp);
fclose(fp);
}
if(S>=(p.data))
Tiptop_record(S);
//提示跳轉
if(C==1)
{
printf("\t您本次游戲等級是初級,是否要進入中級?\n");
printf("\t1:是\t\t\t2:否");
printf("\n\t");
i=0;
scanf("%d",&i);
if(i==1)
{
C=2;
if((fp=fopen("C.txt","w"))==NULL)
{
printf("打開C.txt文件失敗!");
exit(1);
}
fwrite(&C,sizeof(int),1,fp);
fclose(fp);
Game_main();
}
else
Menu_select();
}
if(C==2)
{
printf("\t您本次是中級游戲,是否要進入高級游戲呢?\n");
printf("\t1:是\t\t\t2:否");
printf("\n\t");
i=0;
scanf("%d",&i);
if(i==1)
{
C=3;
if((fp=fopen("C.txt","w"))==NULL)
{
printf("打開C.txt文件失敗!");
exit(1);
}
fwrite(&C,sizeof(int),1,fp);
fclose(fp);
Game_main();
}
else
Menu_select();
}
}
5.record.c
#include"record.h"
//******
//主函數
//******
void main()
{
printf("\n");
printf("********************************************\n");
printf("********************************************\n");
printf(" 歡迎進入猜數字游戲 \n");
printf("\n");
printf("\t設計者: \n");
printf("********************************************\n");
printf("********************************************\n");
printf("\n");
Menu_select();
}
//************
//選擇菜單函數
//************
void Menu_select()
{
while(1)
{
switch(manage_menu())
{
case 0:
printf("輸入有誤,請重新輸入!\n");
break;
case 1:
Game_main();
break;
case 2:
Game_rank();
break;
case 3:
Tiptop_output();
break;
case 4:
Game_explain();
break;
case 5:
printf("\n");
printf("\n");
printf("*************** ** ** **** ** ** ** ** *** \n");
printf("*************** ** ** ** ** **** ** ** ** ***** \n");
printf(" ** ** ** ** ** ** ** ** ** ** ******* \n");
printf(" ** ** ** ** ** ** ** ** ** ** ******* \n");
printf(" ** *********** ************* ** ** ** **** ***** \n");
printf(" ** *********** ************* ** ** ** **** ***** \n");
printf(" ** ** ** ** ** ** ** ** ** ** ***** \n");
printf(" ** ** ** ** ** ** ** ** ** ** *** \n");
printf(" ** ** ** ** ** ** **** ** ** *** \n");
printf(" ** ** ** ** ** ** ** ** ** *** \n");
printf("\n");
printf("Goodbye!\n");
exit(1);
}
}
}
//************
//處理菜單函數
//************
int manage_menu()
{
int n;
printf("\t**************************\n");
printf("\t**\t1:開始游戲\t**\n");
printf("\t**\t2:等級設置\t**\n");
printf("\t**\t3:最佳排行\t**\n");
printf("\t**\t4:游戲說明\t**\n");
printf("\t**\t5:退出遊戲\t**\n");
printf("\t**************************\n");
printf("\t請輸入相應序號選擇相應菜單:");
printf("\t");
scanf("%d",&n);
printf("\n");
if(n<1||n>5)
n=0;
return n;
}
『叄』 c語言課程設計
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
long class_1; //班級
long number; //學號
char name[20]; //姓名
float math; //數學
float c_program; //C語言
float physics; //大學物理
float english; //大學英語
float polity; //政治
float sport; //體育
float summary; //總分
float average; //平均分
}Student;
Student stud[100]; //定義結構體數組變數的大小
int i=0; //i用於記錄輸入的學生的個數
int menu() //菜單函數
{
int a;
printf("***********************學生信息管理系統*************************\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【6】刪除學生的信息\n");
printf("\t\t【7】修改學生的信息\n");
printf("\t\t【8】從文件中讀入數據\n");
printf("\t\t【9】將所有記錄寫入文件\n");
printf("\t\t【0】退出本系統\n");
printf("***********************學生信息管理系統*************************\n");
printf("請選擇你要的操作【0-9】:");
scanf("%d",&a); //讀入一個數
while(a<0 || a>9)
{
printf("輸入錯誤!請重新輸入。\n");
scanf("%d",&a); //輸入錯誤就一直循環!^_^
}
system("cls"); //清屏
return(a); //返回a的值
}
int input(Student stud[]) //輸入學生信息
{
char flag='Y';
while(flag=='y' || flag=='Y') //判斷
{
printf("請輸入該學生的班別:"); //交互輸入學生信息
scanf("%ld",&stud[i].class_1);
printf("請輸入該學生的學號:");
scanf("%ld",&stud[i].number);
printf("請輸入該學生的姓名:");
scanf("%s",&stud[i].name);
printf("請輸入該學生的「數學」分數:");
scanf("%f",&stud[i].math);
printf("請輸入該學生的「C程序設計語言」分數:");
scanf("%f",&stud[i].c_program);
printf("請輸入該學生的「大學物理」分數:");
scanf("%f",&stud[i].physics);
printf("請輸入該學生的「大學英語」分數:");
scanf("%f",&stud[i].english);
printf("請輸入該學生的「體育」分數:");
scanf("%f",&stud[i].sport);
printf("請輸入該學生的「政治」分數:");
scanf("%f",&stud[i].polity);
getchar(); //用於消除回車鍵
stud[i].summary=stud[i].math+stud[i].c_program+stud[i]. physics
+stud[i].english+stud[i].sport+stud[i].polity;
stud[i].average=stud[i].summary/6;
printf("該學生的總分為:%6.2f\t平均分為:%6.2f\n",stud[i].summary,stud[i].average);
i++;
printf("繼續輸入學生信息請按:Y or y,退出請按:N or n.\n");
scanf("%c",&flag); //判斷是否繼續輸入
}
printf("按任意鍵回主菜單\n");
getchar();
system("cls");
return(i);
}
void Display(Student stud[],int n) //顯示所有記錄
{
int k;
if(n==0)
printf("暫無學生記錄!\n");
else
{
printf(" 班別 學號 姓名 數學 C語言 物理 英語 體育 政治 總分 平均分\n");
for(k=0;k<n;k++) //循環輸出
{
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sport);
printf("%7.2f",stud[k].polity);
printf("%7.2f",stud[k].summary);
printf("%8.2f\n",stud[k].average);
}
}
system("pause");
system("cls");
}
void Sort(Student stud[],int i) //按平均分排序
{
int m,n,k; //m,n為循環變數
Student t;
for(m=0;m<i-1;m++) //排序
for(n=m+1;n<i;n++)
if(stud[m].average<stud[n].average)
{
t=stud[m];
stud[m]=stud[n];
stud[n]=t;
}
printf("排序後的順序為:\n");
printf(" 班別 學號 姓名 數學 C語言 物理 英語 體育 政治 總分 平均分\n");
for(k=0;k<i;k++) //循環輸出
{
printf("%7ld",stud[k].class_1);
printf("%7d",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sport);
printf("%7.2f",stud[k].polity);
printf("%7.2f",stud[k].summary);
printf("%8.2f\n",stud[k].average);
}
system("pause");
system("cls");
}
void Search(Student stud[],int i) //查找並顯示一個記錄
{
int p,k; //p為要查找的學生學號,t為循環節,s用來判斷循環是否結束
char flag='y';
while(flag=='y' || flag=='Y')
{
printf("請輸入要查找的學生學號:");
scanf("%d",&p);
getchar();
for(k=0;p!=stud[k].number && k<i;k++);
if(k==i)printf("該學號不存在!\n");
else {
printf("該學生的信息為:\n");
printf(" 班別 學號 姓名 數學 C語言 物理 英語 體育 政治 總分 平均分\n");
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sport);
printf("%7.2f",stud[k].polity);
printf("%7.2f",stud[k].summary);
printf("%8.2f\n",stud[k].average);
}
printf("繼續查找學生信息請輸入:Y or y,退出輸入:N or n\n");
scanf("%c",&flag); //判斷是否繼續輸入
}
system("cls");
}
int Insert(Student stud[],int i) //插入學生的信息
{
char flag='Y';
while(flag=='y' || flag=='Y')
{
printf("請輸入要插入學生的班別:"); //交互輸入學生信息
scanf("%ld",&stud[i].class_1);
printf("請輸入要插入學生的學號:");
scanf("%ld",&stud[i].number);
printf("請輸入要插入學生的姓名:");
scanf("%s",&stud[i].name);
printf("請輸入要插入學生的「數學」分數:");
scanf("%f",&stud[i].math);
printf("請輸入要插入學生的「C程序設計語言」分數:");
scanf("%f",&stud[i].c_program);
printf("請輸入要插入學生的「大學物理」分數:");
scanf("%f",&stud[i].physics);
printf("請輸入要插入學生的「大學英語」分數:");
scanf("%f",&stud[i].english);
printf("請輸入要插入學生的「體育」分數:");
scanf("%f",&stud[i].sport);
printf("請輸入要插入學生的「政治」分數:");
scanf("%f",&stud[i].polity);
getchar();
stud[i].summary=stud[i].math+stud[i].c_program+stud[i]. physics
+stud[i].english+stud[i].sport+stud[i].polity;
stud[i].average=stud[i].summary/6;
printf("該學生的總分為:%6.2f\n",stud[i].summary);
printf("該學生的平均分為:%6.2f\n",stud[i].average);
i++;
printf("繼續輸入學生信息請輸入:Y or y,退出輸入:N or n\n");
scanf("%c",&flag); //判斷是否繼續輸入
}
getchar();
printf("是否需要排序,需要請按『Y』或『y』;不需要請按『N』或『n』.\n");
flag=getchar();
if(flag=='y' || flag=='Y')Sort(stud,i);
system("cls");
return(i);
}
int Delete(Student stud[],int i) //根據輸入的學號刪除學生的信息
{
long s;
int t,p;
char a='Y'; //判斷循環是否繼續
while(a=='y' || a=='Y')
{
printf("請輸入需要刪除學生的學號:\n"); //採用互動式刪除
scanf("%ld",&s);
getchar(); //消除回車鍵的影響
for(t=0;t<i && s!=stud[t].number;t++);
if(s==stud[t].number)
{
for(p=t;p<i;p++)
stud[p]=stud[p+1];
i=i-1;
printf("刪除成功!\n");
}
else printf("沒有找到要刪除的學號!\n");
printf("是否繼續刪除,繼續請按'Y'或'y',退出請按'N'或'n'.\n");
a=getchar(); //判斷是否繼續
getchar(); //消除回車鍵的影響
}
system("cls");
return(i);
}
void change(Student stud[],int i) //修改學生的信息
{
long p=0; //p用來表示要刪除的學生的學號
int k; //k為循環變數
char a='y';
while(a=='y' || a=='Y')
{
printf("\t\t學生信息修改:\n");
printf("請輸入要修改的學生的學號:\n");
scanf("%ld",&p);
for(k=0;p!=stud[k].number && k<i;k++);
if(k==i)printf("無法找到該學生的信息\n");
else {
printf("該學生的信息為:\n");
printf(" 班別 學號 姓名 數學 C語言 物理 英語 體育 政治 總分 平均分\n");
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sport);
printf("%7.2f",stud[k].polity);
printf("%7.2f",stud[k].summary);
printf("%8.2f\n",stud[k].average);
printf("請輸入該學生的新信息:\n");
printf("請輸入該學生的班級:"); //交互輸入學生信息
scanf("%d",&stud[k].class_1);
printf("請輸入該學生的學號:");
scanf("%d",&stud[k].number);
printf("請輸入該學生的姓名:");
scanf("%s",&stud[k].name);
printf("請輸入該學生的「數學」分數:");
scanf("%f",&stud[k].math);
printf("請輸入該學生的「C程序設計語言」分數:");
scanf("%f",&stud[k].c_program);
printf("請輸入該學生的「大學物理」分數:");
scanf("%f",&stud[k].physics);
printf("請輸入該學生的「大學英語」分數:");
scanf("%f",&stud[k].english);
printf("請輸入該學生的「體育」分數:");
scanf("%f",&stud[k].sport);
printf("請輸入該學生的「政治」分數:");
scanf("%f",&stud[k].polity);
getchar();
stud[k].summary=stud[k].math+stud[k].c_program+stud[k]. physics
+stud[k].english+stud[k].sport+stud[k].polity;
stud[k].average=stud[k].summary/6;
printf("修改成功!\n");
}
printf("是否繼續修改,繼續請按'Y'或'y',退出請按'N'或'n'.\n");
a=getchar(); //判斷是否繼續
}
system("pause");
system("cls");
}
int Read(Student stud[],int i) //從文件中讀入學生信息
{
int k=i;
FILE *fp; //定義一個文件類型的指針
char filename[20]; //定義文件名
printf("請輸入文件名:\n");
scanf("%s",&filename); //輸入文件名
if((fp=fopen(filename,"rb"))==NULL) //打開文件
{
printf("無法打開該文件!\n"); //打開失敗信息
return 0;
}
printf("從文件%s中讀入的數據為:\n",filename);
printf(" 班別 學號 姓名 數學 C語言 物理 英語 體育 政治 總分 平均分\n");
while(!feof(fp))
{
fread(&stud[k],sizeof(Student),1,fp);
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sport);
printf("%7.2f",stud[k].polity);
printf("%7.2f",stud[k].summary);
printf("%8.2f\n",stud[k].average);
k++;
}
fclose(fp);
printf("讀入成功,\n");
system("pause");
system("cls");
return(k);
}
void Save(Student stud[],int i) //將所有記錄寫入文件
{
int k=0;
FILE *fp; //定義文件指針
char filename[20]; //定義文件名
printf("請輸入你要存儲學生信息的文件名:"); //輸入文件名
scanf("%s",&filename);
if((fp=fopen(filename,"wb"))==NULL) //打開文件
{
printf("無法打開該文件!\n"); //打開失敗信息
return;
}
printf("保存到文件%s里的信息為:\n",filename);
while(k<i)
{
fwrite(&stud[k],sizeof(Student),1,fp);
printf("%7ld",stud[k].class_1);
printf("%7d",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sport);
printf("%7.2f",stud[k].polity);
printf("%7.2f",stud[k].summary);
printf("%8.2f\n",stud[k].average);
k++;
}
fclose(fp);
printf("信息保存成功,");
system("pause");
system("cls");
}
int main() //主函數
{
int n=0;
while(1)
{
switch(menu()) //選擇判斷要執行的語句
{
case 1:
printf("\n*******輸入學生信息*******\n");
//輸入學生信息
n=input(stud);break;
case 2:
printf("\n*******顯示所有學生的信息*******\n");
//顯示所有學生的信息
Display(stud,n);break;
case 3:
printf("\n*******按平均分升降排序*******\n");
//給學生成績排序
Sort(stud,n);break;
case 4:
printf("\n*******根據學生的學號查找學生的信息*******\n");
//根據輸入的學號查找學生的信息
Search(stud,n);break;
case 5:
printf("\n*******插入學生的信息*******\n");
//插入學生的信息
n=Insert(stud,n);break;
case 6:
printf("\n*******刪除學生的信息*******\n");
//刪除學生的信息
n=Delete(stud,n);break;
case 7:
printf("\n*******修改學生的信息*******\n");
//修改學生的信息
change(stud,n);break;
case 8:
printf("\n*******從文件中讀入數據*******\n");
//從文件中讀入數據
n=Read(stud,n);break;
case 9:
printf("\n*******將所有記錄寫入文件*******\n");
//將所有記錄寫入文件
Save(stud,n);break;
case 0:
printf("\n*******感謝您的使用*******\n");
//結束程序
exit(0);
}
}
return 0;
}
『肆』 c語言入門教學
樓主,你可以去編程入門網,那裡有挺多知識點的,很多語言都有,很適合初學者,你也可以去CSDN,那裡有很多源代碼提供下載,也有論壇,呵呵,你也不要忽視網路貼吧,知道,貼吧是學習很多課本沒有東西的地方,知道,你需要看解決答案,這樣很有收獲,你也可以去中國編程網,不過,我覺得一樓也是有道理的,看看書掌握知識點,網上我覺得主要還是提高的地方哦……呵呵……關於怎麼學,我是這么過來的,每看一節書,做一節課後習題,其實初學主要還是學習語法和演算法(解決問題的方法),多上機自己寫程序,寫不出來看答案的演算法,自己再寫一邊,關鍵這個階段還是積累為主,基本知識學好了,可以學深入編程,不過你需要有熟悉的語法,可以寫一些小程序:學生成績管理系統等等,就過關了,然後可以學習鏈表,圖像編程,等等高級編程……呵呵……努力一定有回報的……加油吧…
『伍』 求《C語言實戰105例》全文免費下載百度網盤資源,謝謝~
《C語言實戰105例》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/1SUsq3lJF_9SOjSTGnuiUFw
簡介:C語言實戰105例共匯集105個實例,內容循序漸進,通過實例進許可證C語言編程。全書分為8篇,包括基礎篇、數值計算與數據結構篇、文本屏幕與文件操作篇、病毒與安全篇、圖形篇、系統篇、游戲篇、綜合篇,基本涵蓋了目前C語言編程的各個方面。