第四次作业

博客链接:https://edu.cnblogs.com/campus/hljkj/CS201802/homework/2512(点击以进入)

【课程观看报告】

1、观看了三节内容,共计八个视频

 

2、通过观看视频你学习到哪些知识点或者编程题目?

学习了函数的调用,通过子函数在主函数中的调用能够使主函数运行读取更加简便。例如:

 

正如课件所写,“代码代码”是程序质量不良的表现。复制的代码意味着将来去做维护或者修改时步骤繁琐,不好定位问题所在。
因此使用函数的好处就显现出来了:

 

 通过交换坐标来实现用一个两重循环实现行和列的检查。

 3、对于所学知识点暂时没有疑问,但是函数这一章对我来说是难点,本周在复习时要更加注意,同时还应复习pta对应题目帮助自己更好的理解知识点。

 

 

【第十六周】

第十三次作业(数组)

7-2 输出所有大于平均值的数

1、实验代码

 

#include<stdio.h>
int main(void)
{
    int i,n;
    double average,sum;
        scanf("%d",&n);
    int a[n];

    sum=0;
    if(n>1&&n<=10){
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
        sum=sum+a[i];
    }
    average=sum/n;
    printf("%.2f\n",average);
    for(i=0;i<n;i++){
        if(a[i]>average)
        printf("%d ",a[i]);
    }
}
else{
    printf("Invalid.");
}
printf("\n");
    return 0;
}

 

2、解题思路

(1)题目算法:

第一步:阅读题概,根据题目要求输入一正整数n,并构造if条件语句,根据输入的n的值是否符合(1<=n

               <=10)来判断是否进入for循环

第二步:进循环后根据n的值输入相应数目的整数并求和后计算出平均值,完成题目的第一个输出内容;

第三步:在输出平均数average后进入另一循环语句,依次检测出大于平均数的数值并输出

(2)流程图:

 

 

3、调试过程遇到的问题及其解决方法:

 在输出所有大于平均值的数组时的格式出现问题,当输出的代码为【printf("% d",a[i]);】时,输出的格式就变为【 55 89 78 186】;这边与题目要求的【55 89 78 186】输出格式不符合;因此将输出格式改为【printf("%d ",a[i];)】后输出格式便正确了。

修改后👇

 另外第二行当输入的n为1时出现的格式错误的情况,在if语句结束后输出【\n】后可得到解决

 

—————————————————————————————————————————————

【第十七周】

第十四次作业

 7-2 求最大值及其下标

1、实验代码

#include<stdio.h>
int main(void){
  int i,n,h;
  int max;
  scanf("%d",&n);
  int f[n];
  for(i=0;i<n;i++){
    scanf("%d",&f[i]);
  }
  max=f[0];
  h=0;
  for(i=0;i<n;i++){
  if(max<f[i]){
    max=f[i];
    h=i;
  }
  }

  printf("%d %d",max,h);
  return 0;
}

 2、解题思路

(1)题目算法:
第一步:设定数组(本题设为f[n]),输入正整数n表示共有n个整数

第二步:进入for循环后,依次输入n个整数,循环结束后设定最大值max的初始值为第零个数组的值

第三步:进入第二个循环,当最大值max小于数组时进入if语句,将此次数组的值赋值给max,下标i赋值

              给h

第四步:输出最终结果

(2)流程图

                                            

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

第一次我编写程序时只用了一个for循环,当输入结果为【6/2 8 10 1 9 10】时,输出【10 5】,下标为5,说明最终max取得最后一个10,经过调试后发现因为forx循环只有一个,因此在输入n个整数、进入if语句之前max已被f[0]赋值,就是说每次判断max与f[i]的关系之前max的数值都被重置为输入的第一个整数f[0],并不会承接上次循环得到的max,因此只要是比输入的第一个整数大的数都会使得进入if语句(例如使用题概所给参考数据时max恒等于2,因此只有第四个数(i=3)不会进入if语句)。因此我设定了两个for循环,在第二个for循环之前定义max=f[0],这样就能保证在进入for循环时max能够承接之前的数值。

(附错误程序代码:)

#include<stdio.h>
int main(void){
  int i,n,h;
  int max;
  scanf("%d",&n);
  int f[n];
  for(i=0;i<n;i++){
    scanf("%d",&f[i]);
  max=f[0];
  h=0;
  if(max<f[i]){
    max=f[i];
    h=i;
  }
  }
  printf("%d %d",max,h);
  return 0;
}

调试过程👇

 

 

 

折线图以及表格

 

 

 个人总结

通过这两周的学习,主要了解了数组的概念,然后对于循环语句以及条件语句的穿插利用能够更加熟练且灵活地掌握,个人认为将多项数值倒序输出是难点,较难理解。希望能通过对题目的反复练习更熟练的掌握知识点,一边为接下来的课程夯实基础。

 

评论对象:

(1)https://www.cnblogs.com/freedomjdp/p/10115746.html(作者:鞠大鹏

(2)https://www.cnblogs.com/mayijing/p/10158728.html(作者:马一婧)

(3)https://www.cnblogs.com/nansu/p/10134717.html (作者:nansu)

 

posted @ 2018-12-20 19:08  李浩正  阅读(384)  评论(9编辑  收藏  举报