C语言博客作业--函数

一、PTA实验作业

题目一:6-6 使用函数输出水仙花数

1. 本题PTA提交列表


2. 设计思路

  • 1定义函数narcissistic( int number )
  • 2定义局部变量sum用于存放计算个个位数的次方结果,sum=0,n=number留有最早的number值,end做为每次取余得到的个位数
  • 3当number为三位数时
  • 4若number/10!=0进入循环5
  • 5end=number%10,sum=pow(end,3)+sum,number=number/10
  • 6对最高位不满足循环条件的剩余number值sum=pow(number,3)+sum
  • 7当number为四位数时
  • 8若number/10!=0进入循环9
  • 9end=number%10,sum=pow(end,4)+sum,number=number/10
  • 10对最高位不满足循环条件的剩余number值sum=pow(number,4)+sum
  • 11如果sum=n,返回1,否则0

  • 1定义函数void PrintN( int m, int n )
  • 2定义局部变量i用于循环
  • 3i=m+1;i<n,i++循环调用上述函数判断是否符合水仙花数,是的话输出

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

一开始编辑时忘了number的改变性,导致最后的sum与number没有可比性,错误

改正之后发现输出的数据中没有370,调试后发现自己的条件使其没有进入循环


改正后输出正确,但是放到pta上答案错误,自己根据提示调试发现自己的数据输出有局限性

调整思路后,重新修改编写后部分正确

后发现自己题意没有理解好,当number四位数时要四次方,修改增加后正确

题目二:6-7 使用函数输出指定范围内的完数

1. 本题PTA提交列表


2. 设计思路

  • 1定义函数factorsum( int number )
  • 2定义局部变量j用于循环,.sum存放因子和,sum=0
  • 3当number=1时返回1
  • 4j=1;j<=number/2;j++循环5
  • 5若number%j==0,则sum=sum+j
  • 6返回最终sum的值

  • 1定义函数void PrintPN( int m, int n )
  • 2定义局部变量k,j用于循环,k做为所要完数,j做为所要因子
  • 3k=m;k<=n;k++,循环4,5,6
  • 4若k==factorsum(k),输出“k =”,当k=1时直接再输出“ 1”
  • 5j=1;j<=k/2;j++,循环6
  • 6若k%j==0,输出“ j”,当j<k/2时输出“ +”
  • 7每一轮循环结束输出“\n''
  • 8若j==1&&m!=1,则输出No perfect number

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

发现输出没有换行,多输出了No的不满足部分

调整后输出感觉相同

pta部分正确,调试修改后发现自己题意理解不够,继续修改

pta显示格式错误

调试发现自己多了空格,改正后正确

题目三:7-1 求组合数

1. 本题PTA提交列表

2. 设计思路

  • 1定义整型变量m,n存放输入的两个变量,浮点型变量result存放最后结果
  • 2输入m,n的值
  • 3调用函数 result=fact(n)/(fact(m)*fact(n-m))
  • 4输出result的值

  • 1定义函数fact(int n)
  • 2定义局部变量i用于循环,浮点型变量product用于存放阶乘的结果,product=1
  • 3i=1;i<=n;i++循环4
  • 4 product=product*i;
  • 5返回product的值

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


###一开始编写后提交发现部分正确,对于错误点考虑m=n/2的情况不太理解,自己改了一些不必要的地方, ###最后发现是由于自己对product的定义为整型的问题,当阶乘书数太大就不正确

二、同学代码结对互评

1.同学互评照片


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

林岑的代码

我的代码

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

(1)我的思路是利用取余得个位的方式,先计算位数,再利用已知位数不停把个位的数乘上10的某个次方变成高位逆序,最后考虑末位0的问题

(2)林岑的思路也有用到取余得个位的方式,但是她比较巧妙的利用循环, k=k*10+m把原先个位的数跟着循环升高位,输出逆序

(3)我的代码比较容易想到与入手,容易理解,但是很繁琐,不适用,林岑的代码比较简洁,用法也很巧妙,也避开一些假设讨论,在同一个循环语句中同时达到自己想要的效果,简洁明了。

(4)我喜欢林岑的代码风格

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

四、本周学习总结

1.你学会了什么?

1.1 C语言哪些数据类型?

整型

  • 有符号:int; short[ int ](范围 [-32768,32767] );long[ int ]
  • 无符号(自然数):unsigned[ int ];unsigned short [ int ] (范围 [0.65535] ) ;unsigned long [ int ]

字符型

  • char
  • 可以用整数来表示字符 ch='A'等价于ch=65

实型

  • float(有效数字7~8位)
  • double(有效一般15~16)
  • 数值精度和取值范围是两个不同的概念

实型常量

  • 浮点表示法(实数的小数形式)

必须有小数点

  • 科学计数法(实数的指数形式)

e前有数据,e后整数

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

  • 'a'和'A',0和'0'不同
  • 整型变量和字符型变量的定义和值都可以相互交换

1.3 自增自减运算符?

  • ++n的运算顺序是:先执行n=n+1,在将n的值做为表达式++n的值
  • n++的运算顺序是:先将n的值做为表达式n++的值,在执行n=n+1
  • 自增自减运算符的运算对象只能是变量,不能是常量或表达式。3++或++(i+j)非法

1.4 运算符优先级?

  • 赋值运算符,条件表达式,与!,单目的算术运算符为右结合
  • 双目的算术运算符与关系运算符,逻辑运算符与逗号运算符为左结合

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

  • 算术表达式, 赋值表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式



    自己在算时认为算aa=9,a=a-a=3-9,a=a+a=3-6
    实际应为a
    a=9,a=a-a=3-9,a=a+a=-6-6=-12


自己在答这道题时认为‘1’与1不同,就认为不能确定,但即使是'1',字符常量之间也是有数值差量可以转化。

1.6 其他内容?

  • 十进制的首位数字不能是0,八进制的首位数字必须是0,十六进制首位必须要有前缀0x或0X
  • 强制类型转换
    (类型名)表达式;
    int(3.8)得到3
  • 位运算 (二进制位运算)
    符号:&,|,^,-,<<,>>

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

  • 对于自增自减运算符的使用与计算不够熟练,容易出错
  • 字符类型的使用,输出输入
  • 运算符的优先级与结合性计算也易出错
  • 进制之间的转换计算
  • 对于一些不常用的表达式的理解不够

3.循环结构考试总结

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

  • 第二题字符的使用自己不够熟练,在定义与字母的转换增加上不熟练,自己在考试时是利用调试工具了解到A的数值65再利用字符与数值的转换关系得出正确。
    现在知道应该定义char ch='A',利用ch=ch+1得到后面字母
  • 第四道题二进制的计算,0的个数自己一开始思绪比较乱,编写的程序复杂也不正确,随后自己以除二的方式去考虑它的实际有效位数,再利用总的减去求得

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

  • 不满意
  • 自己应该多接触不同的题型,锻炼自己的思维能力
  • 在编写程序时要思考好再编写,减少自我混乱
  • 提高自我的查错能力,尽量自己思考找出运行失误之处

3.其他总结

  • 在打代码时要注意空格与换行问题,要格式准确
  • 对于空格问题也可以利用Dev-C++调试看出
  • 自己的预习要更透彻,课本要看仔细些
posted @ 2017-11-18 21:16  hahaha233  阅读(483)  评论(3编辑  收藏  举报