该顺序查找文件是一个学生信息记录文件,其中包括4条记录。所谓关键字就是每个文件记录的唯一标识,在该文件中学号就可充当记录的关键字。在一个文件中,两个记录的关键之是不能相同的,所以该学生记录文件的关键字可以设定为学号。对文件中记录的查找就是对其关键字的查找,找到了关键字就找到了该关键字对应的那条记录。
下面是源代码:
#include <stdio.h>
typedef struct student
{
int id; /*学生编号*/
char name[10]; /*学生姓名*/
float score; /*学生成绩*/
}Student;
int search(Student stu[],int n,int key)
{
int i;
for(i=0;i<n;i++)
{
if(stu[i].id ==key) /*查找成功*/
return i;
}
return -1; /*查找失败*/
}
void main()
{ /*初始化结构体数组*/
Student stu[4] ={{4,"TOM",100},{2,"LILY",95},{1,"ANN",93},{3,"LUCY",98}};
int addr,a; /*要查找的地址*/
do
{
printf("请输入1到4之间的整数,输入-2退出。请输入:");
scanf("%d",&a);
addr =search(stu,4,a);
printf("%d\n",addr); /*输出查找的地址*/
if(addr!=-1)/*判断是否有匹配的项*/
{
printf("Student ID: %d\n",stu[addr].id );/*输出查找的ID*/
printf("Student name: %s\n",stu[addr].name );/*输出查找的名字*/
printf("Student score: %f\n",stu[addr].score );/*输出查找的成绩*/
}
else/*没有就退出*/
{
printf("输入错误!\n");
continue ;
}
}while(a!=-2);
}
这是运行结果:
我的一点想法:这个查找是直接有数组来存入数据,没有从外部输入。也就是忽略了一个链式存储或是顺序存储的链表。当然这样的好处是——我们可以更清楚的看到重点:顺序查找。这个顺序查找有一个search函数,是查找的函数。通过main函数的调用,来实现查找的功能。总体看来代码较少,容易接受。
再一个就是:通过if,else和do,while等循环语句的使用,让程序更加的完美。我们通常使用break和continue标示符来进行操作。
break:执行break时,循环结构(比如:switch结构,for结构,do-while结构)会立即停止运行。一般break是if,else结构中得一部分,但是我们需要记得:
1. break语句对if-else的条件语句不起作用。
2. 在多层循环中, 一个break语句只向外跳一层。
continue:仅仅终止循环的本次执行而循环结构会继续执行。而这也是与break语句的根本区别。
return:分两种情况
1、常用在返回值类型为void的函数中,这时其作用是立即结束函数的执行并返回到主调函数中调用该函数处,继续往下执行。没有return语句是,函数执行完函数体,在最后一个“}”处返回。
2、return+返回值;这时必须出现在函数类型不为void的类型中,之作用是先计算表达式的值,再返回到主调函数中,并用表达式的值作为调用结果,然后继续执行主调函数。其表达式一般为——例如:return1;
这些知识基本上都是c语言的东西。一些很实用的基础知识,今天也是我自己的一次复习。至于一些循环语句的使用方法,再说,天也不早了,洗洗睡吧!