1. c語言演算法有什麼比較好的參考文獻
可以看一下演算法分析與數據結構
2. 用C語言編寫一個QQ通訊錄管理系統設計
課程設計課程設計名稱:數據結構課程設計專業班級:計科××××學生姓名:×××學號:××××××指導教師:課程設計時間:計算機應用技術專業課程設計任務書學生姓名×××專業班級計科××學號××××題目××××××××××課題性質A課題來源D指導教師同組姓名無主要內容學習掌握並熟練運用C語言進行程序設計;針對具體應用問題,選擇、設計和實現合適的抽象數據類型;進行簡單的需求分析,給出設計方案。任務要求綜合運用和融化所學理論知識,提高分析和解決實際問題的能力,達到培養良好程序設計能力和習慣的目的,為開發滿足問題要求的小型應用軟體奠定基礎,達到軟體工程的綜合性基礎訓練的目的。完成需求分析報告,報告中對關鍵部分給出圖表說明。要求格式規范,工作量飽滿。參考文獻《數據結構(C語言版)》嚴蔚敏清華大學出版社《C語言程序設計》(第三版)譚浩強清華大學出版社審查意見指導教師簽字:教研室主任簽字:年月日1需求分析手機通訊錄系統,以聯系人為節點建立偽隊列(有頭尾指針、且可從表中間進行操作),要實現一下基本功能。增加聯系人刪除聯系人修改聯系人清空通訊錄查找聯系人按分組顯示聯系人顯示全部聯系人退出系統2概要設計(1)程序總體框架如圖1所示:圖1程序框架圖(2)序中各函數程簡單說明見如表1函數說明所示:返回值函數名參數表函數說明提供客戶intmainvoid主函數是voidinitAddressBookLinkQueue&Q初始化通訊錄否boolenAddressBookLinkQueue&Q增加聯系人是boolupdateLinkQueue&Q修改聯系人是booldelPersonLinkQueue&Q刪除聯系人是boolfindByNameLinkQueue&Q查找聯系人是boolfindByGroupLinkQueue&Q按組顯示是voiddisAllLinkQueue&Q顯示全部聯系人是boolclearAddressBookLinkQueue&Q清空通訊錄是表1函數說明(2)對程序中的各個函數功能的描述①主函數main:系統開始、結束界面的顯示、各個功能函數的調用、轉換以及參數的傳遞、定義通訊頭結點並傳遞給各個功能函數②初始化通訊錄函數initAddressBook:初始化主函數傳入的頭結點,即初始化通訊錄,此系統採用偽隊列,有頭、尾指針,可從中間進行刪除操作③增加聯系人函數enAddressBook增加聯系人到通訊錄的尾部,返回增加是否成功。④修改聯系人函數按照用戶提供的聯系人姓名修改聯系人所有信息,返回修改是否成功。⑤刪除聯系人按照用戶指定的聯系人姓名刪除相應聯系人信息,返回刪除是否成功。⑥查找聯系人按照用戶提供的聯系人姓名查找第一個合法姓名對應的信息,查找成功則顯示信息,失敗則提示無此聯系人,返回是否查找到。⑦按組顯示函數按照用戶提供的分組名稱,查找組中聯系人,若存在則全部輸出,若不存在則提示無此分組,返回是否超找到合法聯系人。⑧顯示全部聯系人函數顯示當前通訊錄中所有聯系人的信息,若為空通訊錄,則顯示無聯系人。⑨清空通訊錄刪除所有聯系人信息,返回是否成功!⑩通訊錄人數函數判斷通訊錄當前聯系人數量,返回之,此函數主要是為清空通訊錄函數所調用,故不提供給用戶。計3運行環境1)軟體環境操作系統:Windows72)硬體環境處理器:IntelPentium166MX或更高內存:32MB以上硬碟空間:1GB以上顯卡:SVGA顯示適配4開發工具和編程語言MicrosoftvisualC++C語言5詳細設//主函數intmain(){LinkQueueQ;initAddressBook(Q);intflag=0;while(flag!=8){printf("※※※※※主※※※※※菜※※※※※單※※※※※\n");printf("※1、增加聯系人2、刪除聯系人※\n");printf("※3、修改聯系人4、清空通訊錄※\n");printf("※5、查找聯系人6、按組顯示※\n");printf("※7、顯示全部聯系人8、退出※\n");printf("※※※※※※※※※※※※※※※※※※※※※※※\n");printf("請輸入編號(1-8):\n");scanf("%d",&flag);if(flag8){printf("輸入錯誤請重新輸入!\n");continue;}else{switch(flag){case1:if(enAddressBook(Q))printf("增加聯系人成功!\n");elseprintf("增加聯系人失敗!\n");break;case2:if(delPerson(Q))printf("刪除聯系人成功!\n");elseprintf("聯系人刪除失敗!\n");break;case3:if(update(Q))printf("修改聯系人成功!\n");elseprintf("修改聯系人失敗!\n");break;case4:if(clearAddressBook(Q))printf("通訊錄已清空!\n");elseprintf("通訊錄清空失敗!\n");break;case5:findByName(Q);break;case6:findByGroup(Q);break;case7:disAll(Q);break;case8:system("cls");break;}}}printf("※※※※※感謝您使用本系統!※※※※※※\n");return0;}//初始化通訊錄voidinitAddressBook(LinkQueue&Q){Q.front=Q.rear=(QNode*)malloc(sizeof(QNode));if(!Q.front)exit(1);elseQ.front->next=NULL;}//清空通訊錄boolclearAddressBook(LinkQueue&Q){system("cls");while(addressBookLength(Q)!=0){QNode*p;p=Q.front->next;Q.front->next=p->next;if(p==Q.rear)Q.rear=Q.front;free(p);}returntrue;}//通訊錄當前人數intaddressBookLength(LinkQueue&Q){inti=0;QNode*p;p=Q.front;if(Q.front==Q.rear)i=0;else{while(p!=Q.rear){p=p->next;i++;}}returni;}//刪除聯系人booldelPerson(LinkQueue&Q){char_name[20];system("cls");printf("請輸入要刪除的聯系人的姓名:\n");scanf("%s",_name);QNode*p,*q;if(Q.front==Q.rear){printf("通訊錄為空!\n");returnfalse;}else{p=Q.front;q=Q.front->next;while(q!=Q.rear){if(strcmp(q->name,_name)==0){p->next=q->next;free(q);//刪除節點returntrue;}else{p=p->next;q=q->next;}}if((strcmp(q->name,_name)==0)){free(q);Q.front=Q.rear;returntrue;}else{printf("無此聯系人!\n");returnfalse;}}}//查找聯系人boolfindByName(LinkQueue&Q){system("cls");if(Q.front==Q.rear){printf("手機中無聯系人!\n");returnfalse;}else{char_name[20];printf("請輸入要查詢的聯系人姓名:\n");scanf("%s",_name);QNode*p;p=Q.front->next;while(p->next!=NULL){if(strcmp(p->name,_name)==0){printf("姓名:%s號碼:%s分組:%s\n",p->name,p->tel,p->group);returntrue;}p=p->next;}if(strcmp(p->name,_name)==0){printf("姓名:%s號碼:%s分組:%s\n",p->name,p->tel,p->group);returntrue;}else{printf("查無此人!\n");returnfalse;}}}//按組顯示聯系人boolfindByGroup(LinkQueue&Q){system("cls");if(Q.front==Q.rear){printf("手機中無聯系人!\n");returnfalse;}else{char_group[20];printf("請輸入要查詢的分組:\n");scanf("%s",_group);QNode*p;p=Q.front->next;while(p->next!=NULL){if(strcmp(p->group,_group)==0){printf("姓名:%s號碼:%s\n",p->name,p->tel);}p=p->next;}if(strcmp(p->group,_group)==0){printf("姓名:%s號碼:%s\n",p->name,p->tel);returntrue;}else{printf("無此分組!\n");returnfalse;}}}//增加聯系人boolenAddressBook(LinkQueue&Q){system("cls");QNode*p;p=(QNode*)malloc(sizeof(QNode));if(!p)returnfalse;else{printf("請輸入聯系人姓名:\n");scanf("%s",p->name);printf("請輸入聯系人號碼:\n");scanf("%s",&p->tel);printf("請輸入聯系人分組:\n");scanf("%s",p->group);if(Q.front->next==NULL){Q.front->next=p;Q.rear=p;Q.rear->next=NULL;}else{p->next=NULL;Q.rear->next=p;Q.rear=p;}returntrue;}}//修改聯系人boolupdate(LinkQueue&Q){system("cls");if(Q.front==Q.rear){printf("手機中無聯系人!\n");returnfalse;}else{char_name[20];printf("請輸入要修改的聯系人姓名:\n");scanf("%s",_name);QNode*p;p=Q.front->next;while(p->next!=NULL){if(strcmp(p->name,_name)==0){printf("請輸入新聯系人姓名:\n");scanf("%s",p->name);printf("請輸入新聯系人號碼:\n");scanf("%s",&p->tel);printf("請輸入新聯系人分組:\n");scanf("%s",p->group);returntrue;}p=p->next;}if(strcmp(p->name,_name)==0){printf("請輸入新聯系人姓名:\n");scanf("%s",p->name);printf("請輸入新聯系人號碼:\n");scanf("%s",&p->tel);printf("請輸入新聯系人分組:\n");scanf("%s",p->group);returntrue;}else{printf("查無此人!\n");returnfalse;}}}//顯示所有聯系人voiddisAll(LinkQueue&Q){system("cls");inti=0;QNode*p;p=Q.front->next;if(Q.front==Q.rear)printf("無聯系人!\n");else{printf("姓名號碼分組\n");while(p!=NULL){printf("%15s%15s%15s\n",p->name,p->tel,p->group);p=p->next;}}}6調試分析1.測試中的問題舉例:在測試刪除聯系人函數時發現無論通訊錄中現存多少條記錄只要刪除一條之後,通訊錄就會被清空,經過檢查發現是刪除函數中的條件控制設置有錯,導致只要一刪除一個聯系人就會事頭結點與尾結點指向同一個,導致再顯示聯系人時顯示無聯系人。經過調整已處理好。2.演算法改進設想舉例:程序中還有很多地方不能很好的模擬通訊錄的功能,比如在增肌聯系人時,不管原來新聯系人姓名是否已存在,都會被加入通訊錄,這樣一來就有可能重復記錄。此外在查找聯系人時只要查找到一個合法記錄就會中斷查找操作,如此有可能導致記錄的漏查。結合以上兩點應優化增加查找聯系人演算法,在存入之間進行防重判斷。7測試結果1.測試數據舉例:姓名手機號分組張三12345678910家人李四12345678911朋友王五12345678912朋友趙六12345678913同學表2測試數據舉例2.按如下順序進行測試:1)將測試數據逐條輸入通訊錄(測試增加聯系人函數)2)顯示全部聯系人(測試顯示聯系人函數)3)選擇一個聯系人進行修改(測試修改聯系人函數)4)顯示全部聯系人(驗證修改聯系人函數是否有效)5)選擇一個聯系人進行查找(測試查找聯系人函數)6)選擇一個多人分組進行按分組顯示(測試按分組顯示函數)7)選擇清空聯系人(測試清空聯系人函數)8)顯示全部聯系人(驗證清空聯系人函數)9)選擇退出(退出程序)3、按照如上提供的測試步驟得出以下結果運行圖:主菜單如圖2所示:圖2運行示例圖a1)在菜單中選擇「1」將測試數據逐條輸入通訊錄,如圖3圖3運行示例圖b2)在菜單中選擇「7」顯示全部聯系人,如圖4圖4運行示例圖c3)在菜單中選擇「3」選擇一個聯系人進行修改,如圖5圖5運行示例圖d4)在菜單中選擇「7」顯示全部聯系人,如圖6圖6運行示例圖e5)在菜單中選擇「5」選擇一個聯系人進行查找,如圖7圖7運行示例圖f6)在菜單中選擇「6」選擇一個多人分組進行按分組顯示,如圖8圖8運行示例圖g7)在菜單中選擇「4」清空聯系人,如圖9圖9運行示例圖h8)在菜單中選擇「7」顯示全部聯系人,如圖10圖10運行示例圖i9)在菜單中選擇「8」,退出,如圖11圖11運行示例圖j參考文獻[1]嚴蔚敏,《數據結構(C語言版)》清華大學出版社[2]譚浩強.《C語言程序設計》(第三版)清華大學出版社[3]PeterVanDerLinden,C專家編程,人民郵電出版社[4]KennethA.ReekC和指針,人民郵電出版社心得體會通過這次數據結構實踐作業,我更深刻的體會到了C語言的語句簡潔性、緊湊性,與數據結構思想對於一個程序編碼順利進行的重要性。語言是程序的骨肉,而數據結構和演算法即使程序的靈魂,要想成功的編寫程序必須選好合適的數據結構,比如這次課程設計中,最開始我准備用普通的線性表進行設計,後來發現那樣很不方便,後來改為用「偽隊列」之後就方便了許多。另外,我覺得比較重要的一點是在編復雜程序時要有宏觀思想,想從整體把握設計好各個板塊的調用關系,最好先做出一個流程圖,再按照這個總體設想進一步具體、細化!這樣才不會在需要調用其它函數時手忙腳亂!此外,進行如上所述的操作前提都是以扎實的語言基礎做為前提的,在最開始的代碼編輯階段,我曾被指針很深的困擾,後來對此一節找了些資料進行「補課」,自己也進行的深入的理解,後來才逐漸順利起來!信息科學與工程學院課程設計成績評價表課程名稱:數據結構課程設計設計題目:×××××專業:計科班級:×××姓名:×××學號:××××××序號評審項目分數滿分標准說明1內容思路清晰;語言表達准確,概念清楚,論點正確;實驗方法科學,分析歸納合理;結論嚴謹,設計有應用價值。任務飽滿,做了大量的工作。2創新內容新穎,題目能反映新技術,對前人工作有改進或突破,或有獨特見解3完整性、實用性整體構思合理,理論依據充分,設計完整,實用性強4數據准確、可靠數據准確,公式推導正確5規范性設計格式、繪圖、圖紙、實驗數據、標準的運用等符合有關標准和規定6紀律性能很好的遵守各項紀律,設計過程認真;7答辯准備工作充分,回答問題有理論依據,基本概念清楚。主要問題回答簡明准確。在規定的時間內作完報告。總分綜合意見指導教師年月日
3. C語言--設計一個簡易的學生信息管理系統程序
完全按照你的要求寫的,編譯運行無誤:
#include
<time.h>
#include<stdio學生成績管理系統【問題描述】用c語言編寫一個簡單的學生信息管理程序,能實現
4. 利用c語言設計簡單的小學生算術自測系統,求大神編寫程序
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUMBER 10/*定義數組項目的個數為一個符號常量*/
int Num1[10]= {0},Num2[10]= {0},Pos1=0,Pos2=0;
/*定義兩個數組來保存已經出現的情況*/
int main()
{
int putquestion();/*聲明出題函數*/
int questionnum=10;/*聲明變數*/
int i=1;
printf("Please input number of question:");
scanf("%d",&questionnum);
int answer[NUMBER];/*聲明一個數組,用於儲存學生的答案*/
int rightanswer[NUMBER];/*聲明一個數組,用於儲存正確答案*/
for(i=1; i<=questionnum; i++)
{
rightanswer[i-1]=putquestion();
scanf("%d",&answer[i-1]);
}
for(i=1; i<=NUMBER; i++)
printf("\n%d%5d",answer[i-1],rightanswer[i-1]);
}
bool exist(int goal,int *Num)
{/*檢查數字goal是否已經出現在Num數組裡面*/
int i;
for(i=0; i<Pos1; i++)
if(goal==Num[i])
return true;
return false;
}
int putquestion()/*此函數用於出題*/
{
int randValue;
int num1;
int num2;
int correctanswer;
srand((int)time(NULL));
randValue=1+rand()%4;
num1=1+rand()%99;
num2=1+rand()%99;
switch(randValue)
{
case 1:/*加法作業*/
while(num1+num2>=100||exist(num1,Num1)&&exist(num2,Num2))
{/*當滿足該條件(滿足題目要求且兩個數同時出現過)時繼續循環*/
num1=1+rand()%99;
num2=1+rand()%99;
}
Num1[Pos1++]=num1;
Num2[Pos2++]=num2;
printf("\n%d+%d=",num1,num2);
correctanswer=num1+num2;
break;
case 2:/*減法作業*/
while(num1-num2<0||exist(num1,Num1)&&exist(num2,Num2))
{
num1=1+rand()%99;
num2=1+rand()%99;
}
Num1[Pos1++]=num1;
Num2[Pos2++]=num2;
printf("\n%d-%d=",num1,num2);
correctanswer=num1-num2;
break;
case 3:/*乘法作業*/
while(num1*num2>=100||exist(num1,Num1)&&exist(num2,Num2))
{
num1=1+rand()%99;
num2=1+rand()%99;
}
Num1[Pos1++]=num1;
Num2[Pos2++]=num2;
printf("\n%d*%d=",num1,num2);
correctanswer=num1*num2;
break;
case 4:/*除法作業*/
while(num1%num2!=0||exist(num1,Num1)&&exist(num2,Num2))
{
num1=1+rand()%99;
num2=1+rand()%99;
}
Num1[Pos1++]=num1;
Num2[Pos2++]=num2;
printf("\n%d/%d=",num1,num2);
correctanswer=num1/num2;
break;
}
return(correctanswer);
}
5. c語言程序設計參考文獻
《c primer plus》 《c 演算法》 《高質量c編程指南》 《c語言核心技術》 《C語言深度剖析》 《徹底搞定c指針》
6. c語言程序設計 參考文獻
C語言程序設計實際上是一個非常艱難的事情,因為很多人在這方面做了許多的嘗試,當然了,作為一種新的一種格式,請要學會這種技術也是一個非常困難的事情,當然在很多時候,我們都會在這個事情要做很多的努力,畢竟這種程序設計一旦做好的話,確實有很大的前途,但是想要整體的了解確實是非常困難的事情,所以說想要了解很多。c語言程序設計方面的知識,那麼想要了解的文獻就非常的多了,建議你還是從最基礎的一些學科開始練習,因為這些基礎的參考文獻才是最有用的,比如說c語言入門。課程300級,這個就是非常有用的一個基礎類書籍,這部書籍其實你自己好好的去看一下,基本上有一些關鍵的一些技術就能夠掌握了,但是這種技術的掌握只是一個初步的階段。當你把這個他會之後,再看一些更深層次的創設經驗書籍,這些書籍就會給你說很多相關的專業的知識,當你看好上面的那個基礎書籍之後,那麼再看這些就非常的明顯了,當然了,在這些研究的時候,你還是要有更多的毅力,暑假給自己設定好一個目標,當你看完一個基礎書籍之後,再去尋找另一個。要知道這種語言程序設計是非常枯燥的,如果沒有一個明確的目標,就會陷入一個非常尷尬的設計之中。所以說在這樣的情況之下只要你自己考慮好才能夠讓自己的整個的事業和工作做得更好這種設立的時候,一定要讓自己有更多的目標,從而才能過上自己,在目標的達成上做到一定的發展,從而就會讓自己在整個的語言程序設計方面處取得更好的戰績,可多人在學習的時候,就是因為剛開始的基礎打的不牢銬,所以說後來在關鍵的技術方面卻反而是落下了很多,所以說上面給你推薦的兩部書記一定要重點去參考,這樣的情況下,你才會獲得成功,假設如果自己不去好好的努力,反而是喜歡好高騖遠的話,那麼在語言程序設計方面就很難取得突破了,因為這方面的基礎知識是非常必要的,也是非常重要的,如果你能堅持下來的話,就會獲得成功,如果你自己堅持不下來,而且沒有這樣的耐心那麼你最好提前放棄因為學習對於每一個人來說要根據自己的個性如果的個性不適合這種語言程序設計的話那麼就要離開畢竟這是一個非常枯燥的這種設立的時候,一定要讓自己有更多的目標,從而才能過上自己,在目標的達成上做到一定的發展,從而就會讓自己在整個的語言程序設計方面處取得更好的戰績,可多人在學習的時候,就是因為剛開始的基礎打的不牢銬,所以說後來在關鍵的技術方面卻反而是落下了很多,所以說上面給你推薦的兩部書記一定要重點去參考,這樣的情況下,你才會獲得成功,假設如果自己不去好好的努力,反而是喜歡好高騖遠的話,那麼在語言程序設計方面就很難取得突破了,因為這方面的基礎知識是非常必要的,也是非常重要的,如果你能堅持下來的話,就會獲得成功,如果你自己堅持不下來,而且沒有這樣的耐心,那麼你最好提前放棄,因為學習對於每一個人來說,要根據自己的個性,如果的個性不適合這種語言程序設計的話,那麼就要離開,畢竟這是一個非常枯燥的學問,想要在短期內獲得成功是完全不可能的,而是需要長時間,而且還需要更多的精力才能夠成功,所以說在這樣的情況下,你必須要在長期打仗的基礎上,還要不斷地去努力提高自己其他方面的知識,所以說是一個艱難的過程,你想要完全實現的話,那麼就需要自己做更多的努力了,所以在這方面自己一定要更加的去研究,從基礎上去了解,這樣才能夠慢慢的讓自己的這種語言是設計程序能力慢慢的吐錢出來,當然這需要一個很漫長的過程,需要你的堅持。
7. C語言簡單的英文詞典排版系統的實現
#include "stdio.h" #include "stdlib.h" #include "string.h" #include "ctype.h" #define ROWS 256 #define COLS 32 static FILE *fp; static char a[ROWS][COLS]; char get_option(void); int b(int count); void c(char *pt[], int count); int check(char arr[], int count); void storage(char *pt[], int count); int main(void) { int i,count; int start; char *pt[ROWS]; char ch, len; char input; if((fp=fopen("words.txt","a+"))==NULL) { fputs("不能打開或建立文件!\n",stderr); exit(1); } fseek(fp,0L,SEEK_END); start=(int)ftell(fp)/32; count=start; rewind(fp); if(fread(a,32*sizeof(char),start,fp)==0) { i=0; puts("請輸入單詞(每行一個),在新行輸入END結束輸入:"); while(i<ROWS&&scanf("%s", a[i])==1) { fflush(stdin); if(strncmp(a[i],"END",3)==0) { count+=i; break; } if(check(a[i], i)) continue; i++; } } puts("您要做些什麼?"); puts("a. 顯示已有的單詞 b. 添加新單詞"); puts("c. 對已有的單詞進行排序 d. 退出"); while((input=get_option())!='d') { if(input=='a') { puts("已有的單詞:"); for(i=0;i<count;i++) { printf(" "); puts(a[i]); } } if(input=='b') { puts("請輸入新的單詞(每行一個),在新行輸入END結束輸入: "); count=b(count); } if(input=='c') { puts("對單詞進行排序:"); c(pt, count); for(i=0;i<count;i++) { printf(" "); puts(pt[i]); } } puts("還要做些什麼?"); } storage(pt,count); fclose(fp); puts("再見!"); return 0; } char get_option(void) { char ch; while((ch=getchar())<'a'||ch>'d') { while((ch=getchar())!='\n') ; puts("請輸入a,b,c或者d."); } fflush(stdin); return ch; } int b(int count) { int i; i=count; while(i<ROWS&&scanf("%s", a[i])==1) { fflush(stdin); if(check(a[i], i)) continue; if(strncmp(a[i],"END",3)==0) { count=i; break; } i++; } return count; } void c(char *pt[], int count) { int i,j; char *temp; for(i=0;i<ROWS;i++) pt[i]=a[i]; for(i=0;i<count;i++) for(j=i+1;j<count;j++) { if(strcmp(pt[i],pt[j])>0) { temp=pt[i]; pt[i]=pt[j]; pt[j]=temp; } } } int check(char arr[], int count) { int i; int flag=0; for(i=0;i<strlen(arr);i++) if(isalpha(arr[i])==0) { printf("%s不是一個單詞.\n",arr); flag=1; break; } for(i=0;i<count;i++) if(strncmp(a[i],a[count],strlen(a[count])+1)==0) { puts("重復的單詞!"); flag=1; } return flag; } void storage(char *pt[], int count) { int i,j; char ptr[ROWS][COLS]; c(pt, count); for(i=0;i<count;i++) for(j=0;pt[i][j]!='\0';j++) ptr[i][j]=pt[i][j]; fp=fopen("words.txt","w+"); rewind(fp); fwrite(ptr,32*sizeof(char),count,fp); }
8. 萬分著急!!!求關於C語言的文獻綜述
參考文獻
註:括弧內的書名是英文原名。斜體字的 「 中 」 表示有中文版, 「 英 」 表示有英文影印版, 「E」 表示有英文電子版, 「 電 」 表示有中文電子版(不包括超星格式),有刪除線的表示該版本已絕版。請不要向我要索要電子版,並且大部分電子版屬於盜版,慎重下載。同時因為世界總在變化,我不能保證你讀到此文時這些信息依然有效。
[Deitel94] H. M. Deitel ,《 C 程序設計教程( C How to Program )》第二版,中。書中錯誤不少,不知道是原版的問題還是翻譯的問題,但至少翻譯版的排版一團糟,有點糟蹋好書了。
[Prata04] Stephen Prata ,《 C Primer Plus ( C Primer Plus )》第五版,中 E 。 「Primer」 的名頭太大了,以至於中文版乾脆不翻譯書名了。
[Kelley97] Al Kelley 、 Ira Pohl ,《 C 語言教程( A Book on C: Programming in C )》,英。
[Roberts94] Eric S. Roberts ,《 C 語言的科學與藝術( The Art and Science of C: A Library Based Introction to Computer Science )》,中英。雖然另類,但有很多創新值得回味。我正在學習他把圖形庫引入 C 語言教學的方法。
[Harbison02] Harbison 、 Steele ,《 C 語言參考手冊( C: A Reference Manual )》第五版,英。其實,這本書是有中文版的,但為了您的健康,還是忘掉他吧,阿門 ……
[Kernighan88] Kernighan 、 Ritchie ,《 C 程序設計語言( The C Programming Language )》第二版,中英 E 。這本書被簡稱為 「K&R2」 ,並被尊稱為 C 語言的 「 聖經 」 。 Ritchie 就是 C 語言的爸爸。
[C99] ISO/IEC 9899:1999 , C 標准 1999 年版, E 。被簡稱為 C99 。可以這樣描述它: 「1. C99 永遠是對的; 2. 如果 C99 錯了,請參看第一條。 」 可笑的是,我們的國家計算機等級考試二級考試的很多題目都是違背 C99 的。相信 Ritchie 來考二級也會被郁悶住。
[Kernighan99] Kernighan 、 Pike ,《程序設計實踐( The Practice of Programming )》,中英電。中英文對照閱讀,又學知識又練英語。
[Linden94] Peter van der Linden ,《 C 專家編程( Expert C Programming )》,中 E 。這是一本行文非常幽默的書(可惜譯文版把很多幽默都搞丟了,這也是沒辦法的事情),因為書面上印著一條腔棘魚,所以它在業界被戲稱為 「 魚書 」 。
[Maguire93] Steve Maguire ,《編程精粹 — Microsoft 編寫優質無錯 C 程序秘訣( Writing Solid Code: Microsoft's Techniques for Developing Bug-Free C Programs )》, E 電。網上很多地方傳播的電子版寫的名字是《 Write Clean Code 》,這里替 Maguire 澄清一下。
[Bryant02] Bryant 、 O』Hallaron ,《深入理解計算機系統( Computer Systems: A Programmer』s Perspective )》,中英 E 。我一定要說,這本書的中譯本是為數不多的翻譯精品。
[Koenig89] Andrew Koenig ,《 C 陷阱與缺陷( C Traps and Pitfalls )》,中 E 電。因為年代久遠,書中有些觀點已經不合時宜,正好用來練習邊讀邊批判。
[ 林銳 03] 林銳、韓永泉,《高質量程序設計指南 ——C++/C 語言》第二版,中電。我覺得這本書錯誤觀點很多很多,正確的也很多很多,歡迎發表你的看法。
[Weiss96] Mark Allen Weiss ,《數據結構與演算法分析 ——C 語言描述( Data Structures and Algorithm Analysis in C )》第二版,中。
[Cormen01] Cormen 、 Leiserson 、 Rivest 、 Stein ,《演算法導論( Introction to Algorithms )》第二版,英 E 。
[Knuth98] Donald Knuth ,《計算機程序設計藝術( The Art of Computer Programming )》 I 、 II 、 III 卷,中英。凡發現書中錯誤的第一個讀者都將得到作者親筆簽發的 2.56 美元的支票。 Knuth 退隱後閑賦在家,江湖風傳第 IV 卷馬上出版,他正在寫第 V 卷(計劃一共寫 VII 卷)。但願你不要讓 Knuth 的寫作速度大於你的閱讀速度。
9. 用c語言寫個學術文獻管理系統
這玩意用到窗體編程和資料庫才比較正規。很麻煩的,代碼量至少也快2000行了。
不過看你題目要求是簡化版的,你要是只是水一水。去CSDN找找吧。
5分沒人給你寫的。
10. 急!求大神!!!利用C語言設計一個簡易的學生信息管理系統,包括 學號 姓名 性別 年齡四項。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXLEN 100
#define Null 0
typedef struct node {
int num; // 學號
char name[MAXLEN]; // 姓名
struct node *next; // 指針域
}list;
list *creat()
{
list *head,*p,*r;
int i,n; // n 為學生人數
head=(list *)malloc(sizeof(list));
head->next=Null;
r=head;
printf("請輸入學生人數.\n");
scanf("%d",&n);
for(i=1;i<=n;i++) {
p=(list *)malloc(sizeof(list));
printf("請輸入學生學號:\n");
scanf("%d",&p->num);
printf("請輸入學生姓名:\n");
scanf("%s",&p->name);
p->next=Null;
r->next=p; // 這個地方我總是不明白,是怎樣讓結點下移一個的呢?
r=r->next;
}
return (head);
}
void find (list *h)
{
int k; // 要找的學生學號
list *p;
p=h->next;
printf("請輸入要查找的學生學號:\n");
scanf("%d",&k);
while (p && p->num!=k)
p=p->next;
if(p) {
printf("學號\t姓名\t\n");
printf("%d\t%s\t%d\n",p->num,p->name,p->score);
}
else
printf("目標沒找到\n");
}
list *del (list *h)
{
int k; // 要刪除的學生學號
list *p,*q; // 為什麼要兩個指針呢?
q=h;
p=h->next;
printf("請輸入待刪除的學生學號:\n");
scanf("%d",&k);
while (p && p->num!=k) {
q=p;
p=p->next;
}
if(p) {
q->next=p->next;
free(p);
}
else
printf("沒有此學生的記錄,無法刪除!\n");
return (h);
}
list *insert(list *h)
{
list *p,*q,*r,*head;
head=h;
r=h;
p=h->next;
// 下面構造一個學生的信息
q=(list *)malloc(sizeof(list));
printf("請輸入待插入學生的學號:\n");
scanf("%d",&q->num);
printf("請輸入待插入學生的姓名:\n");
scanf("%s",&q->name);
q->next=Null;
// 找到鏈表的結尾結點
while(p!=Null) {
r=p;
p=p->next;
}
// 將新結點插入表尾
r->next=q;
r=r->next;
return (head);
}
void output(list *h)
{
list *p;
printf("學號\t姓名\t\n");
p=h->next;
while (p!=NULL) {
printf("%d\t%s\t%d\n",p->num,p->name,p->score);
p=p->next;
}
}
void main()
{
list *p;
int k; // 控制循環的標志
while (1) {
printf(" ---------------------------------------\n");
printf(" | 學生成績管理系統 |\n");
printf(" ---------------------------------------\n");
printf(" | 1. 登記成績 |\n");
printf(" | 2. 查詢成績 |\n");
printf(" | 3. 插入成績 |\n");
printf(" | 4. 刪除成績 |\n");
printf(" | 0. 退出系統 |\n");
printf(" ---------------------------------------\n");
printf("請輸入你的選擇:\n");
scanf("%d",&k);
switch(k) {
case 1: p=creat(); break;
case 2: find(p); break;
case 3: p=insert(p); break;
case 4: p=del(p); break;
case 0: exit(0);
default : printf("選擇錯誤,重新開始!\n");
}
}// while
}