#include<stdlib.h>
#define MAX 100
struct addr{
char name[30]
char street[40]
char city[20]
char state[3]
unsigned long int zip
}add_list[MAX]
void init_list(void),enter(void)
void delete(void),list(void)
void load(void),save(void)
int menu_select(void),find_free(void)
int main(void)
{
char choice
init_list()/咐侍*initialize the structure array*/
for(){
choice=menu_select()
switch(choice){
case 1:enter()
break
case 2:delete()
break
case 3:list()
break
case 4:save()
break
case 5:load()
break
case 6:exit(0)
}
}
return 0
}
/*Initialize the list*/
void init_list(void)
{
register int t
for(t=0t<MAX++t)
add_list[t].name[0]='0'咐橘
}
/*Get a menu selection*/
int menu_select(void)
{
char s[80]
int c
printf("1.Enter a name\n")
printf("2.Delete a name\n")
printf("3.List the file\n")
printf("4.Save the file\n")
printf("5.Load the file\n")
printf("6.Quit\n")
do{
printf("\nEnter your choice:")
gets(s)
c=atoi(s)
}while(c<0||c>6)
return c
}
/*Input addresses into the list*/
void enter(void)
{
int slot
char s[80]
slot=find_free()
if(slot==-1){
printf("\nList Full")
return
}
printf("Enter name:")
gets(add_list[slot].name)
printf("Enter street:"衡简吵)
gets(add_list[slot].street)
printf("Enter city:")
gets(add_list[slot].city)
printf("Enter state:")
gets(add_list[slot].state)
printf("Enter zip:")
gets(s)
add_list[slot].zip=strtoul(s,'\0',10)
}
/*Find an unused structure*/
int find_free(void)
{
register int t
for(t=0add_list[t].name[0]&&t<MAX++t)
if(t==MAX)
return -1/*no slots free*/
return t
}
/*Delete an address*/
void delete(void)
{
register int slot
char s[80]
printf("enter record # :")
gets(s)
slot=atoi(s)
if(slot>=0&&slot<MAX)
add_list[slot].name[0]='\0'
}
/*Display the list on the screen*/
void list(void)
{
register int t
for(t=0t<MAX++t){
if(add_list[t].name[0]){
printf("%s\n",add_list[t].name)
printf("%s\n",add_list[t].street)
printf("%s\n",add_list[t].city)
printf("%s\n",add_list[t].state)
printf("%s\n",add_list[t].zip)
}
}
printf("\n\n")
}
/*Save the list*/
void save(void)
{
FILE *fp
register int i
if((fp=fopen("maillist","wb"))==NULL)
printf("Cannot open file\n")
return
for(i=0i<MAXi++)
if(*add_list[i].name)
if(fwrite(&add_list[i],sizeof(struct addr),1,fp)!=1)
printf("File write error\n")
fclose(fp)
}
/*Load the file*/
void load(void)
{
FILE *fp
register int i
if((fp=fopen("maillist","rb"))==NULL){
printf("Cannot open file\n")
return
}
init_list()
for(i=0i<MAXi++)
if(fread(&add_list[i],sizeof(struct addr),1,fp)!=1){
if(feof(fp))break
printf("File read error\n")
}
fclose(fp)
}
写程序设计文档,要注意简洁和逻辑性,需要明确的是:文档并不是进行设计的目标,也不是设计过程中额外的工作。具体模块和步骤为:1.需求分析
需求分析的结果通常需要使用需求说明文档来描述,目前主流的需求描述方法包括:用户例图、用户故事等方式。这些方式有所不同的侧重,其核心思想就是描述清楚用户的使用场景。
2.功能设计
衫哪 对于主要是用户界面的软件项目来说,功能设计可以看作是画出原型界面,描述使用场景,获得用户认可的过程。而对于没有界面的软件项目来说,则功能设计与需求分析的区分更为模糊。
3.系统架构设计
系统架构设计是一个非常依赖于经验的设计过程。需要根据软件项目的特定功能需求和非功能性需求进行取舍,最终获得一个满足各方要求的系统架构。系统架构的不同,将很大程度上决定系统开发和维护是否能够较为容易的模慎适应需求变化,以及适应业务规模扩张。
4.模块/子系统概要设计
模块/子系统的概要或码码设计,由架构师参与,核心设计和开发人员负责的方式进行。
在概要设计工作中,需要在架构确定的开发路线的指导下,完成模块功能实现的关键设计工作。在概要设计阶段,需要关注于模块的核心功能和难点进行设计。
5.模块详细设计
在瀑布式开发模型中,模块的详细设计会要求比较严格,将所有类进行详细设计。除了一些对于系统健壮性要求非常严格的软件项目,如国防项目,金融项目还要求有详细设计文档之外。其他的项目大多采用其他方式来处理这样的工作,如自动化测试等。
综上所述,软件设计文档作为软件开发团队的沟通、理解、知识共享的手段,具有非常重要的意义。
谈及C语言,我想凡是学过它的朋友都有这样一种感觉,那就是“让我欢喜让我忧。”欢喜的是,C语言功能非常强大、应用广泛,一旦掌握了后,你就可以理直气壮地对他人说“我是电脑高手!”,而且以后若是再自学其他语言就显得轻而易举了。忧虑的是,C语言犹如“少林武功”一般博大精深,太难学了。其实就笔者认为C语言并非是“difficult(困难)”的,只要你能理清思路,掌握它的精髓,那么自学C语言是一件非常容易且又其乐无穷的事。今天本人就与大家一起谈谈如何学习C语言或者说学习C语言应从哪几方面着手。了解一些基本知识
一.C语言的背景
就个人感触,无论学习哪门语言首先应该了解一下自己所学语言的背景,也可以说它的发展史。
C语言属于高级程序语言的一种,它的前身是“ALGOL”。其创始人是布朗·W·卡尼汉和丹尼斯·M·利奇。C语言问世时是带有很大的局限性,因为它只能用于UNIX系统上。然而随着科学技术的进步,计算机工业的发展,C语言逐渐脱离UNIX。1987年美国标准化协会制定了C语言的国际标准,简称“ANSI C”,从此以后它便成为一种广泛使用的程序语言。C语言的优点很多,主要的有如下四点:
1.兼备高级语言与低级语言的优点,属于一种中间语言。
2.它是一种结构化程序设计语言,非常适合结构化程序设计。
3.有较丰富的数据类型、运算符以及函数供以选用。
4.直接与内存打交道,使修改、编辑其他程序与文档变得轻松,简单。
二.二大语系二种不同的学习方法
其实高级程序语言分为两大语系。例如:C,C++(C语言的扩展),QBASIC,VB(BASIC的可视化),JAVAs cript,Js cript ,VBs cript,JAVA,ASP,FOXPRO,PERL等等。一路是以C为主的程序语言,例如:JAVAs cript,JAVA等,这类语言在函数的调用,程序语句的书写,循环的控制都极为相似。另一路是以BASIC为首的程序语言,例如:FOXPRO,VBs cript等,此类语言同样具有相似的函数调用,程序语句书写以及循环控制,但与C语系是不同的。因此若是您以前是从QBASIC起家的,那么在学习C语言前最好是先洗洗脑,千万不要把学习BASIC的方法以及思路用在C身上。
讲到这里,我想大家对C语言一定有了感性认识吧!下面让我们再升华一下,全方位亲密接触它。学习C语言必须从以下四点入手,也就是说,只要你能掌握这四点的内容,那么基本上就大功告成了。
亲密接触C语言
一.输入输出
C语言的输入输出是非常严格的,或许在其他程序语言中我们可以不关心这个问题,但在C语言中,我们必此纯须要彻底了解它。由于篇幅有限,因此笔者不能详谈,有兴趣的朋友可以参考由著名程序语言教授谭浩强先生主编,由清华大学出版社出版的《C程序设计第二版》。不过这里笔者还是有几点要简单的谈一下。
1.二维浮点数数组的输入
二维浮点数数组的输入(即:通过键盘给二维浮点数数组赋值)在很多专业书中都没有详细讲过这个问题。在给二维浮点数数组赋值时一定要先声明一个变量,接着把数值赋予这个变量,最后把变量数值赋予二维浮点数数组赋值。
2.注意输出格式中“%”后的字符
C语言的输出说复杂不复杂,因为常用的都很简单。可说不复杂也未必,记得曾在一次等级考前辅导我们C语言的教授讲道带扒吵:“如果C语言要考得很难的话,根本不用考什么指针,只要专考输出格式,蠢侍我想百分之九十九的学生都不及格。”当时我们无不认同。从这则事例中可以看出C语言的输出格式之复杂程度。因此大家在学习它时千万要学会辨别输出格式中“%”后的字符,每个字符都有其意义,也都有其作用。
二.优先级
说道优先级,有很多朋友都不是很了解或说很模糊。为此笔者想先通过一个例子让各位有个概念。什么叫优先级?比方说,我们在公交车终点站排座队时总会遇到70岁以上的老人不需要排队就能上车的情景,这就是优先级的涵义。C程序在运行时也象排队坐车一样,首先照顾那些优先级高的运算符,若是优先级相同,那么就象遇到两位(或两位以上)70岁以上的老人那样,让他们依次上车。但是C语言中的优先级的运算并不是千篇一律的,只能说是在大多数情况下,有些运算符的优先级有其自己的特点,因此这点大家要注意。例如条件表达式:条件?结果1:结果2,这种表达式很多朋友都知道,它的作用与IF…ELSE…条件判断语句很雷同,它运算时的优先级就不是按照C语言的规则来完成的。所以说对于优先级各位编程爱好者一定灵活掌握,不要死记硬背。
三.指针
就个人认为,C语言中的指针是最有特色的,当然也是最难学的。指针说穿了,其实是变量的一种表现形式,只不过这种变量记载的不是数值而是地址。就象一个人可以用姓名来表示自己,也可以用身份z号码来表示自己一样。笔者涉足编程已经有三年多了,在这期间曾经收到过很多网友的电子邮件询问学习指针的方法。就本人感触,学习指针最好是先学些计算机硬件工作的原理,例如:直接寻址,间接寻址等,只有了解了这些内容以后,你再学指针就比较容易理会,毕竟C语言是一门介于机器语言与高级语言中间的语言,没有一些硬件工作知识是很难领悟它的真谛的。然而事事并非绝对,如果你没有这些知识也不要紧,只要清楚知道以下笔者总结的二点再加上多练习便可:
1.指针是地址变量:它的值有两种:其一是地址,其二是内容。不同的表达方式可以取不同的值,这有点象一个家庭地址在不同的场合标识的人物也不同。例如:父母亲在他们的单位所登记的家庭地址就代表他们自己,而你在学校中登记的同样的家庭地址就代表你自己。
2.指针是可以运算的,它的运算法则与变量是一致的。
另外,在编写一个程序时,除非万不得已,一般不要使用指针变量。因为指针是比较复杂的,用不好就“当机”。所以笔者建议各位对于指针只要能看懂就行,当然如果你是准备参加考试的就另当别论了。
四.函数
虽说很多程序语言都有函数这一内容,但笔者觉得C语言的函数是最有魅力的。如果你能完全掌握C语言的函数,那么学习C++就不成问题了(C++是一门建立在C语言上,但又不同于C语言的高级程序语言,它增添了很多函数。)。学习函数的方法是比较简单的,只有两个字“牢记”,即:牢记函数的功能,牢记函数的用途以及如何输入输出。有些朋友认为,程序语言中的函数没有多大用处,其实这并不正确,函数从本质上讲是一段通用程序,用它可以帮助我们节约很多编程的时间,一个聪明的编程者在编写程序前往往总是先找自己所编写的程序中有多少是可以用函数来代替的。笔者曾经作过一个比较字符串的实验,用C语言中的strcmp()函数只要一句话,而自己编写的话30句话都摆不平,可想而知函数是多么实用呀!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)