选择显示字体大小

c语言学习初次体会

转眼间,大半个学期过去了,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("&#37;6d",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("&#37;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("&#37;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("&#37;10d",array[i]);

}

对于后面两个程序与前面用for语句排序来比较,while与do-while语句运行起来比较快,并且没有for语句那样的毛病,运行量大的时候可能会出错。比如说,从1循环到10000那么大的时候,冒泡法与选择法就有可能会出错了,希尔排序只减少了一部分的运行量,但并不是很完善,快速排序法完全脱离for语句的使用,对于运行量大的循环是没有问题的了,但只能够用来排序,不能够找出最值,若要找最值来的话,只好选择选择法。

其次,我们在学习数组的时候,还要考虑数组的输出和输入,但这都与循环语句for打交道,通常情况下,是几维数组就用几个for循环语句。但我们在不确定数组的范围是多少时,我们可以先用宏定义来定义数组的范围,然后再由用户确定。但一定要先定义才能使用,因为c语言中,大部分的变量,都遵守着先定义后使用的原则(对于语句则是先声明后使用)。数组在存储字符串的时候,又涉及到专门的语句使用,如gets(),puts()输入输出语句,还有赋值时,就不能用等号赋值了,而用到strcpy()语句等等(将来在c++中或许可以考虑使用运算符重载)。总之,数组的使用,可以与指针的结合(但指针并不是万能的,有利也有弊,用得不好,有可能导致系统瘫痪),那样运用起来会更加简便,特别是在字符串那一部分,需要用到二维数祖时,利用指针可以先取下字符串的首地址,然后就可以访问整个字符串了,这样可以解决函数返回值一个值的问题。

另外,如果我们有兴趣的话,可以接触一些图形的编辑。但图形编辑是离不开我们所学的基本内容。不过在学之前,我们得先做点准备。c语言图形编辑程序是在dos的环境之下运行的,但一般未经设置的编辑器是不能调用graphics.h的头文件的,我们可以按照以下途径设置:打开编辑器(c语言编辑不能用vc来编辑图形),选择途径:options\\linker\\libraries……然后在graphics library上打上“x”即可!这是tc的一种设置办法,但对于其他的编辑器也是差不多的。在开始编辑图形时,要进行图形的初始化,也要对他进行一些设置,比如说,我们在d盘的根目录下装了一个tc,那么我们在初始化时设置为:initgraph(&gdriver,&gmode,”d:\\tc\\bgi”);这样就可以利用图形编辑了。有一个经验就是在编辑图形的时候,我们会经常用到一个输入函数getch(),头文件是conio.h,它是一个非缓冲式字符输入的操作,不显示输入的内容。在c语言的编辑中,它提供了很多的图形编辑工具,都在头文件graphics.h里面,如果要编辑的话都可以找出来查看学习。

最后,我觉得在编译的时候,很重要的一个查看函数头文件的帮助方法,就是ctrl+f1,使我们在忘记的时候,及时查看。方法虽然简单,但很实用!


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons