C语言博客作业--函数
一、PTA实验作业
题目1:7-1 求组合数
1.本题PTA提交列表
2.设计思路
阶乘函数设计思路:
- 第一步: 定义函数类型为double型
- 第二步:定义两个整形变量i,n,i用于计算阶乘,n为函数变量,定义一个浮点型变量sum存放阶乘
- 第三步: i=1,sum=1
- 第四步:sum=sum*i
- 第五步:i++
- 第六步:重复第三步,直到i>n
- 第七步:返还sum的值
主函数设计思路:
- 第一步:定义两个整形变量m,n,定义一个浮点型变量result存放组合数结果
- 第二步:输入m,n
- 第三步:调用函数计算result=fact(n)/(fact(m)*fact(n-m))
- 第四步:输出result
流程图:
3.本题调试过程碰到问题及PTA提交列表情况说明
- 碰到的问题:定义的阶乘函数为double型,但返还值的类型定义为整形,导致答案部分正确
- 解决办法:将int sun改为double sum
题目2:6-6 使用函数输出水仙花数
1.本题PTA提交列表
2.设计思路
判断水仙花数函数(narcissistic()):
- 第一步:定义函数类型为整形,变量为整形变量number
- 第二步:定义整形变量left用于存放number对10取余的余数,整型变量count存放number的位数,sum整形变量存放每位数的次方的和 ,整形变量n,m用于储存number
- 第三步:赋值n=number,m=number
- 第四步:计算n=n/10,
- 第五步:count++
- 第六步:重复第四步,直到n==0 (第三到第六步用于计算number的位数)
- 第七步:计算left=m%10
- 第八步:sum=sum+pow(left,count),
- 第九步:number=number/10
- 第十步:重复第七步,直到m==0
- 第十一步:判断sum是否等于number,如果等于,返还1,否则返还0
输出水仙花数函数(PrintN()):
- 第一步:定义函数为整形,变量为两个整形变量m,n
- 第二步:定义整形变量i=m+1
- 第三步:调用判断水仙花数函数,判断narcissistic(i)是否等于1,如果是输出i
- 第四步:i++
- 第五步:重复第三步,直到i>=n
流程图:
3.本题调试过程碰到问题及PTA提交列表情况说明
-
碰到的问题:题目只要求输出区间内的水仙花数,不包括端点,判断条件错误,导致若端点为水仙花数是也输出
例如此时不应该输出371为水仙花数:
-
解决办法:仔细阅读题目后发现是开区间(m,n),从而将循环判断条件i<=n改为i<n
题目3:6-9 使用函数验证哥德巴赫猜想
1.本题PTA提交列表
2.设计思路
流程图:
3.本题调试过程碰到问题及PTA提交列表情况说明
-
碰到的问题:没有考虑到1不是素数,应该返还0,而判断素数的循环中没有1,所以当输入1时没有返还值
-
解决办法:在循环前加上 if(p==1) return 0;
二、同学代码结对互评
1.同学互评照片
2.我的代码、互评同学代码截图
我的代码截图:
朱杰伟同学代码截图:
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
- 不同点以及各自的优势:我的代码在计算水仙花数的和时用了循环结构将每一位求出来幂运算后累加,而朱同学的代码直接把每一位数都求出来直接相加。但朱同学的代码只能计算10000以内的水仙花数,而我的可以计算更多位
- 更喜欢的代码风格:相对本题更喜欢自己的代码,朱同学的代码没有注释,看着让人不好理解
三、截图本周题目集的PTA最后排名
四、本周学习总结
1.你学会了什么?
- 通过本周的学习我明白全局变量和局部变量的区别以及全局变量的优缺点。
- 本周还学习了数据类型,我学会了如何用科学计数法表示一个数,其中对于本周课程印象最深的就是a++和++a的区别,以及这两个表达式的值的变化情况。
- 还学会了一个复杂的表达式中各个运算符的优先级以及它们的运算顺序。
- 本周PTA主要的错误点以及注意点:对于PTA中特定的输出格式中的空格的考虑不到位,例如6-8 使用函数输出指定范围内的Fibonacci数以及6-7 使用函数输出指定范围内的完数这两题以及本周上机考试的最后一题,这三题的算法设计都不算难,但是题目固定的输出格式导致有许多要考虑的地方,有时候考虑到其中一个特殊点的时候又会忽略另一个,而且做出来以后回过头再看的时候发现其中有很多可以删除简化的地方,,主要原因还是算法思路不够好,以后再写的时候要仔细构思考虑。
1.1 C语言哪些数据类型?
- 整数型,字符型,浮点型。
1.2 字符型数据需要注意地方?
- 字符型常量需要用‘’,‘0’与0中,‘0’为字符型,0为整形。
1.3 自增自减运算符?
- ++;--
1.4 运算符优先级?
单目运算符优先级比双目运算符优先级高。
单目运算符优先级:
- 1:[] , ()
- 2:-- ,++ , ! , & , | , ~ ,sizeof
- 3: / , * , %
- 4:+ ,-
- 5:>> , <<
- 6:> , >= , < , <=
- 7:== , !=
- 8:&
- 9:^
- 10:|
- 11:&&
- 12:||
- 13:?:
- 14:= , += ,-= , *= , /= , %= ,
1.5 C语言哪些表达式?课堂派哪里做错,做错的请在这里分析原因?
- 算术表达式,赋值表达式,关系表达式,逻辑表达式,逗号表达式,位运算。
1.6 其他内容?
- 长度运算符sizeof
2.本周的内容,你还不会什么?
- 对于本周的数据结构的内容,对于位运算还是不太明白,混淆位运算符,对于一个复杂的位运算表达式总是要看书才不会把每个运算符弄错。
- 对于static的用法也不是太了解,可能是因为没怎么用在代码中,不是很熟悉。
3.循环结构考试总结
本次上机考试存在以下几点问题:
- 读题不够仔细。对题目没理解清楚,这个问题出现在第三题,对于题目理解错误,题目要求输出不大于输入数的10个素数,输入数的范围为(50,20000),当输入51时应该输出小于51大于0的10个素数,而我理解成输出小于51大于50的素数,导致答案一直错误。
- 思路不清晰。考试时对于最后一题的输出格式一直没弄清,对于输出的情况总是丢三落四,可能也是有点心急,当时应该静下心来仔细分析一下,理清思路写算法。
对本次考试不能说很满意,因为本来可以做的更好但是却没有做到,下次考试要更加仔细,在下次考试前的这段时间我要加强设计思路这方面。