C博客作业05--2019-指针
0.展示PTA总分
1.本章学习总结
1.1 学习内容总结
- 指针做循环变量做法
指针做循环变量可以做判断条件
如:
当遍历整型数组num时遇到-1时,循环结束
for(p=num;*p!=-1;p++)
{
...
}
当字符串结束时(字符串末尾为'\0'),停止循环
for(p=ch;*p;p++)
{
...
}
- 字符指针如何表示字符串
字符指针表示字符串,需要将字符指针指向字符串的第一个字符,并在字符结尾放一个结束符\0
如:
char*p;
char ch[6]={'h','e','l','l','o','\0'};
p=ch
- 动态内存分配
动态内存分配主要运用malloc函数,其用法为:
int *p;
int n;
scanf("%d",&n);
p=(int*)malloc(sizeof(int)*n);
...
feel(p);
- 指针数组及其应用
指针数组,即指针的数组,是一个能存储多个指针的数组,主要应用于多个字符串的存储,如:
char*p[2];
char ch1[6]={"hello"};
char ch2[6]={"world"};
p[1]=ch1;
p[2]=ch2;
- 二级指针、行指针
二级指针,即指向指针的指针,主要用于指向二维数组的行,用于跨行遍历。
- 函数返回值为指针
有时候函数返回值为指针,只需要在定义函数类型时定义为指针,如:
int*函数名(形参);
1.2 本章学习体会
学习了指针,我们能够更加方便地在不同的函数里传参数,修改,也能跟加方便地对数组进行遍历。在学完了本章内容,我们应该要更好地掌握函数的灵活运用,尽量将代码分装,并且能灵活的运用指针传参,尽量减少主函数的内容,让代码更加简洁。
*代码量:450
2.PTA实验作业
2.1 题目名 6-5 字符串反正序连接 (10 分)
2.1.1 伪代码
void fun (char *s, char *t)
{
定义整型变量count初始化为0
定义一个指向s的指针p
while(*p)
{
count加1
p加1
}
for(p--;count;count--,p--,t++)
{
将p所指的字符放到t上
}
for(p=s;*p;p++,t++)
{
将p所指的字符放到t上
}
*t=0
}
2.1.2 代码截图
2.1.3 总结本题的知识点
- 对指针遍历数组的考察
- 对数组输出顺序变换的考察
2.1.4 PTA提交列表及说明
2.2 题目名 6-4 求出数组中最大数和次最大数
2.2.1 伪代码
int fun(int* a, int n)
{
定义指针p、pmax、pmax2分别指向a、a、a+1.
定义一个整型变量temp
用指针p遍历数组,将最大数的地址交给pmax
用temp将a[0]中的数与pmax所指的数交换
用指针p从a[1]开始遍历数组,将最大数的地址交给pmax2
用temp将a[1]中的数与pmax2所指的数交换
return 0;
}
2.2.2 代码截图
2.2.3 总结本题的知识点
- 指针对数组的遍历
- 利用指针将数组中的两个数交换
2.2.4 PTA提交列表及说明
1.编译错误:分号忘记打
2.答案错误:让两个指针先指向最大数与次大数,再同时交换,但是如果次大数再数组的第一个,再最大数交换时,它的地址就变了,所以错误了
3.答案正确:将两个指针一个指好交换好再换下一个。
2.3 题目名 6-7 输出月份英文名
2.3.1 伪代码
char* getmonth(int n)
{
定义一个十三行的二维字符数组,第一行放0,从第二行开始依次将十二月份的英文单词放入
if n不是月份
{
返回NULL;
}
else
{
返回month[n];
}
}
2.3.2 代码截图
2.3.3 总结本题的知识点
- 对二维数组的定义与调用
- 对函数返回类型为指针的运用进行考察
2.3.4 PTA提交列表及说明
3.阅读代码
本题的主要思路
1.将输入的字符存储到一个字符数组中
2.对开头的字符进行处理
通过定义k=0,然后在遍历数组时
if(k=0)
{
if(ch(i)==' ');
{
k=1;
}
}
if(k)
{
...
}
即可忽略开头空格
然后是正负判断,在循环外定义j=0,flag=0,在开始遍历数组时
if(j=0)
{
if (ch[i]=='-')
{
flag=1;
}
else
{
num=ch[i]-'0';
}
}
即可通过flag判断数是否为零
3.转换
遍历数组,将字符转化为整型
num=num*10+ch-'0';
判断是否超出范围
利用double存储,如果大于int所能存储的大小,则停止循环输出INT_MAX (231 − 1) 或 INT_MIN (−231)
4.判断结束
当字符串出现非数字字符是时,停止遍历
5.结尾
判断正负
if(flag)
{
num*=-1;
}
6.输出