C语言博客作业--函数
一、PTA实验作业
题目1:使用函数判断完全平方数
1. 本题PTA提交列表
2. 设计思路
1.读入传入数据n
2.比较开方后的n,与开方后强制转换成int类型的n,比较是否相等
3.相等返回1
4.不相等返回0
3.本题调试过程碰到问题及PTA提交列表情况说明
devc++上可以过,到pta上就调试错误,提交几次结果一样,检查并未漏掉什么。
解决方法:强制转换的int要括号起来,可能是pta与devc++编译器不同。
题目2:使用函数输出指定范围内的Fibonacci数
1. 本题PTA提交列表
2. 设计思路
- fib函数
1.传入数据n
2.定义count计算项数,从2开始,定义a和b,a为b的前一项刚开始均为1,最后第count项值为b,t为交换a,b值的暂存变量
3.当n<=2时,Fibonacci数均为1
4.当n>2,做以下循环5-8
5.t=b
6.b = b+a
7.a=t
8.count++
9.直到count!=n停止循环
10.返回b的值 - PrintFN
1.传入数据m和n
2.定义循环变量i=1,count=0,计算输出个数
3.如果m<=fib(i),count++
4.如果count1,输出fib(i)
5.如果count!=1,输出空格加fib(i)
6.i++
7.当fib(i)<=n,循环3-6
8.当count0,输出"No Fibonacci number"
3.本题调试过程碰到问题及PTA提交列表情况说明
该题最大的问题就是写出算法来输出任意一项的Fibonacci数。
解决方法:通过自己动手写规律,想到思路,再设计出算法。
提交结果有一个部分错误是忘记写输出"No Fibonacci number"的代码,很快就解决了。
题目3:求组合数
1. 本题PTA提交列表
2. 设计思路
- 主函数
1.定义m和n,double类型的sum1
2.输入m和n
3.sum1=fact(n)/(fact(m)*fact(n-m))
4.输出sum1 - fact函数
1.传入数据n
2.定义double类型变量sum=1,int类型循环变量i
3.for i=1 to n,sum=i1.0
4.返回sum的值
3.本题调试过程碰到问题及PTA提交列表情况说明
写函数时sum的类型定义成了int类型,提交几次都是部分错误,后来想到课本上用到阶乘要定义成double类型,否则阶乘结果可能超出int能表达的最大范围。
解决方法:sum的类型改为double类型就通过了。
二、同学代码结对互评
1.同学互评照片。
2.我的代码、互评同学代码截图(此处截图核心代码就好,不一定截图全部代码,图上指明是谁的代码。)
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
-
总体思路不同
narcissistic函数
他是直接用number直接拿出每一位数,不改变number,然后直接写计算式算出n次幂之和,不用循环;
我是将number又给了其他两个变量num1和num2,使用两个循环,num1用于算出number是几位数,num2用于算每一位做n次幂之和,n就可以用num1算出的位数,结果返回与number比较。 -
各自优势
他的思路较为简单,思维量不大,但是代码多。
我的可能要想多一些,代码量比较少 -
喜好
我更喜欢自己的代码 -
改进
PrintN函数可以调用narcissistic函数,简化程序,减少代码量。
三、截图本周题目集的PTA最后排名。
四、本周学习总结(2分)
1.你学会了什么?
1.1 C语言哪些数据类型?
- 两大类:整型和实型(浮点型)
整型包括short,int,long,char等
实型包括float,double等 - 补充:
1.char为字符型变量,可以用%c输入输出字符,也可%d作为整数输入输出数字,范围很小。
2.unsigned为无符号类型,可以加在数据类型前,扩大表示范围,但只有正数部分扩大。
1.2 字符型数据需要注意地方?
- 输入:要注意与数据同时输入时空格问题,一不小心就会传入一个无用的空格,通常采用scanf语句中适当的地方加空格或getchar()吸收。
- 要在代码中表示字符要加单引号,如putchar()中或判断字符中
1.3 自增自减运算符?
- 前缀与后缀问题:(符号在前为前缀,在后为后缀)
相同点:原来变量都相应+1或-1
不同点:前缀表达式值为变化后结果,后缀表达式值为改变前。(前后颠倒)
1.4 运算符优先级?
直接找了两张图,自己总结不完整,而且格式不易书写,不直观
1.5 C语言哪些表达式?课堂派哪里做错,做错的请在这里分析原因?
设x、y、t均为int型变量,则执行语句:x=y=3; t= ++x || ++y; 后,y的值为__。
A、不定值
B、3
C、4
D、1
答案:B,3 我选择C,4
分析:||运算符判断两边表达式顺序自左向右,表达式++x的值为4!=0,即为对,或运算只要有一边为对即为对,所以||不再判断下去,所以y值没有改变。
1.6 其他内容?
无
2.本周的内容,你还不会什么?
基本知识点都掌握,但是有时会记不住,要勤加复习记忆。
3.循环结构考试总结
1.哪题做错了,怎么改?
- 7-5 单词长度
#include<stdio.h>
int main()
{
int count,flag=0;
char ch;
scanf("%c",&ch);
while(ch!='.'){
while(ch==' '){
scanf("%c",&ch);
if(ch=='.')break;
}
if(ch=='.')break;
count=0;
while(ch!=' '&&ch!='.'){
count++;
scanf("%c",&ch);
}
if(flag==0){
printf("%d",count);
flag=1;
}
else if(flag==1){
printf(" %d",count);
}
}
return 0;
}
这道题做了很久,尤其是空格问题,想了很久,试了很多方法,但是最后的问题都出在了代码架构上,最后通过查询别人的方法,放弃了原来的代码架构,重新开始写,当然处理一些问题也用到了自己的方法,重新写也是调了一些时间才终于做对。
2.考试结果满意么,怎么改进?
不太满意,只能是平时多做题目,孰能生巧,我开始意识到自己思路的局限,有些题目虽然自己能做出来但是不一定是最好,甚至有些题,一直靠自己的思维方式跟本就想不出,感觉有时间还是要多看看其他人的代码,取长补短。
3.其他总结。
无