一、PTA实验作业
题目1:判断回文
1. 本题PTA提交列表
2. 设计思路
}bool palindrome( char *s ){ 定义变量i,j,l,flag=0; 计算数组s的长度存于l中; for i=0,j=l-1; to i
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
循环结束后的判断条件错误,少了一个等号
题目2: 过滤字符串只保留串中的字母字符
1. 本题PTA提交列表
2. 设计思路
{ 定义 i,j; for i=0 to ptr[i] 判断是否为字母 若不为字母,for j=i to ptr[j] ptr[j]=ptr[j+1] //将后面的字母前移,覆盖掉非字母 end for i--; //令下一次循环再次从该处开始 end for 计算重组后的数组长度,并返回值 }
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
碰到的问题:移动数组后,没有i--,导致有连续两个非字母字符时,第二个非字母字符会被跳过
解决办法:移动后i--题目3:使用函数实现字符串部分复制
1. 本题PTA提交列表
2. 设计思路
{ 定义 i=0,j=0,len; 计算数组t长度存于len中; if len
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
本题没有碰到问题
二、截图本周题目集的PTA最后排名
三、阅读代码
1.蛇形填数。在nn方阵填入1,2···,nn,要求填成蛇形,例如,n=4时
10 11 12 1
9 16 13 2 8 15 14 3 7 6 5 4 代码截图:优点:
- 这段程序充分利用了C语言简洁的优势。赋值x=0和 y=n-1 后马上把它们作为数组的下标,同时tot 和 a[0][n-1]都赋值为1,这些都合并完成。这样就用一条语句完成了多件事情。
- 4条while 语句有些难懂,以第一句为例,原则是:先判断,再移动,而不是走一步发现越界后退回来。这样则需要“预判”是否越界,越界只需判断 x+1<n ,因为y的值没有修改;下一个格子是(x+1,y),因此只需简写为“!a[x+1][y]”。
2.求子串在母串中最后一次出现的地址
代码截图:
本题最开始是用数组做,但是在输出时出现问题,最后百度。 优点:每次遍历是都让p,q重新指向;判断母串中是否有子串相同时也简便了许多,最后找到子串时直接用a指向此时s的地址,这样返还a就行,不用像数组一样要重构,体现了指针的灵活性。四、本周学习总结
1.自己总结本周学习内容。
1.本周我学会了strstr (char s,char t),strchr(char s,char e),strcmp(char s,char *t),tolower,toupper,这些库函数。strstr的功能是在字符串s中查找字符串t首次出现的地址,可用了在母串中寻找子串;strchr在字符串s中查找字符e首次出现的地址;strcmp的功能是比较两个字符串的大小,用于字符串排序;tolower和toupper用于大小写字母的转化。
2.结构体的定义以及结构变量的使用
struct 结构名{ 类型名 结构成员名1; 类型名 结构成员名2; …… 类型名 结构成员名n; }结构变量1,结构变量2,……;
结构变量使用时要用结构成员操作符‘.’,如s1.name
3.结构指针,即指向结构类型变量的指针
例如:struct student s1 = {101,"zhang"},*p; p=&s1;
4.指向运算符-> ,用于访问指针指向的结构成员
例如:当指针p指向s1时p->num=101
上面语句等价于
s1.num=101;(*p).num=101;