真的不知道为什么,我所有WORD的日期都变了,可是是WORD的宏病毒吧。但是为什么感染上的呢?这下可真奇怪了,我没有用过宏啊。算了,现在没有时间去理会它了,我要抓紧时间写完这篇补习日记。
今天的课程里终于到了重点了,就是算法,因为才刚开始,先从容易的排序算法开始说,抄了一道题目让我们做,如下:
已有一个已排序的数组,今输入一个数,要求按原来的排序规律将它插入数组中。
看到了这个题目我觉得自己比较有把握,很快的就写了出来,可是谁知道我的程序有一个至命的地方,刚给老师看的时候还得意洋洋,可是看完指出我的错来时真的不好受,既然都错了,就把我所做的那个答案写下来吧,也好让大家比较比较。
#define n 8
main()
{
int a[n];
int i,j,t,s;
for(i=1;i<=7;i++)
a[i-1]=i*10;
for ( i=0;i < 7;i--)
if ( a[ i ] < a[ i+1 ] )
{ s=a[ i ] ; a[ i ] = a[ i+1] ; a[ i+1] = s; }
for(i=0;i<7;i++)
printf("%d,a[ i ]);
}
看上去真的对的,没有错误,可能如果不细心都走眼的了。老师就是有这种本领可以看出来,让我慢慢道来我的错误吧,其实就是错在那一个最后没有赋值的元素,因为没有初始传值,随机生成的数可能很大,也可能很少,不过如果刚好小于插入的数话,那么就不再是正确的排序了。好了,说了我的错让我们看一个正确的程序吧
#define N 8
main()
{
int a[N]={20,30,40,50,60,70,80};
int n,i;
for(i=8;i>=0;i--)
{
if(n<a[i]) a[i+1]=a[i];
else break;
}
a[i+1]=n;
}
这里就是一个比较好的排序算法了,在讲这些排序的时候老师画了一个图,如第四天图一
这个图可以方便的表示出当时的排序情况,排起序来更清晰了。不过更重要的一点就是不排让人只单独看源程序那样头晕,根本不知道这是怎么一回事。因为我也是,自己编这个程序的时候跟着看完,看得模模糊糊的,所以我推荐大家也学一学这种方法。说到排序,我们又教我们一种新的排序方法,就是冒泡排序法了。记得以前我学QB里也学过,不过今天听着老师说,自己动着手画图来看,真的变得清晰多了。说冒泡排序法其实也可以叫左下沉排序法,因为是按程序的两个循环来决定,如果是按从底到顶当然就是冒泡啦,相反从顶到底就是下沉了。显下两个程序:
int n=6,i,j;
for ( i=n-1; i > 0; i--)
for(j=0; j < i; j++)
if(a[j]>a[j+1] { 交换 };
以上的是冒泡法
int n=6,i,j;
for ( i=0; i < n; i++)
for(j=n-1; j > i; j--)
if(a[j]<a[j-1] { 交换 };
这就是下沉了。
我们今天基本上全都在练习这个排序了,快到放学了,可是老师还是把握好时间,真的一点都不浪费啊,而且还拖了半个钟头堂。唉~!有时候我觉得他人好,好时候真的不好。可是怎么说呢,他至终都是我们的老师。那么他拖了我们半个钟就是为了说完C语言里条件语句,不过说真的还是学到了一些东西。
C语言里条件语句也有好几种形式,用条件运算符 ? : ,基本的if语句,还有就是switch语句,至于最灵活都是答件运算符 ? : , 而且还是C语言里唯一的三目运算符了。为什么这么灵活,因为他的参数是表达式,C语言最灵活也就是表达式了,那么它能不灵活吗!这里给出一个源程序:
int a=5,b=10,c=8;
if(a>b)
if(a>c)printf("a");
else if(b>c)printf("b");
else printf("c");
这么一条源程序是否让你看得不舒服呢,这就是C语言的另一个特点啊,你知道这条程序的答案吗?不过其实也不难,程序也很短嘛,就让我说出答案好了,答案不就是输出b嘛,道理很简单一看就出了,谁?谁?谁在这里搞乱,答案会是输出b 吗,笨!所以写你功夫还不到家嘛,下面让整理一下程序
int a=5,b=10,c=8;
if(a>b)
if(a>c)
printf("a");
else
if(b>c)printf("b");
else printf("c");
这样看清楚了吗?答案就是什么都没有,因为一开始第一个if语句就不成立了,那里有答案出呢!这里也看出一个情况,所以我们要陪养好代码的格式,如果有良好的编码风格就有好的程序。还有我今日又明白了一样,想看看下面的if语句:
if if
else else if
if else if
else else if
if
else
我原还以为这两个是不同的呢,在QB里的印象是两个不if语句呢。可是今天就给我弄明白了,大家也应该知道吧,可能就是我笨了。
在C语言里swtich也和别的高级语言不同,你们有发现吗?现在看看第四天图二吧
在这个图里清楚的说明了这个语句与其的不同之处,而且条件是用常量的,所以老师说给我们听他自己也不怎么喜欢用这个swtich语句。如果用懂了这个条件运算符? : 还真的挺方便的,这个也是可以无限嵌套的,这里不多说了,让自己慢慢体会研究。