指针

一、PTA实验作业

题目1:6-2 移动字母:本题要求编写函数,将输入字符串的前3个字符移到最后。

1. 本题PTA提交列表

2. 设计思路

题目要求我们把一维字符数组s的前三位调到后面,故我先把这三位保存下来,设为a,b,c。接着当s[i+3]!='\0'时,令一维字符数组s:s[i]=s[i+3],使得此时s数组为原来的数组提前三位,再将a,b,c依次赋值给s数组。如果变动的位数过多,也可以用循环,比较简便,这里只是三位,就没用循环。

3.本题调试过程碰到问题及PTA提交列表情况说明。

 

(1)答案错误:在子函数中定义了一个字符型指针op,思路与上面的阐述差不多,但是忽视了至关重要的一点:题目要求我们写的子函数Shift(s)的返回值为空。而我将移动字母后的字符数组由字符型指针op指向,主函数并不能接收到。

(2)编译错误:因为用了指针也传不到主函数那,于是我决定用low一点的办法:将要移动的字母抽出来,接到字符数组最后面去。额,由于粗心,在for循环中第二个条件前多打了个*,导致编译出错。

4.代码截图。

题目二:7-1 输出学生成绩:本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。

1.本题PTA提交列表

2. 设计思路

由于对动态分配不熟悉,所以虽然题目建议用,但我还是没用动态分配。在主函数中输入n和一维浮点型数组a[n],令浮点型指针*p指向a[n],进入子函数fact(a,n)。sum初始化为0,用于计算分数总和,最后除于n可得到平均数average;min与max初始化都为*(p+0),分别与下一个数比较,若min>下个数,则min=下个数,若max<下个数,则max=下个数;最终可得到最高分max与最低分min。

3.本题调试过程碰到问题及PTA提交列表情况说明。

(1)答案错误:在比较最大值时用了*(p+max),导致在最大值不断变化的过程中破坏了原来数组里的数据,即每找到一个新的最大值时,原来的那个就会被覆盖掉,原因是*(p+max)把地址里的值改变了,所以导致最小值丢失。处理办法为将最大值定义为max。这样最大值改变时,就不会对其他数据产生影响了。

4.代码截图。

题目三:6-4 字符串的连接:本题要求实现一个函数,将两个字符串连接起来。

1.本题PTA提交列表

2. 设计思路

输入str1,str2后,将这两个一维字符数组传到子函数*str_cat(str1,str2)中,在子函数中用函数strlen()可得出str1的有效字符个数j。于是将str2中的字符依次赋值在str1的j位后面。

3.本题调试过程碰到问题及PTA提交列表情况说明。

 

(1).答案错误:该题中子函数类型为字符型指针,返回值应为同型。PS:该题忘记返回了。

4.代码截图。

二、同学代码结对互评

1.互评同学:陈冰艳

2.我的代码、互评同学代码截图

陈冰艳同学的代码:

 

我的代码:

3.我和陈冰艳同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?

不同在于:我们的思路基本上一致,不同点有两个:一,在子函数中陈冰艳同学是找到x时令flag为其下标后退出循环,如果没找到则令flag=-1;而我的是找到x时即把其下标返回给主函数。二,陈冰艳同学用一个整型变量flag来存放子函数的返回值,所以输出是包括在主函数的for循环中的。而我用一维整型数组存放,这样在所有数据输入后,可以同意输出结果。

各自优势:上面讲的两个不同点只是同一个问题的两种不同的解决方法,并没有表现出哪个更有优势。

两个代码我都很喜欢。

三、截图本周题目集的PTA最后排名。

四、本周学习总结

1.我学会了简单的指针运用,可以解决部分指针题目。

2.本周的内容,你还不会什么?

二级指针什么的,真的不能理解。

3.指针考试总结

(1).哪题做错了,怎么改?

    7-1:注意在找最值时最值不能用指针的形式表达,不然容易改变原本的数据。

    还有,经常出现子函数返回值类型不匹配,需要多注意。在主函数的输出时多注意格式。

(2).考试结果满意么,怎么改进?

  考试结果感觉还可以,下次要把握时间,争取提高做题效率。

 

 

 

 

posted @ 2018-01-10 17:20  信管罗艺芳  阅读(727)  评论(0编辑  收藏  举报