C语言博客作业--函数

一、PTA实验作业

题目1. 使用函数输出水仙花数

1. 本题PTA提交列表

2. 设计思路

一、narcissistic( )函数

  • 第一步:定义整型变量 count=0,i,t,h,s,sum=0;sum用于计算每个数的因数和,count用于计算输入number的位数
  • 第二步:令h=numberh=h/10,count加一,直到h=0
  • 第三步:s=1h=h/10,count加一,直到h=0
  • 第四步:令h=number
  • 第五步:令t=h%10; ;进行循环for(i=1;i<=count;i++){s=s*t;},sum=sum+s,h=h/10
  • 第六步,重复步骤五,直到h=0
  • 第六步:如果sum=number,返回1,否则,返回0

二、void PrintN( )函数

  • 第一步:定义循环变量 j
  • for(j=m+1;j<n;j++) {
    if(narcissistic(j))如果满足第一个函数,即如果j为水仙花数,输出j

3.本题调试过程碰到问题及PTA提交列表情况说明。


  • 发现没有输出后面的水仙花数,然后调试也没有发现什么问题,我就一直看程序,发现sum没有初始化,将sum=0,再运行一下答案就对了。后来我发现调试没有发现问题是因为,题目中给的范围是153到400.我调试了一下发现153这个数字经过第一个函数之后就开始154经过第二个循环,我觉得要循环两百多次就没有继续,没有发现是没有将第一个函数开始的时候sum赋值为0,那么153后面测试的数字就当然不可能实现sum==number,所以运行时就只有第一个数字输出来了。

题目2. 使用函数输出指定范围内的完数

1. 本题PTA提交列表


2. 设计思路

一、int factorsum( int number )函数

  • i定义整型变量 i,sum=0;
    if(number1)返回 1 到主函数;
    循环for(i=1;i<number;i++){
    if(number除以 i 等于0){
    sum=sum+i;加上约数 i}
    }
    循环结束后判断 if(sum
    number)返回number的值;
    否则返回 0;

二、void PrintPN( int m, int n )函数

{
定义整型变量 t , j , flag=0;
进行循环for(t=m;t<=n;t++) {
调用第一个函数if (factorsum(t)等于t ){
令flag=1; 输出 t,输出1
进行循环for(j=2;j<t;j++){
if( t 能够被 j 整除) 输出+ j
}
结束循环后,换行
if(flag不等于1) 输出No perfect number

3.本题调试过程碰到问题及PTA提交列表情况说明。

  • 开始的时候是输出的%d+ 导致分解之后最后面多了一个加号,后来思考了好久修改为+%d,因为每一个数的分解都有1就在最前面输出了1,这样就解决了加号的问题,可是提交还是一分,运行出下图结果

    不管是不是完数后面都跟上了No perfect number,一直改不对,也是没有想过会返回错值,题目要求
    可是我返回是,是完数就返回1,不是完数就返回0,如果是1也返回1,重新审题后,把

    if(factorsum(t)1)改成了if(factorsum(t)t)就答案正确了。

题目3. 求组合数

1. 本题PTA提交列表

2. 设计思路

一、主函数

  • 第一步:定义m , n
  • 第二步:输入m,n
  • 第三步:调用fact函数,计算fact(n)/(fact(m)*fact(n-m),输出结果并四舍五入到整数位

二、fact()函数

  • 定义整型变量 i ,浮点型变量t=1.0
    循环for(i=1;i<=n;i++)
    累乘 t = t * i 得到 t 的阶乘
    返回 t

3.本题调试过程碰到问题及PTA提交列表情况说明。

开始真的是傻傻的以为可以放在一起运算,完全摸不着头脑

后来改成了printf("result = %.0f",fact(n)/(fact(m)*fact(n-m)));但是下面我写了double fact(int n),double fact(int m),double fact(int n,int m)分别计算,最后问了一下同学这道题的思路,就把三个fact()改成一个就正确了。

二、同学代码结对互评

1.同学互评照片。

2.我的代码、互评同学代码截图

梁才玉的代码

我的代码

3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?

  • 不同:(1)才玉的计算了数字的位数之后才计算,我的是先判断数字的正负才开始进行计算的
    (2)循环方面,才玉用do-while语句,饿直接用的while语句
    (3)计算方面,才玉用的是幂次方,并且每循环一次指数count减去 1 ,我用的累乘,累加。
  • 我更喜欢我的代码。

三、截图本周题目集的PTA最后排名。

PTA排名

提交列表截图

四、本周学习总结

1.你学会了什么?

1.1 C语言哪些数据类型?

1.2 字符型数据需要注意地方?

  • %c也会吸收空格和回车,输入时要注意。输入数据间用空格还是逗号要和scanf函数里的控制格式一致。
  • getchar()和putchar()一次只能吸收一个字符
  • 单个字符用%c,字符串用%s,同时字符串不能加&符号。

1.3 自增自减运算符?

  • n++的值为n原来的值,但是n的值已经在原来的值上加了1; ++n的值为原来n的值加上1的值,n的值也已经在原来的值上加了1
  • n--的值为n原来的值,但是n的值已经在原来的值上减掉了1; --n的值为原来n的值减掉1的值,n的值也已经在原来的值上减掉了1

1.4 运算符优先级?

1.5 C语言哪些表达式?课堂派哪里做错,做错的请在这里分析原因?

  • 算术表达式,赋值表达式,逗号表达式,关系表达式,逻辑表达式。
  • 课堂派

  • 这一题原来不清楚一个浮点型和一个整型要按照哪一边的,感觉应该是浮点型的,但是打出来运行之后答案是2,我就深信不疑了,后来答案错误之后才发现double x了,但是输出的时候用了%d,以前好几次也是这样,这次真的是要记住了!

  • 这道题错是因为我对符号的优先级还不太懂,然后当时对进制也不会,不知道0x是十六进制的,但是后来上课完就理清了。

2. 本周的内容,你还不会什么?

  • 感觉自己对函数的变量的使用还不会,形参实参经常搞乱,最开始还以为一个函数有3个不同的形参就要写三次一样的函数,不一样的形参
  • 对位运算还不是很懂

3. 循环结构考试总结

3.1. 哪题做错了,怎么改?


前面两题20分钟就写完了,一直在写这题,判断素数的地方总感觉自己不对,心里没底,因为原来如果有素数判断都是翻书的,印象不够深刻。判断了之后运行一直没有输出,当时电脑上的devc++是调试不了的,我就一直盯着看,没有输出,所以我就改括号的位置,改了好久,还是运行不出来,提交PTA也不对,一直耗在那里,后来在最后几分钟的时候,突然间意识到素数是从2开始算的,吧i=1改成了i=2就对了。

3.2. 考试结果满意么,怎么改进?

  • 不满意。感觉还是不够细心吧,就括号和赋初始值的问题,耗了那么久,导致后面两题才写一点就结束考试了。还是要细心一点,合理安排做题时间,还有就是要充分吸收平时作业 里的解题方法和思路,这样考试的时候就快得多了。

posted on 2017-11-18 22:58  黑白熊熊  阅读(287)  评论(3编辑  收藏  举报

导航