一、PTA实验作业
题目1:使用函数判断完全平方数
1. 本题PTA提交列表:
2. 设计思路
- IsSquare函数
1、定义整型变量a,n;n控制循环次数
2、a=0,当a小于等于n时,执行循环3
3、如果pow(a , 2) == n,返回1,否则继续循环,a++
4、返回0
3.本题调试过程碰到问题及PTA提交列表情况说明。
部分正确:一开始将return 0放在了循环里,导致无法对小于n的每个数的平方进行验证,使结果直接返回0。放错位置:,将return 0放在循环外后就对了。
题目二: 使用函数输出指定范围内的完数
1. 本题PTA提交列表:
2. 设计思路
- factorsum函数
1、定义整型变量i,sum=0
2、如果numberd等于1,sum=1
3、i=1,当i<number时,执行4、5
4、如果number%i==0,sum=sum+i
5、i++
6、return sum
- PrintN函数
1、定义整形变量i,j,k=0
2、i=m,当i<=n,执行3.4
3、如果factorsum(i)==i,k=1,输出“i = 1”
4、j=2,当j<i,如果i%j==0, 输出“+ j”,否则继续循环,j++;当,j>=i时,换行,并跳至2开始新一轮循环
5、当k等于0时,输出"No perfect number"并换行
3.本题调试过程碰到问题及PTA提交列表情况说明。
部分正确:根据提示
和调试
发现完数1无法通过for(i=1;i<number;i++)循环来判断,于是添加判断,答案正确
题目三: 求组合数
1. 本题PTA提交列表:
2. 设计思路
- 主函数:
1、定义Int型变量m,n;double型变量result
2、输入m.n
3、当m小于等于n时,result=fact(n)/(fact(m)*fact(n-m));,输出result,取整数部分
- fact函数:
1、定义整型变量i,double型变量a=1
2、i=1,当i小于等于n时,a=a*i,i++
3、返回a
3.本题调试过程碰到问题及PTA提交列表情况说明。
部分正确:不是很懂pta的提示,部分正确代码为
,运行结果在c++上是对的。后经同学提示注意到题目说“题目保证结果在double类型范围内”意思是除了result变量,a变量也应为double型,才能保证其取值范围,将a类型修改后答案正确。以后要多多注意变量类型的定义!
二、同学代码结对互评
1.同学互评照片
2.我的代码、互评同学代码截图
我的
毓颖的
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?
不同点主要集中在第一个函数:
不同点1:注释
同学的代码注释较清晰,可读性强,在回看代码时容易理解思路不同点2:判断数字的位数
同学的代码先是对数字的位数加以分析,而我是通过对题目取值范围的分析来确定水仙花数的位数可能性,如果数字过大的时候可能这样做会很繁琐,同学的做法更好不同点3:总体思路
我是直接计算各位数的值再通过if语句判断该数是否为水仙花数,而同学是通过do-while循环实现计算每个位数的值并累加其次方,再通过if语句判断是否为水仙花数。我的代码在这题的取值范围中可能思路相对简单,容易理解,但是会比较繁琐,一步一步求次方和。在更大的取值范围内,我认为同学的做法更为可取,同学代码适用范围比较广。感觉有些许不足是:存放number的值我认为一个就够了,变量过多容易混乱,可以在第一个do-while后再对number重新赋b值。
三、截图本周题目集的PTA最后排名。
四、本周学习总结
1.你学会了什么?
- 1.1 C语言哪些数据类型?
整型、实型、字符型、构造类型
- 1.2 字符型数据需要注意地方?
(1)不仅可以写成字符常量的形式,也可以用相应的ASSCII码表示,即可用整数表示。整数变量和字符型变量的定义和值可以互换
(2)字符具有数值特征,可以像整数一样参加运算
(3)转义字符只代表一个字符
(4)ASCII字符集中所有字符都能用转义字符表示
(5)字符需要用' '括起来表示,有无单引号所表示含义不同
- 1.3 自增自减运算符?
(1)++n和n++都相当于n=n+1
--n和n--都相当于n=n-1
(2)作为表达式的值时(重点!!!)
++n的运算顺序是:先执行n=n+1,再将n的值作为表达式++n的值
n++的运算顺序是:先将n的值作为表达式n++的值,再执行n=n++
- 1.4 运算符优先级?
(课本326页的优先级顺序和结合方式有详细注明)
(1)优先级不同则按优先级从高到低计算,如果操作数两侧的运算符优先级相同,则按结合方向决定计算顺序
(2)运算符优先级从高到低排列:逻辑运算符、算术运算符、关系运算符、逻辑运算符、条件表达式、赋值运算符、逗号运算符
- 1.5 C语言哪些表达式?课堂派哪里做错,做错的请在这里分析原因?
算术表达式、赋值表达式、关系表达式、逻辑表达式、条件表达式和逗号表达式
1、单选题分值10.0得分: 0.0
下列程序段输出结果为 __。
int x=1, y=012;
printf(“%d”,y*x++);
正确:10
我的:20
原因:没有认真阅读书本x++和++x所运算的顺序是不同的,此时x++的值还是x本身
2.单选题分值10.0得分: 0.0
若a为int类型,且其值为3,则执行完表达式a+= a-= a*a 后,a的值是
正确:-12
我的:-3
原因:在a+=这块没有意识到a的值已经由右边运算改变为-6造成的计算错误
3、单选题分值10.0得分: 0.0
设x、y、t均为int型变量,则执行语句:x=y=3; t= ++x || ++y; 后,y的值为__。
正确:3
错误:1
原因:将题目看成求t的值,因为++x为1,所以不运行||后的++y,y仍为3
1.6 其他内容?
(1)指定整型数据的输出宽度:%md,若实际位数小于m,则左端补空格,若大于m,则按实际位数输出(考试又复习了一遍)
(2)ch-'a'+'A'把小写字符转换成数字
ch-'0'把数字字符转为数字
val+'0'把数字转换为数字字符
(3)'&' '||' '^' '~'运算符的运用
(4)类型转换
1.自动类型转换
2.强制类型转换
2.本周的内容,你还不会什么?
这周知识容量很大,特别是对于符号运算的知识点特别多,对于符号的优先级和像'&' '||' '^' '~'运算符的运算方式还不是很熟悉,需要翻书查看。碰到像考试中第二题和最后一题的字母符号类型题比较卡壳,平时对于字母符号题的训练比较少,运用的不是很好,还有就是像考试第四题对于二进制的转换也不够熟悉,对题目规律一开始没有什么思路,需要加深对二进制转换的理解吧。
3.循环结构考试总结(全部同学都要写)
1.哪题做错了,怎么改?
第二题第四题和第五题
第二题:因为平时字母题比较少,运用的也不熟练,对于字母的输入输出比较模糊,而且考试时候对循环嵌套的关系也没完全理解,考完后整理思路重新打了一遍,发现还是一道可以完成的简单题,循环就是一个控制行数,一个控制输入字母的个数,应该可以做出来。
第四题:平时对二进制的转换理解也比较模糊,还没重新做出来,复习一下转换再好好做一遍吧。
第五题;碰到字符字母题内心是比较害怕的,看题也没有思路,需要再认真想想。。。
2.考试结果满意么,怎么改进?
不满意。以后对于字母符号题要多多认真思考感受,还有要再熟悉一下二进制的转换,对一些例如字符阵这种典型题不要畏难,好好熟悉理解,找出各行关系。
3.其他总结。
对于一些必要的知识如果模糊了要及时复习,不要拖沓存在侥幸心理,像二进制和字母符号题就是,要扎实掌握好每个知识点,不然以后可能会是可怕的知识漏洞。