第一次作业

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

1 设计思路

(1)主要描述题目算法

第一步:阅读题目,调用void sum_diff( float op1, float op2, float *psum, float *pdiff )
第二步:找到和与差的代表变量,发现不需要再继续加入新变量
第三步:直接代入数据即可

(2)流程图

2.实验代码

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

3.本题调试过程中遇到的问题及解决办法

错误原因:老是分不清什么时候在函数体中需要重新定义变量
改正方法:找到需要的变量看看是否都已经定义了

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

1.设计思路

(1)主要描述题目算法

第一步:阅读题目,理解大概关系,调用void splitfloat( float x, int *intpart, float *fracpart )
第二步:找到需要的变量,整数 intpart,小数:fracpart
第三步:找到计算整数的方法,使用int类型进行强制转换,用实数x 减去整数得到小数
第四步:编写代码

(2)流程图

2.实验代码

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

3.本题调试过程中遇到的问题及解决办法

    暂时没有遇到问题,注意了上一个题目的问题了

第二次pta 6-1 在数组中查找指定元素

1.设计思路

(1)主要描述题目算法

第一步:通读题目,调用int search( int list[], int n, int x )
第二步:定义一个变量i来遍历数组,如果有存在list[]==x的情况就说明找到了这个元素为了防止多次遍历,此题用i返回的结果,i表示找到了改符合要求的数值,0表示没有找到该数值,只要找到了一个符合条件的数返回i,返回i,然后跳出循环
第三步:如果遍历完所有数组中的数仍然没有找到结果就要输返回-1

(2)流程图

2.实验代码

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

3.本题调试过程中遇到的问题及解决办法

错误原因:

虽然编程并没有错误,但是这个逻辑完全错误,如果第一个没有找到就会直接跳到else直接返回-1,事实上相当于并没有遍历数组
改正方法:不要写else, else表示每一个if没有实现都要进行else,这样就会导致后面的即使存在也不会找到

第二次pta 6-2找最大值及其下标

1.设计思路

(1)主要描述题目算法

第一步:阅读题目理解大概关系,头脑中存在这个逻辑,引用int fun(int *a,int *b,int n)
第二步:定义一个变量i利用i遍历数组
第三步:定义最大值max,先令数组的首项位最大值,然后一一用后面的项与其作比较,如果后面的比首项大就将这个较大的项的值赋给max,以此类推,遍历完整个数组,找到最大值及其下标

(2)流程图

2.实验代码

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

3.本题调试过程中遇到的问题及解决办法

        没有错误

第三次pta作业

1.设计思路

(1)主要描述题目算法

第一步:仔细阅读题目,理解题意
第二步:调用第一个函数void input(int *arr,int n),利用for循环读入数组
第三步:调用第二个函数: void max_min(int *arr,int n) 先初始化最大值最小值,都为a[0],然后利用for循环遍历数组与最大值与最小值比较,如果有发现比最小值小或者比最大值大的数值,就直接利用一个t进行交换
第四步:调用第三个函数:void output(int *arr,int n),进行数据的输出:定义一个变量i输出交换后的数组

(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,t;
        int indexm=0,indexn=0;
        for(i=0;i<n;i++){
            if(min>*(arr+i)){
                min=*(arr+i);
                indexn=i;
            } 
            if(max<*(arr+i)){
                max=*(arr+i);
                indexm=i;
            }
        }
        t=*arr;*arr=*(arr+indexn);*(arr+indexn)=t;
        t=*(arr+n-1);*(arr+n-1)=*(arr+indexm);*(arr+indexm)=t;
    }
    void output(int *arr,int n){
        int i;
        for(i=0;i<n;i++){
            printf("%3d",*(arr+i));
        }
    }

3.本题调试过程中遇到的问题和解决方法

错误信息:忘记把最大值与最后一个数还有最小值与第一个值交换了
改正方法:进行交换

第三次pta作业6-2

1.设计思路

(1)主要描述题目算法

第一步:仔细阅读题目,理解题意,调用函数void sort(int *x,int n)
第二步:利用选择排序法进行排序
(2)流程图

2.实验代码

void sort(int *x,int n)
{
    int i,j,k,t;
    for(i=0;i<n-1;i++)
    {
	    k=i;
	    for(j=i+1;j<n;j++)
	    if(x[i]>x[k]) k=j;
	    if(k!=i)
	    {
		    t=x[i];x[i]=x[k];x[k]=t;
	     } 
    } 

}

3.总结错误信息

没有错误

pta第四次作业6-1 判断回文

1.设计思路

(1).主要描述题目算法

第一步:阅读题目,理解题意
第二步:调用函数。定义变量i,l;
第三步:计算字符串的长度l,利用for循环遍历数组,如果(s+i)!=(s-i+n-1)即返回false,否则返回true

(2)流程图

2.实验代码

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

3.错误信及改正方法

错误信息:return true放到for循环里面了
改正:要放到for循环外面,因为只要最终返回一个true即可

pta第四次作业6-2使用函数实现部分字符串复制

1.设计思路

(1)主要描述算法

第一步:阅读题目,理解大意
第二步:调用函数,定义变量i,用i遍历数组将所需字符串复制过来

(2).流程图

2.实验代码

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

3.错误信息

暂无错误

学习总结和进度

1.总结两周以来所有pta作业中每个题目所使用的知识点

第一次作业6-1:函数的调用,指针的表示
第一次作业6-2:指针的表示及其使用,强制类型的转换,函数知识
第二次作业6-1:函数的使用,数组在函数中的遍历,确定常量,if语句,for循环,break的使用,指针的使用
第二次作业6-2:函数的使用,指针的使用,(p的不同作用),函数的传参,for循环,if条件句
第三次作业6-1: 函数的使用,指针的使用,
(arr+i)=arr[i]
第三次作业6-2:函数的使用,选择排序法
第四次作业6-1:计算字符串的长度
第四次作业6-2:复制字符串

2.将pta作业源代码使用git提交到托管平台上

https://github.com/lxh666666/homework-C-

3.作业点评情况
李伍壹
袁中
申怡苗
李洪海
杨金坤
马钰娟

4.记录学习进度

感觉代码打的还是有点少,没有足够的数量,就没有特别熟练,虽然写博客比较费时间,不过好像对问题的理解更加深入了些,掌握了一些技巧,以后应该会快一些吧!

posted @ 2018-03-21 20:03  李新华  阅读(361)  评论(19编辑  收藏  举报