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.考试结果满意么,怎么改进?

  • 不满意。巩固基础,再多练些代码,提高做题效率和代码的可读性。
posted @ 2017-11-18 11:06  oracler  阅读(468)  评论(1编辑  收藏  举报