第一部分、课程设计的题目与要求
1、 问题的提出
小型图书借阅管理系统的设计。
实现查询和显示功能,可办理借书和还书手续,同时可查询学生所借图书的信息。
2、 功能要求
实现查询和显示功能:按书名查询、按作者名查询和显示图书库存信息。将满足查询条件的整条记录显示在屏幕上。
办理借阅手续:输入学生号,如果不存在于第二个文本文件中,则不能办理借阅,否则,继续输入要借阅的书名,如果在图书信息中存在该书,且未被借出,则可以办理借阅手续,并修改该书的存在状态标志,登记借阅人学号和学生的借阅本数,并修改相应的文本文件。
办理还书手续:输入学生学号,判断其是否有借书。如有借书,则输入书名,判断该书是否被借出,将图书的存在状态标记为1,还书成功,并修改学生的借阅本数。同时修改相应的文本文件。
查询学生所借图书的信息。数据显示效果如下:
学号 2008002 姓名 李四 专业 英语
图书编号 书名 作者 单价
bk001 C语言 谭浩强 3500
bk009 数据结构 严蔚敏 2200
第二部分、课程设计题目功能
1、 系统功能模块框图设计
2、数据结构说明
struct books //定义图书信息结构体
{char bknu[10]; //结构体成员,图书编号
char bkname[30]; //结构体成员,图书名
char bkauthor[10]; //结构体成员,图书作者
float price; //结构体成员,图书单价
int flag; //结构体成员,图书存在状态
char readnu[10]; //结构体成员,图书借阅人学号
}bk[M]; //定义结构体数组
struct students //定义学生信息结构体
{char stunum[10]; //结构体成员,学生学号
char stuname[30]; //结构体成员,学生姓名
char spe[16]; //结构体成员,学生专业
int borrow; //结构体成员,学生借阅本数
}stu[N]; //定义结构体数组
char str1[81],str2[81];//定义二个字符数组,用来存储二个文本的表头信息
void read1()
{
FILE fp; //定义一个文件指针变量,指向图书文本
……
}
void read1()
{
FILE fp; //定义一个文件指针变量,指向学生文本
……
}
void find_author()
{
char author[10]; //定义一个字符数组,用来存放键入的作者名
……
}
void find_bkname()
{
char bkname[10]; //定义一个字符数组,用来存放键入的图书名
……
}
void booklend()
{
FILE fp1,fp2; //定义二个文件指针变量,分别指向图书文本和学生文本
char stunumber[10],bkname[30]; //定义二个字符数组,分别用来存放键入的学生学号和书名
……
}
2、 详细设计
程序开始运行后先执行函数main(),函数void read1()从图书文本中读出数据保存到结构体数组bk[M]中,同时输出在屏幕上,通过调用函数read2()从stu文本中读出数据保存到结构体数组stu[N],同时输出在屏幕上。通过while循环与switch(i)语句来实现功能的选择。通过键入i来调用函数:
当i=1时,调用函数void find_author();
当i=2时,调用函数void find_bkname();
当i=3时,调用函数void find_others();
当i=4时,调用函数void booklend();
当i=5时,调用函数void bookreturn();
当i=6时,调用函数void find_stu();
函数void read1()从bk文本中读出数据保存到结构体数组bk[M]中,同时读取的信息输出在屏幕上。
函数void read2()从stu文本中读出数据保存到结构体数组stu[N],同时读取的信息输出在屏幕上。
函数void find_author(),该函数返回值为空,作用是从结构体数组bk[M]中查找满足条件(输入的作者名与结构体成员—作者名相同),将满足条件的bk[i],输出到屏幕上。具体,键入一作者名,与结构体成员author比较,若相同则输出到屏幕。
函数void find_bkname(),该函数返回值为空,作用是从结构体数组bk[M]中查找满足条件(输入的书名与结构体成员—书名相同),将满足条件的bk[i],输出到屏幕上。具体,键入一书名,与结构体成员bkname比较,若相同则输出到屏幕。
函数void find_others(),该函数的返回值为空,作用是从结构体数组bk[M]中查找满足条件(结构体成员—存在状态为零),将满足条件的bk[i],输出到屏幕上。具体,通过if语言判断结构体成员flag,若值为1,则输出到屏幕。
函数void booklend(),该函数返回值为空,作用是借书。具体,键入一个学号,判断该学号是否在学生文本中,若存在,键入一个书名判断该书是否在图书文本中且是否在库,如果也满足条件则办理借书手续,同时修改后的信息写入文本中。
具体流程图如下图:
函数void bookreturn(),该函数返回值为空,作用是还书。具体,键入一个学号,判断该学号是否在学生文本中,若存在,键入一个书名判断该书是否在图书文本中且是否在库,如果也满足条件则办理还书手续,同时修改后的信息写入文本中。
具体流程图如下图:
函数void find_stu(),该函数返回值为空,作用时查询学生借阅图书的信息。具体,键入一个学号,通过循环与结构体数组bk[i]readnu比较,若相同则输出。
3、 调试与测试
原始数据文件:
图书编号 书名 作者 单价 存在状态 借阅人学号
bk001 C语言 谭浩强 3500 1 无
bk002 寻觅中华 余秋雨 4000 1 无
bk003 C语言 谭浩强 3500 1 无
bk004 C++程序设计 谭浩强 3600 1 无
bk005 文化苦旅 余秋雨 2200 1 无
bk006 牛津简明英语词典 Thompson 11900 1 无
bk007 Oracle基础教程 佩里 6500 1 无
bk008 C语言 李春葆 3900 1 无
bk009 数据结构 严蔚敏 2200 1 无
bk010 大学化学 何培之 3000 1 无
bk011 C语言程序设计 杜友福 2800 1 无
bk012 大学英语 郑数昙 2390 1 无
bk013 高等数学 刘修生 1200 1 无
bk014 电路与模拟电子技术 高玉良 2550 1 无
bk015 大学英语语法 张道真 2900 1 无
学号 姓名 专业 借阅本数
2008001 张三 计算机 0
2008002 李四 英语 0
2008003 赵晓云 计算机 0
2008004 Mary 机械 0
2008005 王楠 电信 0
2008006 周诗维 计算机 0
2008007 张腾 石油 0
2008008 李俊杰 石油 0
2008009 刘杰 机械 0
2008010 王飞 城建 0
测试功能1(按作者名查询):效果如下图
查找作者为谭浩强的图书
测试功能2(按书名查询):效果如下图
查找图书名为电路与模拟电子技术的图书
测试功能3(输出库存图书信息):效果如下图
测试功能4(借书):效果如下图
学号为2008009的学生需要借阅电路与模拟电子技术
测试功能6(显示学生所借图书信息):如图所示
显示学号为2008009的学生所借图书信息
测试功能5(还书):效果如下图
学号为2008009的学生需要还电路与模拟电子技术
执行功能2时,提示内存错误。原因是子函数find_bkname()中定义的字符数组bkname[10]长度不够,改成bkname[30]即可。
执行功能5后,借阅本书都变成地址值。原因是在子函数bookreturn()中输出语句printf()中的‘输出项表列中stu[i]borrow’前加了取地址运算符,去掉该地址运算符即可。
执行功能4后,图书文本中所有数据全都填到了一列上。原因是在子函数book_lend()的fprintf()中格式控制字符串后少了换行。
在程序运行过程中,还出现以下需要注意的错误:if语句条件表达式中应使用逻辑等于(==);可能漏写分号;写程序时应注意输入法切换,正确输入字符。
第三部分、课程设计总结
在本次实训中,我有很多收获。自己对课本知识上的小的知识点把握不够,在这次实训中很多错误都是一些小问题,只要写程序的时候注意点就可以避免,以后写程序时一定会注意。遇到了困难,首先自己找,实在不能解决的话就请教老师和同学。其实很多问题都是我们自己可以解决的,只要我们用心去找,同时相信自己能解决问题。我在这次实训中学会了调试程序,这个功能是我以前所不知道。
对于这个系统,因为它的简单,所以存在不足之处,我就一个方面谈谈我的设想。通过在函数中加条件语句,限制每个人的借书本书,所借图书的总金额。
附录 程序清单
#include<stdioh>
#include<stringh>
#include<stdlibh>
#define M 15
#define N 10
struct books //定义图书信息结构体
{char bknu[10]; //结构体成员,图书编号
char bkname[30]; //结构体成员,图书名
char bkauthor[10]; //结构体成员,图书作者
float price; //结构体成员,图书单价
int flag; //结构体成员,图书存在状态
char readnu[10]; //结构体成员,图书借阅人学号
}bk[M]; //定义结构体数组
struct students //定义学生信息结构体
{char stunum[10]; //结构体成员,学生学号
char stuname[30]; //结构体成员,学生姓名
char spe[16]; //结构体成员,学生专业
int borrow; //结构体成员,学生借阅本数
}stu[N]; //定义结构体数组
char str1[81],str2[81];//定义二个字符数组,用来存储二个文本的表头信息
//读出图书信息
void read1()
{
FILE fp;
int i;
if((fp=fopen("D:\\jz80243_bktxt","r"))==NULL)
{printf("can not open file");
exit(0);
}
fgets(str1,81,fp);
puts(str1);
for(i=0;i<M;i++) //将文件中的信息写入结构体数组中并输出
{
fscanf(fp,"%s%s%s%f%d%s",bk[i]bknu,bk[i]bkname,bk[i]bkauthor,&bk[i]price,&bk[i]flag,bk[i]readnu);
printf("%-8s%-20s%-16s%-142f%-8d%-10s\n",bk[i]bknu,bk[i]bkname,bk[i]bkauthor,bk[i]price,bk[i]flag,bk[i]readnu);
}
fclose(fp);
}
//读出学生信息
void read2()
{
FILE fp;
int j;
if((fp=fopen("D:\\jz80243_stutxt","r"))==NULL)
{printf("can not open file");
exit(0);
}
fgets(str2,81,fp);
puts(str2);
for(j=0;j<N;j++) //将文件中的信息写入结构体数组中并输出
{
fscanf(fp,"%s%s%s%d",stu[j]stunum,stu[j]stuname,stu[j]spe,&stu[j]borrow);
printf("%-15s%-16s%-18s%-8d\n",stu[j]stunum,stu[j]stuname,stu[j]spe,stu[j]borrow);
}
fclose(fp);
}
//按作者查询
void find_author()
{
char author[10];
int i;
printf("请输入作者名:");
scanf("%s",author);
puts(str1);
for(i=0;i<M;i++)
if(strcmp(author,bk[i]bkauthor)==0) //将输入的作者名与结构体数组中的作者名比较
printf("%-8s%-20s%-16s%-142f%-8d%-10s\n",bk[i]bknu,bk[i]bkname,bk[i]bkauthor,bk[i]price,bk[i]flag,bk[i]readnu);
}
//按书名查询
void find_bkname()
{
char bkname[30];
int i;
printf("请输入书名:");
scanf("%s",bkname);
puts(str1);
for(i=0;i<M;i++)
if(strcmp(bkname,bk[i]bkname)==0) //将输入的书名与结构体数组中的书名比较
printf("%-8s%-20s%-16s%-142f%-8d%-10s\n",bk[i]bknu,bk[i]bkname,bk[i]bkauthor,bk[i]price,bk[i]flag,bk[i]readnu);
}
//输出库存图书信息
void find_other()
{ int i;
for(i=0;i<M;i++)
if(bk[i]flag==1) //判断图书是否在库
printf("%-8s%-20s%-16s%-142f%-8d%-10s\n",bk[i]bknu,bk[i]bkname,bk[i]bkauthor,bk[i]price,bk[i]flag,bk[i]readnu);
}
//借书
void booklend()
{
FILE fp1,fp2;
char stunumber[10],bkname[30];
int i,t;
printf("input the studentsnu:");
scanf("%s",stunumber);
for(i=0;i<N;i++)
if(strcmp(stunumber,stu[i]stunum)==0)
{t=i;break;}
if(i==N) //输入的学号不在文件2中,不能借书
{ printf("NO find!Can't lend!\n");
return;
}
printf("input the bookname:");
scanf("%s",bkname);
for(i=0;i<M;i++)
if(strcmp(bkname,bk[i]bkname)==0 && bk[i]flag)
{
bk[i]flag=0;
strcpy(bk[i]readnu,stunumber);
stu[t]borrow++; //学生借阅本数加1
break;
}
if(i==M)
{
printf("该书不存在或已全部借出\n");
return;
}
//更改图书文件信息
if((fp1=fopen("D:\\jz80243_bktxt","w"))==NULL)
{
printf("can't open file");
exit(0);
}
fputs(str1,fp1);
puts(str1);
for(i=0;i<M;i++) //将结构体中的数据写入文件
{
printf("%-8s%-20s%-16s%-142f%-8d%-10s\n",bk[i]bknu,bk[i]bkname,bk[i]bkauthor,bk[i]price,bk[i]flag,bk[i]readnu);
fprintf(fp1,"%-8s%-20s%-16s%-142f%-8d%-10s\n",bk[i]bknu,bk[i]bkname,bk[i]bkauthor,bk[i]price,bk[i]flag,bk[i]readnu);
}
fclose(fp1);
//更改学生文件信息
if((fp2=fopen("D:\\jz80243_stutxt","w"))==NULL)
{
printf("can't open file");
exit(0);
}
fputs(str2,fp2);
puts(str2);
for(i=0;i<N;i++) //将结构体中的数据写入文件
{
printf("%-15s%-16s%-18s%-8d\n",stu[i]stunum,stu[i]stuname,stu[i]spe,stu[i]borrow);
fprintf(fp2,"%-15s%-16s%-18s%-8d\n",stu[i]stunum,stu[i]stuname,stu[i]spe,stu[i]borrow);
}
fclose(fp2);
}
//还书
void bookreturn()
{
FILE fp1,fp2;
int i,t;
char stunumber[10],bkname[30];
printf("input the studentsnu:");
fflush(stdin);
gets(stunumber);
for(i=0;i<N;i++)
if(strcmp(stunumber,stu[i]stunum)==0)
if(stu[i]borrow!=0)
{t=i;break;}
else
{
printf("该生未借书,不能还书!\n");
return;
}
if(i==N)
{printf("未找到该生,不能还书!\n");return;}
printf("input the bookname:");
gets(bkname);
for(i=0;i<M;i++)
if(strcmp(bkname,bk[i]bkname)==0&&(bk[i]flag==0))
{
bk[i]flag=1;
strcpy(bk[i]readnu,"无");
stu[t]borrow--;
break;
}
if(i==M)
{printf("该书未借出或不存在!\n");return;}
//更改图书文件信息
if((fp1=fopen("D:\\jz80243_bktxt","w"))==NULL)
{
printf("can't open file");
exit(0);
}
fputs(str1,fp1);
puts(str1);
for(i=0;i<M;i++) //将结构体中的数据写入文件
{
printf("%-8s%-20s%-16s%-142f%-8d%-10s\n",bk[i]bknu,bk[i]bkname,bk[i]bkauthor,bk[i]price,bk[i]flag,bk[i]readnu);
fprintf(fp1,"%s%s%s%f%d%s",bk[i]bknu,bk[i]bkname,bk[i]bkauthor,bk[i]price,bk[i]flag,bk[i]readnu);
}
fclose(fp1);
//更改学生文件信息
if((fp2=fopen("D:\\jz80243_stutxt","w"))==NULL)
{
printf("can't open file");
exit(0);
}
fputs(str2,fp2);
puts(str2);
for(i=0;i<N;i++) //将结构体中的数据写入文件
{
printf("%-15s%-16s%-18s%-8d\n",stu[i]stunum,stu[i]stuname,stu[i]spe,stu[i]borrow);
fprintf(fp2,"%-15s%-16s%-18s%-8d",stu[i]stunum,stu[i]stuname,stu[i]spe,stu[i]borrow);
}
fclose(fp2);
}
void find_stu()
{
char stunumber[10];
int i,j;
printf("input studentsnum:");
scanf("%s",stunumber);
for(i=0;i<N;i++)
if(strcmp(stunumber,stu[i]stunum)==0)
{
printf("学号:%-15s姓名:%-16s专业:%-18s借阅本数:%-8d\n",stu[i]stunum,stu[i]stuname,stu[i]spe,stu[i]borrow);
if(stu[i]borrow!=0)
printf("图书编号 书名 作者 单价 \n");
for(j=0;j<M;j++)
{
if(strcmp(stu[i]stunum,bk[j]readnu)==0)
printf("%-8s%-20s%-16s%-142f\n",bk[j]bknu,bk[j]bkname,bk[j]bkauthor,bk[j]price);
}
printf("\n\n\n");
break;
}
if(i==N) printf("该生不存在!!\n\n\n");
}
void main()
{ int i;
read1();
read2();
while(1)
{
printf("小型图书借阅管理系统\n");
printf(" 1按作者查询图书 2按书名查询图书 \n");
printf(" 3按条件查询图书 4借 书 \n");
printf(" 5还 书 6查询学生借书信息 \n");
printf(" 0退出系统 \n");
printf("请选择(0~6):");
scanf("%d",&i);
switch(i)
{
case 1: find_author();break;
case 2: find_bkname();break;
case 3: find_other();break;
case 4: booklend();break;
case 5: bookreturn();break;
case 6: find_stu();break;
case 0: exit(0);
}
}
}
首先,你需要学会c语言的基础语法,那么你就可以写一些简单的程序了。想要进阶就要进一步深入学习算法等。其次,学习编程语言必须要有兴趣,兴趣不够很容易半途而废。
格式的话,养成良好的缩进习惯有助于别人和自己更容易看懂代码。
推荐一本书<<c primer plus>>写的很不错。
你还需要安装ide,推荐安装vs2012。
:
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
#include <stdioh>
int main(void)
{
int i,x,n;
int a[10];
printf("输入数组元素的个数:");
scanf("%d",&n);
printf("输入数组%d个元素:",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("输入x:");
scanf("%d",&x);
for(i=0;i<n;i++)
{
if(a[i]!=x)continue;
if(i>n)
printf("没有找到与%d相同的元素!\n",x);
else
printf("和%d相同的数组元素是a[%d]=%d\n",x,i,a[i]);
}
return 0;
}
加上括号就可以了
算你找对人了!
1这是教材:
>
(一)“项目驱动”式教学
目前最著名、最有影响、应用最广泛的windows、linux和UNIX三个 *** 作系统都是用C语言编写的。0S是计算机系统(由软硬件两个子系统构成)的核心和灵魂,它是软件中最庞大最复杂的系统软件。既然如此庞大复杂的0S都可以用c语言编写,从狭义而言,还有什么系统软件和应用软件不能用c语言编写呢由此可以肯定的说,c语言是一门十分优秀而又重要的语言。
c语言程序设计是过程性程序设计语言,它的发展贯穿了计算机发展的历程,它蕴含了程序设计的基本思想,囊括了程序设计的基本概念,所以它是理工科高等院校的一门基础课程。
从市面上有关c语言的书籍和高等院校采用的教材来看,它们有一个共性,那就是:脱离了实际应用(全是小打小闹的小例子),纯粹的过程性程序设计,没有软件工程思想的体现,没有一定程序设计风格,仅仅是为了让大家明白什么是c语言而已。
高等院校开设c语言程序设计的目的是让学生对程序设计有个入门,有个直观的理解,同时为其他后续课程作铺垫。但是如果教学仅仅以此为目的,那么教学本身就效果而言是个大大的失败。
大家知道,在商业上讲究唯利是图,“利”是商业追求的目标,离开了“利”经商,则商无动力,其结果是必败无疑。在c语言程序设计教学当中,教师应该把“唯用是图”作为教学的首要目标。如果抛开了实际应用进行程序设计教学,就是纸上谈兵,就是“说明书”式的教学。印度的程序设计课程采用“事件驱动式”教学,我认为在中国的c语言程序设计教学中应该采用“项目驱动式”教学。“项目驱动式”教学就是以项目为目的,以c语言理论教学为过程,最终能用c语言设计项目,实现项目的要求。“项目驱动式”教学的关键在于培养学生“如何做什么”和“可以干什么”。一个项目就是一个工程,在“项目驱动式”教学中,首先应该让学生简单了解什么是软件工程思想,其次在c语言理论教学过程中,让学生懂得面向对象的程序设计的风格,最后引导他们来设计项目。
(二)“项目驱动”式教学应注意的问题
1c语言程序设计教学要帮助学生树立面向工程的观点
在计算机行业中,软件是通过人们的智力活动、把知识与技术转化成信息的一种产品。软件的设计已经用工程的观念来进行管理。软件设计工作被当作一项系统工程来对待。软件的的生存周期一般可分为以下阶段:问题定义、可行性研究、需求分析、概要设计、详细设计、编码、测试、运行与维护。我们不难看出软件工程的复杂程度是很大的。理工科高等院校把c语言作为一门基础课程,也是为了给社会培养信息技术人才。众所周知,养成一个好的习惯是非常重要的,所以c语言程序设计作为大多数工科院校学生接触的第一门程序设计语言(有的院校讲pascal),就应该让学生树立正确的观点。那么当前的程序设计教学也必须以切合将来软件工程开发的实际需要为第一目标,使学生在学习程序设计的初级阶段就树立正确的软件工程观点。这样做不仅可以为学生将来从事计算机应用设计打下良好的基础,而且有利于培养学生分析问题的完备性,以及统筹全局,协调关系的基本素质。
2理论教学应从单一的“结构化程序设计”向“结构化与面向对象并举”转变
“结构化程序设计”方法是程序设计的基础,必须让学生掌握得坚实可靠。结构化程序设计的过程是培养学生思维能力的过程,在教学中经常发现有些学生的思维混乱。这些都是缺乏思维训练的结果。结构化程序设计的训练不仅可以让学生养成良好的程序设计习惯,而且可以有效地培养学生思维的条理性和逻辑性。所以在授课过程中要注意讲解结构化程序设计的思想时应突出两点:(1)程序的质量首先取决于它的结构。(2)程序设计的基本方法是自顶向下地逐步求精和模块化。
在c程序教学过程中,越到后面的章节,学生越会产生设计程序逐渐变难的感觉,这是不符合逻辑的一种怪现象。按照常理,C语言学的越多,说明你的程序设计知识越多,设计起程序来应该更加得心应手,那么出现这种现象的原因何在呢?当然该问题的出现的原因是多方面的,但是其中最重要的一点就是长期以来程序设计的观念不是以如何处理好对象为出发点,而是以如何使用好语言为基本点。受这种思想的影响,我们的程序设计教学大多数不是以如何解决好问题为重点,而是以讲解语法规则和语句格式为重点,是“说明书”式的教学。这样做造成的结果就是见到一个程序后学生首先想到是该用哪条语句,而不是思考怎样合理的解析。要切实解决这个问题,首先应该改变程序设计的观念。“面向对象程序设计”思想是目前最为流行、极为实用的一种程序设计方法,但是让学生直接接触“面向对象程序设计”,肯定不能对程序设计打下牢固的基础。“结构化与面向对象并举”是现代计算机程序设计的发展趋势,应该认真探索研究,让学生有一个较为轻松的学习过程。程序设计的实质就是编写处理对象的过程,所以将c与c++有机的融为一体的教材应该是首选教材,在教学过程中,我们应该从社会发展的角度进行探索研究,将目前最为流行又极为实用“面向对象程序设计”思想融合到c语言教学中。
3c语言教学应培养学生良好的程序设计风格
具有良好的设计风格应该是程序员所具备的基本素质,在实际的项目中程序员往往都有自己的一些编程风格。目前95%以上的程序设计书籍不注重程序设计风格问题,这导致了很多学生没有良好的程序设计风格,在他们刚刚毕业踏入社会时,如果周围的同事没有良好的编程风格,那么很难通过环境来使自己提高这方面的素质,即使有提高也不容易比较全面的提高。因此在学生接触的第一门程序设计语言教学中,就应该培养学生良好的程序设计风格,使他们一进工作环境就具备这个素质。
Pascal设计者NWrith教授十分重视程序设计风格的养成,他坚信“教给学生们以表达他们思维的语言会深深地影响他们思维和创造发明的习惯,而正是这些语言本身的混乱直接影响着学生们的程序设计的风格”,他这里所指的“这些运用”是当时那些主要用于程序设计教学的计算机语言。对学生来讲,一开始就强调程序设计风格很有必要,良好的程序设计风格不仅有助于提高程序的可靠性、可理解性、可测试性、可维护性和可重用性,而且也能够促进技术的交流,改善软件的质量。所以培养良好的程序设计风格对于初学者来说非常重要。
程序设计风格,实际上是指的是编码风格。在教学过程中应从源程序文档化,数据说明的原则,输入/输出方法这三个方面培养学生的编码风格,进而从编码原则探讨提高程序的可读性、改善程序质量的方法。
(1)源程序文档化。编码的目的是产生程序,但是为了提高程序的可维护性。源代码是需要实现文档化的。源程序文档化包括选择标识符(变量和标号)的名字、安排注释以及标准的书写格式等。
①选择标识符的命名规则。标识符包括模块名、变量名、常量名、标号名、子程序名等。这些名字应能反映它所代表的实际东西,应有一定实际意义,使其能顾名思义。另外在模块名、变量名、常量名、标号名、子程序名中使用下划线是一种风格。使用这一技术的一种广为人知的命名规则就是匈牙利命名法(变量类型由一个或两个字符表示,并且这些字符将作为变量名的前缀)。当然使用匈牙利命名法与否都没有错误,重要的是要保持一致性——在整个程序中使用相同的命名规则。这就是说,如果你在一个小组环境中编程,你和其他小组成员应该制定一种命名规则。并自始至终使用这种规则。如果有人使用了别的命名规则,那么集成的程序读起来将是很费劲的。此外,你还要与程序中用到的第三方库(如果有的话)所使用的风格保持一致。如果可能的话,你应该尽量使用与第三方库相同的命名规则,这将加强你的程序的可读性和一致性。
②注释。程序中的注释是程序设计者与程序阅读者之间通信的重要手段。注释能够帮助读者理解程序,并为后续测试维护提供明确的指导信息。因此,注释是十分重要的,大多数程序设计语言提供了使用自然语言来写注释的环境,为程序阅读者带来很大的方便。注释分为功能性注释和序言性注释。
a功能性注释。功能性注释在源程序中,用以描述其后的语句或程序段是在做什么工作,也就是解释下面要“做什么”,而不是解释下面怎么做。对于书写功能性注释,要注意以下几点:第一描述一段程序,而不是每一个语句。第二利用缩进和空行,使程序与注释容易区别。第三注释要准确无误。
b序言性注释。序言性注释通常位于每个程序模块的开头部分,它给出程序的整体说明,对于理解程序具有引导作用。有些软件开发部门对序言性注释做了明确而严格的规定,要求程序编制者逐项列出。有关内容包括:程序标题;有关该模块功能和目的的说明;主要算法;接口说明:包括调用形式,参数描述,子程序清单;有关数据描述;模块位置(在哪一个源文件中,或隶属于哪一个软件包);开发简历:模块设计者、复审考、复审日期。
③用标准的书写格式。源程序清单的书写建议采用以下几点:
a每行只写一条语句;
b用分层缩进的写法显示嵌套结构层次,这样可使程序的逻辑结构更加清晰,层次更加分明。
c书写表达式时适当使用空格或圆括号作隔离符。
d在注释段周围加上边框;
e注释段与程序段、以及不同的程序段之间插入字行;
(2)数据说明采用的原则。在编写程序时,要注意数据说明的风格。
数据说明的次序如果规范,将有利于测试,排错和维护。首先说明的先后次序要固定,例如,按常量说明、简单变量类型说明、数组说明用数据块说明、所有的文件说明的顺序说明。当然在类型说明中还可进一步要求,例如按如下顺序排列:整型量说明、实型量说明、字符量说明、逻辑说明。
其次当用一个语句说明多个变量名时,应当对这些变量按字母的顺序排列。
最后对于复杂数据结构,应利用注释说明实现这个数据结构的特点。
(3)输入/输出方法。输入/输出的方式和格式应当尽量避免因设计不当给用户带来的麻烦。这就要求,源程序的输入/输出风格必须满足能否为用户接受这一原则。所以在设计程序时,应考虑以下原则:输入数据时,要使输入的步骤和 *** 作尽可能简单,应允许使用自由格式输入;应允许缺省值;对输入的数据要进行检验,以保证每个数据的有效性。
(三)结束语
在教学过程中,我们让学生设计一个程序模拟体育**的销售与对奖的过程,取得了良好的效果。他不仅启发和诱导了学生独立思考、积极思维的主动性,而且充分调动了学生学习的自觉性和积极性,使学生融会贯通地掌握了所学知识,提高了分析问题和解决实际问题的能力。
搞好c程序设计的教学工作涉及的因素很多,如果以项目来驱动教学,首先让学生树立面向工程的思想,其次把教学从单一的“结构化程序设计”向“结构化与面向对象并举”转变,最后特别要培养学生养成良好的编码风格,从而使他们学会能够“干什么”,那么我们认为教学目的就达到了。
结果是:
x+y=-858993448;
其实是这样。你的scanf表达式里边只有%2d是有效地,后面是无效的表达式,所以变量y并没有被赋值。而%2d只是给x赋值前两位,所以x=12而y没有复制,也没有初始化,我的系统给它的值是-858993460。所以2-858993460=-858993448
不同系统给的y值应该不同。至于为什么是-858993460,我也不知道,不过这个数字是我的系统的int最小数字的五分之一。具体为什么是他,要问windows OS怎么处理的,我不知道。
以上就是关于求一个C语言课程设计全部的内容,包括:求一个C语言课程设计、如何编写C语言程序、c语言,数组程序设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)