zoukankan      html  css  js  c++  java
  • C语言博客05指针

    1.本章学习总结

    1.1 思维导图

    1.2 本章学习体会及代码量

    1.2.1学习体会

                                              指针是C的灵魂
    1.没学指针之前用数组比较多,调用函数时直接把整个数组传过去,但是这样对性能影响比较大,学了指针直接传地址就可以了。
    2.指针还可以实现子函数返回多个值;还可以利用指针可以实现动态内存分配。
    3.指针直接对内存操作 ,效率高,指针还用于表示和实现各种复杂的结构,从而为编写出更加高质量的程序奠定基础。
    4.但是指针编写的程序也更容易隐含各式各样的错误,一不小心就有可能引起程序崩溃。
    

    1.2.2 代码累计

    2.PTA总分

    2.1截图 PTA中的排名得分

    2.2 我的总分:

    PTA总分:110 分
    

    3.PTA实验作业

    3.1 PTA题目1

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
    输入格式:
    测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,
    其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
    输出格式:
    每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
    输入样例:
    Hello World Here I Come
    输出样例:
    Come I Here World Hello

    3.1.1算法分析(递归法)

    void strput(char *str)   定义输出函数 
      定义静态变量flag=0        
      定义字符指针temp = strchr(str,' ') //寻找空格地址 
      if  temp 等于 NULL then 
             if strlen(str)不为0  then   //str长度为零不输出 
                flag=1;                //如果字符串长度不为零 flag=1 
                输出str
         end if 
      else
          strput(temp + 1)     //递归 
          *temp = '\0'         //把空格改为\0 
          if strlen(str)不为0并且flag等于1  then     //如果字符串为0不输出 并根据flag的值选输出方式 
              输出" str"
          else
      	      输出str
          end if 
    end if
    
    主函数
      定义字符数组 str[500011]
      gets(str) //读取字符数组 
      strput(str) //调用输出函数
    

    3.1.2 代码截图

    3.1.3 PTA提交列表及说明

    • 开始用二维数组结果内存太大最后一个点过不了,后来改为递归
    • 刚开始没有这个语句“if strlen(str)不为0 then //str长度为零不输出 ”导致

    4.大作业

    4.1函数算法分析(二合一)

       声明全局变量 n   //n与难度有关
       void CreateExp(int *result)  
       {
        srand(time(NULL))     //随机种子 
        int ret //中转变量 
        char tistr[40]={0}   //放式子 
        int num1,num2,num3   //放随机数 
        char ch1,ch2        //放运算符 
        随机数num1生成       //第一个数 
        itoa(num1, tistr, 10)//把num1接到tistr 
        运算符生成ret 
        switch(ret)     
        {
    	case 0:ch1='+';break;      
    	case 1:ch1='-';break;		
    	case 2:ch1='*';
    	if(n==1000)  ch1='+'; //为了给小学生减少压力,第三级没有乘除 
    	break;
    	case 3:ch1='/';
    	if(n==1000)  ch1='-'; //为了给小学生减少压力,第三级没有乘除 
    	break;
        }
        tistr[strlen(tistr)]=ch1;   //放运算符 
        do
        {
    	    num2=rand()%n;   //第二个数   
    	    if(num2!=0&&ch1=='/'&&num1!=0)    //对除法做处理 (相当于第二个函数)
    	    {
    		if(((num1%num2)!=0||num1<num2))
    		{
    			num2=0;
    		}
    	    }
        } while(num2==0);
        然后重复生成 
        *(tistr+strlen(tistr))='='
        *(tistr+strlen(tistr))=0    //式子生成结束 
           输出tistr
      }	
      //结束函数
    
    • 代码截图


    4.2函数算法分析

    void ComputeExp(char *tistr,int *result)
    {
        定义整型  num[3]={0}   j=0     i
        定义字符     ch1   ch2  
        for     i=0    直到  tistr[i] 等于 '='     i++     //把放运算式子的字符串解开
        {
    	    if    tistr[i]>='0'&&tistr[i]<='9'  then
    
    		    num[j]=tistr[i]-'0'+num[j]*10     //数字放到num数组
    
    	    else    then
    	
    	  	if(j==0) ch1=tistr[i];    //运算符放到  ch1  ,ch2
    		if(j==1) ch2=tistr[i]; 
    	  	j++;	
    	    end  if 
        }
            end for
     switch(ch1)       //对运算符进行判断
        {
    	    case '+':*result=num1+num2;break;    //进行对应的计算
    	    case '-':*result=num1-num2;break;
    	    case '*':*result=num1*num2;break;
    	    case '/':*result=num1/num2;break;
        }
        switch(ch2)             //解决优先级问题 (枚举) 
            {
    		case '+':*result=*result+num3;break;    
    		case '-':*result=*result-num3;break;
    		case '*':
    		if(ch1=='+') *result=num1+num2*num3;
    		if(ch1=='-') *result=num1-num2*num3;
    		if(ch1=='*') *result=*result*num3;
    		if(ch1=='/') *result=*result*num3;break;    //如果第一步是加或减,第二步的乘或除要先算
    		case '/':
    		if(ch1=='+') *result=num1+num2/num3;
    		if(ch1=='-') *result=num1-num2/num3;
    		if(ch1=='*') *result=*result/num3;
    		if(ch1=='/') *result=*result/num3;
    		break;
            }	
    
    • 代码截图

    4.2 与原有函数代码比较

    1.传的参数少了不用返回值;
    2.处理除数更全面。
    3.之前都是一个函数,封装之后更加容易理解,整个结构更加灵活。
    

    4.3 改进大作业总结

    1.包装后各个函数的干扰减少,代码结构也更加清晰,移值性强。
    2.通过找百度学会了用箭头来选择,布局也更加协调。
    3.之前我是不怎么细分函数的,就是觉得比较方便,写起来也快,然后听取老师建议分装,然后发现分装好的函数没有之前这么绕,什么函数什么功能一目了然,对于写代码的人,找错只需盯一小函数,而不是一片代码,还要一条条理清楚,对于读代码的人,就是不用自己推理代码的功能,一个函数一个功能,条理清晰。(不好的习惯尽量纠正,毕竟一个大项目不可能一个人完成,团队合作对代码的分装要求就比较高了)
    * 最后上几个截图
    





  • 相关阅读:
    Microsoft Artificial Intelligence Conference(2018.05.21)
    Insider Dev Tour(2018.06.28)
    AWS re:Invent(2019.01.09)
    OPPO Developers Conference(2018.12.26)
    Tencent Cloud Developers Conference(2018.12.15)
    China Intelligent Office Summit(2018.11.21)
    International Programming Retreat Day(2018.11.17)
    Intel Artificial Intelligence Conference(2018.11.14)
    OSC Source Code Innovation Salon(2018.10.20)
    Java CAS 比较并且更换值
  • 原文地址:https://www.cnblogs.com/codedawn/p/10107889.html
Copyright © 2011-2022 走看看