一、PTA实验作业
题目1:使用函数实现字符串部分复制
1. 本题PTA提交列表
2. 设计思路
先用循环计算输入的t字符串的长度,如果m大于t的长度,*s赋值为\0.
否则从m-1开始,到t的长度,t循环赋值给s,s的后一位加上\0.
流程图:
3.本题调试过程碰到问题及PTA提交列表情况说明。
临界关系错了,if条件改成m>i,i是t字符串的有效长度,m=i时把t中的字符全部赋值给s,
所以两者相等时,s不是空串。
题目2:查找星期
1. 本题PTA提交列表
2. 设计思路
因为要存放七个字符串,分别表示星期,所以要定义一个指针数组p,并且定义时就要赋值,
定义变量i用于循环,再用strcmp函数,如果由主函数中传过来的字符串与p[i]相等,就return i,
否则return -1.
流程图:
3.本题调试过程碰到问题及PTA提交列表情况说明
本题没有出现什么错误,就是第一次定义一个指针数组,刚开始不太确定这种写法是否正确,
其他没有什么问题。
题目3:在数组中查找指定元素
1. 本题PTA提交列表
2. 设计思路
定义repeat,n,x,q,数组a,i,j,输入repeat,
循环repeat次运算,输入n,输入n个整数存入数组a,输入整数x,
调用search(list, n, x)函数,q=search(list, n, x)
在数组list中查找元素x,若找到则返回相应元素的最小下标,否则返回-1,
q=-1输出not found,否则输出对应下标。
在子函数search中,定义m=0作为标志,g保存下标。
通过循环,满足x等于数组list中的某个元素时,m=1,g保存下标,
如果m=0,返回-1,否则返回g。
流程图:
3.本题调试过程碰到问题及PTA提交列表情况说明
格式错误是因为输出少了换行符
运行超时是第二个for循环的循环条件写错了,导致程序陷入无限循环,运行超时。
循环条件中的i应改为j.
二、同学代码结对互评
我的代码
同学代码截图
我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?
我的代码先用双重循环找出s中的字符与子串t的字符相等的那个字符,
再分别用两个变量验证那个字符之后的所有字符在两个字符串中是否相等,
用n来记录相等的数量,如果相等的数量恒等于子串t的长度,则返回子串t在s中的位置。
彦婵同学的代码是循环字符串s,与子串t的第一个字符相比较,如果相等,
接着再循环验证子串t之后的字符是否与s之后的字符相等。
我更喜欢彦婵同学的代码风格,更加简洁,我的代码双重循环的第二重是没有必要的,
因为子串t的第一个字符之后的字符即使与s相等,也没必要验证。
三、截图本周题目集的PTA最后排名
四、本周学习总结
1.你学会了什么?
1.1指针变量的定义
与普通变量定义的不同之处在于变量名字前加*,
指针变量的类型是它所指向的变量类型。
1.2指针的基本运算
取地址运算:&
int *p=&a,表示取变量a的地址,并将这个地址值作为指针p的值,使指针p指向a
间接访问运算符:*
它有两个作用:定义指针,访问指针所指向的变量。
*p即a的值
指针的赋值:只能赋值给相同变量的指针。
1.3指针与地址间的关系
指针是以地址作为值的变量
两个相同类型的指针相减,表示它们之间相隔的数组元素数目,
指针的算数运算只包括两个相同类型的指针相减以及指针加上或减去一个整数,其他操作均为非法。
对指针加1即对该指针增加一个储存单元,即加上它所指向的对象字节大小。
1.4用指针实现动态内存分配
malloc()利用sizeof计算存储块大小。
malloc()返回值为(void *)类型,需要强制转化。
其他函数:
calloc()会对所分配的内存初始化
ralloc()更改之前的存储分配
free()释放分配得到的内存
2.本周的内容,你还不会什么?