C语言--函数
一、PTA实验作业
题目1:使用函数输出水仙花数
1. 本题PTA提交列表(要提交列表,不是结果)
2. 设计思路
判断是否为水仙花数的函数设计思路:
1、定义整型变量result=0表示计算结果、count=0表示次幂、digit表示取个位、flag表示中介变量、i表示循环计数、pow个位数的count次幂 ;
2、for flag=number to flag>=1;
3、flag=flag/10,count++;
4、end flag;
5、for flag=number to flag>=1;
6、digit=flag%10;
7、pow=1,for i=1 to i<=count;
8、pow=pow*digit;
9、end i;
10、result=result+pow;
11、end flag;
12、若result=number,返回1,否则返回0;
输出m~n(不包括m、n)之间所有水仙花数的函数设计思路:
1、定义整型变量number_1表示要判断的数;
2、for number_1=m+1 to number_1<n;
3、若 narcissistic(number_1) 为真,输出number_1;
3.本题调试过程碰到问题及PTA提交列表情况说明。
- 问题1:
我的错误代码:
改正之后代码:
错误原因:pow赋初值的位置错了
解决办法:调试,跟踪变量
题目2:使用函数输出指定范围内的Fibonacci数
1. 本题PTA提交列表
2. 设计思路
返回第n项斐波那契数的函数设计思路:
1、定义整型变量 fib=2 表示斐波那契数、i 表示项数计数、fib_n=1表示前一项斐波那契数;
2、若n=1或n=2,返回1,若n=3,返回2,否则执行下一步;
3、for i=4 to i<=n;
4、fib=fib+fib_n,fib_n=fib-fib_n;
5、end i;
6、返回fib
输出m~n之间所有斐波那契数的函数设计思路:
1、定义整型变量fib表示斐波那契数,i 表示计斐波那契数有几个,fib_n表示前一项斐波那契数;
2、若m=n=1,则i=2并输出“1 1”,否则执行下一步;
3、for fib=1 to fib<=n,fib=fib+fib_n;
4、若m=n=fib,则i=1,输出m并跳到步骤9,否则执行下一步;
5、若fib>=m,则i++,执行下一步,否则调到步骤7;
6、若i=1,则输出fib,否则输出一个空格加fib并执行下一步;
7、fib_n=fib-fib_n;
8、end fib;
9、若i=0,输出"No Fibonacci number "
3.本题调试过程碰到问题及PTA提交列表情况说明。
- 问题1:每次都是部分正确,而且错误都是格式错误。问题是理解错了题目的意思,我一直以为如果m=n的话就要输出小于m、n的所有Fibonacci数(想吐血)。最后反复看题目,然后才明白过来,但是在改正的时候又在if里面打==的时候忘记了一个=,又导致格式错误(一口老血呕出),最后通过调试解决了问题。
解决办法:平时做题的时候更仔细认真点看题目,不然这样写题真的很耗时间。下次如果超过1天还是弄不出来我就去问老师了,不然靠自己发现太费时间了。
题目3:7-1 求组合数
1. 本题PTA提交列表
2. 设计思路
主函数设计思路:
1、定义两个整型变量m、n,一个浮点型变量result,一个浮点型函数fact();
2、输入m、n;
3、调用函数fact(),进行result=fact(n)/(fact(m)*fact(n-m))的计算;
4、输出result;
fact()函数设计思路:
1、定义一个整型变量count用来计数,一个浮点型变量stratum=1表示阶层;
2、for count=1 to count<=x;
3、stratum=stratum*count;
4、end count;
5、返回stratum;
3.本题调试过程碰到问题及PTA提交列表情况说明。
- 问题1:弄错函数返回类型,应该返回double型的result的,但是我给弄成int型的了,神奇的是Dev没报错,而且在Dev上测试数据的时候也没有问题,就是pta过不了。
解决办法:我调试和运行测试都感觉没问题,数据都能出来。最后问了助教,他说可能是数据类型的问题,然后就发现原来是我把返回类型弄错了。但是奇怪的是明明返回类型错了,Dev没报错,基本数据测试也没问题。问助教,助教叫我去百度,我没有百度到准确的答案,然后思考了一下我觉得可能是因为这一道题要计算的数据刚好都是整数,恰好在int和double的共有范围内,但是double类型能表示更大一些的数据,所以在Dev上测试基本数据的时候才没有暴露出问题。不知道是不是这样,如果朋友们有正确答案,欢迎下方留言。
二、同学代码结对互评(1分)
1.同学互评照片。
2.我的代码、互评同学代码截图
互评题目:使用函数输出一个整数的逆序数
互评同学:李重蕖
我的代码:
int reverse( int number )
{
int result=0, digit, count=0, flag, i;
flag=number;
while(flag>=1||flag<=-1)//计算number的位数
{
count++;
flag=flag/10;
}
while(number>=1||number<=-1)
{
digit=number%10;
for(i=1; i<count; i++)
{
digit=digit*10;
}
count--;
number=number/10;
result=result+digit;
}
return result;
}
李同学的代码:
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
三、截图本周题目集的PTA最后排名。
PTA排名
四、本周学习总结(2分)
1.你学会了什么?
1.1 C语言哪些数据类型?
C语言的数据类型有整型(int)、浮点型(double/float)、字符型(char)这3大种。其中整型又分为长整型(long int)和短整型(short int),长整型变量表达数据范围较短整型大。浮点型又分为双精度浮点型(double)和单精度浮点型(float),单精度浮点型只能精确到小数点后7位,而双精度浮点型能精确到小数点后16位。另外浮点型能表达的数据范围比整型大。
对于我而言,现在对整型和浮点型这两个数据类型的用法基本熟悉了,就是对字符型不太熟练。因为字符型的输入输出不太一样,需要更加注意。还有就是对于二进制、八进制、十六进制的数据怎么输出我还不是搞得很清楚。
1.2 字符型数据需要注意地方?
字符型数据的输入和输出都需要注意,因为要连续输
1.3 自增自减运算符?
i++我能明白是什么意思,但是++i就不怎么捋得清楚了。当i++和++i放一起的时候我会分不清他们的区别
1.4 运算符优先级?
1.5 C语言哪些表达式?课堂派哪里做错,做错的请在这里分析原因?
1.6 其他内容?
2.本周的内容,你还不会什么?
详细罗列不明白地方,甚至课堂派作业不会做的地方请都详细列出。