C语言学习初次体会
2008-02-23 05:25:48来源:互联网 阅读 ()
转眼间,大半个学期过去了,c语言的学习也过了一段时间。有时候,由于兴趣,自己在课堂上乱划,一道小程式便出来了,但是,要是不幸运的话,逻辑有毛病,抑或是语句出现问题,在电脑面前一坐便是几个小时了!
随着时间的流逝,我对C语言的理解和感悟也积攒了不少!
首先是数组的学习,给我带来了不少烦恼。但是说起数组来,他贯穿于我们整个c语言之中,我们经常要用他来存储数据。编写图像要用他来储存坐标数据,编写音乐要用他来储存音符乐谱,即使学生的成绩也要用到他来储存……但是,假如我们在利用他的时候,不好好注意,将被弄得眼花缭乱!我们在利用他来处理数据的时候,涉及到的排序,找最大,最小值这些问题。特别是排序,方法挺多,但假如不把握住几种常用的方法,使用数组就变得很不便。常用的方法中,有冒泡排序,选择排序,希尔排序,快速排序等方法:选择法排序,和冒泡法排序都是利用for循环语句,前者是先寻找出最大最小值的下标,然后再交换,后者则是利用相邻间元素的比较大小,不符合需要顺序的就交换,这样一级一级地向上交换,把最大的或最小的放到最上面去;对于后两种办法排序,都利用到循环次数不确定的while和do-while语句,前者还利用到for语句,希尔排序利用一一对应比较的办法,后者利用数组中其他元素和中间数进行比较大小,然后实行交换。
这是冒泡法的程式:
#include<stdio.h>
void sort(int array[],int size)
{
int i,j,temp;
/*下面是利用相邻的比较,把大的数放到上面;*/
for(i=0;i<size-1;i )
for(j=i 1;j<size;j )
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
void main()
{
int i;
int a[10]={1,33,78,34,787,213,132,35,32,21};
sort(a,10);
for(i=0;i<10;i )
printf("m",a[i]);
}
这是选择法的程式:
#include<stdio.h>
void sort(int array[],int size)
{
int i,j,k,temp;
for(i=0;i<size-1;i )
{
k=i;
/*把最小的那一个数找出来,并且用a[k]记下来,然后和a[i]交换;*/
for(j=i 1;j<size;j )
if(array[k]>array[j])
k=j;
temp=array[k];
array[k]=array[i];
array[i]=temp;
}
}
void main()
{
int a[]={12,43,54,23,32,65,87,2,34,54};
int i;
sort(a,10);
for(i=0;i<10;i )
printf("%d\t",a[i]);
}
这是个快速排序的程式:
#include<stdio.h>
void quick_sort(int array[],int first,int last)//first,last分别为数组下标的范围;
{
int temp,low,high,list_separator;
low=first;
high=last;
/*下面是比较数组中的大小,把数组中的数和中间数比较,大的放在后半部分,比中间数小的放在前半部分,*/
list_separator=array[(first last)/2];//中间数;
do{
while(array[low]<list_separator)//中间数和前半部分比较;
low ;
while(array[high]>list_separator)// 中间数和后半部分比较;
high--;
if(low<=high)//前半部分和后半部分交换;
{
temp=array[low];
array[low ]=array[high];
array[high--]=temp;
}
}while(low<=high);
if(first<high)
quick_sort(array,first,high);//利用递归的办法,实行循环;
if(low<last)
quick_sort(array,low,last);//利用递归的办法,实行循环;
}
void main()
{
int a[9]={12,23,34,65,93,32,21,9,8};
quick_sort(a,0,8);
for(int i=0;i<9;i )
printf("%d\t",a[i]);
printf("\n");
}
这是个希尔排序的程式:
#include<stdio.h>
void shell_sort(int array[],int size)
{
int temp,gap,i,flag;
gap=size/2;
do{
do{
flag=0;/*利用标记,使前半部分和后半部分的数都对应比较过,前半部分大于后半部分的交换,直到都比较过,并且前半部分的数小于和前部分一一对应的后部分的数时,退出while循环*/
for(i=0;i<size-gap;i )
if(array[i]>array[i gap])
{
temp=array[i];
array[i]=array[i gap];
array[i gap]=temp;
flag=1;
}
}while(flag);
}while(gap=gap/2);
}
void main()
{
int array[]={1,2,32,43,64,7654,321,42,23,97,56,32,78,45,32},i;
shell_sort(array,15);
for(i=0;i<15;i )
printf("d",array[i]);
}
对于后面两个程式和前面用for语句排序来比较,while和do-while语句运行起来比较快,并且没有for语句那样的毛病,运行量大的时候可能会出错。比如说,从1循环到10000那么大的时候,冒泡法和选择法就有可能会出错了,希尔排序只减少了一部分的运行量,但并不是很完善,快速排序法完全脱离for语句的使用,对于运行量大的循环是没有问题的了,但只能够用来排序,不能够找出最值,若要找最值来的话,只好选择选择法。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: C语言漫谈
下一篇: 用C语言实现艺术清屏
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash