码迷,mamicode.com
首页 > 编程语言 > 详细

C语言博客05--指针

时间:2018-12-16 14:44:29      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:全局变量   str   算法   ima   难度   不为   null   复杂   and   

1.本章学习总结

1.1 思维导图

技术分享图片

1.2 本章学习体会及代码量

1.2.1学习体会

              指针是C的灵魂,用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    //式子生成结束 
    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;
    }   
输出tistr
  } 
  //结束函数
  • 代码截图
    技术分享图片
    技术分享图片
    技术分享图片

4.2 与原有函数代码比较

1.传的参数少了;
2.处理除数更全面。

4.3 改进大作业总结

1.使用指针传参数就不要return了,更何况有时候要返回几个数。

C语言博客05--指针

标签:全局变量   str   算法   ima   难度   不为   null   复杂   and   

原文地址:https://www.cnblogs.com/1814-com/p/10107889.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!