一、PTA实验作业
题目1.字符串转换成十进制整数
1. 本题PTA提交列表
2. 设计思路
定义i,k,j为循环变量,flag=0,flag1=0,字符串数组a[80],b[80]存放新字符串,长整型变量number存放十进制数;
输入字符串
k=0;
for i=0 to a[i]!='\0'
if a[i]为0~9的数字或a~f的大、小写字母
for j=i to j>=0&&flag==0&&flag1==0
if 遇到负号,flag=1;
if j==0,flag1=1;
end for
将a[i]放入新字符串 b[k]
k++;
end for
结束符b[k]='\0';
number=0;
for i=0 to b[i]!='\0'
逐个转换为十进制整数
if flag==1,number为负数
输出长整型number的结果
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
①测验当第一个十六进制数前没有负号时,发现输出也是负数。
②调试发现在判断完第一个十六进制数前没有负号后,第二次进入循环,也就是读到第二个十六进制数后又进行了寻找它前面有没有负号的程序,此处错误。
③考虑再定义一个flag1用来控制程序在读取第一个十六进制数后不再进入寻找负号的程序。改正后正确。
题目2.找最长的字符串
1. 本题PTA提交列表
2. 设计思路
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
①a[j]读入的第一个字符为回车,此处错误。应加上putchar();吞掉回车。
②缺少一个数组存放最长的字符串。
③另外定义一组数组b[80]存放最长的字符串,并参考同学代码,使用两个循环变量一起变化的方法把最长字符串赋值给数组b。
题目3.删除字符串中的子串
1. 本题PTA提交列表
2. 设计思路
定义i,j,k为循环变量,flag=0判断是否满足删除条件,定义字符数组s1[81]存放字符串,s2[81]存放子串;
输入字符串s1 ,s2
i=0;
while s1[i]!='\0'
for j=0 to s2[j]!='\0'
if 一个个字符比较s2[j]!=s1[i++]
if 出现重复字符 j=0;flag=1; //将后面字符当成第一个判断字符
else 不符合删除条件 跳出循环;
else 符合删除条件 flag=1;
end for
if flag==1
删除符合条件的字符,后面字符往前移
i=0;
end
输出数组s1
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
①思路卡在解决出现重复字符如何解决这一部分,不知道怎么处理它,然后在其他人的帮助下得到思路。
②数组下标太小,数组越界。
③增大数组下标后一个测试点正确。但最后一个测试点的最长嵌套不知道提示是什么意思,还没改出来。
二、截图本周题目集的PTA最后排名。
PTA排名
PTA提交列表
三、同学代码结对互评
互评同学名称:田亚琴
互评题目:找最长的字符串
2.我的代码、互评同学代码截图
我的代码
同学的代码
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
不同:
我的代码:定义两个字符数组,数组a存放输入的字符串,数组b存放最长字符串;算出各行字符串的长度,每行的字符串长度一一比较,找出最长的字符串长度并把其对应的字符串存放在数组b中然后输出。
同学代码:采用二维数组的方法,每行存放一个字符串,遍历数组,计算每行字符串长度找出最长字符串所在行,输出该行的字符串。
各自优势:田亚琴同学巧妙地采用了二维数组的方法,思路更清晰简明,代码也比较简单,我的代码比较复杂,我更喜欢她的代码。
四、本周学习总结
1.你学会了什么?
1.1指针变量如何定义(设计代码可以用markdown代码符号渲染)?
类型名 *指针变量名
注:
① 定义多个指针变量时,每个指针变量前面都必须加上*。例:int *p,*q;
②为了尽量避免引用未赋值的指针所造成的危害,在定义指针时,可先将它的初值置为空,如char *s=NULL;
1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?
- 用于指针指向数组时,指针自增;
- 不能相加。指针的算数运算只包括两个相同类型的指针相减以及指针加上或减去一个整数,其他的操作如指针相加、相乘和相除,或指针加上和减去一个浮点数都是非法的。
1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?
- 指针如果没有被赋值,它的值时不确定的,即它指向一个不确定的单元,使用这样的指针,可能会出现难以预料的结果,甚至导致系统错误。
1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?
- 形参
- 实参
- 作用:可以直接修改内存改变实参的值,指针作为函数的参数能使函数返回多个值。
1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染。
void bubble(int *a,int n)
{
int i,j,t;
for(i=1;i<n;i++)
for(j=0;j<n-i;j++)
if(*(a+j)>*(a+j+1)){ //比较两元素大小,如果前一个元素大则交换
t=*(a+j);
*(a+j)=*(a+j+1);
*(a+j+1)=t;
}
}
1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?
int a[100],*p; p=a;
p+i→a[i]
1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?
char *p="point";
char *s,str[20]; s=ste;
初始位置为字符串的首字符
1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?
- 好处:
2.本周你不会内容有什么?
2.1 课堂派错题罗列及如何订正。
- 输出的时随机值,因为指针p已经不再指向数组,而是未知的位置,故指针指向内容不确定。
2.2 其他不会的?打算怎么解决
- pta题目有一些没来得及做,还有的没有头绪,打算找会做的同学要代码整一下思路再写。
- 字符数组的PTA作业做的磕磕碰碰,比以往作业做起来更困难,有的题甚至不知道怎么下手。还是要提高代码阅读量,把课本概念例题理解透。
- 现在对于指针的用法可以说是朦朦胧胧的,离用于实践做题还是有距离。在做题前得先看看一些指针类型的代码。课本上的,课堂派上的。
- 明显感觉到有点跟不上进度了。
3.数组上机考试小结(未完待续)
3.1 哪题错了,请罗列?
- 6-1 数组循环右移
3.2 错题如何订正,为什么错了?
- 6-1 数组循环右移
做数组循环左移的时候代码改了好几次才对,读代码时都能读懂,但做循环右移时才发现自己对这个内容还是没有理解透。
考试时的代码:
改正后的代码: