一、PTA实验作业
题目1:两个4位正整数的后两位互换
1. 本题PTA提交列表
2. 设计思路
定义循环变量i,两个数组a[4],b[4]
for i=0 to 3
a[i]*p取各个位
*p/=10
end
for i=0 to 3
b[i]*q取各个位
*q/=10
end
分别对*p和*q重新赋值
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
本题没有多大问题,就是想再找一种更简单的做法。
题目2: 输出月份英文名
1. 本题PTA提交列表
2. 设计思路
if形参n不再月份范围内
return NULL
定义指针数组*a[]并赋值十二个月份
return a[n-1]
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
刚开始我用的switch语句来判断月份,后来在舍友提醒下改成了数组来存放英文并直接返回。
- 部分正确 :月份不在范围内
解决办法:加入if判断若不在范围内,就返回NULL
题目3:过滤字符串只保留串中的字母字符
1. 本题PTA提交列表
2. 设计思路
定义*a存放ptr,循环变量i,计数变量count
while(*ptr)
if *ptr 是字母
将*ptr存放到*(a+i)中 i++
else count++ 记录非字母
ptr++继续循环
end
*(a+i)赋值结束符
return count非字母个数
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
这道题前面一直在对p直接判断,导致提交运行超时,后来利用另一个指针来存放符合题意的字符并返回,就不会运行超时。
二、截图本周题目集的PTA最后排名。
三、阅读代码
strcpy字符串复制函数原型
char * strcpy(char * dest, const char * src) // 实现src到dest的复制
{
if ((src == NULL) || (dest == NULL)) //判断参数src和dest的有效性
{
return NULL;
}
char *strdest = dest; //保存目标字符串的首地址
while ((*strDest++ = *strSrc++)!=' '); //把src字符串的内容复制到dest下
return strdest;
}
memcpy内存拷贝函数原型
void *memcpy(void *memTo, const void *memFrom, size_t size)
{
if((memTo == NULL) || (memFrom == NULL)) //memTo和memFrom必须有效
return NULL;
char *tempFrom = (char *)memFrom; //保存memFrom首地址
char *tempTo = (char *)memTo; //保存memTo首地址
while(size -- > 0) //循环size次,复制memFrom的值到memTo中
*tempTo++ = *tempFrom++ ;
return memTo;
}
strcpy和memcpy主要有以下3方面的区别。
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"