C语言函数作业

一、PTA实验作业

题目1:6-5 使用函数输出一个整数的逆序数

1. 本题PTA提交列表

2. 设计思路

  • 1、定义flag(用来储存number的每一位数);n(用来避免number为负数的情况);result(存放转为逆序数后的结果)
  • 2、如果number=0,结果直接返回0
  • 3、如果number小于0,n= - number;否则,n=number
  • 4、当n大于0时,result=result*10(乘以10以便下一步将独立出来的flag加上去);flag=n%10(将n的每一位独立出来);result=result+flag(依次累加转换出逆序数);n=n/10(n退一位以便进行下一步计算)
  • 5、当n小于0时,退出循环
  • 6、如果number小于0,result= - result;否则,result=result
  • 7、结果返回result

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

  • 1、

第一次做的时候没有考虑number为负数的情况,输入题目样例后发现错误,才把number为负数的情况加进去

  • 2、

第二次忘了number为负数,输出的result也应该是个负数,在最后面加上判断(如果number为负则result转为负,否则不变)

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

1. 本题PTA提交列表!

2. 设计思路

  • 一、判断水仙花数的函数
  • 1、定义sum=0(储存输入数据每一位数的幂的和);flag(将输入数据每一位数独立出来);count=0(计算输入数据的位数);n(此函数内用到两次循环,第一次循环会对输入数据产生影响,所以要用一个中间数据来过渡)
  • 2、令n=number
  • 3、当n大于零时,n=n/10,count++(计算number位数)
  • 4、再次将number的值赋给n
  • 5、当n大于零时,flag=n%10(拿出number的每一位数);sum=sum+pow(flag,count)(累加number每一位数的幂的和);n=n/10(n后退一位)
  • 6、如果sum=number,结果返回1(真),否则,返回0(假)
  • 二、打印m到n间(不包括m和n)所有水仙花数
  • 1、定义i
  • 2、for(i=m+1;i<n;i++) , f(narcissistic(i)) ;printf("%d\n",i) (运用上面的函数判断i是不是水仙花数,是就输出)

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

-1、


第一次做没有用n来过渡,导致number在第一次循环结束后值变了,无法进入第二次循环

  • 2、还有一个小失误,那就是没有注意到题目说的开区间(m,n),所以第二个函数我一开始是包括m和n的,如果m或n是水仙花数的话就与题意不符合了,多亏同学提醒发现错误

题目3:7-1 求组合数

1. 本题PTA提交列表!

2. 设计思路

  • 1、定义m和n
  • 2、输入m和n
  • 3、输出结果,其中调用函数fact()来计算阶乘
  • 4、定义函数double fact (int n)
  • 5、定义sum=1.0
  • 6、for(int i=1;i<=n;i++),sum累乘以i
  • 7、结果返回sum

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

  • 1、这题很简单,但我在函数定义中的sum一开始忘了给初值,导致结果出错
  • 2、一开始定义sum的时候定义成int类型了= =

二、同学代码结对互评

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

  • 我的代码
- 佳亮同学代码
int factorsum( int number ){
	int i,sum=0;
	if(number==1)return 1;
	for(i=1;i<=number-1;i++){
		if(number%i==0)sum=sum+i;
		
	}
	return sum;
}
void PrintPN( int m, int n ){
	int k,q,flag=0;
	for(k=m;k<=n;k++){
		if(factorsum(k)==k){
			printf("%d = 1",k);
			for(q=2;q<=k-1;q++){
				if(k%q==0)printf(" + %d",q);
			}
			putchar('\n');
			flag=1;
		}
	}
	if(flag==0)printf("No perfect number");
}

2.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?

  • 1、我们的主要区别在第一个函数,第一个函数我的sum=1,直接进入循环;佳亮同学sum=0,要判断是不是1再进入循环
  • 2、我觉得我的第一个函数的代码会比较好,它可以少一步判断,如果sum=1,不进入循环直接返回sum的值
  • 3、还有,循环条件其实不用到number-1,因为一个数不可能被比它的二分之一大的数整除(本身除外),所以循环条件到达number/2即可

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

四、本周学习总结

1.你学会了什么?

  • 1、学会了函数的使用以及数据类型的一些细节知识,尤其是自增自减运算符和优先级的相关知识(没上课前对此不是很理解,运用也不熟练)
  • 2、字符型变量可以与整型变量互换,例如将大写字母换成小写,只需ch(假设这个变量名为ch)-‘A’+‘a’即可
  • 3、自增自减的前缀后缀区别很大,例如m=n++;得到的m值为原来n的值,而n此时的值为原值+1
  • 4、运算符有优先级之分,优先级高先计算,同级运算符有左右哪边先结合之分
  • 5、C语言有算术表达式,赋值表达式,关系表达式,逻辑表达式,条件表达式,逗号表达,位运算以及其他运算;课堂派上第五题做错了,那只是一个简单的计算,但是我没注意到他要的是值
  • 6、本周上机考试,遇到了行末不要有空格的题目,对于这种题目,一开始我并不知道怎么让行末没有空格,后来经过思考,我发现可以引入一个变量,用来判断输出的数,如果输出的是最后一个数,
    那么就只输出数不要空格

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

  • 1、感觉对于题目有时会把它想得很复杂,导致没有思路,例如上机考试第四题前导零,我以为要把输入的数转成二进制才能去判断,但不会转换,所以完全没有思路;后来舍友告诉我,完全不需要这么做,再经过老师对数据类型的课的讲解后,我觉得我的确想太多了- -

3.循环结构考试总结

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

  • 1、第四题,这题如上面所讲,完全是想太多= =
  • 2、第五题,没有处理好题目输出要求中的行末不能有空格,处理方法如上面所讲引入变量判断要不要空格

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

  • 不满意,第四题题目理解不到位,很失望;最关键的还是最后一题,原本有时间处理完的,但是前三题多多少少有些小失误耽误了时间,拖延了我做题速度,这点很郁闷,或许要避免小失误的发生就得多打代码把!

3.其他总结。

  • 要想做得更好,要多多练习!!!
  • 舍友都比我厉害,可以向他们请教(两个100的都是舍友= =)!!!
posted @ 2017-11-18 14:46  网络1711王艺斌  阅读(319)  评论(0编辑  收藏  举报