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


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

    1.1 思维导图

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

    1.2.1学习体会

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

    1.2.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)=='
    ')且(g>=0))
        		   g--;
        		if(g<0)then return;
        		for(i=g;(*(p+i)!='
    ')且(i>=0);i--)//由后往前寻找单词第一个字母的位置 
        		   n1=i;
        		for(j=n1;(*(p+j)!='
    ')&&(j<=g);j++)//输出单词 
        		    输出*(p+j)
        		    g=i;
        		if(g<=0)  then return;
        		while((*(p+g)=='
    ')且(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]='
    ';
                   end if
            end for
      	Fun(a,g); 
    end
    

    3.1.2代码截图

    3.1.3PTA提交列表及说明

    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重新开始游戏
    "
    		输出“请按正确的格式输入题目数
    "
    	}
    	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重新开始游戏
    "
    			if (number1[1]=='/') then printf("如果答案超过两位小数则四舍五入保留两位小数,输入结果
    ");
                            end  if
    			else printf("请输入结果
    ");
    			printf("%s",number1);
    		    while(1)
    		            if  输入数据合法 then break
                                end  if
    					system("cls");
    					getchar();
    					printf("输入20000结束游戏,输入10000重新开始游戏
    ") ;
    					printf("请按正确的格式输入结果!
    ");
    					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
    ",result);
    				        else printf("答案是%.0f
    ",result);
                                            end if
    				       IfRight();
    				       right++;
                                   else
                                               if(number1[1]=='/')
    				                then printf("答案是%.2f
    ",result);
    				         else printf("答案是%.0f
    ",result);
                                             end  if
    				        IfWrong();
    			 	        wrong++;
                                    end if
    	    system("pause"); 
    	    system("cls");  
        }
        return 1;
    }
    



    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
    

    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("请按正确的格式输入等级
    ");
    				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("
    输入:");
    					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
    



    4.3 与原有函数代码比较

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

    4.4 改进大作业总结

    1.关于审题,我一开始一直不明白代码要怎么改,老师的题目看了很多遍,最后明白需要运用指针,传输字符串,通过字符串运算。
    2.在设计新函数的过程中总是出错,发现自己遗忘了一些以前的知识比如switch函数要使用break。还用就是对循环语句及指针的移动把握不准,很容易犯边界错误。
    3.时间安排不够,对大作业的完成时间不清楚,导致后面一直赶作业。
    
  • 相关阅读:
    SqlBulkCopy 类
    JavaScript的写类方式(2)——转
    asp.net在使用母版页的内容页面中动态加载css和js文件的方法
    .net数据绑定在HTML里有条件判断语句的写法
    c# winform实现网页上用户自动登陆,模拟网站登录
    DataSet DataTable获得总记录数
    DataSet,DataTable,DataReader,DataAdapter有什么联系
    asp.net的前台引用后台变量
    C#生成不重复随机数的两个函数
    SQL2008导出数据到远程数据库导致主键丢失、标识规范为否的解决办法
  • 原文地址:https://www.cnblogs.com/1112wlt/p/10127147.html
Copyright © 2020-2023  润新知