当前位置:首页 » 编程语言 » c语言简易系统参考文献
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言简易系统参考文献

发布时间: 2022-08-19 21:37:18

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
}