1.薄弱环节:
①有时会出现无脑错误:忘记赋初值、==写成=等,中段测试时,
int MyStrlen(char src[])
{
int x=0,s=0;
for(;src[x]!='\0';x++) s++;
return s;
}
由于s忘记赋初值导致答案错误;
②对字符串处理函数的运用不够熟练,导致有些简单题目被复杂化,如新手赛中的problemA;
③指针作为函数参数的应用不够了解,有时会混淆传值调用和传地址调用,如练习九题7-1,定义函数void sort(int *a,int n),但在使用时没有用指针的运算导致错误;
2.有挑战性的题:
使用函数的选择法排序
(1)题目大意:
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个正整数 n (1<n<=10),再输入 n 个整数存入数组 a 中,用选择法将数组 a 中的元素按升序排列,最后输出排序后的数组元素。
要求定义并调用函数 sort(a,n),它的功能是采用选择排序算法,将数组 a 的前 n 个元素按从小到大的顺序排序,函数形参 a 的类型是整型指针,形参n的类型是int,函数的类型是void。
(2)解题思路:先定义函数void sort(int *a,int n),运用指针变量作为函数参数(传递至调用)进行选择排序,再输出;
(3)代码思路:
#include <iostream>
using namespace std;
void sort(int *a,int n)
{
int i,j,p,t;
for(i=0;i<n-1;i++)
{
p=i;
for(j=i+1;j<n;j++)
{
if(*(a+j)<*(a+p))
{
p=j;
if(p!=i)
{
t=*(a+p);
*(a+p)=*(a+i);
*(a+i)=t;
}
}
}
}
}
int main()
{
int repeat,i,k,p;
cin >> repeat;
int n[repeat],a[100];
for(i=0;i<repeat;i++)
{
cin >> n[i];
p=n[i];
for(k=0;k<p;k++)
{
cin >> a[k];
}
sort(a,p);
cout << "After sorted: ";
for(k=0;k<n[i];k++)
{
cout << a[k];
if(k!=n[i]-1)
{
cout << " ";
}
else
{
cout << endl;
}
}
}
}
(4)核心技术总结:选择排序法的运用、指针变量作为函数参数的运用;
(5)遇到的问题:不知道可以边输入边输出、对选择排序法不了解、对指针作为函数参数的应用不熟练,通过查找书籍、及网上的资料参考解决。