第五次做业---指针

1.本章学习总结(2分)

1.1 思惟导图

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

1.2.1 学习体会

实际上仍是没怎么明白该怎么用指针,指针的题集实际上都是用数组写的,感受没什么区别又好像颇有区别,使人头疼。感受进度好快,有点赶不上,题集刷得慢,概念不清晰,甚至连有的编译错误都由于概念上的不清晰难以找出错误。整个写题过程都充满了不肯定,不自信,不明白。明明本身写得没有问题,但却老以为都是问题。特别难受。若是光是看的话,多多少少是能够看明白的,本身写就有一点点悬。

1.2.2 代码累计

2.PTA总分(2分)

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

2.2 个人总分:

110分

3.PTA实验做业(1分)

3.1 PTA题目1

字符串的冒泡排序算法

3.1.1 算法分析

int i,j;
int N,K;
char s[110][20],temp[20];
scanf("%d %d",&N,&K);
i from 0 to N   scanf("%s",s[i]);
i from 0 to K
    j from 0 to N-i-1
      if(strcmp(s[j],s[j+1])>0)       //字符串比较
        strcpy(temp, s[j]);              //字符串复制
        strcpy(s[j], s[j+1]);
        strcpy(s[j+1], temp);
      end if
i from 0 to N     printf("%s\n",s[i]);

3.1.2 代码截图

3.1.4 PTA提交列表及说明


- 整个代码就是对字符串函数运用理解不够清晰,因此总是错,原本总体是不会有什么大问题,可是由于理解不清晰,因此有的时候直接进行比较或者=,就致使结果老是不对。数组

4.大做业(5分)

题目:实现小学四则运算。
在函数那章,咱们已经实现小学四则运算这份做业,如今要求你们把以前设计函数升级改造,原来的函数你们都是用全局变量实现不一样函数参数传递,此次做业要求改地址传递,减小全局变量的使用。函数

题目要求:
题目有3个难度级别,分别为:学习

第一级是1位数的一步加减乘除计算
第二级是2位数的2步加减运算
第三级是3位数的2步加减运算
改进内容:
1.构造字符数组存放算术表达式
无论哪一个级别的算式,请都生成一个字符数组存放。无论用户选择哪一个级别题目,都能在表达式生成函数中生成一个算术式子。具体函数接口
j=0;
exp[j]=rand()%9+1;
j++;
cr[0]=ch[rand()%4];
exp[j]=rand()%9+1;
j++;
printf("%d%c%d",exp[0],cr[0],exp[1]);
printf("=");
2.表达式是否合法(选作)
对于不合法或者超出该级别小学生学习范围的表达式,视为不合法,需重造一个。不合法表达式体现有除数为0的表达式、1,2级别中出现不能整除的除法表达式或其余不合法状况设计

double calculate(int *exp,char *c,int n)
{
double answer=0;
int i;
answer=exp[0];
for(i=1;i<n;i++)
    switch(c[i-1])
  {
     case '+':answer+=(double)exp[i];
     break;
     case '-':answer-=(double)exp[i];
     break;
     case '*':answer*=(double)exp[i];
     break;
     case '/':if(exp[i]!=0) answer/=(double)exp[i];
    else  printf("ERROR\n");break;
  }

return answer;
}

3.表达式运算
根据字符表达式,能计算其结果。有能力同窗深刻研究表达式优先级。3d

这块代码能够参考这题作法:指针

#include <stdio.h>
int main()
{ 
  int m=0, sum=0;
  char c, oldc='+';
  do {
    c = getchar();
    if( c<='9'&&c>='0' ) 
        m = 10*m + c - '0';//1
    else 
         {
          if( oldc == '+' )
           sum += m;
          else 
           sum -= m;
          m = 0;//2
          oldc = c;
         }
} while(c!='=');
printf("sum=%d", sum);
return;
}

4.1.改造函数介绍

主要上述三个函数的改造说明code

1.函数1
伪代码介绍函数思路blog

int a,b,c,i,t,m,j=0;
    char ch[4]={'+','-','*','/'},cr[3];
    int exp[100],right=0;
    double answer,response;
    if(implement==1)
           i from 0 to num
           j=0;
           exp[j]=rand()%9+1;
           j++;
           cr[0]=ch[rand()%4];
           exp[j]=rand()%9+1;
           j++;
           printf("%d%c%d",exp[0],cr[0],exp[1]);
               printf("=");
        answer=calculate(exp,cr,2);
        scanf("%lf",&response); 
        if(response==0&&answer!=0)  break;
        if(response!=answer)
            printf("不对噢  下一题继续努力\n正确答案是 %.2lf\n",answer );
        if(response==answer)
            printf("恭喜你答对啦  继续保持啊\n");
            right++;
        end if
    if(implement==2||implement==3)
        for(i=0;i<num;i++)
            j=0;
        if(implement==2)
            exp[j++]=rand()%90+10;
            cr[0]=ch[rand()%2];
            exp[j++]=rand()%90+10;
            cr[1]=ch[rand()%2];
            exp[j++]=rand()%90+10;
      else if(implement==3)
            exp[j++]=rand()%900+100;
            cr[0]=ch[rand()%2];
            exp[j++]=rand()%900+100;
            cr[1]=ch[rand()%2];
            exp[j++]=rand()%90+10;
        
        printf("%d%c%d%c%d",exp[0],cr[0],exp[1],cr[1],exp[2]);
        printf("=");
        answer=calculate(exp,cr,3);
        scanf("%lf",&response); 
        if(response==0&&answer!=0)  break;
        if(response!=answer)
            printf("不对噢  下一题继续努力\n 正确答案是 %.2lf\n",answer);
        if(response==answer)
            printf("恭喜你答对啦  继续保持啊\n");
            right++;
      end if
     doExercise( right,num);

截图函数代码。


排序

2.函数2
伪代码介绍函数思路

double answer=0;
      int i;
      answer=exp[0];
      i from 1to n
         switch(c[i-1])
           case '+':answer+=(double)exp[i];
           break;
           case '-':answer-=(double)exp[i];
           break;
           case '*':answer*=(double)exp[i];
           break;
           case '/':if(exp[i]!=0) answer/=(double)exp[i];
           else  printf("ERROR\n");break;
    return answer

截图函数代码。

3.函数3
伪代码介绍函数思路

double correctRate;
    printf("您一共作了%d道题,共作对%d道题",num,right);
    correctRate=(1.0*right)/num;
    printf("您的正确率是 %.2lf",correctRate)

截图函数代码。

4.3 与原有函数代码比较

改造前的函数主要是按照三个等级来直接分类,比较直接且暴力,并且使用了大量的全局变量;改造后的就是按照等级,计算和判断正确率来分类,而后就是一层套一层,其实好像也挺暴力的。可是,第一种就每一个函数其实作的事情都差很少,像是其实就在重复三件相同的事情,没有起到函数应该有的效果。

4.4 改进大做业总结

  • 两次代码最直接的问题就是无从下手吧,不知道要怎么作,头秃。
  • 相比于第一次的代码,这一次的函数运用比上一次的直接三个等级会麻烦一些,而后本身实际上没怎么完整的使用过函数,业务不熟练,总是有这里那里的小错误,致使代码没办法运行。
  • 又由于用了数组,数组在函数的传递本身又不是很明确,总是搞不清楚。不过通过这回的大做业,仍是明确了不少。
相关文章
相关标签/搜索