作业要求:
预习作业:
1.你观看了几个视频?给出观看列表截图。
主要看了数组运算的三个视频,其中收获最大的是知道了可以使用运算的方法得知数组元素的大小,翁凯老师的课讲得很生动,让我们得知了许多写程序和读程序的技巧。
2.通过观看视频你学习到哪些知识点或者编程题目?
通过观看视频我了解了更多数组的结构和相应的算法,列如不能在定义数组时直接用另一个数组直接赋值,要用for循环一个一个复制给储存单元。我还了解到程序员是怎么定义变量的。
3.对于所学知识点还有哪些疑问?有哪些知识点没有学会?
我对冒泡排序法和选择排序掌握的不够熟练,不能一次性就打出正确代码,这可能是我对算法的理解不够深刻的理解不够深刻造成的。
第14次作业:数字加密
#include#include int main(){ int n,m,i,f[i]; scanf("%d",&n); for(i=0;i<4;i++){ m=pow(10,3-i); f[i]=n/m; f[i]=(f[i]+9)%10; } int a,b; a=f[2]; f[2]=f[0]; f[0]=a; b=f[1]; f[1]=f[3]; f[3]=b; printf("The encrypted number is "); for(i=0;i<4;i++){ printf("%d",f[i]); } return 0;}
1.解题思路:
1.定义三个变量m,n,i和一个数组f[i],由于要用到幂函数,所以要加上头文件include<math.h>
2.输入n,定义i的初始值为0,进入for循环,添加运算变量m;m=pow(10,3-i);
3.计算n在各个位数上的值,由f[i]=n/m实现。在进行一次加密运算f[i]=(f[i]+9)%10;赋值给f[i]
4.引入整型变量a,b作为中间值。对储存的加密数字换位。
2.流程图:
3.本题调试过程:
pta运行结果
单步调试:
输入本例题n的值
添加查看分别检测f[0],f[1],f[2],f[3]的值
直到f[1]计算完成f[0]的值仍是0,说明经过加密运算后,f[0]的值就是0
f[1]加密后为1,f[2]求余加密前为125
f[2]加密后为4,f[3]求余加密前为1257
f[3]求余加密后
运算完成后输出结果
第15次作业:冒泡法排序
将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。
本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。
#includeint main(){ int K,N; scanf("%d %d",&N,&K); int a[N],i,count,temp; for(i=0;i
1.解题思路:
1.用scanf语句获取用户输入,赋值给N,K;再定义数组和变量
2.通过循环语句获取每个数组元素的值,利用嵌套for语句实现冒泡排序算法,要注意循环条件的选择
3.3.定义变量first由于最后一个数输出不能有空格,所以first用来控制第一个输出,if内的输出格式只执行一次
2.流程图:
3.本题调试过程:
调试结果
单步调试,添加变量查看,由于pta给的题目中N=6,k=2,直接添加a[0]~a[5]查看a[i]的值以及接下来的变化情况
层层判断a[i+1]是否小余a[n],前三个元素都不成立,直接跳过if语句块进入内嵌for语句判断直到a[2]开始进入if语句块,跳出时,a[2]和a[3]完成互换,由于是a[i]和a[i+1]比较,因此内层循环的条件要-1
一组内嵌for循环完成后添加count变量查看
第二组完成后的数组排列,此时按下一步跳出外循环
打印输出结果
个人总结:数组只学到7.1C语言就结课了,虽然内容不多,但较之前的运算复杂了很多。就像pta15次作业的第一题,由于不能有效使用continue和数组的用法,我的程序写的很复杂但还是错。最后问了牛晓霞老师才知道原来定义数组时元素的个数不一定要严格控制,最后的for循环时控制需要输出的元素下标即可。
互评和学习进度:
作业评价: