C语言I博客作业08
这个作业属于那个课程 | C语言程序设计II |
---|---|
这个作业属于哪个课程 | 班级的链接 |
这个作业要求在哪里 | 作业的要求 |
我在这个课程的目标是 | 继续学习string.h,自定义函数。学习指针,使用fgets |
这个作业在那个具体方面帮助我实现目标 | 学会使用while和do-while,熟练使用循环语句,学会优化自己的代码,拓宽知识面 |
参考文献 | c语言程序设计(第三版) |
学号 | 20208927 |
1.PTA实验作业 | |
1.1 找鞍点
题目内容描述:一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的n阶方阵的鞍点。
输入格式:输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。
如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。
1.1.1数据处理
数据表达:定义整型变量n为输入的行数,定义一个6*6的二维数组,和i,j,i代表行,j代表列
为找出行的最大值和列的最小值,定义min,max,初始化为0。
为判断是否有鞍点,定义ret判断,初始化为0。均为整型变量。
数据处理:(伪代码如下)
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
遍历输入矩阵
后,再次遍历
在for语句里i不变,行变,寻找行最大的数
行不变,列变,寻找列的最小值,
满足存在行最大,列最小的数时,ret=1
判断ret的大小,输出
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
2 1 | 正确 | |
NONE | 正确 |
1.1.4 PTA提交列表及说明
1.编译错误:在for循环输入矩阵数据时,在内部定义i,j,而在for循环遍历数组时没有。所以第二次的i,j是没有定义的变量。
2.部分正确:原if里的判断条件max == 1 || min == 1,更改后的max == 1 &&min == 1。
使用了两种方法,第一种在行里找最大值,在列里找最小值,是否有这么一个数使它成立。第二种,就是先遍历找每一行的最大值,然后在最大值中去寻找最小值。
但是第二种,存在缺陷,就是可能存在一行中有多个最大值。
1.2 梅森数
1.2.1 数据处理
数据表达:定义n为输入的正整数,定义i,t为循环变量,count记录满足条件的数的数量,并初始化为0,。
数据处理:(伪代码如下)
for(i=2;i<=n;i++)
t=pow(2,i)-1
输出所有所有不超过2^n-1的数
在for循环里嵌套循环判断素数
是素数则输出,并且count++
如果for(i=2;i<=n;i++)遍历结束,count=0,
则printf("None")
1.2.2 实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
6 | 好 | |
1.2.4 PTA提交列表及说明 | ||
一次输出,没有错误。
2.代码互评(5分)
找2份同学代码,和自己代码比较,建议互评代码尽量找代码风格差异较大。
同学代码截图
自己代码截图
对比:1.第一位学长的方法非常好,简单又好,值得我好好学习。
2.第二位同学的也比我好,只输入了一次字符串,我看完她的代码,觉得我把问题又复杂化了。
3.学习总结(15分)
3.1 学习进度条(5分)
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
12.9-12.11 | 23小时 | 400 | 指针 | 指针的使用,只有概念,不能够去运用 |
11.30-12.4 | 24小时 | 400 | 排序,指针 | string.h |
11.23-11.26 | 22小时 | 600 | string.h | gets,puts |
11.15-11.21 | 22小时 | 500 | string.h,接触基础c++ | vs和Dev的快捷键不会使用,string |
11.10-11.14 | 26小时 | 300 | 自定义函数,二维数组,宏定义,const | 不会用复杂的宏定义和const |
11.2-11.8 | 26小时 | 600 | 循环嵌套,一维数组,二维数组 | 如何把问题简单化,灵活调用循环和函数 |
10.26-11.1 | 24小时 | 500 | 循环嵌套,选择排序,冒泡排序 | 排序很蒙,逆时针坍缩不懂 |
10.19-10.25 | 24小时 | 200 | switch-case,循环 | 无 |
3.2 累积代码行和博客字数(5分) | ||||
时间 | 博客字数 | 代码行数 | ||
---- | ---- | ---- | ||
第八周 | 1052 | 200 | ||
第九周 | 1677 | 500 | ||
第十周 | 3252 | 600 | ||
第十一周 | 5186 | 300 | ||
第十二周 | 6824 | 500 | ||
第十三周 | 8347 | 600 | ||
第十四周 | 9995 | 400 | ||
第十五周 | 11595 | 400 | ||
3.3 学习内容总结和感悟(5分)
3.3.1 学习内容总结
3.3.2 学习体会
我觉得pta的作业可以稍微简单一点,我也应该通过给同学解决问题提升语言表达问题,而且要纠正上周的一个错误,我对于伪代码的概念来自于学习别人的博客园,但是是错误的,在一些细节上是不完美的,在处理if,if-else的问题,数组的处理上是错误的。所以以后不能够片面的通过别人的作业了解知识点,还是要更加权威的网站或者书本。然后就是近期的学习,我觉得难度越来越大,我连作业的pta的问题也无法独自解决,以后真的要多利用闲暇的时间,学习别人的代码,拓宽C语言的知识面。
课后提问:如何跳出多重循环?
1.采用goto语句
goto语句也称为无条件转移语句;goto语句的语义是改变程序流向, 转去执行语句标号所标识的语句;
goto语句不推荐使用,但是对于跳出多重循环还是特定方便,逻辑也比较清晰。
2.循环内多增加一个判断条件
对于退出循环不是特别迫切的,允许执行完本轮循环的,建议可以采用这种方式。
但是无法立刻退出循环。
3.可以使用自定义函数
4.使用多个break