zoukankan      html  css  js  c++  java
  • 第一次作业

    题目

    1.证明P++等价于(p)++还是等价于*(p++)?

    #include <stdio.h>
    int main()
    {
        int a=5;
        int *p=&a;
        printf("p=%d
    ",p);              //p=6487620
        printf("p++=%d
    ",p++);          //p++=6487620
        p=&a;
        printf("(p)++=%d
    ",(p)++);      //(p)++=6487620
        printf("*(p++)=%d
    ",*(p++));    //*(p++)=6487628
     }
    

    2 题目6-1 计算两数的和与差

    (1) 实验代码

    #include<stdio.h>
    void sum_diff( float op1, float op2, float *psum, float *pdiff );
    
    int main()
    {
        float a, b, sum, diff;
    
        scanf("%f %f", &a, &b);
        sum_diff(a, b, &sum, &diff);
        printf("The sum is %.2f
    The diff is %.2f
    ", sum, diff);
    	
        return 0; 
    }
    
    void sum_diff( float op1, float op2, float *psum, float *pdiff )
    {
      *psum=op1+op2;
      *pdiff=op1-op2;
    }
    

    (2) 设计思路
    主要描述题目算法
    第一步:由题可得,形参和实参相关联,故若求两数之和就直接进行形参相加;
    第二步:求两数之差的原理和求和原理相似;

    (3)本题调试过程中碰到的问题及解决方法
    本题没有问题。

    题目6-2拆分实数的整数与小数部分

    (1)实验代码

    void splitfloat( float x, int *intpart, float *fracpart )
    {
      *intpart=(int)x;
      *fracpart=x-(int)x;
    }
    

    (2)设计思路
    主要描述题目算法
    第一步:求整数,就直接用int强转即可;
    第二步:求小数部分,就是用原数减去整数部分即可;

    (3)本题调试过程中碰到的问题及解决方法
    本题没有问题

    题目6-3在数组中查找指定元素

    (1)实验代码

    int search( int list[], int n, int x )
    {
      int i,index;
      for(i=0;i<n;i++)
      {
        if(list[i]==x)
        {
         index=i;;
         break;
        }else
        {
          index=-1;
        }
      }
      return index;
    }
    

    (2)设计思路
    第一步:首先定义一个循环变量;
    第二步:要查找指定元素,就遍历数组,再用if条件进行判断;
    流程图

    (3)本题调试过程中碰到的问题及解决方法
    开始用的是continue而不是break,发现只需要直接结束循环就能实现找到元素,所以最后修改成了break。

    6-4找最大值及其下标

    (1)实验代码

    int fun(int *a,int *b,int n)
    {
      int i;
      for(i=0;i<n;i++)
      {
        if(a[i]>*a)
        {
          *a = a[i];
          *b = i;
        }
      }return *a;
    }
    

    (2)设计思路
    第一步:先定义循环变量;
    第二步:遍历数组并用if条件进行判断;
    流程图:

    (3)本题调试过程中碰到的问题及解决方法
    本题没有问题;

    6-5最小数放前最大数放后

    (1)实验代码

    #include<stdio.h>
    void input(int *arr,int n)
    {
      int i=0;
      for(i=0;i<n;i++)
      {
        scanf("%d",&arr[i]);
      }
    }
    void max_min(int *arr,int n)
    {
      int j=0,x=0,y=n-1;
      for(j=0;j<n;j++)
      {
        if(arr[x]>arr[j])
        {
          int t;
          t=arr[x];
          arr[x]=arr[j];
          arr[j]=t;
        }
      }
      for(j=n-1;j>0;j--)
      {
        if(arr[y]<arr[j])
        {
          int k;
          k=arr[y];
          arr[y]=arr[j];
          arr[j]=k;
        }
      }
    }
    void output(int *arr,int n)
    {
      int a=0;
      for(a=0;a<n;a++)
      {
        printf("%3d",arr[a]);
      }
    }
    

    (2)设计思路
    第一步:本题有三个接口,第一个是数组存入;
    第二步:第二个接口就是进行题目要求的进行操作,首先用遍历的方法进行找最小值,并把它放到第一位,之后再找最大值放到最后一位;
    第三步:第三个接口,把数组输出;
    流程图:
    (3)本题调试过程碰到问题及解决办法
    本题没有问题;

    6-6指针选择法排序

    (1)实验代码:

    void sort(int *x,int n){
    int i,j,t;
    for(j=1;j<10;j++)
    {
      for(i=0;i<10-j;i++)
      {
        if(*(x+i)<*(x+i+1))
        {
          t=*(x+i);
          *(x+i)=*(x+i+1);
          *(x+i+1)=t;
        }
      }
    }
    }
    

    (2)设计思路
    第一步:本题和上学期学过的冒泡排序和选择排序法相似,就是在加上指针。其实和上学期大同小异。
    第二步:进行冒泡排序之后再返回结果;
    流程图:

    (3)本题调试过程碰到问题及解决办法
    本题没有问题,和上学期的内容较为相似;

    6-7判断回文字符串

    (1)实验代码

    bool palindrome( char *s )
    {
      int i=0,j=0,result=1;
      char *b = s;
      for(;*b != '';b++) {
        i++;
      } 
      for(; *s != '';s++,j++) {
        if(*(s) != *(b-j-1)) {
            result = 0;
          }
      }
        return result;
    }
    

    (2)设计思路
    第一步:回文判断原理就是关于中心字母左右对称;
    第二步:根据上述原理,首先定义两个变量,之后遍历数组,再进行以中心为轴左右进行对比;
    第三步:在对比过程中,若有不相同即跳出判断不是回文,反之为回文;
    流程图

    (3)本题调试过程碰到问题及解决办法

    6-8使用函数实现字符串部分复制

    (1)实验代码

    void strmcpy( char *t, int m, char *s )
    {
        int i = 0;
        char *b = t;
        for(;*b!='';b++) {
            i++;
        }
        if(m>i) {
        *s='';    
        } else {
            for(;*t!='';s++,t++)
            *s = *(t+m-1);
        }
        *s = '';
     return 0;
    }
    

    (2)设计思路
    第一步:首先把已知字符数组给空数组;
    第二步:之后再根据题目要求之后再进行赋值操作;
    (3)本题调试过程碰到问题及解决办法
    这个题是在网上查找答案因为自己不会做,看了很多遍也自己打了很多遍,所以没有问题。

    作业要求三

    (1)总结两周所学的知识点有哪些学会了?哪些还没有学会?

    这两周主要学习了指针的用法和作用,最主要应该掌握的应该是指针在数组中的运用,而且函数调用在指针的用法中也尤为主要,上学期字符的应用自己掌握的不是很好,需要多多看书并且多加练习。

    (2)PTA作业源代码上传Git

     Git超链接:
    

    地址
    上传截图:

    (3)点评3位同学本周作业,并邀请3位同学点评作业
    (4)表格和折现图记录学习情况
    表格:

    折线图:

  • 相关阅读:
    数据库索引的作用和长处缺点
    iOS安全攻防(三):使用Reveal分析他人app
    SVN server的搭建
    腾讯2014年实习生招聘笔试面试经历
    JAVA数组的定义及用法
    一年成为Emacs高手(像神一样使用编辑器)
    给想上MIT的牛学生说几句
    四个好看的CSS样式表格
    dede 留言簿 多个
    破解中国电信华为无线猫路由(HG522-C)自己主动拨号+不限电脑数+iTV
  • 原文地址:https://www.cnblogs.com/wshjw/p/8635452.html
Copyright © 2011-2022 走看看