指针

一、PTA实验作业

题目1:6-7 过滤字符串只保留串中的字母字符

1. 本题PTA提交列表(要提交列表,不是结果)

1233807-20171211193436805-153692793.png

2. 设计思路(伪代码或流程图)

1233807-20171211201020337-975688016.png

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

1233807-20171211195422102-1870675860.png

4.本题调试过程碰到问题及PTA提交列表情况说明。

1.编译错误:在指针终(ptr+j)与ptr+j是不一样的,后者是错误的。
2.答案错误:在函数最后没有给*(ptr+j)赋终子符,导致答案错误。

题目2:6-11求子串在母串中最后一次出现的地址

1. 本题PTA提交列表(要提交列表,不是结果)

1233807-20171211201523493-735869433.png

2. 设计思路(伪代码或流程图)

1233807-20171211203403384-593820044.png

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

1233807-20171211203412040-1754448215.png

4.本题调试过程碰到问题及PTA提交列表情况说明。

1.部分正确:没找到 应该返回一个0值,不应该跳过,否则会返回a
2.部分正确:i应该从s长度-1开始计算

题目3:6-9 使用函数实现字符串部分复制

1. 本题PTA提交列表(要提交列表,不是结果)

1233807-20171211204507868-374788839.png

2. 设计思路(伪代码或流程图)

   void strmcpy( char *t, int m, char *s ){
strcpy(s,t);
定义i、j用于实现循环;
定义字符串 a[MAXN]储存s字符;
for    i=m-1,j=0     to     j<strlen(s)-m+1{
    a[j]=s[i];
}
        end for;
a[j]='\0';
for    i=0        to     i<strlen(s)-m+1{
    s[i]=a[i];
}
            end for;
s[i]='\0';
    }

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

1233807-20171211204802712-207939758.png

4.本题调试过程碰到问题及PTA提交列表情况说明。

1.多种错误:没有给a[j]和s[i]末尾给上'\0'导致错误,后加上对
2.编译错误:循环内漏了”;“

二、截图本周题目集的PTA最后排名。(2分)

PTA排名1233807-20171211205430446-138061487.png

三、阅读代码(2分)

找两篇优秀代码贴图展示,并说明该代码功能是什么,优点是什么?
代码可以是自己同学代码,也可以是其他地方找的关于C的代码。
吴军霖的“报数”代码:

void CountOff( int n, int m, int out[] ){
int off=1,cnt=0,i;
int flag[MAXN];
for(i=1;i<=n;i++) flag[i]=1;
for(i=1;off<n;i%=n,i++){
cnt+=flag[i];
if(cnt%m==0&&flag[i]==1) {
flag[i]=0;
out[i-1]=off++;
}
}
for(i=1;;i++) if(flag[i]==1) {
out[i-1]=off;
break;
}
} 

分析:吴某先定义所有人为1,但数到指定数时这个人变为0,下次再数时跳过0不数,十分巧妙,我们在写约瑟夫环的时候就可以使用这种方法,避免了很多难题。
周炳辉的“字符串传动”代码:

void fun(char *p){
int i,j,flag;//flag存放最大值下标
char item;
char max='a';
for(i=0;p[i]!='\0';i++){
    if(p[i]>max) {
        max=p[i];
        flag=i;//记下最大值下标
    }
}
item=max;
for(i=flag;i>0;i--){//从p[flag]倒着遍历
    p[i]=p[i-1];//后移一位
}
p[0]=item;
}

点评:周某让p数组倒着数,反向遍历非常经典,在接下来的反向输出题目中可能会有多种类型的题目将会运用到类似的做法。

四、本周学习总结(3分)

1.你学会了什么?

1.1 什么是指针?
指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。
1.2 如何使用指针?
使用指针时会频繁进行以下几个操作:定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。这些是通过使用一元运算符 * 来返回位于操作数所指定地址的变量的值。
1.3 C 中的 NULL 指针
在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。
1.4 指针的算术运算
可以对指针进行四种算术运算:++、--、+、-
1.5 传递指针给函数
可以通过引用或地址传递参数,使传递的参数在调用函数中被改变。

2.本周你不会内容有什么?

1将数组传给指针时,数字的累加推进指针的字符累加(好像是这样)不大会
2.对于什么时候要传&n,什么时候传n不了解,都需要通过devc测试

2.1 课堂派错题罗列及如何订正。

1233807-20171211211721227-219946665.png
我的答案:1233807-20171211211733368-803219005.png
正确答案:1233807-20171211211800462-2033002913.png
原因:将主函数与fun函数的参数看反,而且漏看了一题
1233807-20171211211855837-550616672.png
我的答案:1233807-20171211211913384-1547331398.png
正确答案:1233807-20171211211930962-1538930386.png

2.2 其他不会的?打算怎么解决

看书,询问吴某周某,助教和老师

转载于:https://www.cnblogs.com/linyipeng/p/8025089.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值