针对中段测试的结果、新手赛的比赛情况,以及之前的课前预习、课中学习、和课后作业情况,回答如下问题:

1  目前自己学习中存在的薄弱的知识点具体有哪些?每个薄弱的知识点都是如何获知的,每个薄弱的知识点需要列举具体的例子说明。(5分)

2  从第五章函数到第七章数组的函数题和编程题(主要是在PTA)中选出至少一道你觉得比较有挑战的题(已解决且不是奇奇的题)。写出解题报告包括:(1)题目大意;(2)解题思路;(3)代码思路,比如画出流程图;(4)核心技术总结;(5)解题过程中存在的问题,以及如何得到解决的。(5分)

1、(1)存在的薄弱知识点:①循环语句中break与continue的作用于区别;②for语句中条件表达式若为与某值比较大小时,如for(int i=0;i<100;i++),for(int i=0;i<=100;i++)为何有无等号时计算结果相同,以及各语句循环次数是否存在区别;③函数中return值的意义如:课本p71例5.8gcd函数中的return y,p74例5.11中return(-1);④运用指针调用二维数组方法的理解,如int(*)[4],*(p+i)+j为何调出的是地址。(2)通过实际操作与做雨课堂中的选择题时,无法进行确定的判断。

2、(1)题目大意:数组元素换位 在主函数中输入n个整数到数组中,调用函数(要求被调参数为⑴数组名 ⑵数组元素的个数)完成将数组中的最小值与第0个元素对调,将数 

(2)解题思路:首先输入整数n,再输入n个整数存入数组a中,通过多次比较得出数组中的最大值及最小值,最后通过下标相应把最小值与最大值的位置与第一个和最后一个元素对调。

(3)代码思路:①定义用于比较值大小及实行调换的函数fun(int *a, int n, int *max, int *min)

                            (fun函数:①*max<--*a,*min<--*a,i,j<--0。

                                                ②i++。③j++。

                                                ④如果*max>*(a+i),转②,否则*max=*(a+i);如果*min<*(a+j),转③,否则                                                     *min=*(a+j)。)

                                                ⑤如果i!=n-1,s=*(a+n-1),*(a+n-1)=*max,*(a+i)=s;如果j!=0,m=*a,*a=*min,*                                                             (a+j)=m。

                       ②输入n。

                       ③输入n个整数存入整形数组a中。

                       ④运用fun函数对相应变量进行操作。

                       ⑤输出数组a。

(4)核心技术总结:调换值时中间变量的运用,用指针表示各个数组元素的循环,fun函数中循环语句的循环条件以及调换元素位置时的条件。

(5)解题过程中遇到的困难:不善于运用指针的加减法进行循环语句的操作,未意识到可用中间变量交替值。

解决办法:参考书本上的例子以及做过的习题。