第四次作业
作业要求:https://edu.cnblogs.com/campus/hljkj/CS201802/homework/2522
1. 我观看了数组,函数的定义与使用,函数的参数与变量,数组运算。
2.我知道了1).数组规定了多少个元素就不能超过这个数,否则就是越界。
2).储存数组时需要用for循环一个一个输入。
3).函数调用首先从主函数开始进行,从中跳转到所定义的函数。
3.问题:在运用数组时会出现运用不好的问题,有时还会有越界的问题。
第十六周作业 题目: 7-1 输出数组元素
1.实验代码
#include <stdio.h> int main() { int n,i=0,j,count=0; scanf("%d\n",&n); int a[n]; for(i=0;i<n;i++){ scanf("%d",&a[i]); } for(i=1;i<n;i++){ j=a[i]-a[i-1]; count++; if(count%3==0){printf(" %d\n",j);} else if(count%3==1){printf("%d",j);} else if(count%3==2){printf(" %d",j);} } return 0; }
2.解题思路
1).定义四个整型变量给出的正整数数量n,和输出的后项减前项的值 j ,以及i和count;输入n后,再定义整型数组a[n];
2).进入第一个循环从i=0开始进行存入数组中的n个数;而后进行第二个循环;
3).这时要注意从i=1开始计算j的值,因为要求是后一项减前一项;count随着循环进行n次加;
4).当count除以三求余等于0时输出空格加j加回车;当count除以三求余等于1时输出j;当count除以三求余等于2时输出空格加j;结束运行。
流程图
3.调试过程遇到的问题及其解决方法:
第一个问题:
进行调试:
输入所给案例的数字;直接出现结果:
解决办法:发现储存a[i]后如果从i=0开始就会有a[0]-a[-1]会有a[0]的值5出现,所以我将i=0改成了i=1,结果没有直接跳出循环出结果而是一步一步进行循环
:
结果正确。
题目: 7-2 求最大值及其下标
1.实验代码:
#include <stdio.h> int main(){ int i,n,h,z,count=0; scanf("%d",&n); int a[n]; for(i=0;i<n;i++){ scanf("%d",&a[i]); } if(n>1&&n<=10){ h=a[0]; for(i=0;i<n;i++){ if(a[i]>h){h=a[i];z=i;} else if(a[i]=h){h=h;count++;} } if(count==i){printf("%d 0",h);} else{printf("%d %d",h,z);} } return 0; }
2.解题思路
1).先定义5个整数型变量i,输入数组元素的个数n,h,z,count=0,用户输入变量n,再定义数组a[n];
2).进入循环i=0;当i<n时不断输入数组元素a[i],i++,直至i>n.
3).如果n>1且n<=10,则h=a[0],进入循环i=0;当i<n时不断进行循环语句中的条件语句:如果a[i]>h时h=a[i],z=i;否则h=h,count++;直至i>n;
4).跳出循环后如果count等于i输出“h 0”;否则输出“h z”,结束。
流程图
3.调试过程遇到的问题及其解决方法:
按照所给提示当n=10,数组中所有元素都相等时进行调试:
解决办法:发现并不走count=i这一步而是进行下一步,所以我发现如果a[i]=a[i-1]时在我的程序里没有进行count++;所以count不会等于i;
所以我将a[i]<h改为a[i]=h,结果正确;
个人总结:
本周学习内容:学习了数组的定义,数组的储存,选择排序法和冒泡排序法以及我们在储存数组时需要用for循环语句进行一个一个的储存;关于数组越界问题,还有将多个for循环用一个for循环以此减少循环使用。
收获:主要收获是进行数字排列时可以减少for循环的使用,剪短代码的行数以及计算机进行的步骤。
表格以及折线图:
点评:
https://www.cnblogs.com/cyw1/p/10133891.html