C语言博客05--指针

1.本章学习总结

1.1 思惟导图

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

1.2.1 学习体会

在本周指针的学习中,遇到了不少难点,运用起来很不熟练。好比说:

- 当指针指向一个数组的时候,该如何控制指针指向的地方。int a【10】,*p=a。此时指针指向数组的第一个元素。
- 如何用指针来调换两个数组的数据:先初始化m,n的值
char *p1=a[n], *p2=b[m],p3;
if(*p1!=‘\0’&&*p1!=‘\0’)
{
p3=*p1;
*p1=*p2;
*p2=p3;
p1++;p2++;}
在以后的内容学习中必定要先有较为扎实的基础知识才能更好地习得高等知识,要多多加油!

1.2.2 代码累计

2.PTA总分

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

2.2 个人总分:

指针 --- 110分(满分)算法

3.PTA实验做业

3.1 PTA题目1

题目一:编写一个解密藏尾诗的程序。

算法分析:

char *p,str[20],record[10];   定义字符型指针,两个字符型数组 
   int i,n;                      定义整形变量 
   record[0]=0;                  初始化一个字符型数组来存放最后结果 
   for(i=0;i<=3;i++) gets(str)   题目中明说有四句话,循环输入四次 
       n=strlen(str);            求出输入的长度 
       p = str; p=p+n-2;         读取最后一个字符(文字),由于一个汉字占两个字节,所以减二 
       strcat(record,p);         复制到结果数组中    end for 
        puts(record);            按要求输出藏尾诗

3.1.2 代码截图

3.1.3 PTA提交列表及说明

了解如何使控制指针指向指定位置,而后注意好字节的控制,最后进行输出。

4.大做业

4.1.改造函数介绍

改进内容:

1.构造字符数组存放算术表达式

伪代码分析:

int num1;                               定义整形变量 
    srand(time(NULL));                  随机数 
    if(level == 1) num1 = 4;            一二三级算式的长度 
    else if(level == 2) num1 = 9;       
    else num1 = 12;
    for(int i = 0;i < num1-1;i ++)
    {
        for(int x = 0;x < level;x ++)
            exp[i++] = rand() % 10 + '0';  产生随机一位数(字符型) 
        if(level == 1)
        {
            int t = rand() % 4;             +-*/的随缘取法 
        if (t == 0) exp[i] = '+';
        else if (t == 1) exp[i] = '-';
        else if (t == 2) exp[i] = '*';
        else if (t == 3) exp[i] = '/';
        }
        else
        {
            int t = rand() % 2;             +-的随缘取法 
        if (t == 0) exp[i] = '+';
        else if (t == 1) exp[i] = '-';
        }
    }
    exp[num1-1] = '=';                      算式的等号 
    exp[num1] = '\0';                       数组结束的地方 
                                                end

代码截图:


2.判断表达式是否合法

伪代码分析:

if(a == '/')          a为全局变量 
      {
        if(exp[2] == '0')   只有在除法运算中才会出现非法运算 
            return 0;       被除数为零,return 0; 
        if((exp[0]-'0') / (exp[2]-'0') == 1)
            return 0;       除不尽时,返回0 
      }
      return 1;             其余状况,视为成立。return 1
                  end

代码截图:

3.根据字符表达式,能计算其结果。

伪代码分析:

static int num_temp,numtemp[10],a=0,b=0;      初始化数据 
      char op_temp,optemp[2];                       
      for(int i = 0;exp[i];i ++)
        if(exp[i] >= '0' && exp[i] <= '9')
        {
            numtemp[a] = numtemp[a] * 10 + (exp[i] - '0');
            a ++;                                   计算数据(二位三位数的计算) 
          }
        else
        {
            optemp[b] = exp[i];                     存储运算符 
            b ++;
        }                                   end  for 
      for(int i = 0;i < b;i ++)
        switch (optemp[b])                          分状况讨论 
        {
        case('+'):numtemp[0] = numtemp[0] + numtemp[1];   
        if(level > 1)   numtemp[0] += numtemp[2]; break; 二级三级的运算有两步 
        case('-'):numtemp[0] = numtemp[0] - numtemp[1]; break;
        if(level > 1)   numtemp[0] -= numtemp[2];
        case('*'):numtemp[0] = numtemp[0] * numtemp[1]; break;
        case('/'):numtemp[0] = numtemp[0] / numtemp[1]; break;
        }                           end  for 
      return numtemp[0];                            返回答案  end

代码截图:


4.3 与原有函数代码比较

之前的代码是一个函数覆盖了创造算式、判断算式是否合理、判断答案正误、输出正答率等功能,比较繁琐(功能比较强大。。。),也就致使了灵活性趋近于zero;所以在此次大做业中,不得不对它进行大手术。如今的代码,做用明显且单一,具备客观的灵活性,易变通。

4.4 改进大做业总结

- 上一次的大做业难点在于怎么去制造随机数和时间处理上,还有第一次写,没有较好的控面能力,不能很好地把介绍语言、提示语言、画面整洁度提供给使用者。通过了一次的尝试,听了老师和同窗的讲解后对于这些内容已经初具模型,萌发出了本身的想法,期冀此次能够作得更好!
- 这一次的大做业要使用指针来记录字符数组的地址,进行存放算式。不能熟练地使用指针,所以在各个部分都有知识盲点存在(猛.虎.落.泪.),经过不断地查询资料,观看视频,询问同窗来慢慢改进代码!
- 注意事项:在之后的代码编写时,函数过多时必定要分开编写,不然很难调试;
相关文章
相关标签/搜索