C语言博客作业05--指针

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

1.1 思维导图

C语言博客作业05--指针_第1张图片

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

1.2.1学习体会

学习体会:光阴似箭,转眼间一个月又过去了,学习更加坦然了。这好比下棋,下棋少的人步步惊心很在乎输赢,下棋多的人不断到时觉得不是那么重要了,大概这是一种坦然。打代码总是有解不出来的题,一个人也有状态不好的一天,如果真的要在乎那么多,人生会变得很累。学习体会说说具体的,1.采用我自创的新的学习方法,开始跟上课堂进度了。2.指针数组这块内容不是特别难,只要用心一般都能跟上。3.学习了一些指针的知识,时间还是安排不过来,没有花太多时间复习,原因有几点,第一点是不知道要花多长时间复习,第二点是就算花了时间复习也很容易遗忘,第三点是知识还难以灵活应用,做习题时还是要查书。
不懂得地方:二维数组的指针还是不清楚,pta的一些题目用起指针很牵强,很想不用指针做,总的来说是不流畅。指针方面的思维还未建立。

1.2.2代码量

C语言博客作业05--指针_第2张图片

2.PTA总分

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

2.2我的总分:110

3.PTA实验作业

3.1PTA题目1

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

3.1.1算法分析

void Fun(char*p,int g)
   begin 
        g=g-1
        while(1)
            while((*(p+g)=='\n')且(g>=0))
               g--;
            if(g<0)then return;
            for(i=g;(*(p+i)!='\n')且(i>=0);i--)//由后往前寻找单词第一个字母的位置 
               n1=i;
            for(j=n1;(*(p+j)!='\n')&&(j<=g);j++)//输出单词 
                输出*(p+j)
                g=i;
            if(g<=0)  then return;
            while((*(p+g)=='\n')且(g>=0))
               g--;
            if(g>=0)
               输出空格
     end while
   end
主函数
    定义字符数组  a[500001];
    gets(a);
    g=strlen(a);
    for i =0 to g-1//除去重复的空格 
        if a[i]为空格
               then  a[i]='\n';
               end if
        end for
    Fun(a,g); 
end

3.1.2代码截图

C语言博客作业05--指针_第3张图片

3.1.3PTA提交列表及说明

C语言博客作业05--指针_第4张图片

Q1:这道题开始时审题不明,没有注意到需要是倒着输出字符串同时不能有重复的空格。
A1:审题清楚后开始作答,有得到一些分数。、
Q2:虽然得到了大部分分数,但是还有三个测试点没过。
A2:是格式错误,最后都会出现空格,这点我修改了条件,在循环语句开始时加入了一个判断,如果数组到了开头,不用输出空格。

4.大作业(5分)

4.1.改造函数介绍

1.函数1、

int Stage1()
{
    定义数组number1
    输入题目数
    while(1)
    {
        getchar();
        if输入的数据合法 then break  
                end if
        system("cls"); 
        getchar();
        输出"输入20000结束游戏,输入10000重新开始游戏\n"
        输出“请按正确的格式输入题目数\n"
    }
    system("cls");  //清屏
    if(number==20000)return 0;//输入20000结束游戏
    if(number==10000)return 3;//输入10000重新开始
    for i=1to number
           number1[0]=rand()%10+'0';
        number1[2]=rand()%10+'0';
        number1[3]='=';
        switch(rand()%4)//生成运算 
        {
            case 0:number1[1]='*';result=Result(number1);break;
            case 1:
            if(number1[2]=='0')
        
                  then     number1[2]='/';
            
              else
                  number1[1]='/';//转换为小数点后两位 
                   r esult=Result(number1);
                  result=(int)((result+0.005)*100);
                   result=(double)result/100;
                end if
            break;
            case 2:number1[1]='+';result=Result(number1);break;
            case 3:number1[1]='-';result=Result(number1);break;
                 end  switch
        if(number1[2]==0且number1[1]=='/')i--;
        else
            输出"输入20000结束游戏,输入10000重新开始游戏\n"
            if (number1[1]=='/') then printf("如果答案超过两位小数则四舍五入保留两位小数,输入结果\n");
                        end  if
            else printf("请输入结果\n");
            printf("%s",number1);
            while(1)
                    if  输入数据合法 then break
                            end  if
                    system("cls");
                    getchar();
                    printf("输入20000结束游戏,输入10000重新开始游戏\n") ;
                    printf("请按正确的格式输入结果!\n");
                    printf("%s",number1);;
            end while
            if(scanResult==20000)  then  return 0;
            else if(scanResult==10000)   then   return 3;
            else if(scanResult==result)
                    if(number1[1]=='/')
                             then  printf("答案是%.2f\n",result);
                        else printf("答案是%.0f\n",result);
                                        end if
                       IfRight();
                       right++;
                               else
                                           if(number1[1]=='/')
                                then printf("答案是%.2f\n",result);
                         else printf("答案是%.0f\n",result);
                                         end  if
                        IfWrong();
                        wrong++;
                                end if
        system("pause"); 
        system("cls");  
    }
    return 1;
}

C语言博客作业05--指针_第5张图片
C语言博客作业05--指针_第6张图片
C语言博客作业05--指针_第7张图片

2.函数2

double Result(char*p)
  begin
    for(;*p>='0'&&*p<='9';p++)//转换为十进制数 
       sum=sum*10+*p-'0';
        end for
       while(1)
        note=*p;//转换符号 
        if(note=='=')//返回结果 
          then  return sum;
                end  if
        p++;
        for(;*p>='0'&&*p<='9';p++)
            number1=number1*10+*p-'0';
         end for
        switch(note)//运算 
            case '+':sum=sum+number1;break;
            case '-':sum=sum-number1;break;
            case '*':sum=sum*number1;break;
            case '/':sum=1.0*sum/number1;break;
            end switch
        number1=0;//初始化
          end while
    end

C语言博客作业05--指针_第8张图片

3.函数3

int main()
begin
  int k;
  while(1)
         void print();
          int stage;//表示难度等级 
          srand(time(0));//生成随机数 
         
                print();
                printf("输入等级:");//等级判断 
                while(scanf("%d",&stage)==0||((stage!=1)&&(stage!=2)&&(stage!=3)&&(stage!=10000)&&(stage!=20000)))
            {
                system("cls");    
                getchar();//getchar( )用于吸收系统储存的数据 
                print();  
                printf("请按正确的格式输入等级\n");
                printf("输入等级:");
             }
                
             switch(stage)
            {
               case 1:k=Stage1();break;
               case 2:k=Stage2();break;
               case 3:k=Stage3();break;
               case 20000:printf("游戏结束");return 0;
               case 10000: system("cls"); continue; 
            }   
          if(k==0)//对数据进行判断 
           {
                printf("游戏结束");
                return 0;
           }
           if(k==1)
                        then
                CorrectRate();
                 system("pause");
                 printf("输入20000结束游戏,输入10000重新开始游戏") ;      
                 while(1)
                    system("cls");      
                    printf("输入20000结束游戏,输入10000重新开始游戏") ;
                    printf("\n输入:");
                    getchar(); 
                    scanf("%d",&k);
                    if(k==10000||k==20000)break;
                end if
                   if(k==20000)
                        then
                    printf("游戏结束");
                    return 0;
                       end if
              if(k==10000)
                         then
                      system("cls");    
                      continue; 
                      stage=0;
              end  if
            end if
           if(k==3)
                   then 
               system("cls");
               right=0;
               wrong=0;    
               continue; 
               stage=0;//结果清零 
          end if
       end while
  return 0;
end

C语言博客作业05--指针_第9张图片
C语言博客作业05--指针_第10张图片

4.3 与原有函数代码比较

1.函数1中,原代码采用定义两个数来储存数据,在当前代码中运算,新代码采用数组储存数据,调用函数进行运算。新代码显得更简洁,整个算式更完整,同时运用指针,传输速度快。
2.函数2的变化不大,和原来的代码相比运用了switch函数,整体框架更强。
3.函数3为新增函数,于原来的代码相比数据的完整性更强,可以处理字符型运算。

4.4 改进大作业总结

1.关于审题,我一开始一直不明白代码要怎么改,老师的题目看了很多遍,最后明白需要运用指针,传输字符串,通过字符串运算。
2.在设计新函数的过程中总是出错,发现自己遗忘了一些以前的知识比如switch函数要使用break。还用就是对循环语句及指针的移动把握不准,很容易犯边界错误。
3.时间安排不够,对大作业的完成时间不清楚,导致后面一直赶作业。

你可能感兴趣的:(C语言博客作业05--指针)