• C语言博客05--指针


    1.本章学习总结

    1.1 思维导图

    1.2 本章学习体会及代码量学习体会

    1.2.1 学习体会

    • 指针的概念和地址有关,有点抽象,刚接触时理解起来有点困难。懂得它的指向后可以理解。
    • 指针在使用时需搞清楚什么时候加*,什么时候不加*。注意传进去的是地址,在适当的地方加上取地址符&
    • 通过指针能改变原有所指向的值,利用此点可以在函数中运用,不必考虑返回值。
    • 做指针题时最好把关系图画出来,这样可以思路清晰一点。

    1.2.2 代码累计

     

    2.PTA总分

    2.1截图PTA中函数题目集的排名得分

     

    2.2 我的总分:

    • 总分:110分

    3.PTA实验作业

    3.1 PTA题目1

    说反话-加强版:

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

    3.1.1 算法分析

    • char a;
      每个单词长度word=0
      gets(a);
      句子长度len=strlen(a)
      for(i=len-1;i>=0;i--)
      {
        if(a[i]!=空格)word++
        else if(word!=0) {
        for(i+1<=j<=i+word) printf(a[j])
         word初始为0     } end for
      } end for
      for循环结束后,以输入空格为参照,开始时未输入空格,再单独输出第一个单词
      for(j=0;j<word;j++) printf(a[j]); end for

    3.1.2 代码截图

     

    3.1.4 PTA提交列表及说明

     

    • 刚开始采用字符数组的方法来做,因未设置好多个空格的情况,导致输出错误。
    • 后改用二维数组的方法做,把每个单词的位置作为行,长度作为列,但循环设置出现问题,输出错误
    • 改进二维数组,发现此方法不合适。
    • 又改为字符数组来做,充分考虑多空格情况后,答案正确

    4.大作业

    4.1.改造函数介绍

    1.函数1

    • 构造字符数组存放算术表达式:

      不管哪个级别的算式,请都生成一个字符数组存放

    CreateExp(char *exp,int level) 传入算式与选择的难度 定义运算符:char op1,op2,op3(op2与op3作为难度二三的运算符,op1为难度一的) int i=rand()%4;控制随机生成运算符 int a,b;作为随机数 switch(i) { case 0:op= case 1:op= case 2:op= case 3:op= }end switch switch(level) { case 1:生成一位数一步加减乘除运算,存入exp; case 2:生成两位数两步加减乘除运算,存入exp; case 3:生成三位数两步加减乘除运算,存入exp; } end switch;

    • 代码截图:

    2.函数2

    • ComputeExp(char *exp)传入运算式
      定义m存放每个数,sum求和.
      char c,oldc;c每次为运算式每个元素,oldc作为运算符
      int j=0;
      do
      {
         c=exp[j];
      
          if( c<='9'&&c>='0' ) 
                 m = 10*m + c - '0';
          else {
          oldc=+, sum+=m
            oldc=-, sum-=m
           oldc=*, sum*=m
          oldc=/, sum/=m
          }
      }while(c=='=') end do;
       return sum;
    • 截图函数代码:

    3.函数3,4

    输出正确、错误信息,并统计正确的题数,错误的题数:
    void correct()
    {
       正确次数+1switch(rand()%3)
    {
    
       case 0:printf("回答正确!good
    ");break;
       case 1:printf("答案正确!!
    ");break;
       case 2:printf("对了,good
    ");break;
    }
    } end;
    void wrong(void)
    {
        错误次数+1
        printf("回答错了啊!
    ");
    } 
    • 代码截图:

    4.函数5

    • 退出后计算正确率。
    •  double rate;
       rate=1.000*正确次数/总次数;  //计算正确率
    • 代码截图:

    5.运行截图

    4.3 与原有函数代码比较

    •  函数1:

    • 这一次的函数1按照老师给的要求:不管哪个级别的算式,都生成一个字符数组存放。根据选择难度的不同,生成对应的运算式;原来的函数是按照不同的等级来分装,每一次都重新生成一个运算式,比较麻烦.
    • 函数2:

    • 这一次的函数2是把运算式传入此函数中,通过这个函数的运算,来计算运算式的结果,并把结果返回主函数;原来的函数是在每一等级中计算结果,并判断用户所输入的结果是否正确,计算次数较多,比较麻烦。
    • 函数3,4,5

    • 这一次输出正确信息、错误信息以及正确率时,通过多个函数来分别分装,减少了主函数中的内容,使主函数更加简洁。以前的大作业中没有设置这些函数,而是在每个等级的函数中直接运算出来并输出。

    4.4 改进大作业总结

    • 这次的大作业改进了不少,函数基本全都换掉了,但其中的一些思想:比如生成随机数与随机运算符、计算正确率、退出与否,还是按照原来的方法。第一次按照等级来分装函数,思路简单,但代码量大;这一次按照运算式和计算来分装,显的简洁一些。
    • 问题:在函数的传入与返回之间有的还是有些疑惑,编写中在一个函数中调用了另一个函数的值,发现根本调用不了。在判断计算式是否正确的函数中碰到许多问题,就没有编写判断运算式是否合法这个函数。
  • 相关阅读:
    HTMLDOM
    换行
    【iOS】APP之数据存储
    开启远程XUL
    iOS之Streams
    Plugin的生命周期
    ActiveX Control Test Container
    ObjectiveC Runtime III【objc_msgSend函数】
    What is a Digital Signature?
    JS变量作用域
  • 原文地址:https://www.cnblogs.com/qqcom/p/10120255.html
Copyright © 2020-2023  润新知