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\n");break;
   case 1:printf("答案正确!!\n");break;
   case 2:printf("对了,good\n");break;
}
} end;
void wrong(void)
{
    错误次数+1
    printf("回答错了啊!\n");
} 
  • 代码截图:

4.函数5

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

5.运行截图

 

4.3 与原有函数代码比较

  •  函数1:

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

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

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

4.4 改进大作业总结

  • 这次的大作业改进了不少,函数基本全都换掉了,但其中的一些思想:比如生成随机数与随机运算符、计算正确率、退出与否,还是按照原来的方法。第一次按照等级来分装函数,思路简单,但代码量大;这一次按照运算式和计算来分装,显的简洁一些。
  • 问题:在函数的传入与返回之间有的还是有些疑惑,编写中在一个函数中调用了另一个函数的值,发现根本调用不了。在判断计算式是否正确的函数中碰到许多问题,就没有编写判断运算式是否合法这个函数。
posted @ 2018-12-17 17:00  郭坤  阅读(193)  评论(1编辑  收藏  举报