一、PTA实验作业(4分)
题目1:7-2 统计一行文本的单词个数
1. 本题PTA提交列表
2. 设计思路(伪代码或流程图)
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- (1)部分正确
- 解决:在第二个if判断条件上将&&与||搞混
-
(2)部分正确
-
解决:因为我的代码是以回车键结尾的,而且之前代码中也有出现空格,所以我不知道怎么判断哪个空格是结尾的,也有问过助教,助教说我后面的或且关系太混乱了,所以就放弃了这种做法
错误代码:
#include<stdio.h>
int main(){
char ch[1000];
int count=0,i=0,g=0;
while((ch[g]=getchar())!='\n')
g++;
for(i=0;i<g;i++){
if((ch[i]<'a'||ch[i]>'z')&&(ch[i]<'A'||ch[i]>'Z')&&(ch[i]<'0'||ch[i]>'9')){
if((i+1)!=g&&((ch[i-1]<='z')&&(ch[i-1]>='a')||(ch[i-1]<='Z')&&(ch[i-1]>='A'))||(i+1)!=g&&((ch[i+1]<='z')&&(ch[i+1]>='a')||(ch[i+1]<='Z')&&(ch[i+1]>='A')))//if((ch[i-1]<='z')&&(ch[i-1]>='a')&&(ch[i+1]<='z')&&(ch[i+1]>='a')||(ch[i-1]<='Z')&&(ch[i+1]>='A')&&(ch[i-1]<='Z')&&(ch[i+1]>='A'))
count++;
}
}
printf("%d",count);
return 0;
}
题目 2:7-5 统计大写辅音字母
1. 本题PTA提交列表
2. 设计思路
定义数组op[80],循环变量i,辅音字母数量count,
for i=0 to i=79 op[i]=输入
if op[i]不等于‘\n’
if op[i]不等于元音字母且为字母
count++;
else
break;
end for;
输出count
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 错误一:最开始没有对结束语句条件进行设计,导致程序要输入80个数才会输出结果
- 错误二:没有判断是大写字母,结果为5
- 错误三:答案为5,进行调试 ,count没有初始化为0
题目 3 :7-3 找最长的字符串
1. 本题PTA提交列表
2. 设计思路(伪代码或流程图)
定义整型变量字符串长度1count1字符串长度2count2,循环变量i,j,字符串数量n
定义字符型变量 a[80],longest[80]
输入n
读入数组longest
count1=此时longes的长度
for i=0 to i=n-1
读入数组a
count2=a的长度
如果 count2大于count1
count1等于count2
end for
for j=0 to a[j]=‘\0’
longest[j]等于a[j];
end for
longest[j]=‘\0’
输出 The longest is: 数组longest
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 我把输出结束标志‘\0'赋错了数组位置,应该是longest[j],我赋给了longest[j+1]导致longest[j]没有内容;
二、截图本周题目集的PTA最后排名。(2分)
三、同学代码结对互评(1分)
1.互评同学名称:王宵莹
2.我的代码、互评同学代码截图
-(1)王宵莹的代码
- (2)我的代码
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
- 王宵莹的代码思路是定义两个字符型变量,不断的循环赋值,且赋的值为前后关系,当前面的为空格后面的为字符时判断为一个单词,
- 我的代码思路是,直接将所有字符赋值到数组中,不过也是通过前一个数组为空格后一个不是的方法判断单词
- 不同之处:
感觉这道题的难点在于对第一个词的处理,在这方面,王宵莹是自己给第一个单词前增加了一个空格,我则是对它进行判断,若是有空格,则单词数量变量count初始化0,若没有则初始化为1 - 优势:
王宵莹的代码比较简洁,代码行数较少
我的代码比较清晰,如果第一个单词前面已有了空格了,则王宵莹的代码就会有点多余 - 我更喜欢王宵莹的,因为和其他的题目搞混了,导致代码中出现了一些没有必要存在的语句,而王同学的代码总是很简洁,既然可以达到相同的结果,为什么不选择更简单的方法呢!
四、本周学习总结(3分)
1.你学会了什么?
1.1指针变量如何定义?
-
- 定义指针变量的一般形式如下:
类型名指针变量名1,指针变量名2,... *指针变量名n ;
- 定义指针变量的一般形式如下:
int *p; char *q; char *p,*q;
-
- 空指针
空指针是一个特殊的指针,它的值是0,C语言中用符号常量NULL(在stdio.h中定义)表示这个空值,并保证这个值不会是任何变量的地址。空指针对任何指针类型赋值都是合法的。一个指针变量具有空指针值表示当前它没有指向任何有意义的东西。
1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?
- 指针加法运用在其指向的地址元素时,例如输入数组时
int *p,a[10];
p=a;
for(i=0;i<10;i++,p++)
scanf("%d",p)
- 指针之间可以相减,可以相乘,可以相除,但不可以相加:两个同一类型的指针变量是可以相减的,他们的意义表示两个指针指向的内存位置之间相隔多少个元素
1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?
- 如图
1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?
1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染。
- 对指针的概念还不是很熟练。。。,所以不会。
1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?
int a[10];
int *p;
p=a;
此时p为指向数组a的指针
1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?
char *p;
char str[10] = "asdfghj";
p = str;
-初始位置为str[0].
1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?
-字符串指针只占用一个可以存放地址的内存单元,存储字符串首字符的地址,而不是将字符串放到字符指针变量中去,总之,字符串指针可以指向一个不需要分配内存的地址
2.本周你不会内容有什么?
2.1 课堂派错题罗列及如何订正。
2.2 其他不会的?打算怎么解决
(1)对于指针的概念还是懵懵懂懂
- 解决:多刷题目,多读题目,积累阅读量,看多了,做多了,自然就会了。
3.数组上机考试小结
3.1 那题错了,请罗列?
- 虽然很丢人,但确实是全都错了
3.2 错题如何订正,为什么错了?
-
刚开始的时候就在一题纠结了一小时,导致后来情绪紧张,会的题目也不会了,也还是平时积累不够,做题不多
-
6-1
-
之前一直不明白前面的1,2要怎么跑到后面去,后来跟踪变量看到1是从第一个到最后一个,然后2从第二个变成第一然后重复1的步骤到了最后一个,这时候的1变成了倒数第二个
-
6-2
-
我将转置和排序分开,发现转置时就出现了错误
-
(1)转置
-
我之前的思路是在33上建立的,就是最开始是a[0][1]和a[1][0],a[0][2]和a[2][0]转换,共两次,即(行-1)次,然后是沿着a[0][0]对角线下来,内部的22数组,转换的是a[1][2]和a[2][1]转换,共一次,比上次少了1.
-
问题:循环次数一直搞错,导致转置得不完整
- 于是我上网查转置的方法
- 相对于我的三重循环,网上的方法比较简单
如下:
void trans_array(int a[][10],int n){
int k,g,temp;
for(g=0;g<n;g++){
for(k=0;k<g;k++){
temp=a[g][k];
a[g][k]=a[k][g];
a[k][g]=temp;
}
}
return a;
-
问题:对于换了之后本来数组位置的数是否变化,还不是很清楚,
-
解决:所以观察变量发现转置的时候对角线上的数是不会变的,即k<g
-
(2)排序
-
问题:反了且错误
-
解决:if判断条件错误 ,应该是 a[j][l]>a[j][l+1]时,继续
-
正确
-
其他的由于还要做数据数组pta,所以还未解决,计划期限为这周五之前。