C语言第五次博客作业--函数
一、PTA实验作业。
6-5 使用函数输出一个整数的逆序数
1.本题PTA实验结果
2.设计思路
- (1)定义五个整型变量n,count,i,x,sum。
- (2)赋初值,将进入函数的number赋值给n,sum=0,count=0。
- (3)统计输入number的位数count。
- (4)n=n/10,count++。
- (5)重复步骤4,直到n=0。
- (6)i=count-1。
- (7)对number取余x,x=number%10。
- (8)计算sum=sum+x*pow(10,i)。
- (9)计算number=number/10。
- (10)重复步骤7,直到i<0,结束循环。将sum的值返回主函数。
3.本题调试过程碰到问题及PTA提交列表情况说明。
- 本题没有遇到问题。
6-7 使用函数输出指定范围内的完数
1.本题PTA实验结果
2.设计思路
- (1)定义函数factorsum( int number ),输出完数。
- (2)定义两个整型变量sum=1,i=2。
- (3)若number%i==0,则sum=sum+i。
- (4)i++。
- (5)重复步骤3,直到i>=number,结束循环,将sum的值返回到主函数。
- (6)定义函数void PrintPN( int m, int n )
- (7)定义三个整数i=m,j=2,count=0。
- (8)若factorsum(i)==1,则count++,printf("%d = 1",i)。
- (9)若i%j==0,printf(" + %d",j),printf("\n")。
- (10)j++。
- (11)重复步骤9,直到j>=i,结束循环。
- (12)i++。
- (13)重复步骤8,直到i>n,结束循环。
- (14)if(count==0) printf("No perfect number")。
3.本题调试过程碰到问题及PTA提交列表情况说明。
- (1)只输出了一个
- 解决问题:第一个函数中,将i=1改为i=2,因为任何数对1取余都为0。且将i<=number改为i<number,因为完数不包括自身。同理将第二个函数的j改正。
- (2)输出的格式错误。
- 解决方法:添加空格。
7-1 求组合数
1.本题PTA实验结果
2.设计思路
- (1)定义四个浮点型数x,y,m,n。
- (2)输入两个浮点数m,n。
- (3)调用函数fact,y=fact(n-m),m=fact(m),n=fact(n)。
- (4)计算x=n/(y*m)。
- (5)输出x(不保留小数)。
- (6)定义函数double fact(double b)
- (7)定义两个浮点型i,a=1。
- (8)for(i=1;i<b;i++) a=a*i。
- (9)将a的值返回到主函数。
3.本题调试过程碰到问题及PTA提交列表情况说明。
- (1)没有使用%.0lf使得答案错误。
二、同学代码结对互评。
1.互评同学名称。
林智超。
2.我的代码、互评同学代码截图。
6-8
我的代码
int fib(int n)
{
int a,b,t,i;
a=b=1;
for(i=2;i<=n;i++){
t=a+b;
a=b;
b=t;
}
return a;
}
void PrintFN(int m,int n){
int i,j,count=0;
for(i=1;i<=10000;i++)
{
if(fib(i)>=m&&fib(i)<=n)
{
printf("%d",fib(i));
count++;
break;}
}
for(j=i+1;j<10000;j++){
if(fib(j)>=m&&fib(j)<=n)
printf(" %d",fib(j));
count++;}
if(count==0)
printf("No Fibonacci number\n");
}
林某代码
int fib( int n )
{
int i,a,b,c;
a=b=1;
for(i=2;i<=n;i++){
c=a+b;
a=b;
b=c;
}
return a;
}
void PrintFN( int m, int n )
{
int j,flag=0,u;
if(m==1&&n==1)
printf("1 1");
else{
for(j=m;j<=n;j++){
for(u=1;u<=n;u++){
if(fib(u)>j)
break;
if(j==fib(u)){
flag=1;
printf("%d",fib(u));
if(fib(u+1)<=n)
printf(" ");}
}
}
}
if(flag==0&&m!=1&&n!=1)
printf("No Fibonacci number");
}
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
- 不同点:对函数void PrintFN( int m, int n )的处理方法不同。
- 优势:林某的代码巧妙的利用if解决了最后不能有空格的问题,而且整体代码比较简洁可读性高。我的代码比较普通,一步一步来。
- 我更喜欢林某的。
三、截图本周题目集的PTA最后排名。
四、本周学习总结。
1.你学会了什么?
1.1 C语言哪些数据类型?
- 基本数据类型,如:整型,长整型,短整型,无符号整型,无符号长整型,无符号短整型,字符型,单精度浮点型,双精度浮点型。
1.2 字符型数据需要注意地方?
- 每个字符型数据在内存中占一个字节。
- 整型变量和字符型变量的定义和值可以互换。
1.3 自增自减运算符?
- ++n相当于n=n+1,--n同理。
- ++n是先执行n=n+1,再将n的值作为表达式++n的值。n++,先将n的值作为表达式n++的值,再执行n++。
- 运算对象只能是变量,不能是常量或者表达式。
1.4 运算符优先级?
- 初等运算符>单目运算符>算术运算符>移位运算符>关系运算符>位逻辑运算符>逻辑运算符>三目运算符>赋值运算符>逗号运算符
- 单目运算符,赋值运算符,三目运算符和赋值运算是从右到左结合。
1.5 C语言哪些表达式?课堂派哪里做错,做错的请在这里分析原因?
- 赋值表达式,逻辑表达式,条件表达式,关系表达式。
- 无。
2.本周的内容,你还不会什么?
- 对一些特殊的数据类型的应用以及运算符优先级还不够熟悉。
3.循环结构考试总结
1.哪题做错了,怎么改?
- 第4和第5没有做出来。在第四题的时候没有弄清题目的意思,对处理进制的转化一时没有理解,导致卡住。
2.考试结果满意么,怎么改进?
- 不满意。巩固基础,再多练些代码,提高做题效率和代码的可读性。