C博客作业--指针

一、PTA实验作业

题目1: 求出数组中最大数和次最大数

1. 本题PTA提交列表

  • 1232035-20171215190104215-1995737646.png

2.设计思路

  • 1232035-20171215192924402-1911887078.png

3.代码截图

  • 1232035-20171215193000902-2076058597.png

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

  • 问题:答案错误
  • 原因:1232035-20171215193405715-1360995995.png
    把指针a代入循环条件里使用,后面的1232035-20171215193621543-1262032518.png
    a++之后,改变了a的地址增加,所以下一次循环条件就改变了,导致答案错误
  • 解决方法:1232035-20171215193713871-1138864854.png
    再定义一个指针l,让l的值与a相同,这样后面a++后,l的值还是原来a的值,不改变循环的条件,答案正确

题目2:报数

1.本题PTA提交列表

  • 1232035-20171215194102090-1286082492.png

2.设计思路

      定义函数void CountOff( int n, int m, int out[] )
           定义int a[n],count=0,number=0,k=1,i,j    数组a存放从1到n的数,number存放报数的累和,count计算每次从头开始报数还有几个人
           for i=0 to i<n, i++
                a[i]=i+1
           end for
           while (count !=1)    剩下的元素为1时跳出循环
                    if(count>1) count=0;
                    for j=0 to j<n;j++
                         if (a[j]==0) continue;
                         number++;    number为的报数累和
                         count++;    计算当前数组a还有几个元素,也就是还有几个人
                         if(number==m)
                             if(a[j]==n&&m==1) break; 当m为1时的特殊情况,count没法等于1
                             out[a[j]-1]=k;
                             k++;
                             a[j]=0;     元素为0,说明该人退出
                             number=0;    从新开始报数
                    end for
        end while
        for j=0 to j<n j++  遍历数组,让最后一个人退出
                if(a[j]!=0) out[a[j]-1]=k;
         end for
    return 0;

3.代码截图

  • 1232035-20171215195251621-1879054713.png

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

  • 问题:1232035-20171215195351590-2046124731.png
    运行超时:1232035-20171215195444840-1205139268.png
    最小n2 最小m1 没有输出
  • 原因:原来代码中m=1没有考虑,报的数为1时,一遍循环下来让所有人都退出了,此时count为2,满足count不等于1的条件,下次进入循环,因为所有人都退出了count一直处于0,一直满足count不为1的条件,进入无止尽的循环中,运行超时
  • 解决方法:加一个特殊情况1232035-20171215200838527-912797302.png 当m=1时,判断循环直接跳出while 这样答案就正确了
  • 1232035-20171215201118886-1702138359.png

题目3:判断回文字符串

1.本题PTA提交列表

  • 1232035-20171215201750527-1355352269.png

2.设计思路

  • 1232035-20171215204735183-839033698.png

3.代码截图

  • 1232035-20171215204936621-354018484.png

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

  • 问题:问题到是没有,我的方法是仿照书上的,我认为这题的关键在于输入的字符串长度是奇数还是偶数,1232035-20171215210359011-958927592.png
    如果是奇数满足的就是i=j的条件,如果是偶数满足的就是i>j的条件,缺一不可。
    i>=j时,奇数能满足,偶数长也能满足。

二、截图本周题目集的PTA最后排名

  • 1232035-20171215211255199-1392370941.png

三、阅读代码

优秀代码1

1232035-20171217115725858-1871385568.png
功能:删除字符串中的子串
优点:调用了库函数,大幅度减少了代码量,而且巧妙借助一个空的字符串实现删减一次子字符串后对母串的粘贴和复制

优秀代码(2)

1232035-20171217120319999-1591260083.png
功能:对输入的括号串进行判断是否遵循数学上的括号的使用原则
优点:巧妙运算括号匹配的原理,出现(或者},值加1或加2,出现匹配的)或者},值减1或者减2,
如果值出现负数,说明右括号先于匹配的左括号出现,不符合使用规则,结束程序

四、本周学习总结

1.自己总结本周学习内容

1.结构的定义

  • 单独定义struct 结构名{ 混合 定义 struct 结构名{
    类型名 结构成员 1 类型名 结构成员 1
    类型名 结构成员 2 类型名 结构成员 2
    .......... ........
    类项名 结构成员 n 类型名 结构成员 n
    }; }结构变量名表;

    2.结构变量的使用

  • 结构变量名+.+结构成员名

    3.嵌套结构

  • 在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型
    struct address{ /先定义/
    char city[10];
    char street[20];
    int code;
    int zip;
    };
    struct nest_student{
    int num;
    char name[10];
    struct address addr; /再使用/
    int computer,english,math;
    double average;
    };

    4.结构指针

    -例如: int update_score (struct student *p,int n, int num, int course, int sorce );

    2.罗列本周一些错题

  • 1232035-20171215213848480-1276462354.png
  • 1232035-20171215213906574-1957533154.png
  • 分析:首先是粗心,第二个空填了char 很明先t能和a[]互换,肯要和a[]同类型,所以应该填struct studen
    再者是对比较字符串的大小还是太不敏感,直接用‘>’来比较大小,应该调用strcmp函数来比较,题目最开头还用了1232035-20171215214404386-876875379.png
    这是一个很明显的暗示,但我浏览题目太快没有注意到,所以应填strcmp(a[i].name,a[j].name)
  • 改进: 下次要从头到尾把代码看一遍下来

转载于:https://www.cnblogs.com/wlgczjw/p/8044790.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值