《西农C语言第三次实习作业....doc》由会员分享,可在线阅读,更多相关《西农C语言第三次实习作业....doc(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流西农C语言第三次实习作业.精品文档.FH05-01.c#include void main()int a10,i;a1=1;for(i=2;i11;i+)ai=ai-1+1;for(i=1;i11;i+)printf(%5d,ai);if(i%2=0)printf(n);在模仿生兔子程序编此程序时候发现多次错误,而且都关于遍历输出的错误,首先是没把控制输出语句用于遍历输出导致输出数据错误,再次是判断换行的控制输出没有放在遍历输出当中,导致输出时候不能根据预想结果一样的输出,所以当遍历输出时需要将全部与控制有关的输出控制语句全部放在遍历输出的花
2、括弧中。在第一次i的循环赋值当中计算式中i的初值要比起始定义时候要大1以免输出时候造成结果紊乱。运行程序结果与预想完全相同输出,但是不理解的是为什么会出现程序运行错误终止提示呢?而且我重新建立VC工作区域也出现了同样的结果。比较交换法:#define JH(a,b) t=a,a=b,b=tvoid main()int a11,i,j,t;printf(交换前的数据:);for(i=1;i11;i+)ai=rand()%100;printf(%5d,ai);printf(n交换后的顺序:);for(i=1;i10;i+)for(j=i+1;j11;j+)if(aiaj) JH(ai,aj);fo
3、r(i=1;i11;i+)printf(%5d,ai);printf(n);此程序我编制了好几次,花了大量时间研究交换的内外循环,可是老是出现最终各数字位置未能交换,对此,很费解。参照老师您所写的程序与自己所写程序并无差别,可就是结果运行不正确,调试多次后,发现在书写for(i=1;i10;i+)for(j=i+1;j11;j+)这两个程序段时,第二行的就j的赋值必须写成j=i+1,而不能写成就j=2。这之间的变化就是数值最终是否能交换的原因。刚开始我的理解是外循环for(i=1;i10;i+)只需要循环(比较)9次,内循环for(j=2;j11;j+)从第二项开始也循环(比较)9次。且每次循
4、环I,J都会增加1,所以比较应该能完成才对的。而调试后的程序,j=i+1处的格式,我对其意思就相对模糊了。难道内循环j的值的变化必须与i有关,若无i则j的值就不会变化吗?5、选择法排序#include #define JH(x,y) t=x,x=y,y=tvoid main()int a10,t,i,j,k;printf(before:);for(i=0;i10;i+)ai=rand()%100;printf(%5d,ai);printf(n after:);for(i=0;i9;i+)k=i;for(j=i+1;j10;j+)if(akaj)k=j;JH(ai,ak);for(i=0;i10
5、;i+)printf(%5d,ai);printf(n);在阅读后选择法排序后,根据自己的理解独立编写程序,写出的程序中有几处不同,if(aiaj)应该为if(akaj),JH(ai,aj)不能包括在内循环中,否则交换会出现错误。冒泡法排序:#include#define JH(a,b) t=a,a=b,b=t#define N 10void main()int i,j,aN,t;printf(输入数据:);for(i=0;iN;i+)scanf(%d,&ai);for(i=0;iN-1;i+)for(j=0;jaj+1)JH(aj,aj+1);printf(输出结果:);for(i=0;iN;i+)printf(%-4d,ai);对于冒泡法,第一个for循环倒是很好理解,就是遍历输入,而且定义宏中有规定是10个数字,所以键盘输入10个数字即可。而下面的两个for循环似乎就有点难以完全掌握了,第二个for循环应该是控制外循环,将比较进行N-1次,而内循环就让我更费解了。再者,比较交换时候用aj与aj+1比较,而不是用ai与aj比较,我的理解是应该与前面的内循环for(j=0;jN-i-1;j+)有必然的联系。在经过多次调适之后,我发现最后一个printf(“%-4d”,ai);中-4有两个作用,一是将输出的数字以每个占4列输出,二是将输出的数字按左对齐输出。XT05-01.c
限制150内