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

    作业要求一

    请将pta作业编程题目的解题思路和调试过程记录在博客中,每道题目的具体格式如下:

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

    1.设计思路

         (1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
             第一步:函数里的psum、pdiff为指针变量,把a赋值给op1,b赋值到op2,&sum赋值到psum,&diff赋值到pdiff
             第二步:对*psum及*pdiff进行赋值

             第三步:输出结果

    2.实验代码

    void sum_diff(float op1,float op2,float *psum,float *pdiff)
    { 
      *psum=op1+op2;
      *pdiff=op1-op2;
    

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

    1.设计思路

         (1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
             第一步:函数里的intpart、fracpart为指针变量,x赋值给x,&intpart赋值给intpart, &fracpart赋值给fracpart
             第二步:用int定义整型函数
             第三步:用减法定义小数部分计算式

    2.实验代码

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

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

    1.设计思路

         (1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
             第一步:通过主函数可得定义整型变量 j, list[], n, x, q, index
             第二步:设q=-1,利用for循环,遍历数组,当有一个对应元素时,跳出循环

             第三步:若x等于list[q],则返回q的值,若没有,则使index为-1

          (2)流程图

              

    2.实验代码

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

    6-4 找最大值及其下标

    1.设计思路
         (1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
             第一步:定义一个长度为10的数组,用j记录最大值对应的下标
             第二步:令max=a[0],遍历数组

             第三步:利用for循环输入a[i]的值,根据被调用函数比较出a、&p、N的最大值;

             第四步:输出所得的最大值和p的值
          (2)流程图
              
    2.实验代码

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

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

    1.设计思路
         (1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
             第一步:调用题目中定义的input(int *arr,int n)函数,定义i,使用for循环结构,当i小于元素个数n时,输入arr数据,函数调用结束
             第二步:调用函数max_min(int arr,int n),遍历数组,使得最大值位于函数元素的首位,最小值位于函数元素中的最后一位

             第三步:调用函数 output(int *arr,int n) ,遍历数组,按照格式输出arr数组中的元素
          (2)流程图

    2.实验代码

        void input(int *arr,int n){
            int i;
            for(i=0;i<n;i++){
                scanf("%d",arr+i);
            }
        } 
        void max_min(int *arr,int n){
            int min=arr[0],max=arr[0];
            int i,temp;
            int q=0,w=0;
            for(i=0;i<n;i++){
                if(min>*(arr+i)){
                    min=*(arr+i);
                    q=i;
                } 
                if(max<*(arr+i)){
                    max=*(arr+i);
                    w=i;
                }
            }
            temp=*(arr+0);*(arr+0)=*(arr+q);*(arr+q)=temp;
            temp=*(arr+n-1);*(arr+n-1)=*(arr+w);*(arr+w)=temp;
        }
        void output(int *arr,int n){
            int i;
            for(i=0;i<n;i++){
                printf("%3d",*(arr+i));
            }
        }

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

          错误信息:
           错误原因:取地址时*arr+i缺括号,取地址对象错误。
           改正方法:
    对于整体取地址,括号位置应为*(arr+i)

     

    6-6指针选择法排序  

    1.设计思路
         (1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
             第一步:定义指针变量p、循环变量i、和一个数组,将数组首元素的地址赋值给指针变量p
             第二步:使用选择排序法对数组进行从大到小的排序,输出数组元素
          (2)流程图
           
    2.实验代码

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

    3.本题调试过程碰到问题及解决办法
          错误信息:
           错误原因:for循环初始值表达错误,对指针理解不清晰
           改正方法:通过查找资料对for循环知识进行巩固
       

    6-7 判断回文字符串

    1.设计思路
         (1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
             第一步:定义字符数组s[20],输入字符串赋值给s
             第二步:用循环结构,判断在数组元素内是s[i]与s[j]是否相等。若是,则返回true;若不是则返回false
          (2)流程图

    2.实验代码

        bool palindrome( char *s ){
            int i,count=0,q;
            count=strlen(s);
            q=count/2;
            for(i=0;i<q;i++){
                if((*(s+i))!=(*(s+count-i-1))){
                    return(false);
                }
            }
            if(i==q){
                return(true);
            }
        }

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

        错误信息:
     错误原因:
    指针定义错误,缺少函数指标
     改正方法:
    添加strlen(s)函数定义,取地址时*后加括号

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

    1.设计思路
         (1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
             第一步:定义两个字符数组t[20],s[20],m,输入一个数赋给m
             第二步:调用函数strmcpy,并通过for循环条件,输出字符数组s
          (2)流程图
         
    2.实验代码

        void strmcpy( char *t, int m, char *s ){
            int i;
            for(i=m;*(t+i-1)!='';i++){
              *(s+i-m)=*(t+i-1);
            }
            *(s+i-m)='';
        }

    要求三、学习总结和进度

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

           学习了指针及其应用,用指针变量做函数参数,还有数组指针和字符指针。了解了在引用数组元素的时候,指针变量和数组之间的相互转化。但是对函数的掌握还是不熟练,对字符串与指针的组合题目掌握不熟练,对*()的应用还要多加练习。

    2、将PTA作业的源代码使用ggit地址it提交到托管平台上,要求给出上传成功截图和你的git地址。

    git地址:https://git.coding.net/Downager/180325.git

    3、点评3个同学的本周作业(在作业中给出被点评同学博客的链接),并邀请3名同学点评你的作业。

    http://www.cnblogs.com/sun031915/  http://www.cnblogs.com/phsudie/  http://www.cnblogs.com/gu-an-cheng-wxm/

    4、请用表格和折线图呈现你本周(3/12 8:00~3/26 8:00)的代码行数和所用时间、博客字数和所用时间。

  • 相关阅读:
    Object之总结(一)
    Object之registerNatives
    Object之finalize
    阿里腾讯百度360
    Object之getClass
    Object之clone
    Object之toString
    Object之notify
    Object之wait
    Object之equals与hashCode
  • 原文地址:https://www.cnblogs.com/zxy980612/p/8641661.html
Copyright © 2011-2022 走看看