C语言博客作业--字符数组
一、PTA实验作业
题目1(7-6)
(1).本题PTA提交列表
(2)设计思路
(3)代码截图
(4)本题调试过程碰到问题及PTA提交列表情况说明
- 这里当几个左括号连在一起时,我的代码就会因为前后两个括号不是配对一起的,就会输出False
- 在调试时发现可以统计配对成功的对数,当对数等于输入括号数的一半时就是正确的,于是把判断条件改为当有一右括号与之前的左括号匹配时,把该右括号消去,对数加一,然后回到外循环,寻找下一个左括号
题目2(7-9)
(1).本题PTA提交列表
(2)设计思路
//定义字符数组:word数组存放输入的字符串;memy数组存放颠倒之后的符合题目要求的字符串
//输入word数组
//定义循环变量i,j,k=0;数组长度len,单词中字母个数count,整个字符串的空格数space=0;
for i=0 to word[i]!='\0'
if word[i]等于空格时
space自增;
end i;
把i的值赋给len;
for --i to 0
if word[i]不是空格
count自增;
if word[i]是空格且count不为0:
for j=i+1 to i+count
把word[j]赋给memy[k];
k++;
end j;
if i不为0且space+count不等于len时
把空格赋给memy[k];
k++;
count归0;
else if i等于0时
for j=i to i+count-1
把word[j]的值memy[k++]
end j;
//输出memy数组
(3)代码截图
(4)本题调试过程碰到问题及PTA提交列表情况说明
- 发现在memy数组的最后多出了一个空格
- 于是把条件限制改为j<i+count
- 这一个错误是由于我设置的数组上限刚好到题目要求的500000,于是我在500000上多加40000就过了
- 当一个单词前有多个空格时,我的代码会输出这个单词然后再加上一个空格,而题目要求在这种情况下只输出单词
- 于是对于这种情况多增加space变量统计字符串中空格个数,当space加上count与len相等时进行另一种输出
题目3 (7-10)
(1).本题PTA提交列表
(2)设计思路
//定义循环变量i;标志变量aflag=1、bflag=1;记录a、b转换为十进制之后的数A=0、B=0
//定义字符数组a、b
//输入a、b数组
for i=0 to strlen(a)-1
if a[i]不是数字
aflag=0;
A=A乘10+a[i]-'0';
end i
if A的值不在要求区间里
aflag=0;
for i=0 to strlen(b)-1
if b[i]不是数字
bflag=0;
B=B乘10+b[i]-'0';
end i
if B的值不在区间里
bflag=0;
//判断aflag和bflag的值,并特殊输出;
if aflag=1且bflag=1
//输出A+B=A+B的值
else if aflag=0且 bflag=1
//输出? + B = ?
else if aflag=1 且 bflag=0
//输出A +? = ?
else
//输出? + ? = ?
(3)代码截图
(4)本题调试过程碰到问题及PTA提交列表情况说明
- 由于我使用的
scanf("%s",);
的原因,当输入的字符串中有空格时,输入就结束了,所以把scanf改为gets,并在两个输入之间用一个getchar取走空格 - 这个的错误原因似乎是因为我的判断循环条件在这两个测试点的时候出错了,当我把判断条件改
i<strlen()
的时候就通过了
二、截图本周题目集的PTA最后排名。
PTA排名
三、同学代码结对互评
1.互评同学名称
- 黄泽彬
2.我的代码、互评同学代码截图(此处截图核心代码就好,不一定截图全部代码,图上指明是谁的代码。
-
我的代码
-
他的代码
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
1)思路上的不同:我的代码实现的是:当当前这个字符不为空格且下一个字符也不为空格时才使cnt加一,如果全为空格的话cnt并不会增加;他的代码则是:使用字符数组存放整个字符串,再对这个字符串里存放的字符判断,对当字符串全为空格、当字符串里的内容正常时、当开头字符或最后一个字符为空格时分情况解决。
2)代码处理上的不同:很明显,我只使用了字符变量存放每一个字符,他用一个字符数组存放整个字符串;在输出上,他也做了判断,实质上这个判断是他用来解决上面没有顾及到的某些问题所补充的补丁,我则在判断方面多下功夫;
3)我的优点在于定义的变量少,程序简单,比较易懂;他的优点在于使用新学的字符数组解决这个问题,如果以后用熟练他的代码可能可以再精简
4)更喜欢我这种风格。
四、本周学习总结(3分)
1.你学会了什么?
1.1指针变量如何定义(设计代码可以用markdown代码符号渲染)?
int *p,a;
*p=a;
1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?
- 指针指向数组首地址,然后用指针来对数组里的元素进行改变
- 两个指针不能相加,因为指针存放的是地址,两个地址相加,这个和就失去了意义
1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?
- ,这样是可以的
1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?
1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染。
void bubble(int *a,int n)
{
int *i,*j,t;
i=a;
for (;i<a+n;i++)
for (j=a;j<a+n-1;j++)
if (*j>*(j+1)){
t=*j;
*j=*(j+1);
*(j+1)=t;
}
}
1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?
int a[10],*p;
p=a;//指针变量p指向数组a
//用指针变量表示数组元素
*p==a[0];
*(p+1)==a[1];
1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?
char *p="string";
*p=='s';
1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?
- 好处在于可以通过加减的方法来控制指针所表示的字符,并可以对这个字符进行修改。
2.本周你不会内容有什么?
2.1 课堂派错题罗列及如何订正。
- 像题目那样的赋值,数组str的末尾会有'\0',所以只用str[i]即可,而我选的
!(str[i] = '\0')
是当str[i]=='\0'时才进入循环 char s[3] = {"Boy"};
中的3应该改为4,因为'\0'也占据一个空位,而char s[] = "Boy";
的方式则会自动算上'\0'char x[ ]="abcdefg";
的方式,数组元素个数实际上要再加一位;char y[ ]={'a', 'b', 'c', 'd', 'e', 'f', 'g'};
的方式不会在后面补上'\0'
2.2 其他不会的?打算怎么解决
- 还是有些容易把
*p
和p
的关系搞混,以及对指针的关系运算并不是很了解,还有就是如*p++
的值的问题 - 单目运算符的优先级关系
- 对string里的函数不熟悉
- 对于把指针应用于实际解决问题还是要多加练习