C语言博客作业--函数

一、PTA实验作业

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

1. 本题PTA提交列表

2. 设计思路

  • int narcissistic( int number )函数
    • 1.定义整型变量int i,j,m;
      int n,digit=0,N1,N2;
      int num,re_number=0;
    • 2.让N1,N2赋上number的值 N1=number;N2=number;
    • 3.for循环{n=N1%10;
      digit++;
      N1=N1/10;} 用来统计number的位数
    • 4.for循环{num=1;
      n=N2%10;
      N2=N2/10;
      内嵌一层for循环{num=n*num;}
      计算每一位数次方的和 re_number=num+re_number;
      }
    • 5.判断重新构成的数re_number与number是否相等,若相等,则返回1,否则返回0。
  • void PrintN( int m, int n )函数
    • 1.定义整型变量M
    • 2.利用for循环递增(M=m+1;M<n;M++),同时引用函数narcissistic( int number )判断M是否为水仙花数,若是,则输出M。

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

  • 问题:忽略了另一个函数的要求是“按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数”,对n多进行了一次判断。

  • 解决方法:将“M<=n”改为“M<n”

题目2:使用函数输出指定范围内的Fibonacci数

1. 本题PTA提交列表

2. 设计思路

  • int fib( int n )函数
    • 1.定义整型变量i,f1=1,f2=1,f3; //i用来控制循环,f1,f2,f3用来计算Fibonacci数
    • 2.for循环(i=3;i<=n;i++){f3=f1+f2;
      f1=f2;
      f2=f3;}
    • 3.返回f2.
  • void PrintFN( int m, int n )函数
    • 1.定义整型变量j,i,flag=0,sign=0;
    • 2.定义整型变量time=0;//用来计算题目给定范围内Fibonacci数的个数;
    • 3.第一重for循环(j=1;fib(j)<=10000;j++)
    • 4.第二重for循环(i=1;i<=time;i++){
      if(fib(i)>=m&&fib(i)<=n)
      {如果sign==1 那么输出空格;
      flag=1; 输出fib(i)的值;
      sign=1;}
    • 5.如果flag==0 那么输出"No Fibonacci number"。

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

  • 问题:第二个函数漏考虑了Fibonacci数为1的情况,1也是Fibonacci数,但结果却会输出“No Fibonacci number”。

  • 解决方法:将代码重新编写,第二个函数先算出在题目限制范围内Fibonacci数的个数,然后根据Fibonacci数个数利用循环语句找出[m,n]内的所有Fibonacci数。

题目3:求组合数

1. 本题PTA提交列表

2. 设计思路

  • 1.定义整型变量m,n;
  • 2.输入m,n;
  • 3.输出结果("result = %.0lf",引用函数fact(n)/(fact(m)*fact(n-m));
  • 4.定义函数double fact(int n)
    • 5.定义浮点型变量product,定义整型变量i;
    • 6.给product赋初值为1;
    • 7.for循环(i=2;i<=n;i++) { product *= i;} //算阶乘
    • 8.返回product的值。

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

本题未遇到困难,定义一个函数计算阶乘,主函数引用三次该函数就可以算出结果。

二、同学代码结对互评

1.同学互评照片

我和李梦冰同学

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

李梦冰同学的代码

我的代码

3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。

  • 我的代码:在最后的输出部分利用goto直接跳出所有循环,虽然方便快捷,但我个人觉得有些投机取巧,goto还是尽量少用。
  • 梦冰的代码:梦冰的第一个自定义函数,对素数的判断,其实在p%2==0时就能退出循环,但梦冰的却是一直对p做对i的取余运算;第二个自定义函数的代码比我的简单有效,我用了两个if判断语句和两个for循环语句,使代码显得冗长。
  • 综上,我较喜欢梦冰的代码。

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

四、本周学习总结

1.你学会了什么?

1.1 C语言哪些数据类型?

  • 整型,字符型,实型。

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

  • 1)字符型整型变量和字符型变量的定义和值都可以互相交换;
  • 2)互换整型变量和字符型变量的定义和值时,整型数据的取值范围是有效的ASCII码;
  • 3)英文字母的大小写是不同的字符型常量。

1.3 自增自减运算符?

  • 1)设n是一个整型变量并已赋值,则n++和++n都相当于n=n+1,不同的是++n表示的是n加一后的值,而n++仍表示原来n的值,但这时n已经等于“n+1”的值。n--与--n同理。
  • 2)自增自减运算符的运算对象只能是变量,不能是变量或表达式。

1.4 运算符优先级?

  • 1)如果操作数两侧运算符的优先级相同,则按结合性决定计算顺序;
  • 2)可以用圆括号改变运算符的执行次序。

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

  • 1)算术表达式,赋值表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式。
    • 条件表达式的形式: 表达式1?表达式2:表达式3.
    • 逗号表达式的一般形式: 表达式1,表达式2,...,表达式n
      按照顺序计算每个表达式,最后将表达式n的值作为符号表达式的值,将表达式n的类型作为逗号表达式的类型。
  • 2)课堂派第六题,忘记了10和4都是整型常量,尽管x为浮点型,但10/4的结果还是整型,在给x赋值时才变为浮点型。
  • 3)课堂派第九题,自增符号在后面的运算与在前面的运算不一样,j++的结果应该仍为3。

1.6 其他内容?

  • C语言中整数的八进制、十六进制的表示方式。
  • 数据类型的自动转换遵循一定规则,在赋值运算时,赋值号两侧数据的类型最好相同,至少右侧数据的类型比左侧数据的类型级别低,或者右侧数据的值在左侧变量的取值范围内,否则会导致运算精度降低,导致结果错误。
  • 数据类型的强制转换,一般形式是(类型名) 表达式,类型转换都只是为了本次运算的需要,对数据类型的临时转换,并没有改变数据的定义。

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

  • 对位运算还不是很了解;
  • 对八进制、十六进制的转换也不太懂。

3.循环结构考试总结

3.1 哪题做错了,怎么改?

  • 1.7-3 二进制的前导的零
    • 忘记十进制转二进制怎么计算,后来纠结在算出的结果是二进制数的逆序。
    • 请教同学,研究后发现就算结果是二进制的逆序数,但位数是相同的而且二进制数除了0,第一位一定是1,那么以此为条件可以算出二进制数的位数,然后与32相减,得出前导的零的个数。
  • 2.7-5 单词长度
    • 当输入空语句和多个空格时不能正确输出,但目前还未解决。

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

不满意,对嵌套循环的是用还是不太熟练,而且这次考试的状态不太好,看到题目时脑子一片空白,注意力不集中,或许是平常做题花的时间太长,以后做题时会更加专注,在读题解题方面也需要加强。

3.3 其他总结。

  • 十进制转二进制就是把十进制数不断除二取余直到除以二等于1时停止;
  • 大部分嵌套循环语句的内循环条件依靠外循环的条件。【然而总是忘记】
posted @ 2017-11-18 22:47  看尽长安花  阅读(489)  评论(4编辑  收藏  举报