指针练习
PTA 实验作业
题目1 :6-5 利用指针找最大值
本题题目及裁判测试程序样例
本题要求实现一个简单函数,找出两个数中的最大值。
1. 本题PTA提交列表
2. 本题设计思路
这道函数题要求我们用指针的方式来找出两个数中的最大值.
其中px
和py
是题目中定义的用户传入的两个整数的指针。也就是我们要比较的两个数.
函数findmax
应找出两个指针所指向的整数中的最大值,存放在pmax
指向的位置。
首先当在子函数传入两个数之后,先判断两个指针所指向的数值之差.
如果*px>*py 则令* pmax=*px, 反之亦然.
3.1 源代码子函数截图
3.2 思路流程图截图
4.本题调试过程碰到问题及PTA提交列表情况说明
这道题稍微简单,只要注意一下条件就行.
题目2 :7-1 输出学生成绩
1. 本题PTA提交列表
2. 本题设计思路
这道题本题要求我们编写程序,根据首先输入的学生的成绩,统计并输出学生的平均成绩ave、最高成绩max和最低成绩min.
虽然建议使用动态内存分配来实现,但由于并不是很熟悉动态分配,在多次测试失败之后只好选择普通方法.
首先先定义 max=0,min=100,sum=0,注意使用的是 double 双精度类型定义.
先输入学生人数 n, 然后进入循环输入成绩,循环 n 次结束.
每一次循环输入之后都要与 max 和min 进行比较,若大于 max则将此数赋给 max,若小于 min则将此数赋给 min, 之后将每次的数累加到 sum.
最后输出 min,max 和 sum/n.
3.1 源代码截图
3.2 思路流程图截图
4.本题调试过程碰到问题及PTA提交列表情况说明
在定义数组时候误将 a[n] 定义成a[n-1],导致后面循环和输入次数少一次.
题目2 :7-2 在数组中查找指定元素
1. 本题PTA提交列表
2. 本题设计思路
本题要求我们输入一个正整数repeat (0<repeat<10),做repeat次运算:
输入一个正整数 n,然后输入n个整数存入数组a[]中.
再输入一个整数x,在数组a中查找x,如果找到则输出相应元素的最小下标,否则输出"Not found"。
本题要求定义并调用函数search(list, n, x),在数组list中查找元素x,若找到则返回相应元素的最小下标,否则返回-1,函数 list 的类型是整型指针,n和x的类型是int,函数的类型是int。
首先输入需要的做运算的次数repeat,然后做 repeat 次循环,依次输入 n 个整数再执行 n 此循环,最后输入需要找到的数 x.开始进入判断过程的子函数.
在子函数中循环 n 次判断x 是否等于 list+i 地址中的数,有的话跳出循环,没有的话输出 i.
3.1 源代码截图
3.2 思路流程图截图
4.本题调试过程碰到问题及PTA提交列表情况说明
这道题在输入list[] 和 x的时候忘记其中对 list[] 要循环输入,不能合起来输入x和 lisrt[].
同学代码结对互评
1.互评同学名称
谢晔晖
题目 7-1
2.我的代码
对方代码
从二者中很容易可以看出对方使用的是指针,而我用的是普通的循环数组.
我的思路是在每次输入学生成绩后直接和 max 和 min 对比,同时累加到最后计算平均值.
对方使用的是子函数和指针的方式进行计算,答题思路和我的一样,只是对与格式略有不同.
本题本来要求使用动态分布进行计算,但对方使用指针和子函数时整个结构更有条例性,但略显稍长.我是使用普通方法固稍微易于理解.
总体来说如果不是题目要求我更喜欢我的方式.
PTA 最终排名
本周学习总结
一.你学会了什么
我学会的知识点:
1.指针是一个单独变量,只是指向了其他变量的地址(相当于汇编中的间接寻址,与地址寄存器类似);
2. sizeof对于指针变量和数组的处理是不一样的。拿上指针p 和数组a[10]来说,对于一个32位地址的系统。p是一个指针变量其内容存储的是4个字节的地址;而数组名a并不是一个变量,它是一个常量的地址,sizeof将其视为整个数组的代表,因此计算的时候会计算整个数组的大小。
3.指针和数组作为参数传递的时候,其实是传递的一个地址。函数指针与所指向的函数,返回值类型和形参列表必须一致.
二.本周的内容,你还不会什么?
在本章中对动态存储空间的使用还不大熟悉,总是忘记对指针进行初始化.还有就是在利用子函数时候对指针的指向性比较模糊.
三.指针结构考试总结
虽然在指针方面没有很精通,不过经过这次考试之后还是需要多练习指针.