C语言函数2
一、PTA实验作业
6-3 使用函数判断完全平方数:
1. 本题PTA提交列表:
2. 设计思路:
3.本题调试过程碰到问题及PTA提交列表情况说明:
- 1.一开始考虑让输入值N去整除一个循环变量i,i随着循环次数改变而改变,N每次除两次i,能得到1的值时便为完全平方数,返回1值,否则当i>N/2循环结束,则返回0值;一开始觉得这个做法很可行,但实际上一经运行调试后发现错误很多,后来发现是因为没有考虑1和0的特殊性,但是就算考虑了也仍不对,在同学的建议下用了逆向思路即若i*i==N,return 1;用i值来凑N值;然后现在又用第一次的思路做了一遍,想弄清之前思路到底错哪儿,却发现一次就过,这才明白先前没有弄懂当被调用的函数一旦Return后就不会再执行后面的语句,所以之前考虑了一堆条件,越复杂越容易错;
- 2.这张是现在用一开始的思路做的正确答案;
- 3.可是后来又发现了一个问题,当被调用函数返回一个值后不是应该马上结束执行吗,为什么当我把if(n0||n1) return 1;语句放在循环外时是对的,而将其放在循环里面时则不正确,似乎是个无效语句???
- 4.这张图是把if(n0||n1) return 1;语句放在循环内,是错误的,不知道为什么???希望有大神帮忙解答;
6-6 使用函数输出水仙花数:
1. 本题PTA提交列表:
2. 设计思路:
3.本题调试过程碰到问题及PTA提交列表情况说明:
- 1.这题刚开始提交时PTA提示运行超时,同学建议优化一下算法,去掉不必要的步骤,于是重新写了一遍,
- 2.这张是第一次写的有些复杂的代码;
- 3.这张是第二次优化后的代码,还是显示运行超时;
- 4.于是重新动手写了一遍代码,这次思路比之前清晰许多,信心满满地提交后,PTA回答了我四个字“部分正确“,这个代码调了两天,有点崩溃,后来请教同学,同学提醒我次方数应等于输入数的位数,可能因为惯性思维,加上没注意审题,以为水仙花数都等于每位数取余后的三次方,后来又添加了一步计算整数位数的算法,答案还是错的,在同学提示下发现没给统计整数位数的count值赋初值,给count赋初值后答案才正确;
6-7 使用函数输出指定范围内的完数:
1.本题PTA提交列表:
2. 设计思路:
3.本题调试过程碰到问题及PTA提交列表情况说明:
- 1.一开始审题时有点懵,不知道因子是什么,以为只要不等于它本身的数都可以当加数,后来百度才知道因子相当于约数,然后才开始做题;
- 2.调试时发现因为i要满足i<=number/2,所以number=1值始终进不了循环,于是另外给1值设置了执行步骤;
- 3.调试时又发现sample2无法实现输出,即当一个区间内并无完数时的情况没有考虑,一开始找不到作为无完数的依凭条件,后来就新设置了变量count,用来统计完数个数,当count==0时输出No perfect number;
二、同学代码结对互评:
1.雅慧同学的代码;
2.我的代码;
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
- 1.这题是判断完数的代码,我是将i循环,用number取余i,当等于0时,就将其加在sum值上;而雅慧是设置两个变量i和j,用枚举法将其列出,符合i*j==number的就加在sum上,这样做也是一种逆向思维,即用i和j去凑number,可是会比较麻烦,还要考虑i和j是否相同的情况,而用直接思维去做会更简单,所以我更喜欢我的。
- 2.第一段代码后面逻辑有点乱,不太清楚c的作用是什么,其实可以直接判断是否a==number,然后返回0或1;
三、截图本周题目集的PTA最后排名:
四、本周学习总结:
1.你学会了什么?
1. C语言哪些数据类型?
- 1.整型变量和常量,浮点型变量和常量,字符型变量和常量;
2. 字符型数据需要注意地方?
- 1.'A'和‘a’是不同的字符型常量;
- 2.‘A’+1对应字符‘B’;
- 3.小写字母转为大写字母:ch=ch-'a'+'A'或者ch=ch-'b'+'B'等等;大写字母转化为小写字母:ch=ch+'a'-'A';
- 4.小写字母比大写字母的ASCLL码多32;
- 5.getchar()和putchar()只能处理单个字符的输入和输出;
- 6.空格与回车符都会被%c吸收;
- 7.‘1’的ASCLL码是49;‘A’的ASCLL码是65;
3. 自增自减运算符?
- 1.前缀++先+1再赋值,后缀++先赋值再+1;
4. 运算符优先级?
- 2.单目运算符,条件运算和赋值运算的结合放向从右到左,算数运算(双目运算符),移位运算,关系运算,位逻辑运算和逻辑运算结合方向从左到右;
5. C语言哪些表达式?课堂派哪里做错,做错的请在这里分析原因?
- 1.当赋值符左边的变量和右边的变量类型不同时,先计算右边的值,再赋值给左边,且要转换成左边的变量类型;
- 2.double 3得到3.0;int3.8得到3;
- 3.前缀++(--)和后缀++(--)的区别不是很清楚,前缀++先+1再赋值,后缀++先赋值再+1;
- 4.当a=3时,a+=a-=a*a的值算错,原因是没意识到a是一个变量,在从右往左算的过程中a为9时仍把a当3来计算;
- 5.不明白8>6>3的值是多少,即对关系运算符的原理不清楚,后来明白单目运算符从左往右结合,先算8>6,得1(关系运算符的结果不是1就是0),很明显1>3不成立,所以得0;
6.其他内容?
- 1.异或:相同为0,不同为1;
- 2.取反(位非运算):0变为1,1变为0;
- 3.按位“与”和异或的规则相反,按位“与”是不同为0,相同为1;
2.本周的内容,你还不会什么?
-
1.转义字符的用法不太清楚;
-
2.ASCLL码对应的字符不太清楚;
-
3.进制间的转换不是很清楚;
3.循环结构考试总结:
- 1.7-1 求交错序列前N项和这题卡在没有将sum和number定义成double;
- 2.7-2 输出三角形字符阵列这题在字母的输出上卡住,没认真审题,字母的输出从A开始,而不是任意输入字母;
- 3.7-4 小于m的最大的10个素数 这题卡在将i的初值设成1,难怪没有任何输出,因为任何数取余1都得0,毫无疑问,后来将i初值改成2才对了;
- 4.因为在前三题磨蹭的时间太多,第4,5题都来不及完成,很遗憾,但也在意料之中,平时做题也是这样磨蹭,考试肯定快不了,所以一定要再加快速度,平时多挑战一点稍难的题目,总觉得自己的应变能力也不行,题目稍难便会卡住;
1.哪题做错了,怎么改?
1.后面两题错了,一个是进制的转换不熟悉,另一个是字符的输入不熟练,其实这两个问题在平时也有意识到,但总是想着以后总会解决,便耽搁了下来,在这里想送两句话给自己自勉一哈:明日复明日,明日何其多;我生待明日,万事成蹉跎;
2.考试结果满意么,怎么改进?
1.不满意,有问题要及时解决,平时多问几个为什么,虽然自己问的问题不一定都有意义或者有确切答案,但只要可以解决疑惑,一切都是值得的;
3.其他总结:
- 1.预习环节还是要做好,课后复习也很重要,课堂效率一定要高,课后有问题一定要解决,敲代码的时间一定要够,反应力和速度一定要加快;
- 2.随着对C语言的深入学习,慢慢理解了它与高数之间密不可分的联系;
- 3.看了一些大神的博客后,发现自己还是老在一些地方犯同样的错误,也因此到不了更高的水平;