一、PTA作业6-3数字金字塔
1.实验代码:
1 void pyramid (int n) 2 { 3 int row, col; 4 for (row = 1; row <= n; row++){ 5 for (col = 1; col <= n-row; col++) 6 { 7 printf(" "); 8 } 9 for (col = 1; col <= row; col++) 10 { 11 printf("%d ", row); 12 } 13 printf("\n"); 14 } 15 }
2.解题思路:
(1)描述题目算法:
第一步:定义函数
第二步:循环行数
第三步:输出每一行左侧的空格
第四步:根据行数循环列数
第五步:输出每行的数字
第六步:输出每个数字后面的一个空格
(2)流程图:
3.本体调试过程中碰到的问题及解决方法:
由于本题老师在课上曾经讲过,所以对题目的思路上没有什么大问题,但仍出现格式上的错误——在输出row的后面少了一个空格
在完成本道题的时候还出现了一个问题
这个问题我一直没有解决,代码和正确的代码一样,但是系统却显示编译错误,不知道是什么原因。
【编译器设置断点、单步调试的界面】
二、PTA作业7-3 最高分、最低分、平均分
1.实验代码:
1 #include <stdio.h> 2 int main() 3 { 4 int i; 5 int a[10],min,max,avg = 0,sum = 0; 6 for(i=0;i<6;i++) 7 { 8 scanf("%d",&a[i]); 9 sum+=a[i]; 10 } 11 max=min=a[0]; 12 for(i=1;i<6;i++) 13 { 14 if(min>a[i]) 15 {min=a[i];} 16 if(max<a[i]) 17 {max=a[i];} 18 } 19 avg=sum/6; 20 printf("max:%d\nmin:%d\navg:%d\n",max,min,avg); 21 }
2.解题思路:
(1)描述题目算法:
第一步:定义一个数组
第二步:循环输入5个数并求和
第三步:假设最大值等于最小值且初始值为数组的第一个数
第四步:在循环内将最大值和最小值分别与数组的里的数一次比较,并确定最大值和最小值
第五步:计算平均数
第六步:按题目要求输出格式
(2)流程图:
3.本题调试过程中碰到的问题及解决方法:
【遇到的问题】:(1)运行超时:没有定义数组;sum没有达到预期的值;max和min的初始值有问题。
(2)答案错误:sum的值出错。
【解决方法】: (1)本题应运用数组解决,否则无法定义max和min的初始值
(2)sum应放在第一个循环内,且循环的初始值应为0
【注意】: avg的初始值不是a[0],而是0
【编译器设置断点、单步调试的界面】
三、PTA作业7-1简化的插入排序
1.实验代码:
1 #include<stdio.h> 2 int main() 3 { 4 int n,x; 5 scanf("%d",&n); 6 int a[11],i; 7 for(i=0;i<n;i++) 8 { 9 scanf("%d",&a[i]); 10 } 11 scanf("%d",&x); 12 for(i=0;i<n;i++) 13 { 14 if(a[i]>x) 15 { 16 printf("%d ",x); 17 break; 18 } 19 else{ 20 printf("%d ",a[i]); 21 } 22 } 23 if(i==n) 24 { 25 printf("%d ",x); 26 } 27 else{ 28 for(;i<n;i++) 29 { 30 printf("%d ",a[i]); 31 } 32 } 33 return 0; 34 }
2.解题思路:
(1)描述题目算法:
第一步:定义一个数组
第二步:自循环内输入数组中的数
第三步:在另一个可循环内,判断x与数组中的数大小
第四步:如果数组中的数比x大,则输出x的值并跳出整个循环;如果没有x大,则直接输出比x小的数
第五步:还要加上一种情况进行判断:当n为最大值且插入在数组的最后
(2)流程图:
3.本题调试过程中碰到的问题及解决方法:
【遇到的问题】:
(1)、这个代码有三种情况无法输出,即n为最大,且插在数组的最后;n=1且插在数组最后;n=0时
(2)、为了解决之前少的3种情况,我在整体的后面领奖了两个条件句进行补充,但后加的部分独立于前面循环的部分二存在,导致会有重复的部分进行运行
(3)、为了改进上一个问题,我在第二个for前加入一个while条件句,使循环的条件改变,导致多了两个错误,没有在此条件结束后在讨论其他条件。
【解决方法】:在第二个循环内加入一个条件语句,来判断输入的x是否会是整个数组中最大的数,如果是,则在数组的最后加一位并将x的值赋予进去
【编译器设置断点、单步调试的界面】
四、个人总结:
(1、)总结这几周你学习哪些内容(不限于课上)?你有哪些收获?
1.整数变量占用4个字节的空间
2.while 语句和 for 语句 都是在循环前先判断条件
3.while和do-while的区别:while 需要先判别条件,再决定是否循环;do-while需要先至少循环一次,然后再根据条件决定是否继续循环
4. int a[10]表示定义一个还有10个整型元素的数组
int a[10]表示定义一个还有10个字符元素的数组
int a[10]表示定义一个还有10个浮点数型元素的数组
5.只要知道了数组第一个元素的 地址以及每个元素所需的字节 数,其余各个元素的存储地址 均可计算得到。
6.只能引用单个的数组元素,不能一次引用整个数组
7.一维数组的初始化:静态存储的数组如果没有初始化,所有元素自动赋0;而动态存储的数组如果没有初始化,所有元素为随机值
8.使用二维数组的时候,需要进行二重循环,分别循环行下标和列下标
9.行列互换:主对角线:i == j
上三角: i <= j
下三角: i > =j
10.调用标准库函数时,在程序的最前面用#include命令包含相应的头文件。
11.调用自定义函数时,程序中必须有与调用函数相对应的函数定义。
12.函数的调用通常有两种情况:
赋值语句:volume = cylinder(radius,height);
输出函数的实参:printf("%f",cylinder(radius,height));
13.在执行主函数的时候如果遇到某个函数调用,主函数将被暂停执行,当被调函数执行完成,将返回主函数,从暂停的位置继续执行
14.形参和实参一一对应:数量一致,类型一致,顺序一致。并且最为重要的一点就是只能有实参但想传递给形参
15.如果自定义函数在主调函数的后面,就需要在函数调用前,加上函数原型声明
16.sizeof是长度运算符,计算变量和数据类型的字节长度
17.C语言中函数返回值的类型是由函数定义是指定的类型决定的
(2)、总结这几周所学内容中你觉得哪些地方是难点?对此你做了哪些措施去克服这些困难?
1.如何针对具体问题,确定需要使用函数的功能要求,再将功能用函数程序实现 :这个问题我觉得需要对函数的时候多加练习。
2.关于循环中的嵌套循环在实际应用中仍然掌握不好,很容易蒙圈 :在写循环嵌套之前应捋清思路,最好画一个流程图。
3.break和continue的作用在程序设计时不能清晰区分 :break是跳出当前循环,continue是跳出本层循环,做题时应该在头脑中形成一个流程图,并根据两者的定义判断使用哪一个。
4.在使用二维数组列出矩阵并将行和列的位置互换的思路还是不够清晰 :在平时多加练习老师上课所讲的例题或及时询问同学。
5.对流程图的运用仍然会花费较多的时间,在绘制流程图的时候对循环语句和判断语句这两个方面不够熟练 :在做每一道提前都要在头脑中形成一个流程图。
6.Dev-c++中的编译器单步调试 :在不知道代码执行的顺序是影响到利用编译并单步调试的方式去理解代码。
五、互评和学习进度:
(1)、点评3个同学的本周作业:
【对佟雨轩同学的评价】佟雨轩同学本次作业最大的问题就是流程图的格式错误,菱形只是判断框,举行时处理框,平行四边形是输入输出框。对近期的总结比较详细具体。
【对李曼同学的评价】李曼同学本次作业整体效果较佳,但是第二题的流程图显得思路比较乱,流程图中的线因该不能相交,循环与循环之间的关系不明显。
【对丛梓祺同学的评价】丛梓祺同学的本次作业在流程图的格式上存在许多问题,判断框因该用菱形,处理框是矩形,输出/输入框是平行四边形。流程图中循环语句的格式也不规范。但每道题的思路都很清晰,继续努力!
(2)、请用表格和折线图呈现你这几周(11/10 12:00~12/10 12:00)的累积代码行数和时间、累积博客字数和时间: