一、PTA实验作业
题目1:判断回文
1. 本题PTA提交列表
2. 设计思路
}
bool palindrome( char *s ){
定义变量i,j,l,flag=0;
计算数组s的长度存于l中;
for i=0,j=l-1; to i<j{
if s[i]是否不等于s[j]{
flag=1;break;
}
}
if flag==1 return flase;
else return true
}
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<m s[i]=0;
else
for i=m-1 to t[i]
s[j++]=t[i],重构数组
end for
end else
添加结束符s[j]=0;
}
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;
2.罗列本周一些错题。
1:
本题有两个错误。第一,大小写字母差值为32;第二,若用(p-1)-32会将不是字母的字符也转化,所以应该按照题目给的toupper((p-1))
2:
本题错误是没有注意到函数的返还值。
3: