C语言基础知识大全(4)

2019-01-05 11:10

fopen(\

FILE *fp;fp=fopen(\

将fopen函数的返回值赋给指针变量fp。 常用下面方法打开一个文件: if((fp=fopen(\{

printf(\exit(0); }

3) fclose函数(文件的关闭)

关闭 fclose(文件指针);当顺利关闭文件,则返回0值,否则返回EOF(-1). 4) fprintf函数与fscanf函数

fprintf函数、fscanf函数与printf函数、scanf函数相仿都是格式化读写函数。只有一点不同:fprintf和fscanf函数的读写对象不是终端而是磁盘文件。它们的一般调用方式为:

fprintf(文件指针,格式化字符串,输出列表); fscanf(文件指针,格式化字符串,输入列表); 例如:

fprintf(fp,”%d,%6.2f”,I,t);

它的作用是将变量i与t的值按%d与%6.2f的格式输出到fp指向的文件上。 用fprintf函数和fscanf函数对磁盘文件读写,使用方便,容易理解,但由于在输入时要将ASCII码转换为二进制形式,在输出时又要讲二进制形式转换成字符,花费时间较多。因此,在内存与磁盘频繁交换数据的情况下,最好不要使用fprintf和fscanf函数。 5) fread与fwrite函数

ANSI C标准提出设置两个函数(fread与fwrite),用来读写一个数据块,它们的一般调用形式为

fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 其中:

buffer:是一个指针。对于fread来说,它是读入数据的存放地址。对fwrite来说,是要输出的数据的地址。

Size:要读写的字节数。

Count:要进行读写多少个size字节的数据项。 fp:文件型指针。

如果fread与fwrite调用成功,则函数返回值为count的值,即输入输出数据项的完整个数。

常用fread与fwrite函数进行文件的读写操作 例:

11. 冒泡排序与折半排序

1) 冒泡排序

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

冒泡排序算法的运作如下:(从后往前)

a) 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

b) 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在

这一点,最后的元素应该会是最大的数。

c) 针对所有的元素重复以上的步骤,除了最后一个。

d) 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需

要比较。

实例:

#include

#defineSIZE8

Void Bubble_Sort(int a[],int n);

Void Bubble_Sort(int a[],int n) //n为数组a的元素个数 {

int i,j,temp; for(j=0;j

if(a[i]>a[i+1])//数组元素大小按升序排列 {

temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } } } int main() {

int i_Num[SIZE]={95,45,15,78,84,51,24,12}; int i;

Bubble_Sort(i_Num,SIZE); for(i=0;i

printf(\ }

printf(\}

2) 折半排序

折半排序实质上是不断地对有序数据集进行对半分割,并且获取每个分区的中间元素,用中间元素与待排序元素进行比较,最终确定数据集顺序。

折半排序算法思想:折半排序的重点是查找待排序元素A[i]在有序数据集中的位置。在处理A[i]时,A[0]……A[i-1]已经按关键码值排好序。所谓折半比较,就是在插入A[i]时,取A[i-1/2]的关键码值与A[i]的关键码值进行比较,如果A[i]的关键码值小于A[i-1/2]的关键码值,则说明A[i]只能插入A[0]到A[i-1/2]之间,故可以在A[0]到A[i-1/2-1]之间继续使用折半比较;否则只能插入A[i-1/2]到A[i-1]之间,故可以在A[i-1/2+1]到A[i-1]之间继续使用折半比较。如此重复,直到最后能够确定插入的位置为止。

算法的基本过程:

a) 计算 0 ~ i-1 的中间点,用 i 索引处的元素与中间值进行比较,如果 i

索引处的元素大,说明要插入的这个元素应该在中间值和刚加入i索引之间,反之,就是在刚开始的位置 到中间值的位置,这样很简单的完成了折半;

b) 在相应的半个范围里面找插入的位置时,不断的用(1)步骤缩小范围,

不停的折半,范围依次缩小为 1/2 1/4 1/8 .......快速的确定出第 i 个元素要插在什么地方;

c) 确定位置之后,将整个序列后移,并将元素插入到相应位置; d) 对形成的新的有序序列再次进行插入,重复步骤a),b),c),直到所有

数据完成排序。

数组实例:

void BisSort(int p_Num[],int i_Len) {

int i_Left,i_Right,i_Middle; int i_Loop,i_Subloop; int i_Buffer;//临时变量 if (p_Num[0]>p_Num[1]) { }

for (i_Loop=2;i_Loop

i_Left=0; i_Right=i_Loop-1; i_Buffer=p_Num[i_Loop];

if (i_Buffer<=p_Num[0]||i_Buffer>=p_Num[i_Right]) { } else { }

p_Num[i_Middle]=i_Buffer;

p_Num[i_Subloop]=p_Num[i_Subloop-1]; while(i_Left<=i_Right) { }

i_Middle=(i_Left+i_Right)/2;//折半中数 if(i_Buffer>=p_Num[i_Middle]) else

i_Right=i_Middle-1;

//确定要插入的位置

i_Left=i_Middle+1;

if (i_Buffer<=p_Num[0])

i_Middle=0;

else

i_Buffer=p_Num[0]; p_Num[0]=p_Num[1]; p_Num[1]=i_Buffer;

i_Middle=i_Right+1;

for (i_Subloop=i_Loop;i_Subloop>i_Middle;i_Subloop--)//生成新的有序数组

}

}

链表实例:

struct _Road* RoadOrder(struct _Road *pst_Road ) {

struct _Road *pst_Road_Head; pst_Road_Head=pst_Road;

struct _Road *p_Low,*p_Hight,*p_Mid,*p_Current; p_Low=pst_Road;

p_Hight=pst_Road->pst_Next; int i_Low,i_Hight,i_Mid;//中数 int i_Len=RoadListLength(pst_Road);

if (pst_Road_Head->i_GeoLength>p_Hight->i_GeoLength) { }

for (int i=3;i<=i_Len;i++) {

p_Low=p_Mid=p_Hight=pst_Road_Head; i_Low=1,i_Hight=i-1; for(int j=1;j

p_Current=p_Hight->pst_Next; //如果小于头指针数据

if (p_Current->i_GeoLength<=p_Low->i_GeoLength) { }

else if (p_Current->i_GeoLengthi_GeoLength) {

while(i_Low<=i_Hight) {

i_Mid=(i_Low+i_Hight)/2; for(int j=i_Low;j

p_Mid=p_Mid->pst_Next;

p_Hight->pst_Next=p_Current->pst_Next; p_Current->pst_Next=pst_Road_Head; pst_Road_Head=p_Current; p_Hight=p_Hight->pst_Next;

pst_Road_Head->pst_Next=p_Hight->pst_Next; p_Hight->pst_Next=pst_Road_Head; pst_Road_Head=p_Hight;


C语言基础知识大全(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:多聚A特异性核糖核酸酶(PARN)ELISA试剂盒说明书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: