第2次作业

                   作业链接:https://edu.cnblogs.com/campus/hljkj/Cprogramming_2018Autumn_CST2018_3/homework/2503

  一.  PTA函数实验作业:

题目一:找两个数中最大者

1.本题实验代码:

 

int max(int a, int b)
{
    if(a>b){
        return a;
    }else{
        return b;
    }
}

 

2.文字描述解题思路:

   第一步:由于本题函数已给出,所以先列出该函数定义,即

int max(int a, int b)

 

    第二步:  根据该题可知,会用到if语句。 

   第三步:应该用  { return   表达式;} 的形式,来返回其值。

   第四步:运用Dev c++来编译该程序。

3.流程图:

 

4.本题调试过程碰到的问题及解决办法:

PTA提交列表截图:

   编译器设置断点和单步调试的界面截图:

     调试过程中碰到的问题:在程序中没有按照 {return   表达式 ;} 的形式来返回其表达式的值,以致该程序编译错误,结果不对。

     解决办法:查找书籍,在if语句中插入return语句,来返回该表达式的值。

 

  二.  PTA数组1实验作业:

  题目二:交换最小值和最大值

  1.本题实验代码:

#include <stdio.h>
int main()
{
    int n,i,a[10],c,d,min,max,j;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    min=max=a[0];
    for(i=0;i<n;i++)
    {
        if(a[i]<=min)
          {
              min=a[i];
              j=i;
          }
    }
    c=a[0];
    a[0]=min;
    a[j]=c;
    for(i=0;i<n;i++)
    {
        if(a[i]>=max)
          {
              max=a[i];
              j=i;
          }
    }
    d=max;
    a[j]=a[n-1];
    a[n-1]=d;
    for(i=0;i<n;i++)
    printf("%d ",a[i]);
  return 0;
} 

  2.文字描述解题思路:

   第一步:先输入整数,即:

scanf("%d",&n);

 

                       然后利用for循环语句来将这几个输入的整数放在数组中,即:

    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }

                       之后再把max和min做初始值。                       

   第二步:在利用for循环语句和if条件语句的嵌套使用来判断min的最小值(用数组里的每一个值互相比较,来给min取值),再利用第三方变量进行换值,将最小值也就是min放在第一位。即:

    c=a[0];
    a[0]=min;
    a[j]=c;

 

 

 

    第三步:同理,也是利用for循环语句和if条件语句的嵌套使用来判断max的最大值(用数组里的每一个值互相比较,来给max取值),再利用另一个第三方变量进行换值,也就是将最大值放在最后一位。由于这些数组里的整数中,已经把最小值放在第一位了,所以在进行换值过程中 ,应该

    d=max;
    a[j]=a[n-1];
    a[n-1]=d;

 

 

 

   第四步:然后在利用for循环语句来输出该数组。

 3.流程图:

                  

                   

4.本题调试过程碰到的问题及解决办法:

    编译器设置断点、单步调试的界面截图:

 

  PTA提交列表截图:

 

 

 

    调试过程中碰到的问题:在编译程序时没有利用第三方变量来进行换值(虽然该程序编译时提示没有错误,但与题目结果不符合,结果不对。)

    解决办法:设置几个第三方变量来进行换值。

 

   三.PTA数组2实验作业:

  题目三:选择法排序

1.本题实验代码:

#include<stdio.h>
int main()
{
    int i,j,index,t;
    int a[10];
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    for(j=0;j<3;j++)
    {
    
    index = j;
    
        for(i=j+1;i<10;i++)
        {
            if(a[i]<a[index])
            {
                index = i;
            } 
        }
        t = a[index];
        a[index] = a[j];
        a[j] = t;
    }
    for(i=0;i<10;i++)
    {
        printf("%5d",a[i]);
    }
    
    
    
    return 0;
}

   2.文字描述解题思路:

      第一步:先输入10个无序的整数,利用for循环语句将这10个数放在数组里,由于根据题目,排序只能排三轮,所以利用for循环语句来把索引设置为j

      第二步: 再利用for循环语句和if条件语句的嵌套使用,来进行三轮排序 ,如果a[i]<a[index],将index的索引设置为i。

      第三步:再利用第三方变量来进行交换数值。

      第四步:再利用for循环语句输出该数组(已经进行过三轮排序的数组),并根据题目要求每一个数后面空5个格。编译该程序。

 3.流程图:

          

 4.本题调试过程碰到的问题及解决办法:

       PTA提交列表截图:

 

   编译器设置断点、单步调试的界面截图:

    调试过程中碰到的困难:   在进行前三轮排序时没有将索引值设为  i  。导致该程序答案错误。

    解决办法:     通过询问同学,查阅书籍,可知该错误,并将该  i  索引值赋给index。

个人总结:

       我们这几周学习了函数以及数组。对于函数中,我学会有关形参和实参的意义,函数的调用方法,基本函数调用形式:{ 函数名  (实际参数表)},函数结果返回:{return  表达式; }   ,且return 语句中只能返回一个值。一些函数的使用。还有和循环结构,分支结构的联合配套使用来解决各种各样的问题。

       对于数组中,我学会了数组的定义和引用,和一维数组的一般形式: {  类型名    数组名 [数组长度] ;   }   ,{数组名[下标]  }其表达形式。以及利用数组来解决交换值问题,还有最难的部分二维数组,多维数组的知识,

       二维数组中,利用二维数组来解决矩阵中数字换位问题,还有矩阵的术语与二维数组下标的对应关系。

       在这几周学习c语言过程中,遇到了很多的大困难  还有之前遗漏的知识,以前没有解决的问题。所以说在这几周我又重新的通过打代码来重温之前的知识和解决之前的困难,在函数和数组知识中,通过询问同学和书籍来重点记忆数组部分各个知识,来解决我现在遇到的困难。我又加深了对c语言的认知和锻炼我的技能,对c语言更加兴奋。

    

 互评和学习进度:

        佟雨轩同学:https://www.cnblogs.com/blogdizhiming/p/10147257.html

        崔凤宇同学:https://www.cnblogs.com/cfy991213/p/10127646.html

        梁宇同学:https://www.cnblogs.com/liangyu59/p/10139173.html

 学习进度:

 

posted @ 2018-12-20 19:39  LeoLxx  阅读(234)  评论(12编辑  收藏  举报